- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
饿了么zk多活方案
展开查看详情
1 .zookeeper多活實踐 主講⼈人:趙⼦子明 2017.08.11
2 . 餓了了麼簡介 願景:以創新科技打造全球領先的本地⽣生活平台 主營業務:外賣、商超、即時配送、餐飲供應鍊鍊等 業務覆蓋城市/地區:2000+ C端⽤用⼾戶: 2.6億 B端商家: 130萬 註冊配送員:300萬 訂單量量:千萬級
3 .Make Everything 30’
4 .目錄: 1.zookeeper簡介 2.多活下的挑戰 3.⽅方案&組件簡介 4.難點解析 5.運維技巧
5 . zookeeper簡介 ⾼高可靠的分佈式協調服務,為分佈式⽽而⽣生 使⽤用zab協議(改進版/簡化版的Paxos協議) 使⽤用場景:數數據發布訂閱(配置管理理),命名服務,集群管理理,分佈式鎖等 廣泛應⽤用在⼤大數數據,微服務等場景下 hadoop kafka storm dubbo等 ⼀一個帶通知功能的存儲!
6 .集群需要奇數數節點 ⼀一個事務需n/2+1節點投票 Quorum 必須超過⼀一半多機器器可⽤用,集群才可⽤用
7 . /serviceA IP1 IP2 服务注册中⼼心(zookeeper) 2.獲取服務註冊信息 監聽變化 1.註冊服務信息 4.變更更通知 服务消费者 服务提供者 3.調⽤用服務 服務註冊發現:餓了了麼zookeeper最重要的使⽤用場景
8 . 餓了麼多活 異異地多機房數數據分⽚片+按POI做流量量分發,隨時可容災切換 數數據:多寫+實時雙向複製 流量量:按POI做流量量分發+可全局切換 服務:每個機房提供完整交易易服務鏈路路,機房內調⽤用閉環 萬台服務器器,千個⼯工程師
9 . 多活概覽 API Gateway A机房 B机房 ezone1 ezone2 交易易服务集群 sharding1 sharding1 交易易服务集群 调⽤用闭环 调⽤用闭环 sharding2 sharding2 global zone 服务(写) 服务(读) master slave
10 . 多活下的服務調用 A机房 B机房 ServiceA Proxy GZS Proxy ServiceB ServiceB 核⼼心交易易鏈路路服務調⽤用閉環(下單) 其他服務跨機房調⽤用(⽤用⼾戶積分)
11 . 多活對zookeeper的要求 任何⼀一个机房出问题,其他机房内zookeeper可⽤用(超過⼀一半多機器器 可⽤用連接),服务可调⽤用! 正常情況下可以跨機房調⽤用
12 .Zookeeper常⽤用部署⽅方案在多活中有什什麼問題?
13 .常⽤用部署⽅方案: 1.主機房voter 其他機房observer 2.多機房voter 3.多機房多集群 注: voter是參參與投票的節點(leader/follower)
14 . voter+observer部署方案 B机房 A机房 ob1 voter1 C机房 ob2 ob4 voter2 ob3 ob5 voter3 ob6
15 .問題 : 寫延遲適中(事務只在⼀一個機房投票完成) observer機器器讀延時⼤大 voter所在機房有問題,其他所有機房zookeeper 都不不可⽤用
16 . 多voter部署方案 A机房 B机房 C机房 voter1 voter4 voter6 voter2 voter5 voter7 voter3 N1=(N-1)/2 N2= 1~(N-N1)/2 N3=N-N1-N2 3 2 2 ⼀一個機房有問題,其他兩個機房超過⼀一半機器器連接,服務可⽤用
17 .問題: 寫延遲⼤大(事務需在多個機房間投票完成) 個別機房讀延遲⼤大 ⼀一個機房掛掉或網絡問題,其他兩個機房可⽤用
18 .我們需要可⽤用性更更⾼高的⽅方案!
19 . zookeeper多活方案 A机房 B机房 voter1 voter1’ voter2 voter2’ voter3 voter3’ 優先保證機房內部可⽤用 多機房獨⽴立集群+數數據雙向同步
20 . 组件简介 zk(B1) zk(B2) zk(B3) zk(A1) zk(A2) zk(A3) B机房 zk(Publisher) A机房 replicator MQ
21 . publisher publisher 在zookeeper observer基礎上擴展 observer 接收leader發來來的事務並發送到mq中 mq pub
22 . replicator zk(sid=1) zk(sid=2) 消費消息+寫⼊入zookeeper 可訂閱多個topic zkclient zkclient 只寫到固定機器器上 sub1 sub2 ⽬目標zookeeper需要配置超級權限 topic1 topic2
23 . MQ B机房 和publisher同機房部署,跨机房sub sub 選運維同學熟悉的mq ⽀支持持久化 A机房 pub MQ C机房 sub
24 .這個方案(組件)第一大難點: 循環複製
25 . Txn1 DataBaseA DataBaseB Txn1’
26 . 午休帶來了靈感:找到標識過濾 app zk4(L) zk3(F) zk2(O) zk1(O) zk1(O) zk2(O) zk3(F) zk4(L) zk(Publisher) replicator replicator zk(Publisher) sid>2 sid>2 MQ MQ 根據sessionId中的機器器號區分內外數數據
27 .第二大難點: 事務連續性 超過500條,觸發leader -> publisher之間內存鏡像全量量同步,會丟失中間狀狀態!
28 . Quorum歸併方案 zk1 zk2 zk3 log log log log log log 归并 MQ publisher
29 . 運維技巧 連接串串 Domain > IP(切換⽅方便便) 最多5個節點,擴容⽤用observer 無影響集群擴容:⼀一台台增加myid ⾼高於voter集群的observer