分布式系统
开发了几年的分布式系统,对其原理模模糊糊。大量的时间在研究场景下解决方案。并未深入总结过。本文梳理个人对分布式的认知理解。
在没有系统学习分布式相关知识的情况,通常选择针对局部场景需求进行认知下
局部最优解决
。处理问题也没有十足的把握,在系统稳定性上只能通过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、时序数据库等相关组合配合。