黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

QQ空間技術(shù)架構(gòu)之深刻揭秘

系統(tǒng) 2168 0

QQ 空間技術(shù)架構(gòu)之深刻揭秘

  QQ 空間作為騰訊海量互聯(lián)網(wǎng)服務(wù)產(chǎn)品,經(jīng)過近七年的發(fā)展,實(shí)現(xiàn)了從十萬級到億級同時(shí)在線的飛躍。在這個(gè)過程中,QQ 空間團(tuán)隊(duì)遇到了哪些技術(shù)挑戰(zhàn)?其站點(diǎn)前后臺架構(gòu)隨著業(yè)務(wù)規(guī)模的變化又進(jìn)行了怎樣的演進(jìn)與變遷?成長背后有過怎樣的心酸和快樂……

  4. 26 日晚間,騰訊大講堂·深圳首站《QQ 空間技術(shù)架構(gòu)之崢嶸歲月》活動(dòng)在騰訊總部騰訊大廈多功能廳舉辦,騰訊 Web 前端研發(fā)領(lǐng)域?qū)<摇Ⅱv訊最早的專職 Web 開發(fā)團(tuán)隊(duì)核心成員、Qzone 核心架構(gòu)研發(fā)總監(jiān)徐曉在兩小時(shí)的演講中揭開了 QQ 空間技術(shù)架構(gòu)背后的秘密。

  正式分享之前,徐曉介紹了 QQ 空間目前的海量服務(wù)數(shù)據(jù)規(guī)模(圖1):

  1) 擁有5.5億的活躍用戶

  2) 過萬臺的設(shè)備

  3) 數(shù)千萬級別的同時(shí)在線

  4) 數(shù)十億級別的全站 PV

  5) P 級的 UGC 存儲量

  6) 每天千億級別的服務(wù)請求

QQ 空間技術(shù)架構(gòu)之深刻揭秘

  圖1——QQ 空間海量服務(wù)數(shù)據(jù)規(guī)模

  接下來,徐曉把 QQ 空間成長和發(fā)展的歷程分成三個(gè)階段:石器時(shí)代、冷兵器時(shí)代和現(xiàn)代戰(zhàn)爭時(shí)代,分享了 QQ 空間從開始甚至難以生存,到逐步發(fā)展成國內(nèi)最大的 SNS 社區(qū)產(chǎn)品背后的酸甜苦辣。

石器時(shí)代–從十萬在線到百萬在線

  石器時(shí)代是 QQ 空間1.0到3.0穩(wěn)健上線的過程。

  徐曉說:"QQ 空間在石器時(shí)代遇到的最大難題就是如何生存?如何讓這個(gè)襁褓中的產(chǎn)品活下來?如何積累第一批寶貴的用戶資源?", 2005 年 QQ 空間首發(fā),最初是采用傳統(tǒng)的發(fā)放邀請碼的方式征集第一批用戶。第一款 QQ 空間是嵌在獨(dú)立的客戶端軟件中,看似是個(gè)客戶端,其實(shí)是一個(gè)瀏覽器內(nèi)核,里面都是 HTML 頁面,以網(wǎng)站的方式存在。

  當(dāng)初的架構(gòu)非常簡單,采用了 Apache 搭建 Web Server,MySQL 保存最終數(shù)據(jù)。用戶通過{uin}.qzone.qq.com (uin 就是用戶的 QQ 號碼)這樣的方式訪問自己的空間。最開始上線時(shí),僅邀請了電信用戶。但上線之后才發(fā)現(xiàn)很多北方網(wǎng)通用戶也非常希望來體驗(yàn)。但如果讓北方網(wǎng)通用戶跨網(wǎng)來訪問電信的服務(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ú)立、不能冗余的。在用戶注冊開通空間時(shí),就確定了他的數(shù)據(jù)存在于哪個(gè)服務(wù)器上。

  用戶訪問空間的邏輯抽象來說是這樣的(如圖2):用戶通過瀏覽器發(fā)起請求訪問我們的第一個(gè) CGI,這個(gè) CGI 再串行的獲取用戶數(shù)據(jù),比如:裝扮數(shù)據(jù),日志數(shù)據(jù)等。等獲取到全部數(shù)據(jù)之后,這個(gè) CGI 再將所有的數(shù)據(jù)拼裝成一個(gè)完整的 HTML 頁面輸出給用戶。

QQ 空間技術(shù)架構(gòu)之深刻揭秘

  圖2——Qzone2.0典型載入邏輯

  但同時(shí),空間第一版的獨(dú)立客戶端也帶來了各種問題和煩惱:

  第一:非常不利于定位問題。

  一旦頁面元素填寫失敗,定位問題將是一件麻煩的事情。因?yàn)樗皇?Web 頁面,所以只能用其他抓包軟件,比如 Ethereal (Wireshark 的前身)來抓取網(wǎng)絡(luò)包做分析。但那個(gè)時(shí)候網(wǎng)絡(luò)抓包工具的能力還比較弱,沒有高亮和 HTML 語法檢測等功能,所以整體環(huán)境比較受限。

  第二:服務(wù)接入層壓力大。

  由于不僅要接受用戶的請求,還要向后訪問不同的數(shù)據(jù)。當(dāng)后端某一個(gè)接口超時(shí)嚴(yán)重的情況下,很多用戶的請求都會(huì)被掛起。這樣就會(huì)消耗更多的連接資源,對 Web 服務(wù)器 CPU 的消耗很大。

  第三:服務(wù)集群沒有發(fā)揮出應(yīng)有的服務(wù)能力

  當(dāng)時(shí)共用30~40臺服務(wù)器,也只能支持 50 萬左右的用戶。無奈之下,團(tuán)隊(duì)想了一個(gè)沒辦法的辦法:有意限制超過五十萬用戶,提出了一個(gè)排隊(duì)等待機(jī)制,學(xué)習(xí)海底撈模式,當(dāng)在線人數(shù)達(dá)到 50w 的時(shí)候,QQ 空間會(huì)給用戶展示一個(gè) Flash 小游戲,讓用戶在等待的時(shí)候玩小游戲。

  針對當(dāng)時(shí)存在的種種問題,團(tuán)隊(duì)做了以下改進(jìn)來解決:

  第一:采用 Web RIA。

  當(dāng)時(shí)大量使用了 Ajax 技術(shù)來減輕服務(wù)器的負(fù)載。其中一個(gè)極端的例子是:整個(gè)空間首頁都是采用 JS 繪制,這樣能夠?qū)⒂脩粼L問的 CGI 足夠輕量化。盡量簡化了 CGI 邏輯,讓 CGI 程序運(yùn)行更加強(qiáng)壯、效率更高。同時(shí),當(dāng)服務(wù)異常時(shí),還可以通過 JS 腳本繪制一個(gè)錯(cuò)誤信息給予用戶提示。而且,采用 JS 開發(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ù)量級以上的接入能力。

  第三:采用自研的 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)用戶申請 QQ 空間多個(gè)服務(wù)時(shí),每個(gè)服務(wù)都有獨(dú)立的存儲和處理邏輯。只有當(dāng)所有的服務(wù)處理完成,才會(huì)由 QQ 空間框架服務(wù)器返回給用戶。這樣對于同時(shí)依賴日志、相冊、音樂、留言的服務(wù)就會(huì)產(chǎn)生兩大問題:

  1) 短板效應(yīng)一損俱損;

  2) 具體業(yè)務(wù)容量無法差異化。

  針對這兩個(gè)問題,做了首頁載入性能優(yōu)化及首頁內(nèi)容靜態(tài)化系統(tǒng)兩方面的優(yōu)化:

  研究用戶訪問模型。拉取展現(xiàn)與 UGC 內(nèi)容的變更比例是7:1。用戶之間互訪頻繁,看他人與看自己的比例是5:1.。通過以上數(shù)據(jù),可以看出用戶的 UGC 更新很少,但是用戶之間互相訪問很頻繁。根據(jù)用戶的這種訪問模型,空間團(tuán)隊(duì)研發(fā)了一套靜態(tài)化系統(tǒng)(圖3)。這套系統(tǒng)會(huì)將用戶首頁的內(nèi)容全部 Cache,然后根據(jù)用戶的訪問,以及用戶自己 UGC 內(nèi)容的更改,采用一定策略更新靜態(tài)化系統(tǒng)的 Cache 數(shù)據(jù)。

  通過增加首頁內(nèi)容靜態(tài)化系統(tǒng),首頁展現(xiàn)速度從 5s 提升到 3s,用戶也不用再玩小游戲進(jìn)行等待。同時(shí)在設(shè)備沒有擴(kuò)容的前提下,同時(shí)在線用戶訪問數(shù)突破 100w。

QQ 空間技術(shù)架構(gòu)之深刻揭秘

  圖3—首頁內(nèi)容靜態(tài)化系統(tǒng)

  通過不斷的改進(jìn)和優(yōu)化,QQ 空間3.0于 2006 年中穩(wěn)健上線。

冷兵器時(shí)代——功能的磨礪

  冷兵器時(shí)代是在線人數(shù)從百萬陣營向千萬陣營過渡的過程。這個(gè)階段做的更多的是功能的磨礪,提高可用性的過程。

  但與此同時(shí),QQ 空間團(tuán)隊(duì)又面臨了新的問題:

  1、網(wǎng)通,教育網(wǎng)用戶體驗(yàn)很差;

  2、版本迭代快速,導(dǎo)致外網(wǎng) bug 不斷;版本發(fā)布之后,所有開發(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è)備,但用戶量還在不斷增加。面對這種情況,只好將網(wǎng)通和電信的數(shù)據(jù)合并為一套。當(dāng)網(wǎng)通用戶訪問服務(wù)的時(shí)候,會(huì)通過一個(gè)代理將用戶的請求轉(zhuǎn)發(fā)到內(nèi)網(wǎng)電信服務(wù)上。采用這種方式,提供了一套通用的解決方案,可以解決海外,網(wǎng)通,教育網(wǎng),鐵通等運(yùn)營商的問題。

  但這種跨網(wǎng)訪問的靜態(tài)資源下載量非常大,靜態(tài)資源請求次數(shù) : CGI 請求數(shù)接近 10:1,所以采用 CDN 提供靜態(tài)資源下載,來提高用戶訪問速度。具體邏輯是:根據(jù)用戶客戶端 IP 判斷用戶屬于哪一個(gè) ISP 服務(wù)商,通過 URL 方式將用戶的靜態(tài)資源訪問定向到該 ISP 的服務(wù)設(shè)備上。

  這樣,跳出 CDN 系統(tǒng)的拘束、優(yōu)化思路,解決了大部分教育網(wǎng)用戶問題,同時(shí)多級支持的思路成為公共方案。

  但同時(shí)還是有很多的故障:

  1) 低 ARPU、低成本、低價(jià)機(jī)器、大集群

  2) 版本迭代快每周發(fā)布版本

  3) 用戶對故障和低效的容忍度非常低

  通過調(diào)研,我們發(fā)現(xiàn)用戶對 Web 的容忍度是很低的(如圖4):

QQ 空間技術(shù)架構(gòu)之深刻揭秘

  圖4——用戶容忍度曲線

  一般頁面在 1s 內(nèi)打開,用戶會(huì)感覺體驗(yàn)非常流暢。所以我們通過以下策略來保證服務(wù)質(zhì)量:

  1) 區(qū)分關(guān)鍵路徑,對關(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) 多級容錯(cuò)機(jī)制,從后端服務(wù)到 CGI,到前臺 JS 腳本都對錯(cuò)誤做了容錯(cuò)處理;

  4) 采用柔性可用策略,失敗接口采用默認(rèn)數(shù)據(jù)。

  為了保證版本的服務(wù)質(zhì)量,空間采用了灰度發(fā)布策略。新特性可能按照用戶尾號發(fā)布,每次新特性只對一小部分人可見。一段時(shí)間內(nèi)的用戶反饋后,不斷修復(fù)和改進(jìn)問題,再逐步擴(kuò)大用戶群對新特性的可見性,最后新特性才對全量用戶可見。同時(shí),也通過控制 JS 版本號來達(dá)到了灰度發(fā)布的目的。

  通過這些優(yōu)化,QQ 空間成功踏入千萬級在線的陣營,QQ 空間5.0正式上線。其中主要變化:后端服務(wù)進(jìn)行了重構(gòu),前端頁面也進(jìn)行了優(yōu)化。

現(xiàn)代戰(zhàn)爭時(shí)代–數(shù)千萬在線向億級在線

  經(jīng)過反復(fù)的改進(jìn)和優(yōu)化,QQ 空間服務(wù)質(zhì)量大幅提高,但是,新的問題還是隨之而來:

  不滿足于發(fā)日志、傳照片的用戶,想要玩游戲、使用某些 web 工具。同時(shí),公司其它團(tuán)隊(duì)要在 QQ 空間上開發(fā)應(yīng)用,但 QQ 空間的應(yīng)用配置都寫死在 QQ 空間平臺邏輯里面。為配合其他團(tuán)隊(duì)上線,發(fā)版本需要一周,工作不可并行,非常耗時(shí),受到了很大挑戰(zhàn)。針對這種情況,我們采取了兩大措施:平臺和應(yīng)用架構(gòu)分離(如圖5)、簡單配置后上線(如圖6)。

QQ 空間技術(shù)架構(gòu)之深刻揭秘

  圖5——平臺和應(yīng)用架構(gòu)分離

QQ 空間技術(shù)架構(gòu)之深刻揭秘

  圖6——簡單配置后上線

  如果某天深圳的 IDC 不可用了怎么辦?

  為了解決這個(gè)問題,空間團(tuán)隊(duì)做了全國 IDC 的異地部署,采用"一點(diǎn)寫,多點(diǎn)讀"模式的架構(gòu)模型,將服務(wù)部署到深圳、上海、天津和西安。深圳是一個(gè)寫入點(diǎn),通過 QQ 空間自己的一套同步系統(tǒng)同步到全國各個(gè) IDC (如圖7)。同時(shí) QQ 空間提供了全方位的立體監(jiān)控,7*24小時(shí)對服務(wù)做監(jiān)控。

QQ 空間技術(shù)架構(gòu)之深刻揭秘

  圖7——IDC 分布

  如何快速發(fā)現(xiàn)和解決用戶的問題?

  定位用戶問題需要花很大的時(shí)間成本,這就要求團(tuán)隊(duì)做很多的監(jiān)控工作:服務(wù)器流量監(jiān)控、接口調(diào)用監(jiān)控、前端測速監(jiān)控、前端調(diào)用錯(cuò)誤監(jiān)控。

  同時(shí),在千萬級到億級在線的過程中,團(tuán)隊(duì)要有全國甚至全球的分布和匹配分布的運(yùn)營能力;出問題可以快速切割,全方位的立體化監(jiān)控能力;各個(gè)邏輯層持續(xù)優(yōu)化能力。只有持續(xù)優(yōu)化,用戶才能感知到性能的增加,用戶才會(huì)增加。

  經(jīng)過無數(shù)次的推敲和不斷優(yōu)化,QQ 空間的服務(wù)能力已經(jīng)能夠支持千萬級別的用戶在線請求,并且能夠給用戶提供7*24小時(shí)的不間斷服務(wù)。向億級在線陣營沖刺也將指日可待!

總結(jié):

  百萬在線:

  當(dāng)時(shí)如何撐住服務(wù),讓用戶進(jìn)來,從而積累 QQ 空間第一批用戶,根據(jù)用戶模型進(jìn)行優(yōu)化,讓 QQ 空間架構(gòu)有更好的接入能力,做到高性能。

  千萬在線:

  通過各層的柔性服務(wù)和灰度發(fā)布的策略,讓服務(wù)更加穩(wěn)定,讓用戶數(shù)量級再上一個(gè)新臺階。

  億級在線:

  服務(wù)要有更靈活、更敏捷的變更手段。同時(shí)有更好的監(jiān)控和可運(yùn)營的能力。

QQ 空間技術(shù)架構(gòu)之深刻揭秘

  接下來是半個(gè)小時(shí)的Q&A環(huán)節(jié),同學(xué)們踴躍提問,徐曉做出了詳細(xì)專業(yè)的解答。最后,徐曉和大家分享了"騰訊《海量服務(wù)之道》系列的優(yōu)質(zhì)課程和秉承的原則":

QQ 空間技術(shù)架構(gòu)之深刻揭秘

  Qzone 是全球第二大 SNS 社區(qū),僅次于 Facebook。徐曉說:"海量服務(wù)的價(jià)值觀和用戶對我們的厚愛造就了現(xiàn)在的 QQ 空間。我們會(huì)持續(xù)的發(fā)展,攻克各種難題,不斷前進(jìn)。"

  4月 26 日 21:00,兩個(gè)小時(shí)的 QQ 空間技術(shù)架構(gòu)分享圓滿結(jié)束!

  歡迎大家繼續(xù)期待 5 月 16 日晚舉辦的騰訊大講堂對外講座·第八期《云網(wǎng)絡(luò)能帶給我們什么》 。更多精彩,盡在騰訊大講堂:DJT.QQ.COM。

QQ空間技術(shù)架構(gòu)之深刻揭秘


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論