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

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

  對於網站產品的的架構體系,能夠選擇開源或自主研發;若是擁抱開源,則首個開發週期可能會縮短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
相關文章
相關標籤/搜索