騰訊基礎構架副總莊泗華:Web云服務是未來趨勢

jopen 11年前發布 | 13K 次閱讀 構架

        9 月 9 日消息,騰訊云今天在北京·郎園 Vintage 召開以“億萬云端,信心共享”為主題的騰訊云開放戰略發布會。騰訊云終于揭開面紗,正式宣布全面開放。騰訊基礎構架助理總經理莊泗華先生在大會現場致辭演 講,他表示,對于廣大的合作伙伴和開發商來講,如果能夠用彈性 Web 服務,就盡量用彈性 Web 服務。

        他表示,不管是從負載均衡來說,還是從安全穩定來說,亦或是從性能、容量、速度來說,騰訊云都是具有高性價比的成熟云服務。他認為,騰訊云的核心系統是經過大規模實戰考驗的,而騰訊云本身也希望通過這個平臺把互聯網開放給整個業界同行。

騰訊基礎構架副總莊泗華:Web云服務是未來趨勢

騰訊基礎構架副總莊泗華:Web 云服務是未來趨勢

        以下是莊泗華演講實錄:

        莊泗華:大家好,非常榮幸有機會在這里和大家分享一下騰訊云的技術特點,先做一下自我介紹,我自己是 2004 年加入騰訊,頭幾年一直在做 QQ 的 IM 的后臺,很多業務的小云合并成騰訊云這朵大云,一起參與騰訊云的建設,從剛才陳磊已經介紹過,其實騰訊云是一早就已經有了,而且可以說它在我們整個騰訊的 內部是有非常廣泛的應用,這里它應用在包括騰訊自研的業務,還有很多代言的業務,包括很多平臺上第三方開發者的一些游戲和應用。從技術角度來看,應用的類 型也是非常廣泛的,包括 Web 類,包括 PC 客戶段、包括手機客戶端的應用。

        剛才陳磊從整個生態行業這個角度介紹了騰訊云的一個構成,那么我們再看一下,其實騰訊云是包括給用戶用的微云,也包括計算云和數據云,我們來看 一下計算云和數據云的主要的服務,因為時間關系今天沒法做一個全面的介紹,我只能從中抽幾個案例來做一下介紹。從中大家可以感受到騰訊云的每個云服務都是 騰訊的技術團隊傾盡心力所打造的,每個云都有自己的應用特點和業務價值。

        首先從負載均衡來說,就是一個用戶他經過我們的負載均衡服務器,這里叫 TGW 騰訊網關這樣一個簡稱,負載均衡會分發到后面的服務器,騰訊的負載均衡有什么特點呢?我們可以看到首先第一個是業務程序能獲得真實的用戶端 IP,我們看這樣一個架構圖,在 TWO 這一端除了做一個負載均衡之外,還做一個信息包編碼,把用戶的信息放到 IP 包的包體里面,經過內網轉發到服務器,在服務器這邊根據剛才說的信息進行一個 IP 包的還原,業務服務器收到的 IP 包就是原 IP 原端口,發回去的時候也會沿著原路返回給用戶,我們的業務程序不僅能獲得真實的用戶端的 IP,它通過 Socket 來獲得用戶的真實的 IP,隨著互聯網大潮的到來,越來越多的應用不是 Http 的應用了,需要我們的應用做很多代碼修改,這是非常麻煩的,用了騰訊的公網負載均衡之后,是不需要改代碼的,大家原來怎么寫就怎么寫,非常方便。

        第二個業務架叫 ISP 的溝通,在中國 ISP 特別多,而且 ISP 之間互聯互通帶寬和質量都是比較差的,從架構圖上大家可以看到,電信的用戶我們可以經過電信的 TGW,聯通的通過聯通的,移動的通過移動的。還有通過 CAP 平臺的,這些用戶到 TGW 之間都是骨干網,任何用戶只要用了騰訊的負載均衡,它的質量都是非常優異的質量。

        它還能夠實現游戲的雙線或者多線游戲,在 QQ 內部有一個叫 QQ 九仙的游戲,它有華南、華東電信兩個大區,還有網通區,這些在我們還沒有研制出公網負載均衡之前做的,按照業務的統計,在電信這個區里面開一臺新的服務 器,用戶大概十幾個小時能把這臺新的服務器填滿,或者把人數達到上限。如果是在聯通這里開一個新的服務器時間就更長,可能要兩三天才能把服務器充滿,我剛 開始幾個小時的用戶覺得很無聊,玩著玩著沒什么意思,也許人就跑了,使用了我們公網負載均衡之后,新的區叫雙線區,不止電信、聯通,有了多線區之后,用戶 在兩三個小時就能把新服務器填滿,很多騰訊自研的游戲接了我們的公網負載均衡之后對這樣一個機制非常贊賞,而且像剛才說的 ISP 多通,也是業務原來怎么寫代碼現在怎么寫代碼,直接用就 OK 了。

        剛才說了公網負載均衡,現在來介紹一下中間的邏輯層,第一個叫云服務器,原來是叫 CVM 是基于 Xen 的虛擬服務,現在是有 Web 服務了,原名是 CEE,彈性服務的量遠遠不如云服務器,但是從技術的角度來說,彈性 Web 服務才是未來的一個趨勢,大家如果對虛擬化有所了解的話,可以知道基于 Xen 的是在上面虛擬出幾個物理機器,在每個虛擬的物理及其再跑幾個系統,這樣的話就造成什么結果呢?一臺物理機虛擬出四個虛擬機,就底下母機一個操作系統,上 面每一個虛擬機一個操作系統,總共要五個操作系統,基于 LC 的概念,它是對內存使用量進行隔離,這些 OS 內河內部的機制來實現虛擬化的機制,它的內核只有一個,也沒有好幾個,最后的效果就是首先輕量級的虛擬化,是某一個 OS 內核,收到一個網絡包只要經過傳統的到網卡,到應用層就搞定了,就不用像 Xen 這里該要經過多一層的內核。騰訊云的彈性 Web 服務增加了一個附加的功能,是自動和快速擴容的服務,它沒有太多時間花在監控要不要擴容,立刻登錄下去,緊急申請虛擬機、緊急擴容,它可以把更多時間花在 業務級別的運營上面,業務的趨勢、用戶的使用情況等等,能為整個業務做出更大的貢獻,所有底下的擴容都是 Web 自動服務進行的,而且速度也是非常非常之快,對用戶來說沒有任何影響。

        因為騰訊云 Web 服務是一個未來的趨勢,我們也推薦廣大的合作伙伴和開發商,如果能夠用彈性 Web 服務,就盡量用彈性 Web 服務,你們會體會到比我說的更多的好處。

        剛才講了一個業務邏輯層,現在講存儲層,第一個叫云數據庫,原來叫 CDB,它有什么額外的特征呢?第一個我們的云數據庫有更好的平滑切換、或者是升降級的方式,首先來分析一下最常見的一個做法,也是業界最通用的一個做 法,我們搭建數據庫是怎么搭建的,包括很多應用、租用虛擬機,也是那么去搭建的,最常見的就是這樣的一個架構。最上面是一個業務的虛擬主機,下面是一臺服 務器,搭建一個不夠再搭建一個,這之間做一個同步,一旦這臺機器掛了就訪問備機,這個架構跑得也挺好的,因為業界都是這么跑的,但是它有一定的缺點,什么 缺點呢?第一個要改代碼,為什么呢?這臺主機掛了,業務代碼要探測出情況,比如發現斷連了,它就要重連,就要換個 IP,這個是比較麻煩的,需要業務程序寫這些代碼。另外一個代碼像其他的云服務提供商是那么做的,他提供一些新的 EPI,通過這些來去連下面的 Mysql,API 里面做相應的翻譯,如果看到這上面還正常就連這個,面上面已經掛了,就翻譯成另外一個 IP 給上面的業務層,業務層再去連這個 Slave 的 IP,所以使用門檻也是相當高了,騰訊云的云數據庫沒有使用這個方案。

        我們來分析一下剛才這個方案最大的問題,如果下面掛了上面要換 IP,我們就進一步推想,我現在不換 IP 怎么辦呢?增加一個 TCP 的接入網關,業務 server 連上來,TCP 接入網關,對于上面主機來講,這個方案確實比原來進步很多,但它也有一定的問題,最大的問題是 TCP 層的接入網關,這是一條業務 server 之間是一個單獨的 TCP 連接,這就帶來一系列很麻煩的問題,底下的團隊可能想運行一個@某個用戶的時候就不行了,接著更進一步的我真正的授權還要通過 TCP 接入網關,比如說我們發現這上面有一個慢查詢,我們去看這個 Mysql 的數據,哪個用了什么語句,是一個慢查詢,在這個架構下查出來哪個哪個 IP,也是 TCP 接入網關的 IP,所以我們還要再去查 TCP 接入網關的數據,所以騰訊云數據庫也沒有采用。我們把中間的從 TCP 接入網關換成了一個 TGW,它只是用在純內網的環境里面,因為它有一個編碼還原的過程,所以對于后端的業務 server,通過這樣一個解決方案就能完美解決剛才的問題。

        補充一點,我們的接入網關 TGW 本身也有一個跨級架的容錯,不會因為一臺機器死機而影響其他的,這對于業務也是透明的。通過這些手段完美地解決了剛才說的那些問題,最后的效果就是業務 server 直接連就能連到 Mysql 了,如果這臺機器掛了,就會連到 Slave 上面去,如果連接突然斷了隔個兩三秒重新連一下,又正常了。而且這個過程不管是對于 Mysql 掛了,還是一個應用,一開始申請了一個比較小的云數據庫,比較便宜,容量也比較小,它會進行一個升級,比如說業務不穩定,進入衰退期,我們要變成一個小規 模的便宜的云數據庫,不管是升級還是降級對上面的 Mysql 也是基本透明的,底下導出去的過程下面都不用管。

        剛才說的是云數據庫,云數據庫其實還是分好幾個版本,其中最有技術特點的是高性能版,上面那些層次跟剛才說的是一樣的,中間有一個接入網關 TGW,下面那里就不一樣了,普通版的云數據庫落地存儲是落到這臺機器上面,對于高性能版來說是落到云儲存集群,我們會把它虛擬成一個網絡硬盤,在 Mysql 看來本地有一塊網絡硬盤,這塊硬盤不對于任何設備,它可以通過網絡都存到后面的云集群里面來。首先我們通過云存儲集群就能減少云數據庫存儲成本,也能降低 價格。

        第二個,我們還做了一個很重要的優化,就是優化 Mysql 把最后對云存儲集群的高并發轉化為 DB 高性能,我們來算一下首先 Mysql 的這臺機器到現在為止都是跑在一個千兆網絡下面的,在千兆網絡下面我們可以看到它理論上這臺 Mysql 最大的帶寬是多少?也就一千兆 Mbps,意味著每秒鐘可以穿 128 兆除以 16KB,每秒鐘最多八千次的 IOPS。我們實測出來,每秒鐘的 QPS 只有約 2200,這個數值是比較低,跟原來普通版沒有太大的區別,問題在哪兒?我們仔細分析,有好幾個瓶頸,第一個網絡帶寬是一個瓶頸,這個八千是理論上算出來 的值,也是按理論的最大帶寬去算的,真正的千兆網絡不可能跑到太滿,真的跑到太慢延時會非常高,比較正常的情況跑到帶寬 80% 的容量是比較正常的情況,這個地方先打個八折,接著網絡包 Overhead,IP 層有 Overhead,TCP 也有一個 Overhead,應用層本身也有一些 Overhead,所以這里又打了一個折扣,接著 Doublewrite,平時磁盤的大小是 4K,甚至是 0.5K,Mysql 是考慮到這種情況的,如果我不做處理,這 16K 里面只寫成功了 8K,另外兩個物理頁就沒有寫成功,導致這個沒有一致性地寫到物理設備上,那 Mysql 的團隊是考慮過這個情況,它的應對措施就是 Doublewrite,它會寫兩次,第一次先寫到一個地方,必須寫到底下落盤成功了,再寫第二次,首先它寫兩次對網絡帶寬造成了額外不必要的占用。 Mysql 為了進行一些數據恢復是有打流水日志的,另外還有一個日志,這兩個日志都是要占磁盤的,我們怎么辦呢?就是針對這幾個進行相應的修改。

        首先,我們來想想頁大小真的需要 16KB 嗎?其實不需要,據我們的統計至少在騰訊內部的業務,99% 左右的業務它一行的大小遠遠不到 4KB,比較長的也就幾百個字節,所以我們把 16KB 改成 4KB,這意味著對 Mysql 的每次查詢每次讀寫流量會變成原來的四分之一,接著改成 4KB 之后,就省了一半的寫流量。

        然后,對本地磁盤來說訪問順序是比較差的,而這個機械硬盤的順序讀寫能力跟云集群的讀寫能力是不相上下的,同時機械硬盤的優點在于單位儲量的成 本,我們研究 Binlog 和 Relaylog,其他還有一些配套機制的修改。因為時間關系就不進一步展開了。做了這些修改之后效果是什么呢?每秒查詢數提高到了 9000,這個提高了大概四倍的樣子,這個架構已經是通過騰訊云已經是對整個行業開放了,大家如果在騰訊云上申請一個云數據庫高性能版能申請到的就是這樣 一個架構。

        從最后的數據來說是不是真的那么值得去用呢?比如說最普通的情況,我們的開發商、合作伙伴租一個云服務器,租一個大硬盤種型的云服務器,要租兩 臺云服務器,它的價格是多少?兩臺服務器加起來每天是 75 塊錢,因為云服務器本身是 350G,它包括了 Binlog 和 Relaylog。當然如果使用云數據庫跟它相近的一個機型,叫高性能版A型,它是 400G,它價格是 105 塊錢,我們來看這幾個參數云數據庫到底是自建的多少倍呢?1.33 倍,價格 1.39 倍,我們可以看到存儲量 1.3 幾倍,價格也是 1.3 幾倍,單位存儲量的價格是基本一致的,可能云數據庫要稍微高一點點。所以云數據庫高性能版是很有價值的,對用戶很活躍的應用會有非常大的幫助。我們的團隊 是不是就止步于此了呢?我們還在進一步地追求卓越,我們剛才看性能指標,已經達到了一萬五的 AOPS,每一頁有多少呢?4KB,一萬乘以 4KB 是 60 兆字節每秒,我們只用了一半的網絡能力,大家看到這個明顯是有空間可以挖掘的,我們進一步分析,我們可以看一下這臺藍色的是 Mysql 這臺機器,上面 Mysql 是應用層,下面是內核層的,在內核層通過一個系統調用 VFS,虛擬文件系統層,磁盤文件系統 EXT3 等,緩存通用塊層,我們經過調研研究發現就在快速驅動層里面我們所使用的設備驅動是只有 32 個并發。意味著我們打個比方,這一層上面有 32 個人在處理上層的請求,每的請求來了一個人把它接到手,扔到云存儲集群,等到回應這個就成功了,這個人把這個請求的回應給它算成,這個人才會再接下一個。 我們在這一層測它的延遲是兩到三毫秒,意味著一個人每秒處理五百個請求,就是五百乘以 32,就是一萬六千,這一層最多處理一萬六千個請求,IOPS 最多就是一萬六千的,我們實測是一萬五千,基本上就達到這個瓶頸了。這一個方案我們已經研發成功,而且是在騰訊的自研業務里面在應用,我們希望把它變成一 個穩定的版本之后就可以通過騰訊云開放給整個業界。

        另外一個方面我們看一下 IOPS 除以 QPS 是 1.67,它是先查詢一些索引頁,再讀取真正的數據頁,如果這兩頁比如說都在云存儲集群沒有在內存里面緩存,一個點查詢對應兩個請求。但是實際上索引頁占 總的數據量的比例是比較小的,我們正在研究可不可以把所有的索引頁讀到云集群,那個時候 IOPS 和 QPS 的必須能降到零點幾。這個我們還是在研究中,具體的方案等以后希望它成熟了,對整個業界開放之后我們再進行一個相應的分享。

        接著我們再介紹 NosQL 的高速存儲的技術特點,它原名叫 CMEM,每次讀看是否能讀到數據,屬于能讀到直接就處理了,如果讀不到再去 DV 那里讀一下,這樣在編程上就會非常麻煩,每次讀都要讀兩回,寫也要寫兩回,還要保持一致性。而且有些情況對于架構和運營也產生很大的問題,比如說有一個應 用它的寫訪問量比較大,以至于每次直接寫 DB,DB 也撐不住,所以很多數據容易丟掉,那就造成了很大的業務損失,用了這個 NosQL 高速存儲之后這些問題都解決了。第二個很方便的就是我們快速成長的業務,如果用 DB 的話,經常要進行一些 DB 的擴容,擴到最后最貴的 DB 都滿足不了要求了,這時候還要把一些數據倒到別的上面,搞得運營團隊非常痛苦、開發也非常團苦,用了 NosQL 高速存儲可以解決這個痛苦了。我們也非常高的單表的存儲量和性能,我們一個表可以達到 TB 級別的數據量,而且訪問量每秒達到千萬級,所以基本上那些業務不需要再去做分表啊,其他的還有提高性價比,我們兼容 Memcache 等協議等等這些都是業務的價格所在。

        剛才說過騰訊云是很成熟的云服務了,在騰訊的自研業務和代理業務中都有了,結構化存儲,包括云數據庫等等這些總共有好幾個 TB 的存儲量,現在算起來已經有上萬億的文件,我們的 CDN 超過兩百個加速點,還有包括小的運營商,比甚至上市的廠商,比他們的帶寬都要大一些。我們的移動騰訊分析覆蓋了兩億的終端,分析云也是有超過一百個 PB 的存儲量,所以從這里大家可以看到不管是對騰訊自研業務還是對開放平臺,還是對騰訊云這樣的客戶,不管是對內還是對外,我們云服務的系統都是幾乎完全一樣 的,有哪些不同呢?比如說計價這些運營系統是不同的,開發商管理是不同的,里面核心系統肯定都是一樣的。而且就像剛才我們前面陳磊所說的,我們的對外開放 的云服務都是自研業務是有特性的,所以我們的業務都是經過驗證的。所以我們可以看到騰訊云的核心系統是經過大規模實戰考驗的,我們也是希望通過騰訊云把互 聯網開放給整個業界同行。

        剛才啰里啰嗦講了很多,故事只講了一半,要成為可信賴的服務商還有另外一半,另外一半就請大家靜待另一個環節,謝謝大家。

來自: 騰訊科技
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!