分布式系统的技术栈

构建分布式系统的目的是增加系统容量,提高系统的可用性。说白了就是干两件事。一是提高整体架构的吞吐量,服务更多的并发和流量,二是为了提高系统的稳定性,让系统的可用性更高。
1、如何提高整体架构的吞吐量,服务更多的并发和流量?
1) 提高系统性能的常用技术

  • 缓存系统:在分布式系统中,添加缓存可以有效提高系统的访问能力;
  • 负载均衡:负载均衡可以使用多台机器来共同分担一部分流量请求,从而增加系统的横向扩展能力;
  • 异步调用:异步系统通过消息队列来对请求做排队处理,从而增加系统的吞吐量(但这会损失了一定的实时性以及增加数据的风险);
  • 数据镜像:把数据复制多份,通过不同的客户端处理请求(多个节点可能会出现数据一致性问题);
  • 数据分区:把数据按一定的方式分成多个区,按不同的区域处理请求(这会增加系统的复杂度)。
对于一般公司来说,在初期,会使用读写分离的数据镜像方式,而后期会采用分库分表的方式。
 
2、如何提高系统的稳定性,让系统的可用性更高?

  • 服务拆分:主要为了隔离故障和重用服务模块(但会引入服务间调用依赖问题);
  • 服务冗余:可以去除单点故障,支持弹性伸缩,故障迁移(对于“有状态”的服务实现起来会比较复杂);
  • 限流降级:损失小部分,保全整体的措施(当系统压力扛不住时,通过限流或者功能降级的方式停掉部分服务,或拒绝部分用户,确保整体架构不会挂掉);
  • 高可用架构:从冗余架构的角度保障可用性。如:灾备多活;
  • 高可用运维: 具备足够流畅的软件发布能力、足够多的自动化测试、相应的业务灰度发布,以及线上系统的自动化控制(故障自愈),如:DevOps中的CI/CD(持续集成/持续发布)。
 
3、构建分布式系统的关键技术

构建分布式系统有五个关键技术,它们分别是:

  • 全栈系统监控;
  • 资源 / 服务调度;
  • 状态 / 数据调度;
  • 流量调度;
  • 开发和运维的自动化(把前四项都做到了,才有可能实现)。

  • 整体架构监控:如果没有一个好的监控系统,那么自动化运维和资源调度管理只可能成为一个泡影,因为监控系统是你的眼睛。没有眼睛,没有数据,就无法进行高效的运维。所以说,监控是非常重要的部分。这里的监控需要对三层系统(应用层、中间件层、基础层)进行监控;
  • 资源调度管理:应用层的自动化运维需要基础层的调度支持,也就是云计算 IaaS 层的计算、存储、网络等资源调度、隔离和管理;
  • 架构软件管理:服务之间有依赖,而且有兼容性问题,所以,整体服务所形成的架构需要有架构版本管理、整体架构的生命周期管理,以及对服务的编排、聚合、事务处理等服务调度功能;
  • DevOps:分布式系统可以更快速地更新服务,但是对于服务的测试和部署都会是挑战。所以,还需要 DevOps 的全流程,其中包括环境构建、持续集成、持续部署等;
  • 自动化运维:有了 DevOps 后,我们就可以对服务进行自动伸缩、故障迁移、配置管理、状态管理等一系列的自动化运维技术了;
  • 服务治理:服务拆分、服务调用、服务发现、服务依赖、服务的关键度定义......服务治理的最大意义是需要把服务间的依赖关系、服务调用链,以及关键的服务给梳理出来,并对这些服务进行性能和可用性方面的管理;
  • 流量控制:最后是我们的流量控制,负载均衡、服务路由、熔断、降级、限流等和流量相关的调度都会在这里,包括灰度发布之类的功能也在这里。
通过 Docker 以及其衍生出来的 Kubernetes 之类的软件或解决方案,大大地降低了做上面很多事情的门槛。
4、思考
1)读写分离的数据镜像方式和分库分表具体如何做?
2)Docker和Kubernetes可以很方便的提供(整合)以上哪些能力?
 
5、参考资料
1)、《分布式系统的技术栈》
posted @ 2023-05-17 16:33  hlc-123  阅读(133)  评论(0编辑  收藏  举报