分布式服务框架(二)
一、分布式服务框架其他组成
上一节《分布式服务框架(一)》讲述了RPC发展到SOA的过程,常见的SOA服务治理方案,以及分布式系统中常见的专业名词,这部分其实只是涉及到了一个分布式系统架构的轮廓,真正一个系统的构建,还需要很多模块互帮互助,协同工作和其他相关平台的搭建。
一个大型,稳健,成熟的分布式系统的背后,往往会涉及众多支撑运作的系统,我们统称这部分系统为分布式系统架构中的基础设施,下面将介绍一些常见甚至必用的基础设施。
(1)CI/CD平台:即持续集成/持续交付,持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误,持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(此解释来自https://blog.csdn.net/eugenelee2096/article/details/73332615)说得这么复杂,无非就是开发代码过程中持续的提交,然后进行持续的代码扫描,单元测试,编译构建,完成如上流水线后迅速的部署到目标环境上允许的过程。
(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服务。
服务在运行过程中,将日志以异步消息的形式上传到日志中心,此处也可由日志中心进行主动收集。同时将性能等方面的数据上报到监控中心,监控中心发现异常后,会对用户发出告警。监控中心还包括一个事件上报模块,收集容器的运行状况和产生的事件等数据,对服务的运行作出必要的决策。