分布式、微服务服务架构剖析

為{幸葍}努か 提交于 2019-11-29 23:38:54

一、RPC

RPC(Remote Process Call),即远程服务调用,被广泛地应用在很多企业应用中,是早期主要的服务治理方案,其流程较为简单,客户端consumer携带参数发送RPC请求到服务提供方provider,provider根据参数路由到具体函数,方法,并将执行获得的结果返回,至此一次RPC调用完成。
【加群】:857565362
  随着业务的发展,大数据时代的到来,服务提供方的压力也日益增大,单机应用的处理能力无论在软件,硬件上都受到限制,provider也不可能一直无限扩容,即使扩容,也存在着很多问题,即服务的路由,和Consumer的负载均衡问题。因此,分布式服务架构应运而生,RPC发展到一定阶段思考的变革,成为了分布式服务,云计算的计算机基础。

二、SOA

由于简单的RPC调用已经不能随着时代发展满足需求,因此复杂的业务逻辑对于分布式应用架构体系的需求愈发强烈,业务希望自己的服务是分布式部署的,请求是分流的,对数据的操作是能读写分离的,同时能屏蔽许多复杂需要自己编写的底层服务,借助已有的公共服务,去快速的构建自己的应用,降低人力开发维护的成本和提高应用交付的效率,基因此,基于分布式服务思想的SOA(Service-Oriented Architecture)成了新的受追捧的架构。常见的SOA服务调用流程图如下: 
【加群】:857565362

三、业界服务治理方案

业界的互联网巨头公司,都有属于自己的分布式服务框架,如阿里巴巴的Dubbo,HSF,腾讯的Tars,京东的JSF,新浪的Motan,都已经是业界非常成熟的解决方案,其中开源的Dubbo和Motan受到了广大开发者的研究对象。
  纵观这些服务框架,设计的基本思路都如上图,无非涉及provider发布注册,consumer订阅,调用发起,负载均衡,服务分流和监控等模块,并在此基础上增加了很多玩法,形成了各具特色的分布式服务框架设计,下面就Dubbo,JSF,Motan的设计做下简单的介绍。
  (1)Dubbo:下图是Dubbo在服务治理方面的架构设计
  初始化阶段:部署在Container的Provider启动后向服务中心Registry发布并注册自己的服务,客户端Consumer初始化时即向Registry订阅自己想要的服务,同时Registry对Consumer保持着一个长连接,当订阅的服务新增或减少节点时,会及时通知到客户端更新(此过程是异步进行的,不会影响Consumer的主流程),如此一来,客户端Consumer便有了Provider的所有实时信息,便可以发起服务调用了。
  invoke阶段:客户端Consumer从获得的所有Provider列表中通过负载均衡等策略选出最适合调用的服务提供者Provider并发起同步调用。
  Monitor阶段:Consumer和Provider通过异步的方式向监控中心上报自己的需要被监控的数据。
【加群】:857565362
 (2)JSF:下图是JSF在服务治理方面的架构设计
  初始化阶段:Provider启动后向服务注册中心发布注册自己的服务
  invoke阶段:与Dubbo不同的是,JSF的注册中心不向Consumer推送Provider实时数据,而是在发起调用时Consumer向注册中心询问并获得对应的Provider,然后组织匹配JSF协议的报文发起调用。
  Monitor阶段:Provider定期向监控中心发送性能统计数据,同时Provider还会上报事件给事件中心。
【加群】:857565362
  (3)Motan:Motan是有名的轻量级服务框架,代码质量很高,下图是Motan在服务治理方面的架构设计
  Motan的服务治理设计与Dubbo十分的相似,都是Provider发布注册,Consumer订阅与接受推送,之后发起调用。
【加群】:857565362

四、分布式服务框架主要模块名词释义

无论是那种SOA的架构设计,都离不开几个模块的功能,即Provider,Consumer,Registry,Gateway,负载均衡,服务分流,监控等,通过上述所讲,应该对这些功能模块有了初步的认识,下面就这些名词再作下介绍
  (1)Provider:服务提供者,无论是业务服务,还是一个系统中公用的SAAS,都属于Provider
  (2)Consumer:即发起调用的客户端
  (3)Registry:服务注册中心,是分布式服务系统中的一个重要组成模块,管理Provider的Manager,在实际的运行环境中,服务注册中心Registry被动通知或Consumer主动询问,在Provider有节点宕机或新增节点时,客户端也可实时感知到,从而避免了某个Provider被无限调用或是无限闲置
  (4)Gateway:网关也是分布式服务框架中不可或缺的部分,每种系统与框架都有自己的一套协议,当异构系统互相调用时,网关的作用即显现出来,Gateway接受各种外部HTTP请求,完成相应的权限校验,报文适配,路由转发到对应的Provider,再将Provider返回的结果传递给异构系统的Consumer,完成异构系统的互相调用
  (5)负载均衡,服务分流:Consumer从Registry获得具体的Provider列表后,如何选取合适的Provider,取决与一定的负载均衡算法,常见的算法有轮询法,随机法,源地址哈希,加权轮询,加权随机等
  (6)监控:接收来自Consumer和Provider异步上报的性能监控数据,对有风险的节点发出告警五、分布式服务框架其他组成
  上一节讲述了RPC发展到SOA的过程,常见的SOA服务治理方案,以及分布式系统中常见的专业名词,这部分其实只是涉及到了一个分布式系统架构的轮廓,真正一个系统的构建,还需要很多模块互帮互助,协同工作和其他相关平台的搭建。
  一个大型,稳健,成熟的分布式系统的背后,往往会涉及众多支撑运作的系统,我们统称这部分系统为分布式系统架构中的基础设施,下面将介绍一些常见甚至必用的基础设施。
  (1)CI/CD平台:即持续集成/持续交付,持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误,持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」说得这么复杂,无非就是开发代码过程中持续的提交,然后进行持续的代码扫描,单元测试,编译构建,完成如上流水线后迅速的部署到目标环境上允许的过程。
  (2)ConfigCenter:即配置中心,为各应用的所有环境提供了一个中心化的外部配置,为服务端和客户端提供了分布式系统的外部化配置支持。
  (3)Web Portal/IDE:集成应用配置,管理平台的统一入口和开发IDE。
  (4)Deploy Center:部署中心,所有的服务,无论是公共SAAS服务还是业务服务,开发完成后都需部署到对应的区域和环境上,部署中心提供了发布应用包的平台供开发者进行发包部署操作,或提供接口供CI/CD的接入。
  (5)公共SAAS:即整个分布式系统中公用的服务,常见的有权限服务,数据字典,国际化等
  (6)服务注册中心:服务注册中心,是分布式服务系统中的一个重要组成模块,管理Provider的Manager,在实际的运行环境中,服务注册中心Registry被动通知或Consumer主动询问,在Provider有节点宕机或新增节点时,客户端也可实时感知到,从而避免了某个Provider被无限调用或是无限闲置 
 (7)Maven,Git仓库管理:Maven仓库用来存储和管理开发和部署应用过程中所需的JAR或ZIP文件,Git用来存储开发者代码,提供了代码合成,分支管理等功能。
  (8)日志中心:服务运行过程中,不可避免的会出现各种问题,如何快速定位并分析清楚这些问题的根因,并提出有效的解决方案,日志在这其中扮演了很重要的角色,日志中心通过收集Consumer或Provider产生的日志,为用户查询下载日志提供了可视化平台。  
(9)监控中心:接收来自Consumer和Provider异步上报的性能监控数据,对有风险的节点发出告警
  (10)事件中心:事件中心是高度可缩放的数据流式处理平台和事件引入服务,可以处理和存储分布式软件和设备生成的事件、数据或遥测

六、完整的分布式系统设计

以上所述基础设施都是分布式系统中重要或不可缺少的部分,怎么将这些基础设施整合到一起,使整个分布式系统能够协调运作,下面展示了个人对于这方面的理解。
  开发者接入到对应的IDE开发平台,选择对应的产品(Maven或Gradle)构建工程,通过分支管理等措施的落实,进行代码的编写,提交,合并,之后提交CI平台进行代码检查,编译构建,单元测试并部署到部署中心,也可脱离CI进行手动部署。
  不管开发者开发的是公共SAAS还是业务服务,都会通过部署中心部署到对应的环境区域,业务服务从配置中心拉取应用配置信息,将服务注册发布到注册中心,并可任意调用环境中周边的公共SAAS服务。
  服务在运行过程中,将日志以异步消息的形式上传到日志中心,此处也可由日志中心进行主动收集。同时将性能等方面的数据上报到监控中心,监控中心发现异常后,会对用户发出告警。监控中心还包括一个事件上报模块,收集容器的运行状况和产生的事件等数据,对服务的运行作出必要的决策。
【加群】:857565362
我这儿整理了比较全面的JAVA相关的面试资料,
需要领取面试资料的同学,请加群:473984645

获取更多学习资料,可以加群:473984645或扫描下方二维码
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!