随着系统容量要求越来越大,系统可用性要求越来越高,分布式系统几乎已成为现在后端架构设计的必选之路,没有人再会在单体和分布式架构之间纠结了。那么分布式系统带来了哪些优劣势?
优势:
- 模块化、系统模块重用度更高,开发和发布速度可以并行而变得更快
- 系统扩展性更高
- 团队协作流程也得到改善
劣势:
- 架构设计更复杂,尤其是分布式事务
- 系统吞吐量变大,响应时间会变长
- 运维复杂度因为服务变多而变得复杂
- 测试和查错复杂度增大
- 技术多元化,维护和运维复杂度增大
一、分布式系统的发展
-
20世纪90年代前主要是单体架构,软件模块高度耦合。之前的SOA架构其实和单体架构没有太多区别、都是高度耦合在一起。当你调用一个服务时、这个服务会调用另一个服务、然后又调用另一个服务、于是整个系统就转起来了。这个本质上就是比较耦合的做法。
-
2000年左右出现了比较松耦合的SOA架构,这个架构需要一个标准的协议或中间件来联动其它相关的服务(ESB)。服务之间都是通过中间件的标准协议相互依赖,IOC和DIP设计思想就是此架构的实践。
-
在2010年后,出现了微服务架构,这个架构更为松耦合。每个微服务独立完整地运行,后端单体的数据也被微服务架构分散到不同的服务中。而它与传统SOA的差别在于,服务间的整合需要一个服务编排或是服务整合的引擎。
微服务的出现使得开发速度变得更快、隔离性高,但是集成测试、运维和服务管理更加复杂。所以需要一套比较好的微服务PaaS平台。如Spring Cloud、Dubbo等微服务框架,还有Kubernetes提供的各式各样的部署和调度方式。
二、分布式系统的技术栈
构建分布式系统的目的是增大系统容量、提高系统的可用性。也就是完成下面两件事:
- 大流量处理。通过集群技术把大量并发请求的负载分散到不同的机器上。
- 关键业务保护。提高后台服务可用性,把故障隔离起来阻止多米诺骨牌效应。
总体来说一是提高整体架构的性能,服务更多的并发和流量;二是提高系统的稳定性,让系统的可用性更高。
2.1、提高性能
- 缓存系统:有效提高系统的访问能力。
- 负载均衡系统:水平扩展关键技术,让更多机器共同分担一部分流量请求。
- 异步调用:通过消息队列对请求做排队处理、把前端的请求峰值给“削平”了,而后端通过自己能够处理的速度来处理请求。
- 数据分区和镜像:数据分区把数据按一定的方式分成多个区,不同的数据来分担不同区的流量。数据镜像把一个数据库镜像成多份一样的数据,这样就不需要数据路由中间件了。
2.2、提高稳定性
- 服务拆分:一是为了隔离故障、二是为了重用服务模块。
- 服务冗余:去除单点故障,支持服务弹性伸缩,以及故障迁移。
- 限流降级:系统扛不住压力时,通过限流或者功能降级的方式停掉一部分服务,或是拒绝一部分用户,确保整个系统稳定。
- 高可用架构:多租户隔离、灾备多活、或是数据可以在其中复制保持一致性的集群。
- 高可用运维:DevOps的CI/CD(持续集成、持续部署)。
总体来说分布式系统的关键技术,如下:
- 全栈系统监控
- 服务、资源调度
- 流量调度
- 状态、数据调度
- 开发和运维的自动化
三、微服务PaaS平台
PaaS平台应该具有分布式、服务化、自动化部署、高可用、敏捷以及分层开发的特征,并可与IaaS实现良好的联动。
- 服务化是PaaS的本质。软件模块重用,服务治理,对外提供能力是PaaS的本质。
- 分布式是PaaS的根本特性。多租户隔离、高可用、服务编排是PaaS的基本特性。
- 自动化是PaaS的灵魂。自动化部署安装运维,自动化伸缩调度是PaaS的关键。
PaaS平台的总体架构
- PaaS调度层:PaaS的自动化和分布式对于高可用高性能的管理。
- PaaS能力服务层:PaaS真正提供给用户的服务和能力。
- PaaS的流量调度:与流量调度相关的东西,包括对高并发的管理。
- PaaS的运营管理:软件资源库、软件接入、认证和开放平台门户。
- PaaS的运维管理:DevOps相关。