天天看點

百度賬号系統國際化實踐

在全球一半以上的國家成為家喻戶曉的品牌,是百度重要戰略目标之一。作為百度使用者産品體系最重要的基礎服務,百度賬号系統最早開始了國際化步伐。

從産品層面,國際化賬号系統需要支援同一個使用者在不同的國家登入并使用百度的服務。技術角度則要求使用者個人資料全球互通,且包括使用者ID和使用者名在内的競争性資源配置設定全球唯一。而國際鍊路傳輸時延以及穩定性則是系統設計面臨的關鍵問題。本文介紹了百度賬号系統國際化架構在資料跨IDC互通和分布式送出及沖突解決方面的實踐。

賬号系統中的使用者ID和使用者名是兩種有嚴格一緻性要求的資源。其中使用者名由使用者向系統提出申請,系統确定該資源的配置設定;而使用者ID則對使用者不可見,由系統内部配置設定。兩者都是全局唯一,形成一對一映射,并且該映射需要在使用者注冊的時候實時生成。這兩個資源的無沖突實時配置設定是需要解決的關鍵問題。而一旦使用者注冊成功,後續使用者資料的修改,則天然具有按照使用者劃分的時序性和地域特性,不會存在嚴重的沖突問題。

根據CAP理論,分布式系統中強一緻性和高可用性不可兼得。而在跨國IDC組成的分布式系統中,鍊路傳輸時延以及鍊路穩定性帶來的問題比地區性的分布式系統更為嚴重。如果要追求使用者資料資源的強一緻性,則必然影響服務的可用性。是以解決該問題的關鍵,是在可用性和一緻性方面有所取舍,然後根據業務特性采取相應的措施彌補犧牲的那一方。

為了保證使用者ID和使用者名資料的一緻性,一種方案是在使用者提出注冊申請時,采用集中送出、集中配置設定的方式,所有的請求都同步發送到資源配置設定中心節點,通過完整的ACID語義實作資料更新的強一緻性,保證資源配置設定無沖突。但是這個方案将導緻系統可用性無法滿足系統需求,特别是在傳輸鍊路故障時,将導緻中心節點外其他IDC的服務不可用。

在高一緻性和高可用性之間,我們再一次選擇了高可用性。本方案采用分布式送出和配置設定 + 異步互通 + 中心式異步沖突解決的方案,在各IDC内部獨立完成更新送出和資源配置設定,保證了本地服務的高可用性;而分布式資源配置設定帶來的沖突,則通過中心節點異步解決,實作全球化多IDC中使用者資料多副本的最終一緻性。

為了實作全局唯一的分布式使用者ID無沖突配置設定,系統采用pre-allocated兩階段動态配置設定的思想。全局ID資源維護在資源配置設定中心,各國際化IDC按照需求先向資源中心申請批量ID資源,再由IDC向使用者實時配置設定獲得的ID資源。通過資源配置設定中心控制使用者ID在IDC之間的無沖突配置設定,確定一緻性。此時仍然存在中心控制節點,但由于向控制中心申請批量ID的過程獨立于使用者申請ID的過程,不再有實時性的要求,其時機可以按需靈活調整,實際運作時并不會影響到系統的可用性。

使用者在注冊時需要實時形成ID到使用者名的雙向唯一映射。和使用者ID不同的是,使用者名資源無法由系統預先在IDC之間配置設定,而是在使用者注冊時實時配置設定。使用者名雖然在不同的國家、不同的語言之間會有天然的分界,但是英文的使用者名資源則在全球範圍記憶體在極大可能性的沖突。

對于類似資料更新的沖突解決方案,業界有Megastore系統采用的paxos這樣在送出階段協商達成一緻性的方式,也有Dynamo系統采用的讀時解決沖突的方式。Paxos在送出階段通過所有可用節點多次協商在majority節點間達成一緻確定沒有沖突,但是也帶來了送出時延以及可用性問題,會對使用者注冊這樣實時性要求較高的業務産生使用者體驗的影響。而Dynamo采用的讀時解決沖突的方案則無法及時發現已經被占用的使用者名資源,會增加原本可以避免的資源配置設定沖突。

系統采用了介于Megastore和Dynamo之間的沖突解決方案,由中心節點異步解決沖突。各IDC送出更新至本地,確定本地服務可用,然後異步将更新資料同步到中心節點,中心節點實時解決沖突,并将結果回報給送出方。這樣既確定本地服務的高可用性,同時又準實時的解決了資料沖突。如果中心節點不可用,各IDC仍然可以提供服務,在中心節點恢複後,借助可自動化資料恢複的互通中間件完成資源的沖突解決。

互通中間件在整個架構中的作用至關重要。在IDC内部,系統支援完整的ACID語義。本地送出完成後,通過中間件異步傳輸到其他IDC。系統使用了百度開發的異步消息隊列系統,通過write-ahead log支援更新資料的序列化、持久化和自動化資料恢複;支援多對多的消息訂閱和推送,確定架構無縫擴充到多IDC;支援滑動視窗模式傳輸,保證長耗時鍊路傳輸時的吞吐量。通過異步消息隊列系統,實作了IDC之間的系統解耦,確定在國際化鍊路故障時不影響本地服務,同時在鍊路故障恢複後完成自動化的資料恢複。

本文探讨了百度賬号系統國際化過程中遇到的問題,并就資源配置設定和沖突解決、資料互通中間件提出了解決方案,在可用性和資料一緻性方面采取有效折中。該方案已經上線并長時間穩定運作。

by Zhoujun&Fanmengzhe

本文轉自百度技術51CTO部落格,原文連結:http://blog.51cto.com/baidutech/1033675,如需轉載請自行聯系原作者

繼續閱讀