1. 分布式的优与劣
与传统的单体架构相比,分布式系统具有以下优势:
- 增大了系统的容量。我们的业务量越来越大,就需要多台机器来应对这种大规模的应用场景。因此我们可以使用分布式的架构,来垂直或是水平的拆分业务;
- 加强了系统的可用性。我们的业务越来越关键,需要提供整个系统架构的可用性,这样就不能存在单点故障。所以,通过分布式架构来冗余系统,提高系统的可用性;
- 使系统模块化,可以提高模块的重用度,同时系统的扩展性也更高了;
- 提高了开发和发布速度,因为软件服务模块被拆分,开发和发布都可以并行;
不过,世界上不存在完美的技术方案,采用任何技术都有得有失,都是一种trade-off。也就是说,分布式系统在消除上述问题的同时,也给我们带来了其他问题。
- 架构设计变得复杂,尤其是分布式的事务
- 部署变得复杂,一次可能需要部署多个服务
- 随着系统的吞吐量变大,响应时间会变长
- 技术可以多样性,服务变多,运维复杂度会变得很复杂
- 测试和查错的复杂度增大,学习曲线也增大
综上所述的,分布式的优缺点可以概括为下表
选项 | 传统单体架构 | 分布式服务化架构 |
---|---|---|
新功能开发 | 需要时间 | 容易开发和实现 |
部署 | 不经常且容易部署 | 经常部署、部署复杂 |
隔离性 | 故障影响范围大 | 故障影响范围小 |
架构设计 | 难度小 | 难度级系数增加 |
系统性能 | 响应时间快、吞吐量小 | 响应时间慢、吞吐量大 |
系统运维 | 运维简单 | 运维复杂\ |
技术 | 技术单一且封闭 | 技术多样性且开放 |
测试和查错 | 简单 | 复杂 |
系统扩展性 | 扩展性差 | 扩展性好 |
系统管理 | 重点在于开发成本 | 重点在于服务治理和调度 |
分布式的难点在于系统的设计,以及管理和运维。所以,分布式在架构在解决“单点”和“性能容量”问题的同时,也新增了一堆的问题。对于这些新增的问题,就需要各式各样的技术和手段来解决。
2. 分布式的关键技术
从2010年后,出现了微服务的架构,使分布式更进一步的发展,它为构造分布式的计算应用程序提供了更好的方法。这种架构更加的松耦合,每个微服务都能独立完整的运行,后端单体的数据库也被分散到不同的服务中。在服务间通过一个引擎进行服务编排或整合,一般这种引擎可以是工作流引擎,也可以是网关。再加上像容器化的调度技术(如Kubernetes)的辅助,使的分布式在当下变得更加流行。
分布式系统有以下五个关键技术:
- 全栈系统监控
- 服务/资源调度
- 流量调度
- 状态/数据调度
- 开发和运维的自动化
而最后一项—开发和运维的自动化,是需要把前四项都做到了,才有可能实现的。所以,最为关键的是下边四项技术,即应用整体监控、资源和服务调度、状态和数据调度及流量调度,它们是构建分布式最最核心的东西。