SpringCloud技术栈
开发分布式系统可能具有挑战性,复杂性已从应用程序层转移到网络层,并要求服务之间进行更多的交互。将代码设为“cloud-native”就需要解决12-factor,例如外部配置,服务无状态,日志记录以及连接到备份服务之类的问题,Spring Cloud项目套件包含使您的应用程序在云中运行所需的许多服务。
12-factor(云原生应用程序的12要素):
SpringCloud架构:
# 1 SpringCloud技术栈
SpringCloud技术栈非常丰富,这也是SpringCloud为什么在微服务领域中如此受欢迎的原因之一,技术栈如上图,在服务注册与配置、服务调用、微服务网关、消息组件、链路追踪、配置中心、安全控制、将极限流等诸多方面技术栈都比较完善,而且阿里巴巴也出了一套SpringCloud Alibaba版本,主要集成了Alibaba中主流的技术栈。
# 2 SpringCloud经典技术介绍
微服务项目近几年非常火爆,推出来的相关技术解决方案热度也非常活跃,但SpringCloud技术栈中也有一部分技术组件在逐步被淘汰或者闭源,但都有更优秀的技术方案替代。在不久的将来,那些闭源或者将被淘汰的技术有很大概率将不在项目中使用,所以我们学习的时候可以直接学习更优秀的替代技术方案。
Eureka闭源:
上面英文大概意思是:Eureka 2.0
的开源工作已经停止,依赖于开源库里面的 Eureka 2.x
分支构建的项目或者相关代码,风险自负。
Eureka在微服务项目中主要承担服务注册与发现工作,可以替代的技术方案比较多,而且很多方案都比Eureka优秀,比如Consul、Nacos等。
Hystrix停止更新:
Hystrix在项目中主要做服务熔断、降级,但官方宣布将不在开发,目前处于维护状态,但官方表示 1.5.18 版本的 Hystrix 已经足够稳定,可以满足 Netflix 现有应用的需求。
关于Hystrix可替代的产品也比较多,比如官方推荐的resilience4j
,resilience4j
是一个轻量级熔断框架,但resilience4j
目前在国内使用频率还不高,功能也不够强,我们更推荐使用功能更加强悍的SpringCloud Alibaba Sentinel
。
Zuul过时:
Zuul
是一个微服务网关技术,但Zuul1.x
使用的是阻塞式的API,不支持长连接,没有提供异步,高并发场景下性能低。SpringCloud
官网推出了全新的微服务网关技术SpringCloud Gateway
,比Zuul
性能更强悍、功能更丰富、且支持异步等多种特性。
SpringCloud Config实用性差:
SpringCloud Config
主要用于管理项目的配置文件,每次要使用SpringCloud Config
的时候,总得经过一波操作和配置的折腾,才可以使用SpringCloud Config
实现配置管理,而且单独使用无法支持配置实时刷新,在项目中用起来,真比较头疼的。
当前有很多技术可以取代SpringCloud Config
,比如携程的Apollo
、SpringCloud Alibaba Nacos
,功能都比SpringCloud Config
强,并且支持实时刷新配置。
SpringCloud Bus实用性差:
SpringCloud Bus是服务消息总线,主要实现通知多个服务执行某个任务,一般和SpringCloud Config一起使用。这个功能其实不太使用,因为很多任务组件基本都具备消息通知功能,比如Nacos、Apollo都能实现所有服务订阅执行相关操作。
# 3 SpringCloud项目场景
微服务技术目前已经在很多国内外大厂中都在广泛使用,那么在项目中该如何使用微服务技术呢?我们以滴滴快车业务未来,来讲解一下微服务技术结合业务应用讲解一下。
打车业务如上图:
1:打车的时候会选择车型,选择车型我们调用过程是:Gateway->Driver(加载司机列表)
2:选择车型后确认打车,相当于要下单了,调用过程是:Gateway->Order(下单)->Driver(司机状态更改)
3:打车结束后,用户进入支付,调用过程是:Gateway->Pay(支付)->Driver(更新司机状态)
->Order(更新订单状态)