目录

Spring Cloud Alibaba读书笔记(1)


Spring Cloud Alibaba微服务原理与实战(1)

CH1 微服务的发展简史

单体架构

通常来说,如果一个war或者jar包中包含了一个应用的所有功能,我们称这种架构为单体架构。

https://s3.bmp.ovh/imgs/2022/08/16/fdf70eb1a9e2a3bf.png

集群及垂直化

单体架构的挑战:

  • 用户量的增多导致访问量不断上升进而使得后端服务器的负载越来越高
  • 用户量增大导致需求增多,业务场景不断复杂。

最终导致单个包中代码量不断上升,业务代码间的耦合度不断加深,后期代码的维护和测试上线越发困难,微小的调整也可能带来整个应用的重新测试和部署,因此我们可以进行如下优化:

  1. 通过横向增加服务器,把单台机器变为多台机器的集群
  2. 按照业务的垂直领域进行拆分,减少业务的耦合度并降低单个包带来的伸缩性困难问题

将各个系统进行拆分(分而治之)后有:

https://s3.bmp.ovh/imgs/2022/08/16/d221af610d13b19d.png

SOA 面向服务架构

SOA(service-oriented architecture) 面向服务架构——将一些通用的、会被多个上层服务调用的共享业务提取成独立的基础服务,进而实现服务的调用者以及服务的提供者之间的高度解耦。主要用于解决:

  • 信息孤岛
  • 共享业务的重用

https://s3.bmp.ovh/imgs/2022/08/16/3f71f171fc75242d.png

企业服务总线是系统和服务间的通信桥梁,提供服务地址的管理、不同系统间的协议转化以及数据格式转化等功能

微服务架构

SOA与微服务本质上都是服务化思想的一种体现,可以把SOA看做微服务的超集:

  • SOA关注的是服务的重用性以及解决信息孤岛问题
  • 微服务关注的是解耦,用于降低业务之间的耦合度而非关注服务的复用
  • 微服务更多的关注于DevOps的持续交付上,因此微服务与容器化技术的结合更加紧密

每个微服务只关注于某个特定的功能,服务之间采用轻量级通信机制REST API进行通信。

https://s3.bmp.ovh/imgs/2022/08/16/86552023da98476f.png

微服务架构的优点和挑战

优点:

  • 复杂度可控∶通过对共享业务服务更细粒度的拆分,一个服务只需要关注一个特定的业务领域,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,开发、维护会更加简单。

  • 技术选型更灵活∶每个微服务都由不同的团队来维护,所以可以结合业务特性自由选择技术栈。

  • 可扩展性更强∶可以根据每个微服务的性能要求和业务特点来对服务进行灵活扩展,比如通过增加单个服务的集群规模,提升部署了该服务的节点的硬件配置。

  • 独立部署∶由于每个微服务都是一个独立运行的进程,所以可以实现独立部署。当某个微服务发生变更时不需要重新编译部署整个应用,并且单个微服务的代码量比较小,使得发布更加高效。

  • 容错性∶在微服务架构中,如果某一个服务发生故障,我们可以使故障隔离在单个服务中。

挑战:

  • 故障排查∶一次请求可能会经历多个不同的微服务的多次交互,交互的链路可能会比较长,每个微服务会产生自己的日志,在这种情况下如果出现一个故障,开发人员定位问题的根源会比较困难。
  • 服务监控∶在一个单体架构中很容易实现服务的监控,因为所有的功能都在一个服务中。在微服务架构中,服务监控开销会非常大,可以想象一下,在几百个微服务组成的架构中,我们不仅要对整个链路进行监控,还需要对每一个微服务都实现一套类似单体架构的监控。
  • 分布式架构的复杂性∶微服务本身构建的是一个分布式系统,分布式系统涉及服务之间的远程通信,而网络通信中网络的延迟和网络故障是无法避免的,从而增加了应用程序的复杂度。
  • 服务依赖∶微服务数量增加之后,各个服务之间会存在更多的依赖关系,使得系统整体更为复杂。幸运的是,许多改变一般只影响一个服务,需要协调多服务的改变很少。
  • 运维成本∶在微服务中,需要保证几百个微服务的正常运行,对于运维的挑战是巨大的。比如单个服务流量激增时如何快速扩容、服务拆分之后导致故障点增多如何处理、如何快速部署和统一管理众多的服务等。

CH2 Spring Cloud简介

Spring Cloud提供了一些可以让开发者快速构建微服务应用的工具,比如配置管理、服务发现、熔断、智能路由等,这些服务可以在任何分布式环境下很好地工作。Spring Cloud 主要致力于解决如下问题∶

  • Distributed/versioned configuration,分布式及版化配置
  • Service registration and discovery,服务注册与发现
  • Routing,服务路由
  • Service-to-service calls,服务调用
  • Load balancing,负载均衡
  • Circuit Breakers,断路器
  • Global locks, 全局锁
  • Leadership election and cluster state,Leader 选举及集群状态
  • Distributed messaging,分布式消息。

Spring Cloud并不是Spring团队全新研发的框架,它只是把一些比较优秀的解决微服务架构中常见问题的开源框架基于Spring Cloud规范进行了整合,通过Spring Boot这个框架进行再次封装后屏蔽掉了复杂的配置,给开发者提供良好的开箱即用的微服务开发体验。不难看出,Spring Cloud其实就是一套规范,而 Spring Cloud Netflix、Spring Cloud Consul、Spring Cloud Alibaba才是 Spring Cloud规范的实现。

Spring Cloud Alibaba

Spring Cloud Alibaba 主要为微服务开发提供一站式的解决方案,使开发者通过Spring Cloud 编程模型轻松地解决微服务架构下的各类技术问题。以下是Spring Cloud Alibaba生态下的主要功能组件,这些组件包含开源组件和阿里云产品组件,云产品是需要付费使用的。

  • Sentinel,流量控制和服务降级
  • Nacos,服务注册与发现
  • Nacos,分布式配置中心
  • RocketMQ,消息驱动
  • Seate,分布式事务
  • Dubbo, RPC通信。
  • OSS,阿里云对象存储(收费的云服务)。

Spring Cloud Alibaba的独特优势:

  • Alibaba的开源组件在没有织入 Spring Cloud生态之前,已经在各大公司广泛应用,所以集成到 Spring Cloud生态使得开发者能够很轻松地实现技术整合及迁移。我从2013年开始接触 Dubbo,当时所在公司使用Webservice 来实现服务的远程通信,但是Webservice在服务治理这块的能力是缺失的,因此使用 Dubbo 进行了全部替换。有意思的是,Dubbo 天然支持多协议,因此在迁移和改造过程中并没有投入太多的成本,这也使得笔者开始关注Dubbo。在后续的几个公司中,也都是通过 Dubbo来实现服务通信及服务治理的。
  • Alibaba 的开源组件在服务治理上和处理高并发的能力上有天然的优势,毕竟这些组件都经历过数次双11的考验,也在各大互联网公司大规模应用过。所以,相比 Spring Cloud Netflix来说,Spring Cloud Alibaba 在服务治理这块的能力更适合于国内的技术场景,同时,Spring Cloud Alibaba在功能上不仅完全覆盖了Spring Cloud Netflix原生特性,而且还提供了更加稳定和成熟的实现,因此笔者很看好Spring Cloud Alibaba未来的发展。