1. 程式人生 > >高性能、高可用的分布式架構體系(轉)

高性能、高可用的分布式架構體系(轉)

基礎上 keepal 第三方應用 備份 用戶 即時通訊 banner 協同辦公 產品

在2B企業服務、雲計算、移動互聯網領域,專業的雲平臺服務裏,分布式技術為支撐平臺正常運作關鍵性技術。從商業利潤和運維成本角度出發,千方百計榨幹服務器的每一分性能很大程度上影響著網站的商業價值,因此對性能的追求,成為分布式架構體系中極為重要的考量指標;從用戶角度,特別是作為主要收入來源的企業用戶的角度出發,保證業務處理的正確性和服務不中斷(高可用性)是支撐用戶信心的重要來源。高性能,高可用,正確性成為分布式架構體系的關鍵技術因素。

  對於網站產品的的架構體系,可以選擇開源或自主研發;如果擁抱開源,則首個開發周期可能會縮短1/3左右,但付出的代價是要深入吃透這些開源方案為我所用,必要時還得修改源代碼,這後面的代價很難估計,另外還存在一項風險就是萬一選用的開源方案在將來才發現某一些特性不滿足,就得推倒重來;如果自主研發,則項目的開發周期會相應延長,而且似乎有重復造輪子的嫌疑。對於開源工具來說,重要開源工具主要包括有Zookeeper,Solr,Openfire,Redis(在它基礎上研發分布式NOSQL數據庫集群),Nginx,Haproxy,Keepalived,MySQL(在它基礎上研發的ShardDB);而自主研發的分布式中間件則包括分布式文件系統(Cloudfs),分布式即時通訊(CloudIm),分布式消息隊列(CloudMQ),分布式任務調度(CloudJob),分布式檢索平臺(CloudIndex),分布式NOSQL數據庫集群(CloudRedis)。

  分布式文件系統(Cloudfs):反復研究HDFS,TFS,Gridfs(Mongodb),FastDFS基礎上研發出來的分布式文件系統。存儲架構與FastDFS相似,包括數據結點(Node),數據組(Group),分區(Region)三級;數據結點(Node)為最終物理存儲結點,相同數據組(Group)的不同結點會進行實時的數據同步,即同組的結點數據最終一致;?相同分區(Region)內的文件會自動去重,即相同內容的文件在同一個分區(Region)只會有一份。Cloudfs通過使用消息隊列(CloudMQ)進行同組結點間的數據序列同步,從而保證最終一致性,這一點跟FastDFS的binlog雙向同步最為相似。Cloudfs使用Zookeeper來監測存儲結點狀態維護和變更,使用CloudRedis存儲文件索引信息,使用Nginx作為文件下載服務器。性能優秀,單臺Server線上監測得到的數據,文件上傳的IOPS可以達到1200,上傳速率達到25MBps,復制文件TPS達到9000以上,創建和刪除文件的TPS達到30000以上。支持存儲結點的動態加入和退出,支持線上擴容,數據多備份,結點動態負載均衡,最大理論可支持文件數量達千億以上,支持結點數3000以上。

  分布式即時通訊(CloudIm):承載著推送服務的平臺級中間件。基於Openfire,但除了保留其基本的連接保持和結點間通訊能力外,幾乎進行了全新的改造。CloudIm提供了方便的API給第三方應用,開發者可以使用CloudIm的API輕松地實現消息即時推送(從而實現例如即時通訊,協同辦公,即時提醒等實時功能),而不用考慮長連接保持,線路故障,服務器負載,用戶狀態變更通知等繁復的要求。CloudIm性能優秀,其提供的全部API的TPS都介於15000-35000之間。單臺服務器線上實測可保持連接數超過7萬,消息延遲低於50MS,集群可支持上千結點。支持結點動態加入或退出,支持線上擴容。

  分布式消息隊列(CloudMQ):一種分布式的消息隊列(MQ)實現方案,設計原理參考了Apache的開源項目Kafka及淘寶的開源項目MetaMorphosis,承繼了分布式及高性能高吞吐量的特性。CloudMQ實現簡單,無Broker設計,可保持消息順序,采用純PULL加通知機制幾乎避免了消費延遲,采用多分區機制保證提高系統的吞吐量,最大消息數量為數十億級別,另外還支持延遲消息(比如5分鐘之內發生100次更改事件,只推送一次最終結果,大幅減少重復消息)。生產消息TPS介於35000-45000之間,消費消息的TPS為40000左右。

  分布式任務調度(CloudJob):將任務按特定規則(負載均衡,地域原則等)分配到多個結點執行的調度框架。支持Crontab標準的任務重復和定時策略,支持海量定時任務(千萬級),保證任務處理的實時性和順序性,支持實時查詢任務狀態或中止任務。任務調度吞吐量可達2萬每秒。

  分布式檢索平臺(CloudIndex):海量實時檢索系統,承載著分詞檢索任務。主要采用Solr和CloudMQ實現,使用CloudMQ保證更新性能以及保證集群結點獲得相同的更新序列,使用Solr實現分詞及實時檢索。支持索引分片(分片規則包括HASH法及數字區間法),自定義分詞,結點負載均衡。索引讀寫延遲小於200MS,單一索引的數據規模可以達到上億級別。

  分布式NOSQL數據庫集群(CloudRedis):基於Redis研發的數據庫集群,兼容Redis的全部數據結構及大部分的命令集合。由客戶端使用一致性HASH算法將請求按照KEY的HASH請求到集群內不同結點執行,使用binlog操作序列同步方式來保證不同服務結點的數據最終一致性;當服務結點變更時,客戶端主動發現結點變更,重新計算HASH,集群內其它服務結點獲知結點變更,保證binlog已經消費完畢的情況下才繼續提供更新服務,從而保證結點變更情況下的數據一致性。性能極為優秀,非批量操作讀寫命令可達到10萬每秒以上處理速度,超越了原生Redis,可支持十億級別或更高數據存儲。

  來源:投稿,作者:薛珂,Gleasy格子雲辦公平臺,技術合夥人,有多篇論文發表在IEEE期刊,負責大小研發項目30余項,作為首發明人主持並申請國家發明專利20余項。



  除非註明,月光博客文章均為原創,轉載請以鏈接形式標明本文地址

  本文地址:http://www.williamlong.info/archives/3664.html

高性能、高可用的分布式架構體系(轉)