分布式服务一篇概览

分布式服务开发复杂于服务间交互,协调,治理等。服务的复杂性由应用本身转移到了网络交互层。

一、关于12-factor问题

在开发分布式服务时,我们通常会考虑如12-factor 问题,如配置中心、无状态化、日志等。

一个代码库:支持多人协作开发的代码集中管理平台。

一个依赖库:服务依赖发布、存储、隔离等管理。

一个配置中心:集中的配置管理中心,服务,协调多服务应用。

可插拔的支持服务:如数据库、消息中间件、三方服务等。

构建、发布、运行过程管理:服务发布管理。

每一个服务实例都是一个无状态的工作进程。

服务通过绑定特定的端口对外提供服务。

通过增减服务实例类型及数量来实现服务伸缩。

快速启动,优雅关机增强服务健壮性。

尽可能的保持开发、测试及生产环境一致性。

事件流形式处理日志,分离影响。

脚本或命令行式的服务管理工具支持。

二、总览

借用一张图:

三、服务发现

当由多个服务实例提供服务时,客户端需要知道都有哪些可调用服务,服务的具体位置以及怎么调用。

分布式协调服务:服务注册与发现。如 Eureka(AP)、Consul(CP)、Zookeeper(CP)、Nacos(CP + AP) 及 Etcd (CP)等。

示例 Nacos 架构图:

四、API 网关

客户端及服务端之间是多对对关系,对于涉及到统一权限管理、路由负载、日志、监控等支持性功能需求,网关服务处理相对更加合适。如 Spring Cloud GatewaynginxOpenRestyzuulAPISIX 等。

示例 Spring Gate Way 工作流程:

五、配置中心

独立的服务配置可以和服务集成在一起,对于分布式多服务模式,灵活、集中的配置管理则非常必要。

配置中心一般需要提供配置添加、删除、更新管理,环境管理、灰度管理、版本控制等。如 ApolloNacos、Spring Cloud Config 等。 

Apollo vs Spring Cloud Config:

功能点 Apollo Spring Cloud Config 备注
配置界面 一个界面管理不同环境、不同集群配置 无,需要通过git操作
配置生效时间 实时 重启生效,或手动refresh生效

Spring Cloud Config 需要通过Git webhook,

加上额外的消息队列才能支持实时生效

版本管理 界面上直接提供发布历史和回滚按钮 无,需要通过git操作
灰度发布 支持 不支持
授权、审核、审计 界面上直接支持,而且支持修改、发布权限分离 需要通过git仓库设置,且不支持修改、发布权限分离
实例配置监控 可以方便的看到当前哪些客户端在使用哪些配置 不支持
配置获取性能 快,通过数据库访问,还有缓存支持 较慢,需要从git clone repository,然后从文件系统读取
客户端支持

原生支持所有Java和.Net应用,

提供API支持其它语言应用,

同时也支持Spring annotation获取配置

支持Spring应用,提供annotation获取配置 Apollo的适用范围更广一些

题外话:

相关内容拓展:(技术前沿)

近10年间,甚至连传统企业都开始大面积数字化时,我们发现开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。

针对这类问题,低代码把某些重复出现的场景、流程,具象化成一个个组件、api、数据库接口,避免了重复造轮子。极大的提高了程序员的生产效率。 体验官网:https://www.jnpfsoft.com/?csdn

推荐一款程序员都应该知道的软件JNPF快速开发平台,采用业内领先的SpringBoot微服务架构、支持SpringCloud模式,完善了平台的扩增基础,满足了系统快速开发、灵活拓展、无缝集成和高性能应用等综合能力;采用前后端分离模式,前端和后端的开发人员可分工合作负责不同板块,省事又便捷。

还没有了解低代码这项技术可以赶紧体验学习!

六、服务治理

分布式服务涉及多服务间协调共同对外提供服务。相对来说,会有更多的不可控因素影响其可用性,如服务间调用超时、流量过载等,因此服务治理也是一门必修课。

熔断降级、流量控制支持:Spring Cloud Circuit BreakerResilience4JSentinelHystrix

Sentinel 示例

七、链路追踪

分布式服务使得问题追踪变得很困难,需要综合请求路径上不同服务节点表现来定位问题。因此首先需要有一条链,一条从请求调用入口到服务底层再到返回的完整追踪链路。

支持组件如:Spring Cloud Sleuth、Zipkin、SkyWalking。

示例 SkyWalking 架构图:

八、日志

汇总所有服务日志顺序综合展示。包括日志收集,传送,落库存储及展示等。

典型如 ELK,logstash 负责收集日志数据及传送,ElasticSearch 负责存储,Kibana 负责 查询展示。

数据采集存在多种可选收集器:如 filebeat(更轻量)、logstash、Fluentd 等。

九、监控

(Prometheus | Zabbix)+ Grafana )

1、Promethueus

开源系统监控报警系统。负责收集,存储时间序列监控数据并展示。整体架构图如下:

2、Zabbix

开源的分布式监控解决方案。

3、Grafana

提供查询,多维度可视化展示,报警等功能。

猜你喜欢

转载自blog.csdn.net/wangonik_l/article/details/131516442
今日推荐