点击标题下「广电猎酷」可快速关注
本文由《广播与电视技术》杂志独家授权。本文刊发于2019年第9期。
作者:
邓向冬,郏涛 (国家广播电视总局广播电视规划院)
【摘 要】
随着云计算技术的快速发展,视听媒体系统对系统架构的灵活、弹性等方面也提出更高的要求,使后台网络应用服务的结构发生变化,从早期的单体式架构到后来的ESB+EMB、SOA再到微服务架构。本文从微服务架构的概念出发,阐述了微服务架构的技术发展,并介绍了国内外高校和机构对微服务架构的研究,接着对微服务具体拆分和选型进行了讨论,最后对微服务架构在国内视听媒体领域的实践应用和产生的问题及解决方案进行了梳理和总结。
【关键词】
微服务,Docker,视听媒体,系统架构
0 引言
随着互联网移动化的脚步越来越快,系统应用对移动化的要求也快速提升,在系统的开发过程中,一个重要的需求就是功能模块能够快速的上线,传统的面向服务架构(SOA,Service Oriented Architecture)受到整体式应用的限制而效率不高,无法满足快速上线的需求,而互联网领域云平台化的趋势愈演愈烈,很多开源的轻量级的工具不断出现而且逐渐成熟,在一定程度上促进了微服务架构(Micro Service Architecture) 的出现。2012年微服务架构的技术雏形开始出现,Martin Fowler在2014年提出微服务架构的概念[1],其后开始在一些领域逐步取代传统的单体式架构。
微服务架构是通过一整套服务组件来开发应用的方法,每个服务能够运行在各自的进程中,每个服务使用轻量级的通信机制,并可以通过自动化的部署机制独立部署。
因此,微服务架构更加适合服务功能多样、开发团队规模庞大、业务规模增长较快、服务内容变化较大的应用项目。随着视听媒体技术系统云平台的不断普及,部分业务对微服务架构的需求也逐渐提高。微服务架构下服务的解耦合、独立部署、容错性高等特点也使得视听媒体技术系统能够更快的对软件更新换代,以满足超高清、人工智能、大数据、5G等新技术的快速应用。
1 相关概念和比较
1.1 容器和虚拟机
微服务需要运行,首先需要一个适宜的运行环境,这个环境需要两点要求,第一是需要是个“微环境”,即资源的粒度需要足够小,一个环境承载一个微服务,不浪费资源,也使得有限的资源能够承载众多的微服务;第二是具有灵活性,需要能够对环境进行快速的创建和删除,能够对微服务的组合和调度进行快速的部署。
容器,作为一个应用层的抽象,非常适宜微服务的运行。容器虚拟化的是操作系统,跟硬件无关,因此容器易移植、效率高,多个容器可运行在同一台机器上,共享操作系统内核。相比之下,虚拟机粒度太大,即使是最小的虚拟机,也至少有一个核和系统级的全套资源,对于一个“微服务”,无需独立占用如此多的资源。容器的部署可以在秒级的时间内完成,其占用的空间较少(容器镜像大小通常只有几十兆,单机支持上千个容器),而虚拟机的启动也相对缓慢(镜像大小也在GB量级,单机支持几十个虚拟机)。另外,虚机没有一套便捷的管理机制,无法快速对微服务进行组合和重构。
1.2 SOA和微服务
传统SOA架构下,通过一个总线用于各个独立系统岛间的联通,其特点是协议定义高度统一,要求调用者和被调用者都要符合特定格式的协议定义,在协议一致的情况下才可以通讯;交互协议简单,主要协议体一经确认,后期修正成本高昂,通常会定义一些灵活字段用于未定义明确的需求,而实际在后期会不断增加。协议的灵活度降低,同时由于大多数协议都是通过XML/SOAP形式定义,系统开销大,效率比较低。
微服务架构能够在保证灵活性的基础上,实现高效、可定义的交互模式,其采用JSON/Restful风格的协议,保证交互高效;消息队列的应用,解决异步交互的问题;微服务将服务的治理统一建设,而将服务间的业务类通讯协议交给交互双方自行定义,在很大程度上为业务的灵活定义铺平了道路。
微服务架构重在自底向上开展实施,而SOA则是自顶向下的;微服务架构是将一个系统拆分为多个服务,粒度较细,而SOA的服务由多个子系统组成,粒度大;微服务架构的服务架构较为松散,无集中式总线,而SOA通过企业服务总线来进行集中式的管理;SOA集成方式复杂,使用ESB/WS/SOAP等,微服务则使用HTTP/REST/JSON等简单的集成方式;最后,SOA单独架构系统,相互依赖,微服务则可以实现独立部署。
2 微服务研究现状
2.1 国内微服务研究现状
根据万方数据库的数据显示,国内在微服务方面的研究论文近些年来持续处于较高数量,见图1。对于微服务架构在各行业的应用,目前发表研究论文最多的是在工业技术,达到59.64%。随着其他行业云化平台的逐渐发展和普及,在卫生、科学、经济等方面,也有微服务架构的相关研究论文,见图2。
中科院声学所的赵然[2]等人对国内高校的研究成果做了评述,其在文献中研究了包括中科院声学所、北京大学、南京大学、同济大学、北京交通大学、北京邮电大学、哈尔滨工业大学、西南科技大学等在内的各高校的研究成果,见表1。研究内容覆盖微服务架构组件的常见问题、微服务的安全访问需求、软件云化、使用API网管构建微服务系统、微服务通信架构、容器云平台、基于神经网络的微服务模型等方面。
2.2 国外微服务研究现状
对于微服务技术的研究工作,国外相关研究文献中主要是具体项目和评估比较微服务架构的性能,见表2。
在具体微服务架构的研究和应用方面,世界最大的收费视频网站Netflix大量使用了微服务架构(百级别),并且都部署在AWS公有云上,没有自建机房。当前业内知名的Spring Cloud微服务架构中的很多组件,如服务发现和注册、客户端负载均衡、熔断和服务降级、服务网关等均是由Netflix研发并开源。
另外,据报道,Hasselbring等人、Innerbichler等人分别将微服务架构应用于欧洲电子商务平台otto.de以及物联网平台NIMBLE,取得了很好的效果。而Granchelli等人和Mayer等人对微服务开发了工具MicroART和监控和管理微服务的试验仪表,改进了微服务在组件和监控方面的功能。
在性能评估方面,Amaral等人以及Ueda等人分别在微服务架构的性能评估方面做了研究,对微服务在硬件方面的开销也做了评估。
2.3 微服务在媒体领域的研究
针对微服务在媒体领域应用的研究,一项重要的工作是从2017年广电总局科技司组织的,由湖南广播电视台、广播电视规划院、中国传媒大学、深思云天公司等二十余个单位组成了一个联合研究团队,通过对媒体领域微服务的应用需求、应用现状和发展趋势进行分析,对微服务治理典型技术、微服务平台总体架构、业务流程、业务形态和运营模式等进行了研究。该团队已初步完成了七万多字、近两百页的研究报告,提出了基于微服务架构的媒体平台设计思想,包括:资产轻量化、平台开放化、功能智能化,双向互动反馈、正向闭环,统一公共平台,实现省市区县联动等适用于媒体行业的指导原则;以及媒体微服务平台的总体结构和基础架构、安全架构、相应的运维和运营策略等。这是至今为止,微服务在媒体领域相对较全面和深入的一次系统性研究。
3 微服务的拆分和选型
3.1微服务的拆分
微服务是“微”型的服务,而“微”这个概念的实现是由拆分服务来实现的。通过将复杂的业务流程拆解成功能单一的微服务模块实现微服务的架构,拆分的微服务模块和模块之间通过规范的连接方式组成新的业务单元,附以负载均衡等微服务机制来实现对业务灵活的重组。因此,服务的拆分是在微服务设计阶段最需要考虑的问题,也是难点。
微服务的拆分可分为三个步骤,第一步是理解业务功能,第二是进行功能分解,第三是映射功能到服务中。(1)理解业务功能时需理解应用程序预期的业务用途,在构建微服务时,架构师须基于业务和功能需求对微服务进行拆分,完全理解业务功能有助于获得微服务的边界上下文和功能域。(2)功能分解是核心过程,可以将主要业务流程分解到更小、更简单的功能,将主要的业务功能分解到可以按顺序执行的多个功能域中,并将各个功能域拆分成多个功能组件,于此同时,需要确保组件具备明确的功能边界。(3)将功能组件映射到主要功能区域中,每个组件被构建成微服务,每个微服务也可在不同功能域中被重复调用。
3.2微服务架构选型
3.2.1 Spring Cloud架构
Spring Cloud最早由Netflix广泛使用,是基于Spring Boot的一套微服务架构,Spring Cloud具有一套关键组件,包括Eureka、Ribbon、Feign、Hystrix、Zuul等,他们在微服务架构具有不同的功能。在服务启动时,Eureka Client会将服务注册到Eureka Server,而且Eureka Client反过来从Eureka Server获取注册表,知道其他服务的位置;当服务间发起请求的时候,Ribbon负责做负载均衡;Feign实现动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求;接着Hystrix通过线程池发起请求,不同的服务走不同的线程池,实现不同服务调用的隔离,避免了服务雪崩问题;Zuul提供统一的网关,由Zuul网关转发请求给其他服务。微服务架构Spring Cloud的逻辑处理图见图3。
3.2.2 Dubbo架构
Dubbo一款高性能、轻量级的开源Java RPC框架,由阿里巴巴公司开源,其可以与主流的Spring框架进行无缝集成。Dubbo的特点包括智能负载均衡、高度可扩展能力、服务自动注册与发现等。微服务架构Dubbo的逻辑处理图见图4。
4 微服务的国内视听媒体领域实践
随着融合媒体的不断发展,视听媒体机构对微服务架构逐渐具有越来越迫切的需求。目前,视听媒体的微服务架构应用实践更多的通过引入微服务的概念来实现功能模块的拆分,而基于Spring Cloud或Dubbo的微服务架构的视听媒体系统也已逐渐浮出水面,成为诸多视听媒体生产厂商云服务架构的基本构建方法,微服务架构系统已逐渐融入生产云平台、融媒体平台等系统中。本文对中央电视台、江苏有线、芒果TV、爱奇艺、县级融媒体等开展微服务架构的应用实践做简要介绍,见表3。
中央电视台的融合媒体新闻云生产系统[3-4],构建了全球多个数据中心,可解决台内、分台以及单个记者在外场生产时的多层次需求。在媒体生产云系统中,将云上Web应用拆分为许许多多的微服务应用,服务和服务之间使用异步的、基于消息的通讯方式,并通过API 网管传递中间消息,用VPC等机制来隔离微服务。
江苏有线通过微服务架构对广电传统能力域进行了改造[5],分别从两种维度对业务进行拆分,包括纵向和横向,在横向上,将业务按照服务形式进行拆分;纵向上,按照业务按照功能模块进行拆分。
芒果TV在业务系统等方面进行了微服务的应用实践,其中后台和运维平台使用了Spring Cloud架构,并应用该架构开发了包括基于Netflix和Google开源的多云持续交付工具Spinnaker和芒果TV运维自动化工具CI-Autoplug等。
爱奇艺基于Consul(服务注册发现)、Kong(API 管理)、Linkerd(服务网格代理)等开源项目,结合系统内部PaaS环境研发了内部微服务框架Skywalker,兼容常见的Spring Cloud等研发框架。Skywalker各功能模块被应用在超过3000个服务中,主要涉及包括账号系统、爱奇艺号系统、消息推送系统、内容生产发布系统、搜索推荐系统、安全风控系统等。
分布式微服务Hive平台使用微服务载体是Docker容器 [6],首先通过将融媒体中心的业务进行了需求分析,然后通过微服务架构进行了重构,从而实现了业务的采集、编辑、发布、存储和管理的统一。
5 微服务架构的常见问题及解决方法
微服务的难点在设计方面主要是对服务的拆分,将已有业务系统进行拆分难度较大,代码改造过程中容易引起业务系统的故障。而在微服务架构的系统运行方面,常见的问题主要有(1)业务的监控较复杂,需通过全链路监控等技术将各服务的数据关联起来;(2)没有熔断、降级等保护机制的系统容易引起级联故障,且定位较困难;(3)微服务的测试(包括功能测试和非功能测试)比较复杂;(4)传统的物理机式的服务部署方式很难胜任微服务的部署,需要采用云平台(公有云或私有云)或容器云等新技术。
而解决方法方面,主要是通过对微服务架构进行合理的选型并进行合理的设计,在设计中增加监控、熔断和降级等保护机制。使用PaaS服务是一种自动化的方法,PaaS服务给开发者提供一个部署和管理微服务的简单解决方法。
6 结束语
云计算、大数据、人工智能等新一代信息技术突飞猛进,快速部署、便捷接入、统一支撑等需求在视听媒体行业越来越受到重视,微服务架构的出现对建设一个融合、灵活、开放、安全的视听媒体系统具有重要意义。
微信订阅,点击了解一下!
参考文献
[1]Martin Fowler James Lewis. Microservices a definition of this new architectural term. https://martinfowler.com/articles/microservices.html, 2014.
[2]赵然,朱小勇.微服务架构评述[J].网络新媒体技术, 2019,8(1):58-61.
[3]韩冲.浅谈IP化下微服务的电视台的应用[J].现代电视技术, 2018(8):90-93.
[4]王红波.论媒体云建设的探索和思考[J].现代电视技术,2017(1):84-88.
[5]杨晨,李蓓佳,钱文轩,吴乙雨.广电网络云平台微服务架构设计[J].有线电视技术, 2017(10):48-50.
[6]毛靖宇.分布式微服务Hive平台打造县级融媒体中心[J].广播与电视技术,2018,45(111):29-34.
[7]李天罡,卢志才,王威.基于微服务架构的智能内容汇聚生产云平台建设(上)[J].现代电视技术,2017(12):81-85.
[8]李天罡,卢志才,王威.基于微服务架构的智能内容汇聚生产云平台建设(上)[J].现代电视技术,2018(1):52-56.
作者简介邓向冬,男,博士,广播电视规划院制播研究所所长,教授级高工。主要从事视频及制播网络领域的技术研究、标准制定、计量检测等。
好文共赏请转发 有话要说请留言