分布式系统的技术栈
前言
最近在拜读耗子兄-分布式系统技术栈一文,如今记录下本身学到的东西前端
构建分布式系统的目的
- 提升总体架构的吞吐量,服务更多的并发和流量。
- 大流量处理,经过集群技术把大规模并发请求的负载分散到不一样的机器上。
- 提升系统的稳定性,让系统的可用性更高。
- 关键业务保护。提升后台服务的可用性,把故障隔离起来阻止多米诺骨牌效应(雪崩效应),若是流量过大,须要对业务降级,以保护关键业务
提升系统的性能
- 缓存系统:缓存分区、缓存更新、缓存命中
- 负载均衡系统(网关系统):负载均衡、服务路由、服务发现
- 异步调用:消息队列、消息持久、异步事务
- 数据镜像:数据同步、读写分流、数据一致性
- 数据分区:分区策略、数据访问层、数据一致性
缓存系统
- 能够提升快速访问能力。
- 从前端浏览器、网络、后端服务、底层数据库、文件系统、硬盘和CPU,全都有缓存。
- 对于分布式缓存系统,首先须要一个缓存集群,其中须要一个Proxy来作缓存的分片和路由
负载均衡
异步调用
- 经过消息队列来对请求作排队处理,把前端请求进行削峰,后端请求根据本身的处理速度来处理请求。
- 优势:增长系统的吞吐量
- 缺点:实时性比较差,同时还会引入消息丢失的问题,因此须要对消息进行持久化,这会形成有状态的节点,从而增长服务调度的难度。
数据分区和数据镜像
- 把数据按照必定的方式分红多个区,不一样的数据来分担不一样区的流量,这须要一个数据路由的中间件,会致使跨库Join和跨库事务很是复杂。
- 数据镜像:把多个数据库备份,多个节点能够提供数据读写功能,节点间在内部实现数据同步。缺点:数据一致性问题。
- 在初期使用读写分离的数据镜像方式,后期采用分库分表方式。
提升系统稳定性
- 服务拆分(服务治理):服务调用、服务依赖、服务隔离
- 服务冗余(服务调度):弹性伸缩、故障转移、服务发现
- 限流降级:异步队列、降级控制、服务熔断
- 高可用架构:多租户系统、灾备多活、高可用服务
- 高可用运维:全栈监控、DevOps、自动化运维
服务拆分
- 隔离故障
- 重用服务模块
- 服务拆分完以后,会引入服务调用间的依赖问题。
服务冗余
- 去除单点故障,并能够支持服务的弹性伸缩以及故障转移。
- 对于一些有状态的服务来讲,冗余这些有状态的服务会带来更高的复杂性。
- 当其中一个进行弹性伸缩时,须要考虑数据的复制或从新分片,迁移的时候还要迁移数据到其余机器上。
限流降级
- 当系统流量超过系统承载时,只能经过限流或者功能降级的方式来处理。
高可用架构
高可用运维
- DevOps中的CI(持续集成)/CD(持续部署)。
- 应该有一条很流畅的软件发布管线,包括足够的自动化测试,还能够作好相应的灰度发布,以及线上系统的自动化控制。