分布式系统的技术栈

分布式系统的技术栈

前言

最近在拜读耗子兄-分布式系统技术栈一文,现在记录下自己学到的东西

构建分布式系统的目的

  • 提高整体架构的吞吐量,服务更多的并发和流量。
    • 大流量处理,通过集群技术把大规模并发请求的负载分散到不同的机器上。
  • 提高系统的稳定性,让系统的可用性更高。
    •  关键业务保护。提高后台服务的可用性,把故障隔离起来阻止多米诺骨牌效应(雪崩效应),如果流量过大,需要对业务降级,以保护关键业务

提高系统的性能

  • 缓存系统:缓存分区、缓存更新、缓存命中
  • 负载均衡系统(网关系统):负载均衡、服务路由、服务发现
  • 异步调用:消息队列、消息持久、异步事务
  • 数据镜像:数据同步、读写分流、数据一致性
  • 数据分区:分区策略、数据访问层、数据一致性

缓存系统

  • 可以提高快速访问能力。
  • 从前端浏览器、网络、后端服务、底层数据库、文件系统、硬盘和CPU,全都有缓存。
  • 对于分布式缓存系统,首先需要一个缓存集群,其中需要一个Proxy来做缓存的分片和路由

负载均衡

  • 是做水平扩展的关键技术。

异步调用

  • 通过消息队列来对请求做排队处理,把前端请求进行削峰,后端请求根据自己的处理速度来处理请求。
  • 优点:增加系统的吞吐量
  • 缺点:实时性比较差,同时还会引入消息丢失的问题,所以需要对消息进行持久化,这会造成有状态的节点,从而增加服务调度的难度。

数据分区和数据镜像

  • 把数据按照一定的方式分成多个区,不同的数据来分担不同区的流量,这需要一个数据路由的中间件,会导致跨库Join和跨库事务非常复杂。
  • 数据镜像:把多个数据库备份,多个节点可以提供数据读写功能,节点间在内部实现数据同步。缺点:数据一致性问题。
  • 在初期使用读写分离的数据镜像方式,后期采用分库分表方式。

提高系统稳定性

  • 服务拆分(服务治理):服务调用、服务依赖、服务隔离
  • 服务冗余(服务调度):弹性伸缩、故障转移、服务发现
  • 限流降级:异步队列、降级控制、服务熔断
  • 高可用架构:多租户系统、灾备多活、高可用服务
  • 高可用运维:全栈监控、DevOps、自动化运维

服务拆分

  • 隔离故障
  • 重用服务模块
  • 服务拆分完之后,会引入服务调用间的依赖问题。

服务冗余

  • 去除单点故障,并可以支持服务的弹性伸缩以及故障转移。
  • 对于一些有状态的服务来说,冗余这些有状态的服务会带来更高的复杂性。
    • 当其中一个进行弹性伸缩时,需要考虑数据的复制或重新分片,迁移的时候还要迁移数据到其他机器上。

限流降级

  • 当系统流量超过系统承载时,只能通过限流或者功能降级的方式来处理。

高可用架构

  • 主要时为了不出现单点故障。

高可用运维

  • DevOps中的CI(持续集成)/CD(持续部署)。
  • 应该有一条很流畅的软件发布管线,包括足够的自动化测试,还可以做好相应的灰度发布,以及线上系统的自动化控制。

 

posted @ 2018-04-13 17:02  因为菜,所以要变强  阅读(2002)  评论(0编辑  收藏  举报