聊聊分布式系统

1,053 阅读4分钟

随着系统容量要求越来越大,系统可用性要求越来越高,分布式系统几乎已成为现在后端架构设计的必选之路,没有人再会在单体和分布式架构之间纠结了。那么分布式系统带来了哪些优劣势?

优势:

  1. 模块化、系统模块重用度更高,开发和发布速度可以并行而变得更快
  2. 系统扩展性更高
  3. 团队协作流程也得到改善

劣势:

  1. 架构设计更复杂,尤其是分布式事务
  2. 系统吞吐量变大,响应时间会变长
  3. 运维复杂度因为服务变多而变得复杂
  4. 测试和查错复杂度增大
  5. 技术多元化,维护和运维复杂度增大

一、分布式系统的发展

image.png

  • 20世纪90年代前主要是单体架构,软件模块高度耦合。之前的SOA架构其实和单体架构没有太多区别、都是高度耦合在一起。当你调用一个服务时、这个服务会调用另一个服务、然后又调用另一个服务、于是整个系统就转起来了。这个本质上就是比较耦合的做法。

  • 2000年左右出现了比较松耦合的SOA架构,这个架构需要一个标准的协议或中间件来联动其它相关的服务(ESB)。服务之间都是通过中间件的标准协议相互依赖,IOC和DIP设计思想就是此架构的实践。

  • 在2010年后,出现了微服务架构,这个架构更为松耦合。每个微服务独立完整地运行,后端单体的数据也被微服务架构分散到不同的服务中。而它与传统SOA的差别在于,服务间的整合需要一个服务编排或是服务整合的引擎。

微服务的出现使得开发速度变得更快、隔离性高,但是集成测试、运维和服务管理更加复杂。所以需要一套比较好的微服务PaaS平台。如Spring Cloud、Dubbo等微服务框架,还有Kubernetes提供的各式各样的部署和调度方式。

二、分布式系统的技术栈

构建分布式系统的目的是增大系统容量、提高系统的可用性。也就是完成下面两件事:

  • 大流量处理。通过集群技术把大量并发请求的负载分散到不同的机器上。
  • 关键业务保护。提高后台服务可用性,把故障隔离起来阻止多米诺骨牌效应。

总体来说一是提高整体架构的性能,服务更多的并发和流量;二是提高系统的稳定性,让系统的可用性更高。

2.1、提高性能

  • 缓存系统:有效提高系统的访问能力。
  • 负载均衡系统:水平扩展关键技术,让更多机器共同分担一部分流量请求。
  • 异步调用:通过消息队列对请求做排队处理、把前端的请求峰值给“削平”了,而后端通过自己能够处理的速度来处理请求。
  • 数据分区和镜像:数据分区把数据按一定的方式分成多个区,不同的数据来分担不同区的流量。数据镜像把一个数据库镜像成多份一样的数据,这样就不需要数据路由中间件了。

2.2、提高稳定性

  • 服务拆分:一是为了隔离故障、二是为了重用服务模块。
  • 服务冗余:去除单点故障,支持服务弹性伸缩,以及故障迁移。
  • 限流降级:系统扛不住压力时,通过限流或者功能降级的方式停掉一部分服务,或是拒绝一部分用户,确保整个系统稳定。
  • 高可用架构:多租户隔离、灾备多活、或是数据可以在其中复制保持一致性的集群。
  • 高可用运维:DevOps的CI/CD(持续集成、持续部署)。

总体来说分布式系统的关键技术,如下:

  • 全栈系统监控
  • 服务、资源调度
  • 流量调度
  • 状态、数据调度
  • 开发和运维的自动化

image.png

三、微服务PaaS平台

PaaS平台应该具有分布式、服务化、自动化部署、高可用、敏捷以及分层开发的特征,并可与IaaS实现良好的联动。 image.png

  • 服务化是PaaS的本质。软件模块重用,服务治理,对外提供能力是PaaS的本质。
  • 分布式是PaaS的根本特性。多租户隔离、高可用、服务编排是PaaS的基本特性。
  • 自动化是PaaS的灵魂。自动化部署安装运维,自动化伸缩调度是PaaS的关键。

PaaS平台的总体架构

image.png

  • PaaS调度层:PaaS的自动化和分布式对于高可用高性能的管理。
  • PaaS能力服务层:PaaS真正提供给用户的服务和能力。
  • PaaS的流量调度:与流量调度相关的东西,包括对高并发的管理。
  • PaaS的运营管理:软件资源库、软件接入、认证和开放平台门户。
  • PaaS的运维管理:DevOps相关。