国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

QQ億級日活躍業務后臺核心技術揭秘

Taste / 638人閱讀

摘要:本篇文章來自于騰訊和共同舉辦的技術開放日后臺專場出品人傅鴻城的分享,由壹佰案例整理編輯。對于騰訊而言,后臺服務可用性都是四個九,四個九轉化為時間就要求一年內的故障時間不能超過分鐘。

本篇文章來自于騰訊SNG和msup共同舉辦的技術開放日后臺專場出品人傅鴻城的分享,由壹佰案例整理編輯。原文發布在壹佰案例。

引言

作為本次技術開放日后臺架構專場的出品人我今天給大家帶來《構造高可靠海量用戶服務-SNG數億級日活躍業務后臺核心技術揭秘》,一起探討怎么從可用性的維度提升海量服務的可靠性及海量服務的故障處理方式,包括:
SNG后臺架構的概覽;
面向海量服務的設計原則。騰訊海量服務的后臺設計一般通用的解決方案是什么,包括如何提升海量服務的高可用性,如何從架構層、產品層、運維層提升服務的合理性;
后臺服務故障解決思路

SNG業務情況

SNG是騰訊基于社交的業務群,包括QQ、QZone、QQ音樂、騰訊云、K歌、企鵝MV、全民影帝、天天P圖等眾多業務。根據SNG后臺架構從業務邏輯、數據層面、運維包括整個可用性方面的星級評定:

QQ是騰訊持續了16年的業務,它的業務非常復雜,從通訊角度主要是消息存儲和轉發,QQ團隊致力于打造一個永不宕機的服務。

QZone一直是中國社交產品的領航者,是騰訊第一個博士Ross總在負責的業務,前端需要高性能的接入服務器,它的移動端通過框架WNS逐漸開放到騰訊云上,第三方開發商也可以用到 QZone高性能的基礎框架。

QQ音樂主要涉及流媒體點播、MV體系、海量正版知識庫建設等,目前已經DAU對外我們已經宣布過億,是國內人氣最旺的領先互聯網音樂平臺。

騰訊云有著騰訊最優秀的海量服務解決能力,給各種2B運營商提供運營化平臺,可以節省創業公司特別是中小型初創公司大量研發成本,在做的應該有不少是創業者,歡迎來用騰訊云產品。

全民K歌,兩年前Ross總從空間過來兼任數字音樂部后開始啟動團隊做的,在推出不到兩年的時間目前注冊用戶已遠超競品,在業務邏輯方面主要涉及大量的UGC流媒體上傳存儲和分發、feeds管理和互動、知識庫管理等,大家沒安裝的可以回去盡快安裝一個,里面也有優質的用戶在唱歌。

如何定義可用性

從大家都熟知的案例入手,12306剛上線的時候經常會出現掛機的情況然后顯示一條公告“正在進行故障維修”,特別是春節、節假日等搶票高峰期,嚴重影響用戶的使用。

做為互聯網架構師,要怎么提升12306的可用性?故障明顯影響可用性的指標,那么到底怎樣定義大型互聯網服務的可用性?怎樣定義一個合理的團隊可用性能指標?如何提升可用性?

1.怎樣定義大型互聯網服務的可用性?
可用性是系統或服務的健壯性和可靠性。每個服務包括QQ、QZone發生故障我們都會評估,是一級故障還是二級故障還是三級故障。

在業務場景里,最核心的是用戶價值的體現,我們把可用性更合理定義為:
P=(總用戶價值-因事故損失的用戶價值)/總用戶價值*100%

2.怎樣定義可用性指標?
無論是用QQ、QQ音樂還是QQ空間,如果中斷1分鐘,用戶自查問題;中斷5分鐘以上用戶開始有疑問;中斷30分鐘的時候論壇等地方開始有投訴出現,而中斷數個小時的時候,用戶有可能會放棄這個軟件投奔競品。

對于騰訊而言,后臺服務可用性都是四個九,四個九轉化為時間就要求一年內的故障時間不能超過52分鐘。有人會問為什么是四個九而不是五個九?為什么不越高越好?

直接原因是成本。我們做服務從剛上線保證兩個九;之后不斷優化、架構調整,比如服務器做容災部署、做雙中心,從兩個九提升到三個九;又投入大量的研發精力和研發人員從三個九提升到四個九,而要達到五個九需要增加幾個數量級的投入。在通往五個九的過程中,除了架構設計的合理性,還依賴于整個電信運營商的專線帶寬、機房設備,這些都會換算到系統故障率里,怎么預防也需要投入很多精力。所以我們目前是維持在四個九。

而在我們公司內部,有時發生了專線故障,例如有些業務的故障率非常高、有大量投訴,那么這些業務后臺架構自身肯定存在問題,包括整體系統架構、前后臺的系統架構都是有問題的。

3.談怎么做之前,先說說估算
我們在評審一個架構師的時候很看重他的系統架構,可能45分鐘的評審時間有一半都在討論這個系統架構的合理性是什么、為什么要這么設計、有沒有一些演進的歷史和背景。

系統架構對于架構師來說是非常重要的,作為一個架構師,要能夠概要且具體地畫出系統架構、說出系統架構,對自己的系統架構的了解程度也會體現出你對整個業務的把控能力。

架構師的基本能力其實是估算的能力。我之前經常會問一些來參加通道答辯的同事,他們會講:“我做這個系統的并發量是每秒1萬筆”,問他怎么得出來的,他說是壓力測試。我們認為工程師有能力通過壓力測試測試出來并了解系統最大的并發能力,但這不是一個架構師的能力。

一個架構師在系統沒有上線時就應該可以預測服務的最高并發量,而不是通過系統測試。Google的首席架構師也說過,其實一個好的系統架構師不是通過測試來得知系統能力,而是通過估算。這是架構師的基本技能,可能沒法避免所有的錯誤,但是他可以避免大的錯誤。

面向海量用戶的服務設計:架構層

以過往數據舉例,某天有10億訪問量,而每天都有86400秒,我估算成10萬秒,可以換算得到每秒的平均訪問是差不多1萬,再換算成高峰區的并發量,是平均瀏覽量的2-3倍,那么高峰時并發量大約是2-3萬每秒。

架構師要有這種意識,你怎么把業務運營指標抽象化成每個技術細節,這也是我前文提到的架構師要能夠對很多運營數據了如指掌。

1.代碼級優化
做到了如指掌首先要對每個顆粒度的數據有足夠的了解,能夠從系統架構和技術顯性估算出來業務的數據,再回歸到本身,這就肯定和代碼相關。

我們基礎數據服務組長haifeng剛入職沒多久的時候就用新的技術組件對代碼進行優化,提升服務的高可用性。他在沒上線前就可以預測到優化將帶來多少在線流量變化和業務量增加情況下減少的設備數,在不變或者提升用戶體驗的情況下來做成本和帶寬的優化及技術的優化。

代碼是支撐整個海量服務的基礎。我們在招聘時會看你是一個超級程序員還是普通程序員,這個從代碼方面就可以看出來。如果是經驗非常豐富或者不斷追求進步的架構師,就會不斷的問自己寫代碼有沒有瓶頸或者優化空間。

騰訊也有程序員只是停留在被安排的任務完成,沒有思考如何更好的完成,而有的程序員在完成之后還要花很多時間不斷推行優化,甚至發現有可能存在的內存泄露或者漏洞,前者只是完成安排給自己的任務,而后者在不斷思考,往往有超越預期的表現。

要成長為架構師,就要不斷思考你所服務的產品里有多少耗內存、有多少有瓶頸或優化空間。比如如何加速TCP、TCP2.0有什么昕的特性,這是作為一個架構師要不斷給自己思考和反思的點,這是提升整個海量服務的基礎。

2.系統設計級優化
架構師除了要推動項目組不斷優化代碼,同時也要關注系統設計的合理性。以用戶場景舉例,進入QQ音樂之后,用戶會收藏自己的歌單,在外面看來比較簡單的系統結構,但蘊含著很復雜的技術邏輯。

這些技術邏輯是為了保證高可用的情況下,各個模塊能獨立化部署,能夠很好的做服務的升級、擴容。技術要點是存儲,做為架構師在提到做一些個體的收藏時,就要從技術的角度拆分成可量化和可理解的指標,包括存儲和大量的小份文件、包括2.8億的用戶怎么存儲,這些問題肯定要列出來;還要思考怎么可拓展,以后不止是收藏歌曲,還可以收藏專輯、歌單、專題等等;還有可用性,深層次思考后臺要用什么方式進行部署以保證數據的可靠性、一致性。這些都是做任務分解和拆解時需要有的思考。

深度設計要基于優先級分級控制,比如我們用戶分PC客戶端、web、Android、iOS等,用戶在web收藏一首歌就會刷新頁面或者離開頁面,服務器就需要實時寫入,而pc或手機客戶端可以給一個數據到本地,寫入本地記載,服務器處理不那么實時處理,這對我們五千萬在線的高峰是有幫助的,我們可以允許一定的存儲冗余。

這就是基于優先級的快慢處理處理方案,比如客戶端方面,我們可以慢處理,后臺只要發送給服務器端,服務器端告訴前端收藏成功,可能還沒有成功,服務器端的處理程序會寫入消息隊列里面,由另外的進程再進一步處理,而web發送過來的請求就會采用實時處理的方式。

一談到服務剛上線,可能有大系統對服務做推廣,這時候映射到代碼層級,你可能每個代碼優化提升1毫秒,這對于整個高并發來說就是非常可觀的一筆數據。每個用戶處理時間少1毫秒,1000個用戶服務處理就可以減少1秒。所以在整個互聯網后臺開發里面,每個代碼細節都非常重要,當然還有存儲一致性。

3.柔性服務思維
從系統層面來說,你不只是做系統,而是在做服務。做服務我們也有很多服務的思維,比如說你怎樣保障系統不會由于某個故障馬上讓前端受影響,我們的思維叫邏輯性服務的思維。

就這幾類的故障來說,比如硬件方面、網絡層面、還有代碼層面都會有很多故障,如果沒有這種邏輯性服務,可能會影響80%以上的用戶,這是我們所不能接受的。

騰訊的每個后臺CGI自動化測試標準是1秒,從用戶請求到返回操作的時間如果大于1秒就不達標。為了使得每個CGI都盡可能達標,我們會采取很多策略,比如上傳很多類型的CGI,就會有很多思維要思考:后臺有沒有雪崩,思考的方式包括識別關鍵路徑和非關鍵路徑。

在騰訊的很多應用,引入了類似于股票EMI的算法,就是請求預期;當股票價格很低的時候,你的預期空間很大,股價很高的時候,你的預期很低。比如CGI訪問服務器,如果訪問都在10毫秒以內,那么timeout超時時間可以設置得很長。如果返回時間已經到100毫秒、1秒,甚至更長時間,這時候就是timeout超時要設置盡可能短,這是防雪崩的措施之一,對后端能起到有效的保護。

有些業務是不能接受有損的,比如銀行的交易或者支付購買;但是有些可以,比如QQ登陸到主頁的信息遇到服務器故障或是看會員級別時會員的服務器掛掉,這個時候可以快速返回,這是可以接受有損服務的場景。

怎么識別關鍵路徑和非關鍵路徑?騰訊一切以用戶價值為核心,做關鍵路徑和識別的時候,通常要看這個點對用戶是不是最關鍵的。比如登陸一個客戶端進來,顯示的用戶信息哪些最重要?很多業務場景就可以識別出來哪些是關鍵路徑,哪些是非關鍵路徑。

QQ空間也有很多這樣的案例,比如在出現機房故障的時候,可以設置80%的流量可用、50%的流量可用,也可以設置對黃鉆客戶優先可用的策略。系統出現故障的時候,我們也要有應急策略。我們也會有些容災的策略,會分級別,根據網絡故障級別進行容災的控制。

4.負載均衡
騰訊的很多服務是基于LVS的主網結構開展的。騰訊有一個GSLB,這是我們全級的負載均衡系統,我們每個域名都會經過GSLB和LVS。比如你是上海電信的用戶,在整個過程中都會經歷騰訊前期負載控制器,會找到然后返回這個IDC。

這個工作原理基于騰訊本身是海量服務的互聯網公司,我們做了大量的測試,測試結果是它可以達到最有效的調度結果,給出最優的調度結果,包括IDC的各類故障,它會提前預知。部署的模塊最好是獨立化部署。

面向海量用戶的服務設計:運維層

如果系統缺少監控就不是好的系統,在SNG包括騰訊各個研發團隊非常重視這塊,你對這個系統的每個環節、每個模塊都要一切盡在掌握,想做到這一點很重要的是你整個模塊的系統監控。

騰訊有大量的網管平臺,每臺設備當前的CPU狀況、網絡的出口、上行下行流量,每個都會有很詳細的配置,這也是輔助你做到一致性的服務。還有安全性,比如游戲幣購買、會員開通關閉等,可能平時的消息發送要防止被別人竄入或者消息外泄,要注意很多問題,我認為系統監控是整個后臺開發非常基礎的方面。

面向海量用戶的服務設計:產品層

產品策略,我現在負責我們部門的基礎數據中心,有些和搜索、曲庫產品等相關的事情,從整個打造海量服務來看良好的產品設計環節是不可或缺的環節。

當故障的時候,我們之前有些故障的提示是很討厭的,例如網絡繁忙、系統崩潰、IE可能中毒類似的提示是非常不友好的,是需要擯棄的產品設計。即便系統真的要掛掉也不要閉上眼睛,給到用戶足夠放心友好的提示,這個是會在你整個技術故障的時候對用戶是最大的心理安慰。

后臺故障解決思路

從后臺故障解決思路來說,當你去負責后臺系統的時候,因為系統主要是在線上運營的,總會有各種故障,你怎么發現這些問題呢?

監控非常重要,系統化監控、自動化監控,所謂自動化監控是除用戶外,還有很多測試機,它自己也會定時發起測試,模擬用戶的請求,然后判斷返回值成功或失敗,從而判斷服務是否正常。另外必須重視你身邊每位同事的反饋,包括每個用戶的反饋

從外圍到核心問題的本質,比如有些用戶不能用,有些用戶能用,要看有沒有地域集中的大范圍投訴,這些肯定要排除的。有沒有客戶版本問題,有沒有運營商電路的問題,有沒有組件問題。其實很多時候分析問題,排除法很重要,最終總能找到核心的關鍵問題

我覺得對于后端領域的常出現的問題,有些經驗非常資深的人一看就知道問題,但是當你對問題不太明確,可能定位非常煩瑣的情況下,就要羅列所有環節然后采用排除法排除原因,沒有辦法排除的就是問題的根本原因。

這里有些經驗的總結,所有bug只要提出來,總是可以找到原因,可以解決的,這也是程序員的最大價值。當你找不到自己系統問題的時候,就要找其他系統問題。定位問題的時候,要經常思考自己的系統有沒有問題,然后思考其他系統的問題。

構建海量服務是很大、很深的話題。在整個SNG里面,其實很多的業務都在不斷和海量服務的請求、每次系統問題甚至故障都在打交道,這非常鍛煉人的系統架構能力,也從中會有很多的經驗和啟發。

現場問答

Q:騰訊技術選型采用C++的考慮是什么?

A:這個事比較久遠,最開始是Tony(編者注:Tony即張志東,騰訊聯合創始人,前CTO)等創始人來奠定后臺使用C++的基調, C++是很高效的程序語言,我們也非常追求在一個語言上能夠投入,甚至不排斥多花時間在這個語言上面做到很高的性能。

Q:負載均衡方面,QQ的優化是偏向硬件層面還是軟件?或者什么場景用硬件好?

A:騰訊有很多是軟硬結合,我們騰訊應用廣泛的軟件級負載均衡,信息訪問后端的時候,后端有100臺設備,平常的方法是隨機訪問100臺,如果可以實現調度,它會收集每個IP返回碼,去決策下一次給你這個接口是最優的IP,這是我們SNG常用的軟件級的負載均衡組件L5。

在網平有統一提供負債均衡的LVS和tgw,在騰訊很多是結合在一起的,沒法說哪個更好,我們怎么把服務做到最大化、最高的可能性就是不斷思考,可能采用軟硬結合的方式。

Q:騰訊在支付這塊也是四個九嗎?有更高的要求嗎?

A:有更高要求。對于架構來說,騰訊有專門負責支付的支付線,不是我在負責。很多情況不是系統本身問題,而是外界的環境問題,支付業務由于銀行網關系統問題,也會影響服務質量。

騰訊支付定位可能還是四個九,這里還涉及和銀行的交互接口,但是由于服務失敗的一個點應該也是需要確保成功,最終確保每一位用戶的利益,微信財付通、QQ支付領域會做很多策略規避這種問題,包括流水怎么保證事務性,不讓用戶花錢拿不到物品。從我們的數據來看,如果一個普通的功能,出現了一萬個用戶故障最后可能不超過10個用戶反饋,而對于支付涉及到核心用戶利益的,兩個用戶出現問題至少有一個用戶會來反饋。

關于支付的業務指標,100%這個目標可能也需要很高成本才可能實現,唯一能做的是,例如用戶Q幣購買失敗,最終會有最后的環節是客服處理,騰訊會確保每個用戶的問題最終都會得到解決,不只是支付問題。

結語

海量服務是一門很大的課程,今天由于時間關系很多方面沒法細致講,后面可以在QQ群一起交流探討。再次歡迎和感謝大家來到SNG技術開放日,希望大家在后臺通道接下來的豐富課程中有更多收獲。(想看到本次開放日更多后端架構案例嗎?關注公眾號,近期就會推送。)

也歡迎大家來騰訊、來SNG、來QQ空間和音樂應聘,QQ音樂我們現在還在廣招優秀的后臺開發(linux c/c++)、移動端開發(iOS/Android)和web開發,內容編輯、產品策劃和運營等也都火熱招聘中,如果你是一名優秀的互聯網從業者,不妨來騰訊SNG一起投入億級用戶的服務的實踐當中,簡歷可以發送到:SNGZP@tencent.com

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/61776.html

相關文章

  • SegmentFault 技術周刊 Vol.39 - 什么!服務器炸了?

    摘要:有一次別人的云服務器被攻擊,提供商竟然重啟了物理機然后又諸多悲劇出現。造成微博服務短暫不可用。通過建立工具來診斷問題,并創建一種復盤事故的文化來推動并作出改進,防止未來發生故障。 showImg(https://segmentfault.com/img/bV0jif?w=900&h=385); 相信小伙伴們在上網或者玩游戲的時候一定都遇到過無法訪問的情況。服務器炸了的原因有各種各樣,下...

    1treeS 評論0 收藏0

發表評論

0條評論

Taste

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<