Spring Cloud Alibaba

转载https://blog.csdn.net/dotnetstudio/article/details/111573376

2020年注定是不平凡的一年,今年的农历新年新冠疫情爆发,每个中国人都经历了一个难忘的春节,在党中央的英明部署下,通过全国人民的不懈努力终于将疫情消灭。目前国内还在零星的爆发,疫情还在全世界范围大流行,只有全世界的人民团结起来,才能打赢这场没有硝烟的战争。这一年,我们终于消除了贫困,但脱贫攻坚的战争远没有结束,我们必须继续努力,让全体中国人实现共同富裕。这一年我国的航天事业取得了巨大突破,嫦娥五号实现了从月球带回土壤标本的历史创举。这一年,我国在第一季度遭遇巨大下滑的不利背景下,二季度和三季度都为正,并持续增长,预计全年能实现比较好的经济增长。这一年有太多的故事,这一年无论是我们的祖国还是每个中国人都经历了太多的磨难,但面对困难和挑战,中国人体现了前所未有的战胜困难的决心和勇气。

外部世界的纷繁复杂,依然阻挡我们对技术的热爱。Martin Flower在六年前提出的微服务如今依然是那么流行,整个Spring Cloud体系目前划分为两大阵营:Netflix 和 Alibaba。Netflix的Spring Cloud体系开源项目都停止更新维护了,Spring Cloud Alibaba目前是GitHub上Star关注度最高的。作为一个一直在微服务领域深耕的小兵,今年以来一直在做两件事情:一是做一个“微服务实战”的专栏;二是做一个商城的开源项目。目前“微服务实战”这个专栏已经有六篇文章:

Nacos服务端安装和启动

Dubbo+Nacos实现服务注册和发现

阿里巴巴 Nacos 企业级落地

Sentinel Dashboard轻松流控

Nacos客户端源码分析

Arthas安装和启动以及核心命令详解

目前的文章主要涵盖了Nacos和Sentinel,Nacos主要介绍了安装、启动和服务注册和发现,Nacos的分配至配置后续要介绍,Sentinel主要介绍了安装和启动,以及如何使用其Dashboard进行流控、服务降级和熔断等功能。下面结合Spring Cloud Alibaba的架构图看看还有哪些是值得我们关注的:

这个架构图应该怎么去看呢,选取中间从上往下看,这是主线,一个微服务的系统必须包含这些中间件才能上生产环境去用,否则就是不完善的。中间部分从上往下分为:网关层、控制层、服务层和消息层。中间部分的两翼分别是:商业化套件和服务治理监控。商业化套件中的ACM主要提供应用配置管理,具体来说是灰度、回滚、多租户管理、推送轨迹追踪。商业化套件中的OSS是对象数据存储,支持图片、文档等格式,采用大数据的方式存储,查询速度快。商业化套件中的SchedulerX是分布式任务调度平台,提供提供定时、任务编排、分布式跑批等功能,具有高可靠、海量任务、秒级调度及可运维等能力。右翼的服务治理聚焦服务的注册和发现、配置中心和应用监控。接下来重点分析其中的常用必备中间件。

网关Gateway

网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等
,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。

流控降级Sentinel

Sentinel对于我们的系统代码采取的是无侵入式的,只需要依赖一个Jar包就可以对所有的微服务接口(Dubbo或gRPC)进行监控。例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等这些方面,Sentinel只需小试牛刀。Sentinel最厉害的是熔断降级,Sentinel 提供以下几种熔断策略:一是慢调用比例,即将大于设置的响应时间RT认为是慢调用,会统计一段时间内的慢调用,如果这个慢调用除以总调用的比例值大于设置阈值就触发熔断;二是异常比例,当单位时间的请求数大于设置的数量,并且异常占比大于设置阈值即触发熔断;三是异常数,即单位时间内的异常请求数超过阈值就触发熔断。有些人可能对熔断不太好理解,它是物理里面的概念,简单理解是半开合的状态,也就是说熔断后,不是说这个服务器就永远不提供服务了,二是给定一定的冷静时间,这段时间不提供服务,等波峰过后,该开关又合上,熔断解除,重新提供服务。

负载均衡Ribbon

负载均衡是分布式系统的标配,没有这个东西就无法实现HA(高可用)。Ribbon实现了服务消费者的客户端负载均衡功能,现在都是用Ribbon 和 Feign配合使用来实现负载均衡,如果不用Feign需要很多配置,调用接口的代码也很复杂。引入Feign以后调远端的服务就像调本地接口一样简单。

分布式事务Seata

Seata是多个英文单词首字母的合称,Simple Extensible Autonomous Transaction Architecture,翻译后是简单可扩展的自治事务框架。所谓的分布式事务其实就是全局事务,由于采用了微服务架构,一笔业务不可能通过一个微服务就能完成,可能需要多个不同的微服务才能完成,这是一笔业务就需要在多个服务器节点上执行相应的业务逻辑,造成了事务的一致性无法保证。分布式事务就是通过事务的最终一致性来实现的。Seata整个体系由三部分组成:TC(事务协调器)、TM(事务管理器)和RM(资源管理器)。事务管理器会告诉事务协调器需要创建一个全局事务,事务协调器收到后会分配一个事务ID,这个事务ID会在整个微服务链上传播,资源管理器会利用事务ID向TC注册本地事务,注册好了就成了一个分支事务,TC统一管理分支的提交和回滚。

服务注册与发现+配置中心Nacos

Nacos是一款支持服务注册与发现,并且能充当配置中心的中间件,而且是唯一一款同时支持CP和AP的服务注册与发现中间件,并且还提供了好用的Dashboard,真的是能想到的都想到了,性能上也是杠杠的,官方测试每秒支持上万的服务注册。没有任何理由能让我们拒绝选择它作为我们的服务注册和发现组件。

总结

上面剩余的Dubbo和Rocket MQ没有做具体的分析,是因为在Spring Cloud Alibaba出来之前这二位就已经在业界广泛使用,一个是同步服务调用的佼佼者,另外一个是号称速度能和Kafka媲美的消息中间件,而且Dubbo的野心很大,并没有把自己定位为一款RPC框架。Arthas虽然阿里把它放到Spring Cloud Alibaba体系中来,我个人认为目前它的能力范围只是一个监控工具,功能上还有很多待提升的空间,例如在调用链的监控管理上就不如很多专业的软件。新的一年里我将通过商城开源项目的研发,深挖Spring Cloud Alibaba的各项技术,让“微服务实战”这个专栏给大家提供更多的帮助。

原文地址:https://www.cnblogs.com/hanjun0612/p/14187986.html