波波分布式架构设计
- 难点:缺乏大规模和量级环境,更新迭代快
- 收获:PMQ2.0 ,设计大型系统,CDS/CQRS,迁移,双活,多活,架构师成长路径指南,避免重武器,第一原则:复杂性和成本
- 问题:service mesh
- 分布式系统设计5个重要步骤,mq概念和原理
- 四大难题:数据一致性分发,数据聚合join,分布式事务,单体应用解耦拆分
- 高并发大容量可扩展cache服务
- 精细化服务治理,service mesh选型
- 最小可用架构
- 架构师如何高效学习
- 系统设计面试案例 System design interview
- 功能和非功能需求-高可用,高性能,量级,高并发,写入到读取时延,近实时
- 基本流式计算思想
- 分布式计数服务:需求明确-主动沟通,谁用,如何用,量级规模,qps,tps,性能需求-时延,成本。
- 数据存储:单个时间和聚合存储,skillset,sharding sphere,cassandra-适合时间序列数据存储-wide row
- 详细设计:aggregation,预聚合+批处理,pull-mq流量削峰 push,dead-letter queue 重试,data enrichment,kafka stream。
- 接收路径设计:api gateway 如何实现负载均衡,如何实现网关实时防爬虫。
- object store 冷数据归档,distributed cache-近期热点数据
- 进一步考量:性能,多线程问题,jvm监控,队列监控,日志监控,metrics监控,tracing,系统数据准确性,线下批处理和实时流计算-Lambda Architecture,热分区问题,监控慢消费者。欺诈检测系统,限流系统,推荐系统,今日热点。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4NiqBQb9-1618535276044)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210330173906034.png)]
PMQ
-
mq核心概念和原理
-
设计实现简化版kafka
-
mq学习和治理的最佳实践
-
自研PMQ
- redis内存撑爆
- kafka慢消费
- 微服务化
- EDA事件驱动架构
- 研发资源稀缺
- 改开源代码,不要造轮子
- 定制扩展复杂
- 新人抓手 bigqueue luxun Hermes
- 设计目标:简单-不丢消息-高性能-可扩展-隔离性-监控治理-日亿级消息处理能力
- At least once 消费语义
- topic语义 fanout扇出语义 queue语义
- 数据存储大胆采用mysql,一个分区一个表实现隔离
- 拉模式consumer有更好隔离性,broker无状态方便扩展,pull模式是大型分布式企业级消息消费模式的最佳实践
- producer使用hash机制保证业务相同可以发往同一分区
- standby消费者
- lag堆积监控 burrow 头尾指针距离,分区扩容或者增加消费者
- 支持主题级别的私信队列
- 消息轨迹可视化 nice to have 需求
- https://github.com/ppdaicorp/pmq
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZemlL50k-1618535276047)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401104435763.png)]
-
kafka动态重平衡 stw效应优化
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jujvDdir-1618535276048)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401102344746.png)]
-
batch size 治理实践:研发自主治理,lag监控告警,动态偏移调整,失败消息处理-dead letter,线上测试 + 监控 https://github.com/linkedin/kafka-monitor
微服务数据一致性和事务问题
-
微服务的四大核心难题
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yq5mzIDI-1618535276052)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401110510967.png)]
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tXu77pF5-1618535276054)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401110613818.png)]
-
信息量很大,技术前沿
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yh4KlyWh-1618535276056)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401142808561.png)]
-
状态相关难题
-
数据一致性分发:
- CQRS 去数据库join
- 数据分发到其他感兴趣的其他服务
- 异构系统
- 事务性发件箱 transactional outbox:新增outbox table – message relay定期拉取 outbox – publish mq killbill项目outbox参考实现 https://github.com/killbill/killbill-commons/tree/master/queue
- reaper机制收割机
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VERWZ8RG-1618535276056)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401144425565.png)]
- 变更数据捕获 change data capture CDC
- commitlog whl
- Transaction Log – Transaction Log Miner 高可用部署 – mq
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpd4Dy9P-1618535276057)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401144844442.png)]
- CDC企业级开源项目:阿里canal, redhat debezium,Zendesk Maxwell,Airbnb SpinalTap
- Eventuate-Tram:DDD,CQRS,CDC
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sySWs4g8-1618535276058)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401145015163.png)]
- Single Source of Truth 非权威的read-only
-
微服务聚合join问题
- BFF 聚合服务层 Backend for Frontend
- N+1 问题
- 数据量问题
- 性能开销
- 数据分发增量数据和预聚合缓存-物化视图
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m26ylBsd-1618535276059)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401201224550.png)]
- 命令查询职责分离模式 Command Query Responsibility Segregation
- Denomalize
- 关键字查询用es
- kv用redis Cassandra
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2jRaNgsJ-1618535276061)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401201422926.png)]
- 服务层的读写分离
-
分布式事务
-
Atomicity Consistency Isolation Durability
-
Read Uncommitted , Read Committed , Repeatable Reads , Serializable
-
Atomikos /Apress/practical-microservices-architectural-patterns/tree/master/Christudas_Ch13
-
Consistency Availability Partitioned-多个子系统直接通过网络通信
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z24wIltz-1618535276062)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401203330201.png)]
-
业务场景建模
-
saga:协同式-无指挥,编排式-补偿取消,大规模分布式系统推荐使用
-
cadence
- orchestration engine 流程编排 asynchronous long-running
- 通用的工作流引擎
- activity worker, workflow starter,workflow worker
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G6pZftyu-1618535276062)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401205718558.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJLoyzAF-1618535276063)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401205832965.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZQdHCbxS-1618535276065)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401205932790.png)]
- 重试策略
- /uber/cadence-web
- /uber/cadence-java-samples
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TUr6oIKV-1618535276066)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401210846307.png)]
- Ringpop 组成员协议
-
seata
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jN1sfjaR-1618535276067)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401204257405.png)]
- TC Transaction Coordinator
- TM Transaction Manager
- RM Resource Manager
- XID
- @GlobalTransactional
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rzqw95eZ-1618535276068)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401205029301.png)]
-
-
解耦拆分信号
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uhYfJxkk-1618535276069)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401211853395.png)]
- https://www.youtube.com/watch?v=zVJSTMD6zg0
- DB迁移技术:双写
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nHKmeU2P-1618535276070)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401212638993.png)]
- 接口收口:不要直接访问数据库,增加防腐层
- 数据分发去join:CDC 服务双写,数据补偿和比对
- 计划,梳理,沟通,监控
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8pgDt4YE-1618535276071)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401213048138.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ESQBHFdf-1618535276071)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401213409493.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-366IVey8-1618535276072)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210401213448879.png)]
-
-
https://netflixtechblog.com
-
seata-强一致性短事务 uber的cadence-异步编排方案-长短事务都支持-首选
-
分享系统拆分和CQRS/CDC技术企业落地案例
高并发无状态的会话缓存服务-携程SessionService
-
消除粘性有状态会话-Sticky Session
-
LB负载不均衡,应用和负载均衡器耦合,单点问题,难以水平扩展,跨数据中心HA。
-
粘性会话,cookie,共享session,集中式session
-
增量渐进
-
架构设计目标:
- 消除SS,支撑Scale Out,高并发,高性能99.99%<10ms,HA,透明扩容,透明升级,支持跨数据中心,接入简单-发布机制自动更新依赖包,监控和运维友好-细粒度的监控数据是后续性能调优和容量规划的依据
- ASP.NET State Server Protocol
- Thrift IDL 具有跨语言特性,基于二进制通讯
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4fSaJxBt-1618535276074)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210409172500864.png)]
- 缓存写后 Async Write Behind to DB
- Eureka Peer sync协议实现跨数据中心
- EVCache双写 x-pipe跨数据中心双向同步
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hr05Y5lx-1618535276075)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210409173428319.png)]
- LRUCache设计
- hashmap + 链表记录时间
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XHu14v5H-1618535276076)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210409174256537.png)]
- Yahoo HaloDB
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-woBKi65y-1618535276077)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210409174627802.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hg34130A-1618535276077)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210409174721446.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G4b43SeM-1618535276081)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210409174958858.png)]
- 隔离失败域
- 单元和测试学习bigcache代码
-
-
healthchecks.io SAAS
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MhMt8KOE-1618535276082)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210409181252028.png)]
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SiqswQAN-1618535276084)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410203510569.png)]
-
定时任务监控,一体化监控,定制自研健康检查服务
-
防攻击、防爬虫措施。
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gwWsrZe0-1618535276085)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410204741039.png)]
-
https://blog.healthchecks.io
-
https://github.com/getsentry
-
轻量级的延迟任务队列设计
-
Kagkarlsson/Db-scheduler
-
Cron-util 工具类
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sgxCW1QA-1618535276086)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410210023944.png)]
-
fencing token 栅栏令牌锁
-
Shedlock
-
令牌桶算法弊端:流量不够平滑,可以设置固定时间内流量限制,漏桶算法可以避免
-
Hystrix滑动窗口技术器优化固定窗口技术算法
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LTGLK8J0-1618535276087)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410211704468.png)]
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DPRzOiaQ-1618535276088)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410211803380.png)]
-
设计一个分布式TopK系统
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Im2pGAH-1618535276088)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410212105184.png)]
-
近实时的流处理方案
-
小顶堆实现topK PriorityQueue 性能远远好于全排序
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ECNPx0h7-1618535276089)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410212755356.png)]
-
-
精细化服务治理 ServiceMesh解析 服务网格技术
-
ServiceMesh是微服务的未来
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2gUETvC1-1618535276091)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410213040695.png)]
-
Service Governance
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VTKTHm2W-1618535276092)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410213215346.png)]
-
形成良性反馈闭环
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U1an9x5j-1618535276093)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410213412231.png)]
-
精细化服务治理 nice to have
-
dubbo借鉴finagle
-
Airbnb SmartStack 是ServiceMesh雏形
-
容器技术降低了边车服务部署和治理的难度
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-98X6VViR-1618535276097)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410214220561.png)]
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6VeUXS4P-1618535276097)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410214320609.png)]
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3AHOWSTL-1618535276100)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210410214548900.png)]
-
谷歌趋势
-
Envoy Proxy
- CNCF支持高性能反向代理中间件
- c++开发具有较好性能
- graceful restart 热重启
- Http filter chan
- 基于事件环的非阻塞型线程模型 main thread 、worker threads、file flush threads
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hW3PdbXk-1618535276100)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210411064800721.png)]
- ingress入口监听器 egress出口监听器
- envoy在lyft的实践
- xDS API Envoy manager service
- Istio 是servicemesh标准的控制平面和配置管理方案
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UbDHRBMq-1618535276101)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210411223020434.png)]
- Istio v1.6
- istiod
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ffUjXrKM-1618535276102)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210411223202060.png)]
- 精细化流量治理能力
- 金丝雀和灰度发布,beta测试,AB测试
- VirtualService 虚服务
- DestinationRule 目标规则
- kiali可视化组件
- istio接管k8s service服务发现功能
- ingress, istio-gateway选型
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iWbUW90E-1618535276102)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210411223940027.png)]
- K8s 核心网略概念和组件
- 屏蔽pod 动态ip
- userspace Proxy mode
- iptables mode提升转发效率
- IPVS mode支持更大规模集群
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Ps3uol2-1618535276103)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210412115858387.png)]
- nodeport 暴露端口给外网
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6BxfwTyL-1618535276107)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210412120001744.png)]
- 加上四层Load balance
- 七层反向代理Ingress,支持多种路由方式,暴露多个服务
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NqmNtqWp-1618535276108)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210412120229562.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VP3rIhyQ-1618535276109)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210412120324304.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P7okczUu-1618535276109)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210412120605584.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0FY1fGJv-1618535276110)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210412120706881.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1zdrX0kE-1618535276113)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210412120820681.png)]
- springcloud istio k8s如何集成
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p32AZMO1-1618535276113)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210412120929926.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5lRkXhey-1618535276114)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210412121158672.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PeAUeYNt-1618535276115)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210412121349295.png)]
- 目前比较前卫的微服务技术中台架构
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eOXny4wv-1618535276115)(/Users/sunjc/Library/Application Support/typora-user-images/image-20210412121608255.png)]
-