2017年第26卷第6期http://www.
c-s-a.
org.
cn计算机系统应用ResearchandDevelopment研究开发259微服务框架的设计与实现①张晶1,黄小锋2,李春阳31(北京中电普华信息技术有限公司,北京100192)2(中国电建集团国际工程有限公司,北京100048)3(国网信息通信产业集团有限公司,北京100031)摘要:相对于传统单块架构,微服务框架具有技术选型灵活,独立部署,按需独立扩展等优点,更适合当前互联网时代需求.
但微服务架构的使用引入了新的问题,如服务注册发现、服务容错等.
对微服务框架引入的问题进行分析,并给出了微服务框架的一种实现方案,在框架层面解决服务注册发现、服务容错等共性问题,使业务系统开发人员专注于业务逻辑实现,简化系统开发的难度,提高开发效率.
关键词:微服务框架;服务注册;服务发现;服务容错DesignandImplementationofMicroserviceArchitectureZHANGJing1,HUANGXiao-Feng2,LIChun-Yang31(BeijingChinaPowerInformationTechnologyCo.
Ltd.
,Beijing100192,China)2(PowerChinaInternationalGroupLimited,Beijing100048,China)3(StateGridInformation&TelecommunicationIndustryGroupCo.
Ltd.
,Beijing100031,China)Abstract:Comparedwithtraditionalsingleblockarchitecture,microservicearchitecturehasmanyadvantages,suchasflexibletechnologyselection,independentdeployment,andindependentscalabilitymoresuitabilityforthecurrentneedsoftheinternetage,etc.
Butmicroservicearchitecturealsointroducesnewproblemssuchasserviceregistration,servicediscovery,servicefaulttolerance.
Onthebasisoftheanalysisforproblemsmentionedabove,thispaperproposesoneimplementationofmicroserviceframework,whichcansolveserviceregistration,servicediscovery,servicefaulttoleranceandothercommonproblems.
Basedonthis,developersonlyneedtofocusonthedevelopmentofbusinessfunctions,sothatitcansimplifythedifficultyofsystemdevelopmentandimprovedevelopmenteffectiveness.
Keywords:microservicearchitecture;serviceregistration;servicediscover;faulttolerance传统信息化系统的典型架构是单块架构(MonolithicArchitecture),即将应用程序的所有功能都打包成一个应用,每个应用是最小的交付和部署单元,应用部署后运行在同一进程中.
单块架构应用具有IDE友好、易于测试和部署等优势,但是,随着互联网的迅速发展,单块架构临着越来越多的挑战,主要表现在维护成本高、持续交付周期长、可伸缩性差等方面[1].
微服务架构(Microservices)的出现以及在国内外的成功应用,成为系统架构的一种新选择.
很多大型宝等都已经从传统单块架构迁移到微服务架构[2].
微服务架构提倡将单块架构的应用划分成一组小的服务,互联网公司如Twitter、Netflix、Amazon、eBay、淘服务之间互相协调、互相配合,为用户提供最终价值.
1微服务架构微服务架构是一种架构模式,采用一组服务的方式来构建一个应用,服务独立部署在不同的进程中,不同服务通过一些轻量级交互机制来通信,例如RPC、HTTP等,服务可独立扩展伸缩,每个服务定义了明确的边界,不同的服务甚至可以采用不同的编程语言来实现,由独立的团队来维护[3].
相对于传统的单体应用架构,微服务架构具有单个服务易于开发、理解和维护;复杂度可控;技术选①收稿时间:2016-09-18;收到修改稿时间:2016-11-03[doi:10.
15888/j.
cnki.
csa.
005796]计算机系统应用http://www.
c-s-a.
org.
cn2017年第26卷第6期260研究开发ResearchandDevelopment型灵活;独立部署;按需独立扩展等优点[4].
但是,采用微服务架构也会引入新的问题,本文对微服务架构引入的问题进行分析,提出了一种微服务框架的实现方式,在框架层面解决服务注册发现、服务容错等共性问题,使业务系统开发人员专注于业务逻辑实现,降低开发难度,提升开发效率.
1.
1微服务框架目前,业界流行的微服务框架主要有两个:SpringBoot和Dropwizard.
SpringBoot继承了原有Spring框架的优秀基因,简化了开发、配置、部署和监控过程,帮助开发者快速启动一个Web容器.
Dropwizard从前端网页、核心服务、资料库存取到资源监控,提供了一个轻量级的开发架构,帮助开发者快速的打造一个Rest风格的后台服务,同时集成hibernate4、log4j、slf4j、jackson等开源组件.
2微服务框架设计基于微服务架构的应用是分布式系统,增加了系统设计和实现的难度,主要体现在以下几个方面:①在运行环境中,微服务实例的网络地址是动态分配的,微服务运行的实例数量也是动态变化的,因此,需要一套服务发现机制,使服务调用者可以获取正确的服务地址,同时服务提供者一般以集群方式提供服务,也引入了负载均衡和健康检查问题.
②在微服务架构中,服务之间存在着复杂的依赖关系,在高并发访问下,依赖的稳定性影响系统的可用性及性能.
因此需要提供服务容错机制,当依赖的服务发送故障时,不会使调用方线程被长时间占用不释放,避免故障在系统中蔓延.
③每个服务独立部署运行,服务之间的通信是进程间通信,需要有一个高效的进程间通信机制支撑微服务之间的交互.
④每个微服务可以有多个不同的实例,这使得服务按需动态伸缩成为可能,在高并发时可以启动同一服务的多个实例,以提高响应速度.
但服务实例的启停及流量的调度和分发需要一套负载监控和负载均衡组件来管理.
⑤一个微服务应用可能由上百个服务构成,服务可以采用不同语言和框架.
每个服务都有自己的部署、资源、扩展和监控需求.
因此需要提供版本管理和部署组件,实现微服务的动态部署和无缝升级.
2.
1服务发现目前服务发现的方式主要有两种:服务端发现(server-sidediscovery)和客户端发现(client-sidediscovery).
这两种方式都通过注册中心方式提供服务注册信息的分布式管理.
当服务上线时,服务提供者将服务信息注册到注册中心,并通过心跳维持长链接.
服务调用者通过注册中心寻址,根据负载均衡算法找到服务.
当服务下线时,注册中心会发通知给服务客户端.
如图1和图2所示.
服务调用者服务提供者(IP1)服务提供者(IP2)服务提供者(IP3)图1服务端发现图2客户端发现服务端方式,所有服务对于服务调用者透明,但系统中需要维护一个高可用的负载均衡组件,负载均衡组件在服务调用者和服务提供者之间增加了一跳,有一定性能开销.
客户端方式架构简单,扩展灵活,同时服务消费方和服务提供方之间是直接调用,没有额外开销,性能比较好.
2.
2服务容错在微服务架构中,服务之间会有错综复杂的依赖关系.
在实际生产环境中,由于网络连接缓慢、资源繁忙、脱机等原因会造成服务出错或者服务延迟,如果微服务不能对其依赖的服务的故障进行容错和隔离,那么该服务本身就处在被拖垮的风险中.
因此在微服务框架设计时需要加入容错措施,确保某一服务出问题不会影响系统整体可用性.
可用的措施包括[5]:2017年第26卷第6期http://www.
c-s-a.
org.
cn计算机系统应用ResearchandDevelopment研究开发261①断路器当某个微服务发生故障后,通过断路器的故障监控,向调用方返回一个错误响应,调用方主动熔断,以防止线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延.
如果故障恢复,电路又能自动恢复.
②限流增加限流机制,限定对微服务的并发访问,如限制单位时间内的并发数,对超过这个限制的请求拒绝,防止在突发流量或被攻击时被击垮.
③回退回退是系统的弹性恢复能力,是指在熔断或者限流发生的时候,系统采用何种处理逻辑.
常见的处理策略有直接抛出异常,也称快速失败;返回空值或缺省值;返回备份数据.
2.
3总体架构通过对微服务框架进行分析,确定了微服务框架的总体架构,在框架层面解决负载均衡、服务发现、服务容错、监控报警、进程通信、自动化弹性部署等问题.
架构图如图3所示.
IOC组件展现组件基础开发框架数据持久化序列化日志管理限流容错服务发现服务通信服务路由嵌入式容器服务注册动态配置部署管理服务监控中间件监控调用链分析权限管理缓存组件服务运行管理部署监控工具图3总体架构图微服务框架包括基础开发框架、服务运行管理和部署监控工具三部分.
基础开发框架:提供微服务开发的基础组件,包括展现组件、IOC组件、持久化组件、序列化组件、服务通信组件、服务监控组件、日志管理组件、缓存组件、嵌入式组件和权限管理组件,实现微服务开发的通用功能,整合开源成熟框架,屏蔽底层技术细节.
其中,日志管理记录重要的框架层日志、度量和调用链数据,同时将日志、度量等接口暴露出来,让业务层能根据需要记录业务日志数据;服务通信组件提供基于REST/RPC的同步请求响应模式和基于消息的异步通信模式.
服务运行管理:提供微服务运行时服务注册、服务发现、服务路由及限流容错功能.
其中,服务路由实现请求验证、请求动态路由和静态响应处理等功能;限流和容错组件,能够在运行时自动限流和容错,保护服务.
同时和动态配置相结合,实现动态限流和熔断.
部署监控工具包括动态配置、部署管理、中间件监控、服务监控、调用链分析功能.
其中,动态配置组件支持文件方式配置,集成动态运行时配置,能够在运行时针对不同环境动态调整服务的参数和配置;部署管理实现一键部署灰度发布功能.
3框架实现3.
1技术架构微服务框架实现时采用的技术架构如图4所示.
图4技术架构图在微服务框架实现时,选择了业界开源成熟的框架,通过框架整合实现微服务开发和运行管理.
其中SpringBoot作为微服务的基础开发框架,提供展现、依赖注入、持久化、嵌入式容器、日志、缓存等基础功能.
集成Consul组件实现服务注册发现[6];Ribbon组件实现客户端负载均衡;Hystrix组件实现服务延迟和容错[7];Zuul组件提供动态路由,监控,弹性,安全等边缘服务.
3.
2基础架构选型目前开源的微服务基础框架主要有Dropwizard和SpringBoot.
两个框架在实现技术上存在一定差异[8],如表1所示.
Dropwizard简单轻量,但第三方集成力度不足,社区支持薄弱,很多关键特性如依赖注入需要开发者自己实现;Springboot聚焦于Spring应用,可以借力Spring家族体系的其它成员,完成通信、数据访问等计算机系统应用http://www.
c-s-a.
org.
cn2017年第26卷第6期262研究开发ResearchandDevelopment功能,体系强大,社区活跃.
SpringBoot带来了一系列的生态圈的集成,为微服务开发提供了基础.
因此选择SpringBoot作为基础框架.
表1Dropwizard和SpringBoot对比框架HTTPRESTJSONOfficialintegrationServicetypeSpringBootTomcatJettySpringJacksonGSONJson-simple40+OfficialStarterPOMsforanypurposeHTTP/RESTJMSMessageQueuingSOAPDropwizardJettyJerseyJacksonHibernateValidator、Guava、ApacheHttpClient、Jersey、JDBI、Freemarker、Jodatime、MustacheHTTP/REST3.
3运行管理框架服务运行管理引入了四个主流的开源框架,每个框架相互独立,实现时需要与基础框架SpringBoot集成.
为了实现框架整合,同时简化开发难度,引入SpringCloud组件.
SpringCloud是一个基于SpringBoot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、分布式会话和集群状态管理等操作提供了一种简单的开发方式[9].
以Hystrix组件整合为例,SpringCloud提供了spring-cloud-starter-hystrix模块,通过注解的方式轻松使用Hystrix,如注解@HystrixCommand将断路器机制加入到业务处理方法中,代码如表2所示.
表2@HystrixCommand示例.
指定getProducerFallback为备用方法.
当断路器处于断开状态时,getProducerFallback方法将替代getValue接受调用.
@HystrixCommand(fallbackMethod="getProducerFallback")publicProducerResponsegetValue(){returnrestTemplate.
getForObject("http:.
producer",ProducerResponse.
class);}privateProducerResponsegetProducerFallback(){returnnewProducerResponse(42);}4结语微服务框架已经在国家电网统一应用开发平台V2.
9.
0版本中实现,该版本经过第三方安全、性能测试,目前正在项目组试点应用.
本文针对目前流行的微服务框架进行了介绍,对微服务框架实现时需要解决的问题进行了分析,设计了微服务的总体架构、实现架构,重点分析了微服务架构所带来的服务注册发现、服务容错问题.
该微服务架构全面的解决了微服务开发的通用问题,基于该微服务框架进行业务系统开发,开发人员只需要关注微服务内部业务功能的开发,可以降低系统的开发难度,提高开发效率.
参考文献1王磊.
解析微服务架构(一)单块架构系统以及其面临的挑战.
http://www.
infoq.
com/cn/articles/analysis-the-architecture-of-microservice-part-01.
[2015-05-11].
2姜斌.
2016技术将继续颠覆现实发力引擎之"微服务".
http://www.
csdn.
net/article/a/2016-05-11/15838064.
[2016-05-11].
3FowlerM,LewisJ.
Microservices.
http://martinfowler.
com/articles/microservices.
html.
[2014-03-25].
4肖勤.
微服务架构实践经验分享.
http:.
www.
csdn.
net/article/2015-08-07/2825412.
[2015-08-12].
5杨波.
实施微服务,我们需要哪些基础框架http://www.
infoq.
com/cn/articles/basis-frameworkto-implement-micro-service/.
[2015-12-01].
6HashiCorp.
IntroductiontoConsul.
https://www.
consul.
io/intro/index.
html.
7Netflix.
Hystrix:LatencyandFaultToleranceforDistributedSystems.
https://github.
com/Netflix/Hystrix.
8UllahR.
DropwizardvsSpringBoot—AComparisonMatrix.
https://dzone.
com/articles/dropwizard-vs-spring-bootutm_source=tuicool&utm_medium=referral.
[2015-02-02].
9PivotalSoftware.
SpringCloud.
http://projects.
spring.
io/spring-cloud/.
2016.
虎跃科技怎么样?虎跃科技(虎跃云)是一家成立于2017年的国内专业服务商,专业主营云服务器和独立服务器(物理机)高防机房有着高端华为T级清洗能力,目前产品地区有:山东,江苏,浙江等多地区云服务器和独立服务器,今天虎跃云给大家带来了优惠活动,为了更好的促销,枣庄高防BGP服务器最高配置16核32G仅需550元/月,有需要的小伙伴可以来看看哦!产品可以支持24H无条件退款(活动产品退款请以活动规则为准...
UCloud优刻得近日针对全球大促活动进行了一次改版,这次改版更加优惠了,要比之前的优惠价格还要低一些,并且新增了1核心1G内存的快杰云服务器,2元/首年,47元/年,这个价格应该是目前市面上最低最便宜的云服务器产品了,有需要国内外便宜VPS云服务器的朋友可以关注一下。UCloud好不好,UCloud服务器怎么样?UCloud服务器值不值得购买UCloud是优刻得科技股份有限公司旗下拥有的云计算服...
DiyVM是一家成立于2009年的国人主机商,提供的产品包括VPS主机、独立服务器租用等,产品数据中心包括中国香港、日本大阪和美国洛杉矶等,其中VPS主机基于XEN架构,支持异地备份与自定义镜像,VPS和独立服务器均可提供内网IP功能。商家VPS主机均2GB内存起步,三个地区机房可选,使用优惠码后每月69元起;独立服务器开设在香港沙田电信机房,CN2线路,自动化开通上架,最低499元/月起。下面以...
依赖注入为你推荐
天府热线劲舞团(四川天府热线)为什么越来越卡了??金山杀毒怎么样金山杀毒怎么样?网站联盟网站联盟的运作流程镜像文件是什么什么是镜像文件啊开机滚动条开机滚动条要很长时间怎么解决?开机滚动条怎么减少开机滚动条?xp系统停止服务XP停止服务后该怎么办?网页打开很慢为什么我打开网页很慢如何快速收录如何让百度快速收录什么是云平台云平台和云计算的区别是什么?
论坛虚拟主机 韩国vps 香港服务器99idc 香港机房 韩国空间 20g硬盘 ixwebhosting 正版win8.1升级win10 xfce nerds 泉州移动 南通服务器 河南移动网 腾讯总部在哪 photobucket 国外网页代理 阿里云个人邮箱 netvigator 博客域名 ncp是什么 更多