在刚刚落下帷幕的2017腾讯全球合作伙伴大会上,腾讯首次发布了其AI开放全景图,并围绕AI主线做出了腾讯全产品线的开放布局。无论是在AI方面的战略布局,还是机器学习、计算机视觉、语音识别等AI技术的开放与落地,都离不开云的支撑。就好比AI是火箭,云计算是助推器。
在火热的云计算市场中,腾讯云一直比较低调,但这并不妨碍其深耕自身技术,发扬技术优势。近日,腾讯云联合极客邦科技在北京联合举办了一场题为《解码腾讯云软件架构与应用》的技术沙龙。来自腾讯云和知乎的六位技术专家详细介绍了腾讯云在小程序、视频服务、无服务器云函数、中间件等领域的技术储备,也分享了各自的真知灼见。本文总结了一些精彩的干货内容,感兴趣的同学可以点击阅读原文下载完整版演讲PPT。
火爆实时音视频APP背后的技术支撑
腾讯云视频业务产品总监黄斌以《如何基于实时音视频能力快速打造爆款应用》为主题进行了开场发言。对于网络直播和音视频应用,大家一定都不陌生,无论是2016年的千人直播大战,还是以商业直播为主的“视频+”,网络直播和视频已经从娱乐走向了垂直领域。
但实时音视频的技术要求其实非常高,需要从基础、架构角度去推流;搭建基础平台;进行音视频编解码;适配各种格式的终端;支持多种协议;有美拍、美颜特效、打赏等功能;另外现在的用户已经不能接受开主播房间、进电商房间有延迟,秒开房间是行业标准。
黄斌表示:“腾讯从事音视频十余年,我们的团队立足延伸,现在致力于腾讯云的音视频业务,我们会逐步把这个业务打通,提供完整的解决方案。”
在直播和短视频方面,腾讯云通过各类SDK接口开放了能力,对此腾讯云提供了两种解决方案,第一种方案是标准化的,打通主播端/源站、流媒体处理、CDN、观看端。
另外一个方案就是之前音视频提供的多方视频通话能力。其实这是一个非标准方案,其实是基于RTP协议修改的腾讯私有协议。这个私有协议是经过腾讯验证的,它的延迟、稳定性、双向交互保证100秒延迟的性能都比标准流媒体协议要好。而且它的部署跟全球部署共享很多资源,所以在资源安全上有优势。它最显著的特点就是支持互动直播。
黄斌还从应用角度做了详细解释。移动直播分为两种,一种是轻量级或者快速集成的小型直播,一种是免费直播;实时游戏音视频(TMG),在腾讯内部被称为移动游戏,但实际上它的主要功能就是做实时音视频;短视频还需要很多能力,比如截取开头结尾、加动效、做滤镜、动态美颜、加音效字幕、快速分享等,后台还需要做很多优化。当然,短视频也有出行、社交等不同的场景,在各个场景提供的技术支持的侧重点也不同。
对于直播安全,需要AI能力来识别图像和声音,完成直播色情检测、大屏监控等任务。在这方面,腾讯优图引擎可以实时对上千个房间进行智能色情检测,可以完成90%的识别工作,百万级并发用户搜索时间不到100人。黄斌补充道,将AI引入直播,绿幕技术、基于背景预学习的分割技术、基于VGG Net的人像识别网络等都可以轻松实现。
从直播向垂直领域的渗透来看,无论是电商、金融、在线教育、还是娱乐,实时音视频的能力都可以在不同的场景中找到实际的应用,这也呼应了黄斌演讲开篇的观点。
此外,H5双向音视频(T-H5)也是腾讯云基于十余年音视频通话技术积累,结合腾讯浏览服务TBS能力以及腾讯实时音视频SDK,为客户提供多平台互通的高品质视频通话能力。终端用户只需通过手Q/微信/浏览器等接入TBS的APP中的H5页面发起视频请求,即可轻松接入公司的实时视频服务。
演讲最后,黄斌演示了小程序与实时音视频技术融合的业务场景,利用小程序能力可以进行双向甚至多方的实时音视频。以车险理赔为例,通过打开定损小程序,就可以通过实时音视频在线完成查勘、定损。
无服务器云函数产品SCF详解
该架构在今年受到了广泛关注,腾讯云也推出了无服务器云函数产品SCF。腾讯云SCF无服务器云函数产品经理黄文军发表了《利用云函数结合消息服务实现数据的流式分析》的主题演讲。
黄文俊的分享从反爬虫场景开始讲起,反爬虫场景是一个非常常见的场景,围绕着UA检测、IP检测、代理IP识别与封禁,这也是爬虫发展的几个阶段。在第三阶段,如果用户使用了代理IP,我们该怎么办?这时候我们不可能一个一个的把IP找出来,就只能借助代码的力量,把IP找出来,然后进行相应的封禁。如何找出IP呢?最常见的还是传统的先存储再分析的方法。有没有更及时的方法呢?黄文俊介绍说,我们可以采用流式的方式进行分析。
流式数据分析的特点是需要分析的数据源非常多,比如物联网终端采集的数据、手机上报自己的地理位置、股市变化、用户点击网站链接等等,而且这些数据是持续产生的。在这些数据中,其实持续上报的都是小单条记录,但是在来源众多的情况下,小单条记录也会形成极高的并发。之所以采用流式分析,就是为了加快分析速度,在一定时间内立即对数据进行分析,否则过期的数据意义和价值就没有那么大了。
那么如何利用流式分析来解决问题呢?可以把存储和分析并行起来,也可以不存储数据,只做分析。在这个过程中,我们需要对数据进行汇总,汇总的数据可以缓存起来,利用缓存来采集最新的数据,采集后立即进行分析,得到输出结果。这个过程可以利用腾讯云上的消息服务和云函数来实现,其实这两个产品可以称为无服务器架构。
是今年比较火的一个概念,从结构上分为两个部分,一个是 as a ,也就是很多人用的对象存储、CDB 云数据库或者消息队列等产品;另一个是 as a ,也就是腾讯云推出的 SCF 云函数产品。
为什么叫无服务器架构?就是开通就可以用,创建配置后,通过API或者SDK就可以连接使用,不需要配置和管理服务器,全部交给云端运维管理。对于开发者来说,最重要的就是代码,用代码就可以实现核心业务。无服务器架构还有一个特点就是事件驱动,由事件触发。
具体到SCF 云函数产品,目标是托管计算,用户不需要关心后台有多少计算资源,要分配多少CPU、多少内存,只需要上传代码,将代码托管到平台,配置触发器就可以完成操作。
对于日志分析的demo,黄文俊表示:我们可以通过这个架构来完成流式分析。把日志聚合到 中的同一份数据里,然后使用触发式的云函数进行分析。这里采用的是消息拉取的方式,一次拉取一批日志。分析的结果仍然可以缓存在 中的另一份数据里,然后再次聚合起来进行后续处理。
本流程中使用的消息服务是腾讯云提供的消息服务之一,目前腾讯云提供三种类型的消息服务,包括 CMQ 消息队列 - 高可靠消息队列,提供队列模式和主题模式; - 兼容开源、高性能消息队列,提供队列模式; MQ for IOT - 支持 MQQT 接入,面向物联网,提供主题订阅模式。
使用 SCF,用户只需要在平台上创建一个函数,上传代码或代码包或库,配置一个触发器,当触发器中发生事件时,函数就会自动触发并处理该事件。如果同时触发多个事件,函数可以并行运行在实例中,分别处理事件。扩缩容也是在平台上自动完成的,用户无需担心要启动多少个实例,或者为实例配置多少资源。
黄文军举了一个例子:“前面提到了SCF要求无状态,那么我们如何处理和汇总分析的结果呢?其实就是用来缓存和计数的。我还设置了一个定时触发的功能,比如每5分钟访问一次,看看列表中哪些IP超过了阈值。比如这个IP在5分钟内访问了2000次,我就认为它是一个爬虫,所以我就把这些IP提取出来,生成一个封禁名单进行拦截。”
此外,黄文俊还给出了一个 demo,也是一个流式的处理过程,偏向于 IoT 设备采集,使用 IoT MQ 产品接收所有 IoT 设备的消息。创建两个函数来做不同的事情,第一个函数订阅日志主题,各个设备上传的日志由云函数接收然后汇总放到云端,或者直接放到 cos 对象存储中,以文件的形式记录下来;另一个函数订阅报警主题,当某个设备发生报警时,就会触发函数运行并发出报警,比如发送邮件或者短信。
其实,云函数产品的关键点在于触发,云函数本身是一个连接,需要把这些云产品连接起来,打通各个云产品,形成一些完整的解决方案。黄文军介绍:“目前,云函数处于公测阶段,用户可以免费试用,正式运营后,每个账号还会有每月的免费额度可以试用。”
知乎容器化历程的三个关键阶段
下一位演讲嘉宾是腾讯云用户、知乎容器平台高级工程师王璐,他将分享《知乎的容器化之路》。
据介绍,知乎从2015年开始全面容器化,截至目前99%的业务都是基于容器,基础组件也都是基于容器。被问及为何容器化时,王璐表示:“当时知乎用的是纯物理机,价格比较贵,资源利用率不高。我们最开始选择的虚拟化方案是虚拟机,但人工维护成本还是比较高;另外虚拟机的扩展效率也比较低。后来引入了微服务,微服务和容器差不多,所以最终决定用容器。项目起名叫bay,就是海湾的意思。”
“当时我们面临三个选择,容器、k8s和容器。我们选择了容器。这是我们第一阶段的整体架构,是PaaS的架构。下面是架构图,物理机是腾讯云提供的物理机,这个阶段只有业务物理机做了容器化,基础组件还没有做。”
一期第一代平台完成后主要支持以下功能:滚动升级、金丝雀发布、完整的CI/CD集成、支持几乎所有业务(万级容器)、秒级自动扩容(10->100 35s)。
如果说第一阶段解决了业务容器化的问题,那么第二阶段在这个过程中就遇到了基础组件的问题,也就是集群管理的问题。一开始我们管理的是一个很大的单体集群,当时有两个典型的问题,一个是流量突然变大,导致整个集群都失败了;第二个是负载不均衡。这种情况下如果从维护一个集群切换到两个,成本是非常高的,最小集群需要三台机器。知乎的解决方案是把它容器化,定义更细粒度的调度单元,以及更高效的集群管理工具。知乎最终的选择是容器化,高效的集群管理工具是把本地组件做本地磁盘,磁盘到这个容器里。最理想的状态是三台机器跑三个集群,每台机器占用单独的磁盘,这样就形成三个集群。
随着业务的发展,有些容器组越来越大,有的容器组能装1000多个容器,上线一次可能非常慢,Bay最后只能用一个端口,速度受限;二是不能快速回滚;三是缺乏好用的运维工具;最后一点是社区活跃度比较低。
基于这些不足,知乎考虑重构贝系统,目标是提升部署速度。首先就是如何解决快速部署和回滚的问题。第一种方法是区分部署和发布,至于回滚,业务部署新代码后,老代码不销毁,容器其实是存在的,只是不对外提供服务。
三期的整体架构是新湾区系统也放在上面,相当于两套系统并存。新湾区系统是如何发布部署的?据王璐介绍,知乎都是通过新湾区的API发送请求,目前知乎大约有1/3的业务已经迁移到新湾区系统,3秒内就能完成快速部署,提高了平台的运行效率。
演讲最后,王璐表示系统后续的开发会涉及到腾讯公有云的扩展,当资源不足的时候,知乎计划通过腾讯公有云提供的虚拟机将容器分发集群扩展到公有云上,作为一级备份。
MQ在大数据、物联网等领域的最佳实践
消息中间件具备低耦合、可靠传递、广播、流控、最终一致性等一系列功能,因此成为了分布式系统中异步 RPC 通信的核心手段。目前市面上主流的消息中间件有很多,老牌的、火爆的等等,腾讯消息中间件针对企业金融业务基于 Raft 算法打造了高可靠、一致性的分布式消息中间件 CMQ,并经过了春节微信红包、微众银行等海量消息的多次考验。
腾讯云中间件架构师黄宇现场结合具体的应用场景,从技术角度分享了腾讯消息中间件如何实现高可靠、高弹性、高性能、强一致,以及其在不同应用领域的最佳实践。
大数据MQ-技术实践
黄宇介绍,MQ 针对大数据的应用场景主要包括日志采集、日志分析、特征提取以及 EMR 等,腾讯云针对大数据在日志采集方面进行了一系列的优化实践:
这里除了平峰填谷和解耦,还起到数据分发和聚合的作用。比如当需要在多个平台进行数据分析时,可以将解耦后的消息分发到不同的平台进行日志分析。反过来,根据使用方式,可以将不同平台的同一份数据聚合到一台服务器上进行特征提取。这些都是大数据应用的典型场景。
基于典型应用,腾讯云根据自身业务需求,开发了( )架构。相较于开源系统,具有分布式、高扩展、高吞吐量等性能。同时100%兼容API(0.9和0.10),开发者无需部署即可直接使用所有功能。据了解,在4台同时运行的情况下, 的小包性能是开源性能的5倍( 1000/s /s)。那么,系统是如何拥有如此高的吞吐量的呢?以下是架构图:
首先在单机方面,它抛弃了Java机制,转而使用操作系统级的页面进行缓存;其次,它采用了优化的系统机制(如上图),提高了IO特性;同时在横向方面,它采用了类似乘法的规则,将多个消息分片,并同步处理每个分片消息。这样一来,系统对于海量消息的处理速度基本提升了一倍。
腾讯MQ在物联网领域的技术分析
除了在大数据领域的应用,MQ 在物联网领域也有着广泛的应用,例如 MQTT 是目前物联网及移动互联网领域的主流协议,被广泛应用于车联网、智能家居、直播互动、金融支付、IM 即时通讯等多个场景,尤其在对功耗要求较低、网络吞吐量有限、网络质量较差的物联网场景有着独特的优势。
腾讯云根据自身应用特点,在MQTT基础上开发了兼容MQTT协议的物联网MQ产品。下图是物联网MQ应用架构,设备端将消息发布到腾讯云,再传输给消息的接收方。这个系统功能是什么呢?比如说用户用电、用水或者任何家用设备,服务商开发相关的微信小程序,用户就可以很方便的在手机上看到自己用电量或者用水量。
黄宇介绍,IoT MQ除了兼容MQTT 3.1.1协议以及任何支持该协议的SDK外,还基于腾讯自研的CMQ架构,可根据业务规模弹性伸缩,对上层透明。同时,CMQ-MQTT为腾讯云平台提供一整套运维服务,包括资源申请、消息查询、监控报警等,实现统一运维,节省大量运维成本。
腾讯云X-P2P直播加速解决方案
腾讯云X-P2P是业界领先且成熟的P2P产品,从2014年至今已开发两年多,很多产品线已经成熟,包括不同平台、不同时延场景下的P2P直播和点播P2P。目前已经推广到斗鱼、熊猫等直播平台,经受住了大流量阅兵直播、赛事直播的考验。腾讯云X-P2P直播加速技术负责人张鹏详细分享了P2P的发展历程、X-P2P解决方案架构以及腾讯云对X-P2P的探索和优化。
P2P技术的历史
P2P 的概念最早出现于 1969 年,并被纳入 RFC 1。2000 年,互联网诞生,随后 BT 协议发布。这期间,人们一度认为 P2P 只适合用于文件共享。2004 年底,随着 的发布,开发者逐渐意识到这项技术同样适用于直播。2005 年开始,P2P 在直播领域开始流行起来。具体发展技术路线如下:
腾讯云X-P2P直播解决方案及优化
腾讯云根据自身业务场景在直播技术上做了一系列的优化,下图是基于腾讯云的直播P2P架构。整个直播流程分为两个部分:首先主播推送媒体源到服务器,经过P2P技术切片成1S片段,整合到CTN,再由CTN返回给源头;接下来就是客户端的行为。客户端会先请求一个conf服务,里面包含了频道的穿透服务器、日志服务器,以及最新的切片信息,然后开始请求播放。手机获取公众号提供的端口,种子服务器获取同一个频道的端口并发起连接,P2P数据开始产生。
在直播体验优化方面,张鹏介绍了腾讯云内传控、精准播控、大房间高并发三大解决方案:
谈及X-P2P现在面临的挑战,张鹏最后表示,过去视频码率低,现在视频清晰度已经达到4k、10M码率,远远超过带宽的增长速度。P2P流量跨省、跨运营商,很容易引起运营商的不满。这些都是X-P2P需要考虑的问题。未来,P4P是解决这些问题的一剂良药。
如何为用户开发出一款实用的小程序?
相信大家对微信小程序并不陌生,本次沙龙上一位讲师黄荣秋对小程序的具体原理以及如何开发一个简单的小程序进行了精彩的分享和解读。黄荣秋首先对小程序进行了定义:小程序是开发者可以快速开发的一项新的开放能力。小程序可以在微信内部轻松获取和传播,并拥有极佳的用户体验。
小程序是如何实现的?
下图是小程序的核心框架,分为三大部分。一个是视图层,就是整个页面的展示;一个是逻辑层,就是功能和后台逻辑做的地方;最重要的部分是底层提供的功能,无论是点击、扫描二维码,还是调用一些硬件相关的接口,又或者是发起网络请求,都是在这一层完成的。
在了解了小程序的核心框架之后,黄荣秋重点讲解了各个模块之间的通信流程。首先用户进行一个操作比如点击登录操作,点击之后会调用后台逻辑。具体交互流程如下:
上图是模块之间的通信视图,简单来说就是当用户进行点击操作时,进入到组件,然后进入View,再进入视图,再进入组件,一步步进入。
开发者如何才能快速、便捷地开发小程序?
小程序和微信联合开发了一套比较完善的解决方案,下图是一个后台部署的窗口,右上角可以看到一个腾讯的logo,在这里可以完成一些更快捷方便的操作。一键自动配置可以运行后台的环境。二是后台代码编写。三是一键上传代码进行自动部署,四是远程调试。具体的部署过程这里就不详细介绍了,有兴趣的读者可以下载讲师的PPT查看完整资料。
值得一提的是,在云端,小程序也提供了一些相对先进的实用接口,包括服务、图片色情检测、语音识别,以及一些与视频、直播相关的解决方案都可以在这里找到。此外,一些相对先进的应用,比如图像识别OCR,也可以升级到SDK。据黄荣秋介绍,腾讯AI图像识别已经在很多业务中得到应用,准确率达到99%以上。