背景
分布式架构理论的诞生互联网的高速发展,归纳要点如下:
- 高配置的服务器成本太高。
- 应用规模变大,变的复杂起来。
- 性能问题越来越迫切,严重影响了用户的体验,互联网平台是注重用户体验,用户至上。
- 单体应用软件维护成本太高。
- 部署效率低下。
- 代码复用程度低。
定义与术语
分布式架构是指由多个能独立部署的子系统基于网络通讯协议,相互协同来完成业务流程的架构模式。
网络具有三种状态:成功、失败、超时。
面临的技术挑战
业务场景需求:
- 多份相同的数据,在一处修改,保证多份一致。
- 一个业务变更多份不同的数据,要保持一致,要成功都成功,要失败都失败。
传统的单体架构中,应用之间不存在基于网络通讯的问题,集群是无状态的,除了会话状态,而分布式架构中,高并发的场景下,保证各节点数据的一致性比较复杂,复杂的原因:
- 节点规模大
- 节点之间相互通讯
- 节点管理要求高
- 一致性难度
针对此问题,提出了以下解决思路:
时钟
- 原子钟
- 向量时钟
- 逻辑时钟
通过时钟解决时间的一致性,再通过时间的一致性来保证执行的顺序性。
网络模式
- 同步网络
- 节点同步执行
- 消息延迟低
- 全局锁
- 半同步网络
- 节点同步执行
- 消息延迟中
- 全局锁条件放宽
- 异步网络
- 节点独立执行
- 无全局锁
- 消息延迟高
理论与算法
理论
- 分布式一致性:CAP理论
- 弱一致性:BASE理论
- 强一致性:ACID理论
- 二阶段协议:2P理论
- 三阶段协议:3P理论
算法
- Paxos
- Raft
核心技术
注册中心
- eureka
- consul
- nacos
配置中心
- config
- nacos
网关中心
- zuul
- gate way
- soul
负载均衡
- ribbon
- nginx
分布式跟踪
- skywalking
熔断降级 限流
- hystrix
- turbine
- ribbon
- sentinel
监与控日志
- Telegraf+InfluxDB+Grafana+SLS
调度
- xxl-job
安全
- SpringSecurity+Oauth2+Jwt
持续集成
- maven+Git+teamcity+ansible+docker+k8s
全栈中间件
数据库
- 关系数据库
- MySQL
- 时序数据库
- Influxdb
- Druid
- 列数据库
- hbase
- 文档数据库
- elasticsearch
- mongodb
消息队列
- rabbitmq
- activemq
- kafka
- pulsar
缓存
- redis
- couchbase
计算
- hadoop
- spark
- flink
架构原则
高可用
1.负载 2.限流 3.降级 4.熔断 5.隔离 6.重试 7.回滚 8.压测
高并发
1.缓存 2.队列 3.异步 4.池化 5.拆分