信息与电脑2018年第19期China Computer&Communication计算机工程应用技术基于Dubbo微服务技术的应用与实现周洪岩(北方工业大学,北京 100144)摘 要:随着公司的服务范围不断扩大,厂商间的业务数据对接需求增多,服务用户数量迅速倍增,原有单体式分布式电子节目单接口系统的压力突增,直接导致用户交互卡顿、信息更新不及时、播放节目不存在等用户体验差问题,已经不能简单地通过增加服务器的数据量来解决用户的用户规模倍增问题。同时,服务治理、系统监控等诸多问题接踵而来。笔者采用微服务架构模式,整合Dubbo解决方案,结合数据缓存方案,来应对接入终端的实时高并发请求。经过实际线上运行验证,解决了企业运营中的问题。关键词:Dubbo;微服务;高并发中图分类号:TP393.092 文献标识码:A 文章编号:1003-9767(2018)19-067-03Application and Implementation Based on Dubbo Microservice TechnologyZhou HongyanAbstract: With the continuous expansion of the company's service scope, the demand for business data docking between vendors (North China University of Technology, Beijing 100144, China)has increased, and the number of service users has rapidly multiplied. The pressure of the original single-unit distributed electronic program single interface system has suddenly increased, which directly leads to user interaction, The user experience is not timely, the broadcast program does not exist, and the user experience is poor. It is no longer possible to solve the multiplication of the user's user and many other issues came one after another. This paper adopts the micro-service architecture model, integrates the Dubbo solution, size by simply increasing the amount of data of the server. At the same time, the management of services, the monitoring of the system and combines the data caching scheme to deal with the real-time high concurrent requests of the access terminal. After the actual online operation verification, the problems in the operation of the enterprise are solved.Key words: Dubbo; microservice; high concurrency微服务架构并不是一项新技术,是在SOA架构的基础上,1.1 服务通信去EBS化后细粒度的服务实现集合。本质上来源于项目设计中对业务功能和模块的水平、垂直切割、拆分。2012年,微微服务被拆分成多个小服务,分布在网络的节点中,服服务架构被提出,并陆续被各大互联网公司实践应用并取得务间的通信通过网络进行,特别在大型系统中服务节点成千成功。国外的有Amazon、Netflix、Uber、Groupon等,国上万,服务间的通信就成为一个重要的问题,会直接影响服内有阿里、腾讯、百度。本文选用阿里的Dubbo框架,利用务的质量。服务间的通信主要分为两种模式:同步方式和异微服务架构对公司原有节目单接口系统进行重构,来解决原步方式。前者客户端请求需要服务端即时响应,甚至可能由有系统维护困难、升级缓慢、扩展性差、技术堆栈单一等问题。于等待而阻塞。如果遇到被调用服务不可用或效率低下可能直接影响调用者应用响应,系统延时将随着调用者的增多而1 微服务关键技术成倍增加,可选择基于HTTP的REST或thrift或Rpc方式,微服务架构是一种分布式架构,相对于单体式架构每个而后者不需要等待被调用者响应,系统延时取决于调用延时服务的结构更简单,部署升级更灵活,在享有微服务的优势最大的服务,从而大大提高了系统性能。通信中间件可选择前,下面几个关键性问题仍需解决。ActiveMQ、RabbitMQ等,好处是把客户端和服务端解耦,作者简介:周洪岩(1985-),男,黑龙江哈尔滨人,本科。研究方向:计算机。— 67 —计算机工程应用技术信息与电脑China Computer&Communication2018年第19期更松耦合。消息中间件缓存了消息提高可用性,直到消费者存或CUP资源不释放。此外运维团队必须了解实力部署的详可以消费,支持多种通信机制比如通知、请求/异步响应、细步骤,增加了沟通的成本。第二,单虚拟机单实例模式。发布/订阅、发布/异步响应。虽然异步通信有很大的好处,方法是将服务打包成虚拟镜像,每个服务实例是利用此镜像但是系统的复杂性提高,业务实现难度增高。服务间通信启动的虚拟机主机,能够使服务实例独立运行,实现CPU和方式的选择还要看具体的业务逻辑要求来选择更好的通信方内存资源独享,并可以控制服务资源分配,方便服务扩展。式,另一种提高通信效率的方式是利用API网关,使用API缺点就是资源利用率不高,不能随需扩展应用。更新部署要网关的最大优点是封装了应用程序的内部结构。客户端只需重启虚拟机,比较耗时。第三,单容器单服务实例模式。此要同网关交互,而不必调用特定的服务。API网关为每一类种技术是容器技术发展的结果,典型的有Docker和Solaris 客户端提供了特定的API,减少了客户端与应用程序间的交Zones。应用的每个实例运行在各自的容器中,容器是运行在互次数,同时还简化了客户端代码。随着业务系统规模的扩操作系统层面的虚拟化定制。部署应用之前需将服务的代码大,网关的效率有可能成为性能瓶颈。及其运行环境打包成容器镜像,对于运维人员来说只要启动1.2 服务发现若干个容器,集群管理工具根据容器对资源的需求将容器调度到相应的主机上。优势是服务实例实现环境隔离,资源占在基于云的微服务应用中,服务实例的网络地址(IP 用少,服务启动也很快,但是容器间共享操作系统内核安全Address和Port)是动态分配的,并且由于系统自身原因引起性不如虚拟机。的应用过载下线、服务不可用,引起一些服务运行的实例数量也是动态变化的。因此,客户端代码需要使用一个非常精2 Dubbo架构细和准确的服务发现机制。微服务主要的服务发现方式:客Dubbo是由阿里巴巴开源的基于Java的高性能RPC框户端发现(Client-side discovery)和服务器端发现(Server-架,提供3个关键功能,其中包括基于接口的远程调用,容side discovery)。在使用客户端发现方式时,客户端通过查错和负载均衡以及自动服务注册和发现。Dubbo框架在阿里询服务注册中心,获取可用的服务实际网络地址(IP Adress巴巴和其他公司,包括京东、当当、Qunar、Kaola和其他公司。和端口号)。然后通过负载均衡算法选择一个可用的服务实2.1 节点角色说明例,并将请求发送至该服务。在服务启动的时候,向服务注册中心注册服务;在服务停止的时候,向服务注册中心注销Provider:暴露服务的服务提供方。Consumer:调用远服务。服务注册的一个典型实现方式就是通过heartbeat机制程服务的服务消费方。Registry:服务注册与发现的注册中定时刷新。由于客户端知道所有可用服务的实际网络地址,心。Monitor:统计服务的调用次数和调用时间的监控中心。所以可以非常方便地实现负载均衡功能(比如:一致性哈希),Container:服务运行容器。但是这种方式有一个非常明显的缺点就是具有非常强的耦合2.2 调用流程性。针对不同的语言,每个服务的客户端都得实现一套服①服务容器负责启动、加载、运行服务提供者。②服务务发现功能。Zookeeper就是是一个典型的注册中心,另外提供者在启动时,向注册中心注册自己提供的服务。③服务一种服务发现的方式就是服务端发现机制,客户端向Load 消费者在启动时,向注册中心订阅自己所需的服务。④注册balancer发送请求。Load balancer查询服务注册中心找到可中心返回服务提供者地址列表给消费者,如果有变更,注册用的服务,然后转发请求到该服务上。和客户端发现一样,中心将基于长连接推送变更数据给消费者。⑤服务消费者从服务都要到注册中心进行服务注册和注销。服务器端发现方提供者地址列表中,基于软负载均衡算法,选一台提供者进式的优点是,服务的发现逻辑对客户端是透明的。客户只需行调用,如果调用失败,再选另一台调用。⑥服务消费者和简单向Load balancer发送请求就可以了,从而避免了为每种提供者,在内存中累计调用次数和调用时间,定时每分钟发不同语言的客户端实现一套发现的逻辑。许多软件都内置实送一次统计数据到监控中心。现了这种功能,最大的缺点是必须关心该组件的高可用性。1.3 服务部署3 系统的技术架构本系统主要面向智能电视App和EPG节目单的后台微服务部署策略可以分为3种。第一,单主机多服务系统,负责把播控平台编辑的节目清单传送到前端展示。实例模式。与传统的应用部署方式类似,将服务实例部署在公司原有的系统是采用单应用方式,将所有相关业务集成若干台物理机或是虚拟机上,每台机器同时运行多个实例。到应用中,随着用户量的激增和新需求不断扩展,出现了只要为单台机器上的多个实例分配不同的端口即可。这种部交付缓慢、系统延时、运维困难等问题,甚至在访问高峰署方式能够有效利用资源,多服务实例共享服务器和操作系期经常出现宕机情况。本着提高服务质量的原则,利用行统,部署服务实例方便服务启动快速,最大的缺点是服务间业中较成熟的Dubbo技术,经过实地分析将应用拆分为 没有隔离,可能由于一个服务进程阻塞而占用主机的所有内 (下转第71页)— 68 —信息与电脑2018年第19期China Computer&Communication算法语言题库中找出满足要求的试题,并生成最终的组卷结果。[3]唐朝舜,董玉德,熊蓉.在线随机组卷算法研究及实现[J].合肥工业大学学报(自然科学版).2006(3):296-299.参考文献[4]魏德志,林丽娜,吴旭.遗传算法在智能组卷系[1]龚完全,基于最小回溯代价的智能组卷算法[D].长沙:统中的设计与实现[J].长江大学学报(自然科学版)理工湖南大学,2005.卷.2008(1):247-249.[2]吴颖,刘杰.在线考试系统的设计与智能化研究[J].北[5]姚玉阁,智能组卷系统的核心算法比较[J].集宁师范学京工商大学学报,2006.24(2):2-3.院学报.2014(4):112-115.(上接第68页)信息,如果是运营节目辑则也会包括节目辑信息。如果所查多个独立服务服务,结合NOSQL技术、全文搜索引擎询集号不存在则返回错误码,缺集数仅针对查询集号范围;(Elasticsearch)技术,基于数据库增量进行日志解析,(4)根据节目集编号返回节目集接本信息,包括影片详情、提供增量数据订阅&消费的Canal技术将系统重构。服务简介等;(5)根据产品包标号返回所有包含的节目集列表。之间独立开发部署互不影响,多团队分工合作提高了开发此功能需要调用认证系统获取用户的订购情况,来判断是否上线的效率。系统架构图如图1所示。展示播放串地址;(6)获取EPG所有栏目关联标签信息,没有标签信息不返回节点;(7)根据节目街编号查询该节目集的角标信息,如VIP、免费等;(8)获取影人信息,根据影人编号查询影人的基本信息,类似豆瓣影评的影人信息。搜索服务是基于ElasticSearch的分布式全文搜索引擎开发的后端服务。它的主要功能如下:(1)全文检索,根据搜索关键词查询该EPG下的所有节目集;(2)分类检索,根据影片标签进行搜索,返回结果可以按照最新或最热排序;(3)搜索影人相关的节目辑影片列表。推荐服务的数据来自大数据计算的结果,前端APK将用户的播报行为上报给大数据平台,大数据平台通过离线计算分析,将分析结果实时写入数据库。服务提供的功能如下。(1)个性化推荐。针对用户的观看行为,为用户推荐类似影片的集合。(2)影片相关推荐。用户在浏览或观看某个影片时的相关影片推荐。(3)排行榜推荐。根据用户的输入获取热播排行榜影片。对接服务主要负责与外部系统数据对接,包括接入第三图1 系统架构图方的节目数据接入平台库及推送本地数据到第三方平台。服4 系统功能务提供的功能如下。(1)数据接入。根据不同节目来源接入爱视云、网宿、1905网站的内容。(2)数据推送。根据本系统主要有以下几个服务:节目单服务、搜索服务、电视厂商提供的接口推送数据,目前已对接的电视厂商有长推荐服务、注入服务。各服务通过网关层与外界进行数据传虹、创维、康佳。输,服务之间通信采用RPC协议。节目单服务为前端提供节目基础服务:当前端有节目单5 结 语请求时,节目单接口会先从Redis中查看是否已存在该电子笔者介绍了微服务架构的关键技术,并根据现有系统存节目单信息,存在则返回节目单信息,不存在则从节目单库在的问题引入微服务架构技术,对现有系统进行整体改造。中查询结果集存入Redis中,同时返回查询结果。主要功能同时将系统拆分成多个微服务,结合缓存技术、日志解析技如下:(1)获取EPG某个栏目下所有节目辑列表;(2)获术及全文检索技术重构系统。实现了前端的数据输出到后端取节目辑的节目列表信息,如果是运营节目集也包括节目辑的数据接入,系统上线后运行平稳,赢得了用户和第三方厂信息。电视剧要显示缺集数;(3)获取节目集的节目列表商的好评,同时为公司其他项目的改造提供了技术铺垫。— 71 —