濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > QQ空間的服務(wù)器負(fù)載能力優(yōu)化過(guò)程簡(jiǎn)介

QQ空間的服務(wù)器負(fù)載能力優(yōu)化過(guò)程簡(jiǎn)介

熱門標(biāo)簽:西安電銷外呼回?fù)芟到y(tǒng)哪家好 電銷機(jī)器人 價(jià)格多少錢 德州智能外呼系統(tǒng) 濱州外呼營(yíng)銷管理系統(tǒng) 世界地圖輪廓圖標(biāo)注 淄博營(yíng)銷外呼系統(tǒng) 山西正規(guī)外呼系統(tǒng)軟件 宜昌電銷機(jī)器人公司 地圖標(biāo)注能注冊(cè)公司嗎

石器時(shí)代–從十萬(wàn)在線到百萬(wàn)在線
石器時(shí)代是QQ空間1.0到3.0穩(wěn)健上線的過(guò)程。
Qzone核心架構(gòu)研發(fā)總監(jiān)徐曉徐曉說(shuō):"QQ空間在石器時(shí)代遇到的最大難題就是如何生存?如何讓這個(gè)襁褓中的產(chǎn)品活下來(lái)?如何積累第一批寶貴的用戶資源?", 2005年QQ空間首發(fā),最初是采用傳統(tǒng)的發(fā)放邀請(qǐng)碼的方式征集第一批用戶。第一款QQ空間是嵌在獨(dú)立的客戶端軟件中,看似是個(gè)客戶端,其實(shí)是一個(gè)瀏覽器內(nèi)核,里面都是HTML頁(yè)面,以網(wǎng)站的方式存在。
當(dāng)初的架構(gòu)非常簡(jiǎn)單,采用了Apache搭建Web Server,Mysql保存最終數(shù)據(jù)。用戶通過(guò){uin}.qzone.qq.com(uin就是用戶的QQ號(hào)碼)這樣的方式訪問(wèn)自己的空間。最開(kāi)始上線時(shí),僅邀請(qǐng)了電信用戶。但上線之后才發(fā)現(xiàn)很多北方網(wǎng)通用戶也非常希望來(lái)體驗(yàn)。但如果讓北方網(wǎng)通用戶跨網(wǎng)來(lái)訪問(wèn)電信的服務(wù),那將是一個(gè)非常糟糕的體驗(yàn)。因?yàn)楫?dāng)時(shí)的跨網(wǎng)之間的帶寬是非常有限的。
為了滿足網(wǎng)通用戶的需求,QQ空間團(tuán)隊(duì)在網(wǎng)通搭建了一套與電信一模一樣的服務(wù),電信的用戶數(shù)據(jù)只存在電信的服務(wù)器上,網(wǎng)通用戶數(shù)據(jù)只存在網(wǎng)通服務(wù)器上??此飘惖胤植迹鋵?shí)兩部分?jǐn)?shù)據(jù)是互相獨(dú)立、不能冗余的。在用戶注冊(cè)開(kāi)通空間時(shí),就確定了他的數(shù)據(jù)存在于哪個(gè)服務(wù)器上。
用戶訪問(wèn)空間的邏輯抽象來(lái)說(shuō)是這樣的(如圖2):用戶通過(guò)瀏覽器發(fā)起請(qǐng)求訪問(wèn)我們的第一個(gè)CGI,這個(gè)CGI再串行的獲取用戶數(shù)據(jù),比如:裝扮數(shù)據(jù),日志數(shù)據(jù)等。等獲取到全部數(shù)據(jù)之后,這個(gè)CGI再將所有的數(shù)據(jù)拼裝成一個(gè)完整的HTML頁(yè)面輸出給用戶。

但同時(shí),空間第一版的獨(dú)立客戶端也帶來(lái)了各種問(wèn)題和煩惱:
第一:非常不利于定位問(wèn)題。
一旦頁(yè)面元素填寫失敗,定位問(wèn)題將是一件麻煩的事情。因?yàn)樗皇荳eb頁(yè)面,所以只能用其他抓包軟件,比如Ethereal(Wireshark的前身)來(lái)抓取網(wǎng)絡(luò)包做分析。但那個(gè)時(shí)候網(wǎng)絡(luò)抓包工具的能力還比較弱,沒(méi)有高亮和HTML語(yǔ)法檢測(cè)等功能,所以整體環(huán)境比較受限。
第二:服務(wù)接入層壓力大。
由于不僅要接受用戶的請(qǐng)求,還要向后訪問(wèn)不同的數(shù)據(jù)。當(dāng)后端某一個(gè)接口超時(shí)嚴(yán)重的情況下,很多用戶的請(qǐng)求都會(huì)被掛起。這樣就會(huì)消耗更多的連接資源,對(duì)Web服務(wù)器CPU的消耗很大。
第三:服務(wù)集群沒(méi)有發(fā)揮出應(yīng)有的服務(wù)能力
當(dāng)時(shí)共用30-40臺(tái)服務(wù)器,也只能支持50萬(wàn)左右的用戶。無(wú)奈之下,團(tuán)隊(duì)想了一個(gè)沒(méi)辦法的辦法:有意限制超過(guò)五十萬(wàn)用戶,提出了一個(gè)排隊(duì)等待機(jī)制,學(xué)習(xí)海底撈模式,當(dāng)在線人數(shù)達(dá)到50w的時(shí)候,QQ空間會(huì)給用戶展示一個(gè)Flash小游戲,讓用戶在等待的時(shí)候玩小游戲。
針對(duì)當(dāng)時(shí)存在的種種問(wèn)題,團(tuán)隊(duì)做了以下改進(jìn)來(lái)解決:
第一:采用Web RIA。
當(dāng)時(shí)大量使用了Ajax技術(shù)來(lái)減輕服務(wù)器的負(fù)載。其中一個(gè)極端的例子是:整個(gè)空間首頁(yè)都是采用JS繪制,這樣能夠?qū)⒂脩粼L問(wèn)的CGI足夠輕量化。盡量簡(jiǎn)化了CGI邏輯,讓CGI程序運(yùn)行更加強(qiáng)壯、效率更高。同時(shí),當(dāng)服務(wù)異常時(shí),還可以通過(guò)JS腳本繪制一個(gè)錯(cuò)誤信息給予用戶提示。而且,采用JS開(kāi)發(fā)效率更高,調(diào)試更方便。
Web RIA化后,降低了服務(wù)器CPU消耗的40%,節(jié)約了DC的輸出帶寬約30%(部分JS腳本都可以被瀏覽器Cache住)。
第二:采用動(dòng)靜分離策略。靜態(tài)資源都放在自研的Web服務(wù)器qhttpd上,它具備當(dāng)時(shí)ApacheSelect模型的兩個(gè)數(shù)量級(jí)以上的接入能力。
第三:采用自研的Web Server:Qzhttp,主要用于動(dòng)態(tài)分離的動(dòng)態(tài)服務(wù)的需要。由于Qzhttp是騰訊自研的、輕量的、更適合業(yè)務(wù)自己邏輯的Web Server,從而保證了它的高性能,它的接入能力比Apache (非FastCGI模式)提高了3倍。
石器時(shí)代做的最大的優(yōu)化:
當(dāng)用戶申請(qǐng)QQ空間多個(gè)服務(wù)時(shí),每個(gè)服務(wù)都有獨(dú)立的存儲(chǔ)和處理邏輯。只有當(dāng)所有的服務(wù)處理完成,才會(huì)由QQ空間框架服務(wù)器返回給用戶。這樣對(duì)于同時(shí)依賴日志、相冊(cè)、音樂(lè)、留言的服務(wù)就會(huì)產(chǎn)生兩大問(wèn)題:
1) 短板效應(yīng)一損俱損;
2) 具體業(yè)務(wù)容量無(wú)法差異化。
針對(duì)這兩個(gè)問(wèn)題,做了首頁(yè)載入性能優(yōu)化及首頁(yè)內(nèi)容靜態(tài)化系統(tǒng)兩方面的優(yōu)化:
研究用戶訪問(wèn)模型。拉取展現(xiàn)與UGC內(nèi)容的變更比例是7:1。用戶之間互訪頻繁,看他人與看自己的比例是5:1.。通過(guò)以上數(shù)據(jù),可以看出用戶的UGC更新很少,但是用戶之間互相訪問(wèn)很頻繁。根據(jù)用戶的這種訪問(wèn)模型,空間團(tuán)隊(duì)研發(fā)了一套靜態(tài)化系統(tǒng)(圖3)。這套系統(tǒng)會(huì)將用戶首頁(yè)的內(nèi)容全部Cache,然后根據(jù)用戶的訪問(wèn),以及用戶自己UGC內(nèi)容的更改,采用一定策略更新靜態(tài)化系統(tǒng)的Cache數(shù)據(jù)。
通過(guò)增加首頁(yè)內(nèi)容靜態(tài)化系統(tǒng),首頁(yè)展現(xiàn)速度從5s提升到3s,用戶也不用再玩小游戲進(jìn)行等待。同時(shí)在設(shè)備沒(méi)有擴(kuò)容的前提下,同時(shí)在線用戶訪問(wèn)數(shù)突破100w。

通過(guò)不斷的改進(jìn)和優(yōu)化,QQ空間3.0于2006年中穩(wěn)健上線。
冷兵器時(shí)代——功能的磨礪
冷兵器時(shí)代是在線人數(shù)從百萬(wàn)陣營(yíng)向千萬(wàn)陣營(yíng)過(guò)渡的過(guò)程。這個(gè)階段做的更多的是功能的磨礪,提高可用性的過(guò)程。
但與此同時(shí),QQ空間團(tuán)隊(duì)又面臨了新的問(wèn)題:
1、網(wǎng)通,教育網(wǎng)用戶體驗(yàn)很差;
2、版本迭代快速,導(dǎo)致外網(wǎng)bug不斷;版本發(fā)布之后,所有開(kāi)發(fā)必須留守2個(gè)小時(shí);
3、后端服務(wù)質(zhì)量不穩(wěn)定,導(dǎo)致服務(wù)經(jīng)常宕機(jī)。
之前有談到,空間的用戶數(shù)據(jù)是分布在電信與網(wǎng)通兩套體系中的。但由于公司在網(wǎng)通的服務(wù)設(shè)備有限,隨著用戶量的不斷增加,很快就達(dá)到了網(wǎng)通設(shè)備服務(wù)的上限。網(wǎng)通不能擴(kuò)容設(shè)備,但用戶量還在不斷增加。面對(duì)這種情況,只好將網(wǎng)通和電信的數(shù)據(jù)合并為一套。當(dāng)網(wǎng)通用戶訪問(wèn)服務(wù)的時(shí)候,會(huì)通過(guò)一個(gè)代理將用戶的請(qǐng)求轉(zhuǎn)發(fā)到內(nèi)網(wǎng)電信服務(wù)上。采用這種方式,提供了一套通用的解決方案,可以解決海外,網(wǎng)通,教育網(wǎng),鐵通等運(yùn)營(yíng)商的問(wèn)題。
但這種跨網(wǎng)訪問(wèn)的靜態(tài)資源下載量非常大,靜態(tài)資源請(qǐng)求次數(shù) : CGI請(qǐng)求數(shù)接近10:1,所以采用CDN提供靜態(tài)資源下載,來(lái)提高用戶訪問(wèn)速度。具體邏輯是:根據(jù)用戶客戶端IP判斷用戶屬于哪一個(gè)ISP服務(wù)商,通過(guò)URL方式將用戶的靜態(tài)資源訪問(wèn)定向到該ISP的服務(wù)設(shè)備上。
這樣,跳出CDN系統(tǒng)的拘束、優(yōu)化思路,解決了大部分教育網(wǎng)用戶問(wèn)題,同時(shí)多級(jí)支持的思路成為公共方案。
但同時(shí)還是有很多的故障:
1) 低ARPU、低成本、低價(jià)機(jī)器、大集群
2) 版本迭代快每周發(fā)布版本
3) 用戶對(duì)故障和低效的容忍度非常低
一般頁(yè)面在1s內(nèi)打開(kāi),用戶會(huì)感覺(jué)體驗(yàn)非常流暢。所以我們通過(guò)以下策略來(lái)保證服務(wù)質(zhì)量:
1) 區(qū)分關(guān)鍵路徑,對(duì)關(guān)鍵路徑的服務(wù)質(zhì)量我們要求4個(gè)9以上,非關(guān)鍵路徑的服務(wù)失敗之后做有損體驗(yàn);
2) 采用動(dòng)態(tài)超時(shí)時(shí)間控制算法,保證整個(gè)程序在可控的時(shí)間內(nèi)做出響應(yīng);
3) 多級(jí)容錯(cuò)機(jī)制,從后端服務(wù)到CGI,到前臺(tái)JS腳本都對(duì)錯(cuò)誤做了容錯(cuò)處理;
4) 采用柔性可用策略,失敗接口采用默認(rèn)數(shù)據(jù)。
為了保證版本的服務(wù)質(zhì)量,空間采用了灰度發(fā)布策略。新特性可能按照用戶尾號(hào)發(fā)布,每次新特性只對(duì)一小部分人可見(jiàn)。一段時(shí)間內(nèi)的用戶反饋后,不斷修復(fù)和改進(jìn)問(wèn)題,再逐步擴(kuò)大用戶群對(duì)新特性的可見(jiàn)性,最后新特性才對(duì)全量用戶可見(jiàn)。同時(shí),也通過(guò)控制JS版本號(hào)來(lái)達(dá)到了灰度發(fā)布的目的。
通過(guò)這些優(yōu)化,QQ空間成功踏入千萬(wàn)級(jí)在線的陣營(yíng),QQ空間5.0正式上線。其中主要變化:后端服務(wù)進(jìn)行了重構(gòu),前端頁(yè)面也進(jìn)行了優(yōu)化。
現(xiàn)代戰(zhàn)爭(zhēng)時(shí)代–數(shù)千萬(wàn)在線向億級(jí)在線
經(jīng)過(guò)反復(fù)的改進(jìn)和優(yōu)化,QQ空間服務(wù)質(zhì)量大幅提高,但是,新的問(wèn)題還是隨之而來(lái):
不滿足于發(fā)日志、傳照片的用戶,想要玩游戲、使用某些web工具。同時(shí),公司其它團(tuán)隊(duì)要在QQ空間上開(kāi)發(fā)應(yīng)用,但QQ空間的應(yīng)用配置都寫死在QQ空間平臺(tái)邏輯里面。為配合其他團(tuán)隊(duì)上線,發(fā)版本需要一周,工作不可并行,非常耗時(shí),受到了很大挑戰(zhàn)。針對(duì)這種情況,我們采取了兩大措施:平臺(tái)和應(yīng)用架構(gòu)分離、簡(jiǎn)單配置后上線。

如果某天深圳的IDC不可用了怎么辦?
為了解決這個(gè)問(wèn)題,空間團(tuán)隊(duì)做了全國(guó)IDC的異地部署,采用"一點(diǎn)寫,多點(diǎn)讀"模式的架構(gòu)模型,將服務(wù)部署到深圳、上海、天津和西安。深圳是一個(gè)寫入點(diǎn),通過(guò)QQ空間自己的一套同步系統(tǒng)同步到全國(guó)各個(gè)IDC。同時(shí)QQ空間提供了全方位的立體監(jiān)控,7*24小時(shí)對(duì)服務(wù)做監(jiān)控。
如何快速發(fā)現(xiàn)和解決用戶的問(wèn)題?
定位用戶問(wèn)題需要花很大的時(shí)間成本,這就要求團(tuán)隊(duì)做很多的監(jiān)控工作:服務(wù)器流量監(jiān)控、接口調(diào)用監(jiān)控、前端測(cè)速監(jiān)控、前端調(diào)用錯(cuò)誤監(jiān)控。
同時(shí),在千萬(wàn)級(jí)到億級(jí)在線的過(guò)程中,團(tuán)隊(duì)要有全國(guó)甚至全球的分布和匹配分布的運(yùn)營(yíng)能力;出問(wèn)題可以快速切割,全方位的立體化監(jiān)控能力;各個(gè)邏輯層持續(xù)優(yōu)化能力。只有持續(xù)優(yōu)化,用戶才能感知到性能的增加,用戶才會(huì)增加。
經(jīng)過(guò)無(wú)數(shù)次的推敲和不斷優(yōu)化,QQ空間的服務(wù)能力已經(jīng)能夠支持千萬(wàn)級(jí)別的用戶在線請(qǐng)求,并且能夠給用戶提供7*24小時(shí)的不間斷服務(wù)。向億級(jí)在線陣營(yíng)沖刺也將指日可待!
總結(jié):
百萬(wàn)在線:
當(dāng)時(shí)如何撐住服務(wù),讓用戶進(jìn)來(lái),從而積累QQ空間第一批用戶,根據(jù)用戶模型進(jìn)行優(yōu)化,讓QQ空間架構(gòu)有更好的接入能力,做到高性能。
千萬(wàn)在線:
通過(guò)各層的柔性服務(wù)和灰度發(fā)布的策略,讓服務(wù)更加穩(wěn)定,讓用戶數(shù)量級(jí)再上一個(gè)新臺(tái)階。
億級(jí)在線:
服務(wù)要有更靈活、更敏捷的變更手段。同時(shí)有更好的監(jiān)控和可運(yùn)營(yíng)的能力。

標(biāo)簽:煙臺(tái) 天水 吉安 成都 朝陽(yáng) 阿壩 忻州 阜陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《QQ空間的服務(wù)器負(fù)載能力優(yōu)化過(guò)程簡(jiǎn)介》,本文關(guān)鍵詞  空,間的,服務(wù)器,負(fù)載,能力,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《QQ空間的服務(wù)器負(fù)載能力優(yōu)化過(guò)程簡(jiǎn)介》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于QQ空間的服務(wù)器負(fù)載能力優(yōu)化過(guò)程簡(jiǎn)介的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    汉中市| 永安市| 隆尧县| 巴南区| 临泽县| 拜城县| 木里| 井研县| 内乡县| 百色市| 日喀则市| 遂川县| 宜阳县| 永寿县| 屯门区| 武隆县| 山丹县| 通州区| 丹巴县| 崇信县| 辽源市| 中方县| 湖北省| 彭泽县| 三门峡市| 正阳县| 南召县| 柏乡县| 双桥区| 红安县| 宿迁市| 辽宁省| 中宁县| 娄底市| 栾城县| 林甸县| 庄浪县| 大港区| 宜昌市| 云南省| 玉环县|