电竞比分网-中国电竞赛事及体育赛事平台

分享

億級(jí)用戶下的新浪微博平臺(tái)架構(gòu)

 gljin_cn 2015-01-23

序言

新浪微博在2014年3月公布的月活躍用戶(MAU)已經(jīng)達(dá)到1.43億,2014年新年第一分鐘發(fā)送的微博達(dá)808298條,如此巨大的用戶規(guī)模和業(yè)務(wù)量,需要高可用(HA)、高并發(fā)訪問、低延時(shí)的強(qiáng)大后臺(tái)系統(tǒng)支撐。

微博平臺(tái)第一代架構(gòu)為L(zhǎng)AMP架構(gòu),數(shù)據(jù)庫使用的是MyIsam,后臺(tái)用的是php,緩存為Memcache。

隨著應(yīng)用規(guī)模的增長(zhǎng),衍生出的第二代架構(gòu)對(duì)業(yè)務(wù)功能進(jìn)行了模塊化、服務(wù)化和組件化,后臺(tái)系統(tǒng)從php替換為Java,逐漸形成SOA架構(gòu),在很長(zhǎng)一段時(shí)間支撐了微博平臺(tái)的業(yè)務(wù)發(fā)展。

在此基礎(chǔ)上又經(jīng)過長(zhǎng)時(shí)間的重構(gòu)、線上運(yùn)行、思索與沉淀,平臺(tái)形成了第三代架構(gòu)體系。

我們先看一張微博的核心業(yè)務(wù)圖(如下),是不是非常復(fù)雜?但這已經(jīng)是一個(gè)簡(jiǎn)化的不能再簡(jiǎn)化的業(yè)務(wù)圖了,第三代技術(shù)體系就是為了保障在微博核心業(yè)務(wù)上快速、高效、可靠地發(fā)布新產(chǎn)品新功能。

第三代技術(shù)體系

微博平臺(tái)的第三代技術(shù)體系,使用正交分解法建立模型:在水平方向,采用典型的三級(jí)分層模型,即接口層、服務(wù)層與資源層;在垂直方向,進(jìn)一步細(xì)分為業(yè)務(wù)架構(gòu)、技術(shù)架構(gòu)、監(jiān)控平臺(tái)與服務(wù)治理平臺(tái)。下面是平臺(tái)的整體架構(gòu)圖:

如上圖所示,正交分解法將整個(gè)圖分解為3*4=12個(gè)區(qū)域,每個(gè)區(qū)域代表一個(gè)水平維度與一個(gè)垂直維度的交點(diǎn),相應(yīng)的定義這個(gè)區(qū)域的核心功能點(diǎn),比如區(qū)域5主要完成服務(wù)層的技術(shù)架構(gòu)。

下面詳細(xì)介紹水平方向與垂直方向的設(shè)計(jì)原則,尤其會(huì)重點(diǎn)介紹4、5、6中的技術(shù)組件及其在整個(gè)架構(gòu)體系中的作用。

水平分層

水平維度的劃分,在大中型互聯(lián)網(wǎng)后臺(tái)業(yè)務(wù)系統(tǒng)的設(shè)計(jì)中非?;A(chǔ),在平臺(tái)的每一代技術(shù)體系中都有體現(xiàn)。這里還是簡(jiǎn)單介紹一下,為后續(xù)垂直維度的延伸講解做鋪墊:

  1. 接口層主要實(shí)現(xiàn)與Web頁面、移動(dòng)客戶端的接口交互,定義統(tǒng)一的接口規(guī)范,平臺(tái)最核心的三個(gè)接口服務(wù)分別是內(nèi)容(Feed)服務(wù)、用戶關(guān)系服務(wù)及通訊服務(wù)(單發(fā)私信、群發(fā)、群聊)。
  2. 服務(wù)層主要把核心業(yè)務(wù)模塊化、服務(wù)化,這里又分為兩類服務(wù),一類為原子服務(wù),其定義是不依賴任何其他服務(wù)的服務(wù)模塊,比如常用的短鏈服務(wù)、發(fā)號(hào)器服務(wù)都屬于這一類。圖中使用泳道隔離,表示它們的獨(dú)立性。另外一類為組合服務(wù),通過各種原子服務(wù)和業(yè)務(wù)邏輯的組合來完成服務(wù),比如Feed服務(wù)、通訊服務(wù),它們除了本身的業(yè)務(wù)邏輯,還依賴短鏈、用戶及發(fā)號(hào)器服務(wù)。
  3. 資源層主要是數(shù)據(jù)模型的存儲(chǔ),包含通用的緩存資源Redis和Memcached,以及持久化數(shù)據(jù)庫存儲(chǔ)MySQL、HBase,或者分布式文件系統(tǒng)TFS以及Sina S3服務(wù)。

水平分層有一個(gè)特點(diǎn),依賴關(guān)系都是從上往下,上層的服務(wù)依賴下層,下層的服務(wù)不會(huì)依賴上層,構(gòu)建了一種簡(jiǎn)單直接的依賴關(guān)系。

與分層模型相對(duì)應(yīng),微博系統(tǒng)中的服務(wù)器主要包括三種類型:前端機(jī)(提供 API 接口服務(wù))、隊(duì)列機(jī)(處理上行業(yè)務(wù)邏輯,主要是數(shù)據(jù)寫入)和存儲(chǔ)(mc、mysql、mcq、redis 、HBase等)。

垂直延伸技術(shù)架構(gòu)

隨著業(yè)務(wù)架構(gòu)的發(fā)展和優(yōu)化,平臺(tái)研發(fā)實(shí)現(xiàn)了許多卓越的中間件產(chǎn)品,用來支撐核心業(yè)務(wù),這些中間件由業(yè)務(wù)驅(qū)動(dòng)產(chǎn)生,隨著技術(shù)組件越來越豐富,形成完備的平臺(tái)技術(shù)框架,大大提升了平臺(tái)的產(chǎn)品研發(fā)效率和業(yè)務(wù)運(yùn)行穩(wěn)定性。

區(qū)別于水平方向上層依賴下層的關(guān)系,垂直方向以技術(shù)框架為地基支撐點(diǎn),向兩側(cè)驅(qū)動(dòng)影響業(yè)務(wù)架構(gòu)、監(jiān)控平臺(tái)、服務(wù)治理平臺(tái),下面介紹一下其中的核心組件。

接口層Web V4框架

接口框架簡(jiǎn)化和規(guī)范了業(yè)務(wù)接口開發(fā)工作,將通用的接口層功能打包到框架中,采用了Spring的面向切面(AOP)設(shè)計(jì)理念。接口框架基于Jersey 進(jìn)行二次開發(fā),基于annotation定義接口(url, 參數(shù)),內(nèi)置Auth、頻次控制、訪問日志、降級(jí)功能,支撐接口層監(jiān)控平臺(tái)與服務(wù)治理,同時(shí)還有自動(dòng)化的Bean-json/xml序列化。

服務(wù)層框架

服務(wù)層主要涉及RPC遠(yuǎn)程調(diào)用框架以及消息隊(duì)列框架,這是微博平臺(tái)在服務(wù)層使用最為廣泛的兩個(gè)框架。

MCQ消息隊(duì)列

消息隊(duì)列提供一種先入先出的通訊機(jī)制,在平臺(tái)內(nèi)部,最常見的場(chǎng)景是將數(shù)據(jù)的落地操作異步寫入隊(duì)列,隊(duì)列處理程序批量讀取并寫入DB,消息隊(duì)列提供的異步機(jī)制加快了前端機(jī)的響應(yīng)時(shí)間,其次,批量的DB操作也間接提高了DB操作性能,另外一個(gè)應(yīng)用場(chǎng)景,平臺(tái)通過消息隊(duì)列,向搜索、大數(shù)據(jù)、商業(yè)運(yùn)營部門提供實(shí)時(shí)數(shù)據(jù)。

微博平臺(tái)內(nèi)部大量使用的MCQ(SimpleQueue Service Over Memcache)消息隊(duì)列服務(wù),基于MemCache協(xié)議,消息數(shù)據(jù)持久化寫入BerkeleyDB,只有g(shù)et/set兩個(gè)命令,同時(shí)也非常容易做監(jiān)控(stats queue),有豐富的client library,線上運(yùn)行多年,性能比通用的MQ高很多倍。

Motan RPC框架

微博的Motan RPC服務(wù),底層通訊引擎采用了Netty網(wǎng)絡(luò)框架,序列化協(xié)議支持Hessian和Java序列化,通訊協(xié)議支持Motan、http、tcp、mc等,Motan框架在內(nèi)部大量使用,在系統(tǒng)的健壯性和服務(wù)治理方面,有較為成熟的技術(shù)解決方案,健壯性上,基于Config配置管理服務(wù)實(shí)現(xiàn)了High Availability與Load Balance策略(支持靈活的FailOver和FailFast HA策略,以及Round Robin、LRU、Consistent Hash等Load Balance策略),服務(wù)治理方面,生成完整的服務(wù)調(diào)用鏈數(shù)據(jù),服務(wù)請(qǐng)求性能數(shù)據(jù),響應(yīng)時(shí)間(Response Time)、QPS以及標(biāo)準(zhǔn)化Error、Exception日志信息。

資源層框架

資源層的框架非常多,有封裝MySQL與HBase的Key-List DAL中間件、有定制化的計(jì)數(shù)組件,有支持分布式MC與Redis的Proxy,在這些方面業(yè)界有較多的經(jīng)驗(yàn)分享,我在這里分享一下平臺(tái)架構(gòu)的對(duì)象庫與SSD Cache組件。

對(duì)象庫

對(duì)象庫支持便捷的序列化與反序列化微博中的對(duì)象數(shù)據(jù):序列化時(shí),將JVM內(nèi)存中的對(duì)象序列化寫入在HBase中并生成唯一的ObjectID,當(dāng)需要訪問該對(duì)象時(shí),通過ObjectID讀取,對(duì)象庫支持任意類型的對(duì)象,支持PB、JSON、二進(jìn)制序列化協(xié)議,微博中最大的應(yīng)用場(chǎng)景將微博中引用的視頻、圖片、文章統(tǒng)一定義為對(duì)象,一共定義了幾十種對(duì)象類型,并抽象出標(biāo)準(zhǔn)的對(duì)象元數(shù)據(jù)Schema,對(duì)象的內(nèi)容上傳到對(duì)象存儲(chǔ)系統(tǒng)(Sina S3)中,對(duì)象元數(shù)據(jù)中保存Sina S3的下載地址。

SSDCache

隨著SSD硬盤的普及,優(yōu)越的IO性能使其被越來越多地用于替換傳統(tǒng)的SATA和SAS磁盤,常見的應(yīng)用場(chǎng)景有三種:1)替換MySQL數(shù)據(jù)庫的硬盤,目前社區(qū)還沒有針對(duì)SSD優(yōu)化的MySQL版本,即使這樣,直接升級(jí)SSD硬盤也能帶來8倍左右的IOPS提升;2)替換Redis的硬盤,提升其性能;3)用在CDN中,加快靜態(tài)資源加載速度。

微博平臺(tái)將SSD應(yīng)用在分布式緩存場(chǎng)景中,將傳統(tǒng)的Redis/MC + Mysql方式,擴(kuò)展為 Redis/MC + SSD Cache + Mysql方式,SSD Cache作為L(zhǎng)2緩存使用,第一降低了MC/Redis成本過高,容量小的問題,也解決了穿透DB帶來的數(shù)據(jù)庫訪問壓力。

垂直的監(jiān)控與服務(wù)治理

隨著服務(wù)規(guī)模和業(yè)務(wù)變得越來越復(fù)雜,即使業(yè)務(wù)架構(gòu)師也很難準(zhǔn)確地描述服務(wù)之間的依賴關(guān)系,服務(wù)的管理運(yùn)維變得越來難,在這個(gè)背景下,參考google的dapper和twitter的zipkin,平臺(tái)實(shí)現(xiàn)了自己的大型分布式追蹤系統(tǒng)WatchMan。

WatchMan大型分布式追蹤系統(tǒng)

如其他大中型互聯(lián)網(wǎng)應(yīng)用一樣,微博平臺(tái)由眾多的分布式組件構(gòu)成,用戶通過瀏覽器或移動(dòng)客戶端的每一個(gè)HTTP請(qǐng)求到達(dá)應(yīng)用服務(wù)器后,會(huì)經(jīng)過很多個(gè)業(yè)務(wù)系統(tǒng)或系統(tǒng)組件,并留下足跡(footprint)。但是這些分散的數(shù)據(jù)對(duì)于問題排查,或是流程優(yōu)化都幫助有限。對(duì)于這樣一種典型的跨進(jìn)程/跨線程的場(chǎng)景,匯總收集并分析這類日志就顯得尤為重要。另一方面,收集每一處足跡的性能數(shù)據(jù),并根據(jù)策略對(duì)各子系統(tǒng)做流控或降級(jí),也是確保微博平臺(tái)高可用的重要因素。要能做到追蹤每個(gè)請(qǐng)求的完整調(diào)用鏈路;收集調(diào)用鏈路上每個(gè)服務(wù)的性能數(shù)據(jù);能追蹤系統(tǒng)中所有的Error和Exception;通過計(jì)算性能數(shù)據(jù)和比對(duì)性能指標(biāo)(SLA)再回饋到控制流程(control flow)中,基于這些目標(biāo)就誕生了微博的Watchman系統(tǒng)。

該系統(tǒng)設(shè)計(jì)的一個(gè)核心原則就是低侵入性(non-invasivenss):作為非業(yè)務(wù)組件,應(yīng)當(dāng)盡可能少侵入或者不侵入其他業(yè)務(wù)系統(tǒng),保持對(duì)使用方的透明性,可以大大減少開發(fā)人員的負(fù)擔(dān)和接入門檻?;诖丝紤],所有的日志采集點(diǎn)都分布在技術(shù)框架中間件中,包括接口框架、RPC框架以及其他資源中間件。

WatchMan由技術(shù)團(tuán)隊(duì)搭建框架,應(yīng)用在所有業(yè)務(wù)場(chǎng)景中,運(yùn)維基于此系統(tǒng)完善監(jiān)控平臺(tái),業(yè)務(wù)和運(yùn)維共同使用此系統(tǒng),完成分布式服務(wù)治理,包括服務(wù)擴(kuò)容與縮容、服務(wù)降級(jí)、流量切換、服務(wù)發(fā)布與灰度。

結(jié)尾

現(xiàn)在,技術(shù)框架在平臺(tái)發(fā)揮著越來越重要的作用,驅(qū)動(dòng)著平臺(tái)的技術(shù)升級(jí)、業(yè)務(wù)開發(fā)、系統(tǒng)運(yùn)維服務(wù),本文限于篇幅限制,沒有展開介紹,后續(xù)會(huì)不斷地介紹核心中間件的設(shè)計(jì)原則和系統(tǒng)架構(gòu)。

本文首發(fā)于“微博平臺(tái)架構(gòu)”微信公眾號(hào),發(fā)布時(shí)有少量的文字潤色和調(diào)整。

關(guān)于作者

衛(wèi)向軍(@衛(wèi)向軍_微博),畢業(yè)于北京郵電大學(xué),現(xiàn)任微博平臺(tái)架構(gòu)師,先后在微軟、金山云、新浪微博從事技術(shù)研發(fā)工作,專注于系統(tǒng)架構(gòu)設(shè)計(jì)、音視頻通訊系統(tǒng)、分布式文件系統(tǒng)和數(shù)據(jù)挖掘等領(lǐng)域。

原文:http://www./cn/articles/weibo-platform-archieture 作者: 衛(wèi)向軍
本文為轉(zhuǎn)載,如需再次轉(zhuǎn)載,請(qǐng)查看 “” 要求。       

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多