分布式系统
开发了几年的分布式系统,对其原理模模糊糊。大量的时间在研究场景下解决方案。并未深入总结过。本文梳理个人对分布式的认知理解。
- 在没有系统学习分布式相关知识的情况,通常选择针对局部场景需求进行认知下 - 局部最优解决。处理问题也没有十足的把握,在系统稳定性上只能通过case by case的方式处理。
- 解决单机性能瓶颈。 
- 解决数据增加运维成本。 

分布式理论
- CAP
- BASE
- ACID
分布式计算
网络异步
- 本地调用 
- 远程调用 - 请求超时机制 
- 响应超时机制 
- 幂等性 
- 重试机制 
 
无状态服务
- 协同工作 - 分布式锁
- 系统时钟 - 墙上时钟
- 系统时钟 = 本地时间 = 时间服务器的返回时间 + 时间服务器响应的网络时延
 
 
负载均衡
- 轮询
- 权重
- Hash
- 一致性Hash
- FAIR
配置中心
- 统一配置文件
- 降低运营出错率
系统雪崩
- 快速失败 - 熔断机制
 
- 降级机制 - 限流
 
- 弹性扩容 增加系统服务能力 - Docker
- k8s
 
可观测性
- 分布式系统监控
- 分布式追踪Trace
- 异常告警机制
- 运行指标可视化
故障恢复
- 混沌工程
分布式存储
分布式事务
- 并发事务排序
- 分布式主键
分布式锁
- Mysql
- Redis
- Zookeeper
- Etcd
数据分片
- Hash
- Region
数据复制
- 主重复制
- 一致性协议 - Raft
- Paxos
 
- 去中心 - Quorum
- Vector Clock
 
- 一致性级别 - 线性一致性
- 顺序一致性
- 最终一致性
 
数据存储
- 分布式文件存储 - HDFS
- GFS
 
- 分布式消息列队 - Kafka
- Pulsar
- RocketMq
 
- 分布式缓存 - Redis Cluster
 
- Sql - Mysql
- Sharing机制
 
- NoSql - Redis
 
- NewSql - TiDB
 
数据清洗
- OLTP 联机事务处理 - 对数据进行增删改查,SQL 查询优化,事务处理等就属于 OLTP 的范畴。它对实时性要求高,需要将用户的数据有效地存储到数据库中,同时有时候针对互联网应用的需求。需要设置数据库的主从架构保证数据库的高并发和高可用性。
 
- OLAP 联机分析处理 - 对已经存储在数据库中的数据进行分析,帮我们得出报表,指导业务。它对数据的实时性要求不高,但数据量往往很大,存储在数据库(数据仓库)中的数据可能还存在数据质量的问题,比如数据重复、数据中有缺失值,或者单位不统一等,因此在进行数据分析之前,首要任务就是对收集的数据进行清洗,从而保证数据质量。
 
分布式监控
监控系统在分布式场景下是非常重要切容易被忽视的一个环节,正确运用,它在故障事发前进行告警、在故障期间定位问题、在故障事后复盘。
监控的模式
监控贯穿了应用系统整个生命周期,可以归纳为系统、业务、数据三大监控板块。
业务监控
- 定义业务指标。通过对业务进行埋点、数据统计的方式对业务情况反馈,比如ORI场景计算等等。
应用监控
- 通过第三方探针或者内省的方式,将应用当前的运行特征暴露出来。比如通过端口等方式暴露运营信息比如SpringBoot Actuaotr 对应用运行特征暴露。Skywalking 通过探针对应用之间的链路处理过程进行暴露。
系统监控
- 对物理主机、容器系统层面进行监控,比如CPU利用率、内存利用率、硬盘使用等等操作系统。
监控的方式
- 健康检查监控 - 对应用、中间件本身进行监控,比如心跳、运行特征状态等等。
 
- 日志监控 - 对应用、中间件日志进行监控,通过异常日志等信息告警或者其他处理。ELK相关解决方案。
 
- 调用链监控 - 应用、中间件之间存在调用、被调用的场景,对业务执行的时间、调用应用、中间件等信息进行记录。便于系统优化、故障排查等。Skywalking APM相关产品解决方案。
 
- 指标监控 - 建立不同的指标体系,对应用、中间件、操作系统运行信息聚合计算后,反应出一些重要的指标趋势。Prometheus、时序数据库等相关组合配合。