SpringCloud入门
微服务架构的出现
单体应用架构 -> SOA -> 微服务架构
单体应用之殇
- 无法快速迭代
- 代码合并冲突,沟通成本大幅提高
- 回归用例庞杂,无法快速迭代
- 无法快速恢复
某版本小需求有bug需要回退整个版本的功能,且需要再走一遍冗长的发布流程
微服务架构优势
微服务架构是在 SOA( Service-Oriented Architecture, 面向服务的架构)之上做的进一步扩展,通过领域建模等理论将一个大型应用拆分成了更细粒度且边界清晰的服务模块。
每个微服务都能被独立测试、独立部署,并借助 Docker 和 CI/CD(持续集成环境)完成快速上线。
-
快速迭代+快速回滚
细粒度的可独立部署的小型服务,再加上敏捷开发模式的加持。 -
资源利用大大提高
将硬件等资源定向分配给需要用到资源的微服务,实现差异化的资源利用。统计每个服务集群的线上压力水位,应用弹性计算技术在各个服务之间调配计算资源。 -
大幅降低协作成本
码库、数据库、编译打包从“共享”变为了“独享”,微服务团队也保持了小规模特战队的模式。 -
高可用
- 弹性机房水位调拨
弹性机房实现了计算资源的自动分配,这种弹性伸缩能力必须建立在微服务化的基础上。它可以根据每个微服务的重要程度(核心服务 vs 边缘业务)以及当前承接的用户访问压力,动态地将计算资源(如虚机、云存储)分配给需要资源的服务。 - 流量整形
根据每个微服务承载能力的不同,控制外部流量抵达服务的速率。“限流”其实只是流量整形的一个场景,大型微服务的流量整形有很多种方式,比如匀速排队、流量预热、削峰填谷等等。 - 熔断降级
在流量高峰的时候,可以对边缘服务做人工降级,把计算资源腾挪给核心应用,降低核心服务的访问压力。除了人工降级以外,还可以为每个服务设置自动降级和熔断指标,比如当调用失败率达到某个阈值之后,开启自动降级措施,降低对下游业务的访问压力。
- 弹性机房水位调拨
SpringCloud
SpringCloud应用架构
Spring官方生态中,SpingBoot 配合 SpringCloud 实现微服务架构。
- Spring Boot 主内,通过自动装配和各种开箱即用的特性,实现数据层访问、RESTful 接口、日志组件、内置容器等等基础功能,完成应用级搭建
- Spring Cloud 主外,在应用集群之外提供了各种分布式系统的支持特性,帮助你轻松实现负载均衡、熔断降级、配置管理等诸多微服务领域的功能
SpringCloud组件
功能特性 | Alibaba组件库 | Netflix组件库 | SpringCloud官方或第三方开源组件库 |
---|---|---|---|
服务治理 | Nacos | Eureka | Consul |
负载均衡 | - | Ribbon | Loadbalancer |
服务间调用 | Dubbo(RPC调用) | NetflixFeign(OpenFeign的前身) | OpenFeign(RESTful调用) |
服务容错 | Sentinel | Hystrix Turbine HystrixDashboard |
Resilience4j |
分布式配置中心 | Nacos | - | SpringCloudConfig |
消息总线 | - | - | Bus |
服务网关 | - | Zuul | Gateway |
分布式链路追踪 | - | - | Sleuth Zipkin |
消息事件驱动 | RocketMQ(消息中间件) | - | Stream |
分布式事务 | Seata | - | - |
更多的SpringCloud组件信息点击Spring官方文档查看。