相信有那麼一天,我們將可以像畢凱艦長一樣用嘴巴叫所有主機做事!


Cheng Wei Chen



2015 Cloud & Datacenter EXPO 心得兼筆記文 (下)

本系列心得兼筆記文的最後一篇,即是 2015 Cloud & Datacenter EXPO 下午 DevOps & App 此條議程線的第四、五兩場議程。



Docker's Impact on Data Center Industry - Docker Taipei Meetup 共同發起人 / 郭韋廷

第四場雖然題目是「Docker's Impact on Data Center Industry」,不過我個人覺得內容其實並未超出 Docker Introduction 的範圍,所以下面就僅用簡短的篇幅記錄。

首先郭韋廷先用了兩種困擾的情境作為開場,帶領聽眾體驗一種擾人的狀況,藉此突顯 Docker 所能帶來的好處。

第一個情境是舊版軟體往往只能安裝在舊的 OS,但是時過境遷,即便能找到舊 OS 、舊軟體及軟體所需的舊版 Library,也不代表一定能順利安裝。接著繼續延伸情境,假設要安裝的舊軟體又有數個版本,也許 A、B 兩版本的 Library 可能不盡相同,因此無法 A、B 同時安裝,會發生 Library 衝突問題,試問這該如何是好?

第二情境則是幫正妹架設 Blog,需要安裝 Apache、Mysql、PHP 及 Wordpress,一開始自已先在 Windows 環境測試安裝,但到正妹宿舍時才發現正妹電腦是 MAC,這該如何是好?延伸情境,假設正妹大紅大紫了,Blog 要搬家到一般的 VPS (Linux),又是另一種安裝環境。最終假設正妹爆紅了,這下要從 VPS 搬到 AWS 環境,於是又出現另外一種新的安裝環境了。四個需要安裝的軟體 Apache、Mysql、PHP 及 Wordpress 乘以四種安裝情境,面對有可能在任一個組合中踩到安裝地雷,試問這又該如何是好?

(題外話,郭韋廷在講到 Apache 時,還想要用阿帕契梗來博君一笑,他本來要擺出阿帕契招牌動作的說。)

如果對於 Docker 已經有所認識的人,應該不難理解為何應用 Docker 可以幫助解決前面兩種情境的困擾。

接著郭韋廷開始介紹 Docker 的基本內容,像是 Container 的觀念、Docker 與 VM 的差異、目前 Docker 被應用的方向...等,以及一些 Docker 相關的熱門項目:

聽了郭的介紹,讓我個人對於 RancherOS 及 Tectonic 很感興趣,後續希望有機會更深入研究。

RancherOS 有趣之處在於它除了底層的 Linux Kernel 之外,其他服務都是運行在 Container 之中,它會先有一個 System Docker 用來運行 System Container,另外又有一個 User Docker 用來讓使用者運行其他的 Container。

Tectonic 有趣之處則是因為它是用 CoreOS Stack + Kubernetes 所建構出的 Platform,雖然目前還在 beta 但值得繼續觀察下去。

Docker 現在正熱門,資料多到看不完,本場議程算是一個入門,真的入門之後才會知道其實後面還很多水深之處啊!


百度貼吧服務端架構變遷史 - 百度 資深架構師 / 許立強

最後一場議程仍是由百度的資深架構師許立強帶來的精彩議題,許立強在上午的主要 Keynote 也講得很棒,感覺得出是有經過大風大浪,他的兩場議程聽完個人都有不少收獲,只好再說一次「能聽到高品質的議程實在是十分享受的一件事!」。

開場
開場許立強先說明了這場簡報的主軸,即是介紹「百度貼吧」從小到大的架構變遷,為何會如此變遷?其中的思路為何?

接著許立強便先簡單介紹了「百度貼吧」這個產品,因為他認為要先認識這個產品特性,聽者才更能理解架構,因為畢竟架構是為了產品而服務的。

產品流量圖
許立強展示了「百度貼吧」歷年的流量圖,並且區分成三區間,其中有幾個關鍵點
  1. 03 ~ 08 年,在 08 年突破了關鍵的 10 億流量
  2. 08 ~12 年,在 12 年進入移動互聯網時代,突破了 100 億流量
  3. 12年之後,流量持續上升,目前已突破 500 億流量

接下來他就用這三個區間作為三個階段,分別說明每個階段的架構。


03 ~ 08 年
許立強在說明時,都會分別從「產品功能」、「流量變化」及「研發團隊」三個方面先介紹該階段的背景資訊。

  • 在功能方面, 03 ~ 08 年時「百度貼吧」還是一個很簡單的產品,主要集中在核心功能「關鍵字社群」及「垃圾文處理機制」,除此之外沒有其他的大功能、新功能。
  • 在流量方面,由數千進展到 10 億流量。
  • 在研發團隊方面,是一個規模不大的小團隊,管理的主機也不多大概幾十台而已。

因此他說 03 ~ 08 年的架構重點在於「高性能、高穩定性、可擴展」,因為要用有限的資源支撐大流量產品,同時還要能維持產品的穩定性。

架構模型可以參考下圖:

其中我覺得最厲害的之處在於,許立強提到這個階段他們是在追求「極致」,像是上圖中「特點」有提到的「從前到後 C / C++」,你可以想像一個網站服務,從前端到後端極儘所能的用 C / C++ 來編寫,他們甚至用 C++ 寫了一個「模板引擎」。上圖中雖然顯示他們有用到 Apache,但使用的是 Apache 1.3版,而裡面所有的 Apache module 全部是他們自己用 C++ 編寫的。還不只如此,資料儲存也不是用 Mysql 或其他軟體,同樣也是自己打造。

這個階段的架構也同樣支援所謂的「垂直切分」、「水平擴展」,因此在系統的擴展上也不成問題。

當然他也考慮到了資料儲存的擴展,因此也能做到「儲存同步」、「定期數據切分(Sharding)」。

08 ~ 12 年
  • 在功能方面, 進入 Web 2.0 時代,產品功能快速膨脹。
  • 在流量方面,由 10 億進入 100億流量。
  • 在研發團隊方面,團隊擴張至幾十人,分成數個開發團隊,並且產品迭代速度加快,管理主機數量進展爲幾百台。

因此 08 ~ 12 年的架構重點在於「大流量、快速迭代」,一方面要能應付百億的大流量,同時又要快速迭代,滿足客戶的產品需求。

因為關注的重點轉移到「研發效率」,因此最終他們選擇了 LAMP 作為基本架構。(但應該是LEMP吧?因為簡報後面提到是使用 Nginx)。選擇 LAMP 的原因是為了「標準化、降低基礎設施的成本,提升可擴展性。」

接著許立強繼續一一針對 LAMP 的每個項目的評估,首先是 PHP:
  • PHP 與 C / C++ 可以深度結合,上一個階段的歷史經驗可以累積。
  • PHP 其實性能不差
  • PHP 性能擴展容易
  • 即便性能真的不行,還有 HHVM 以及可以全部改寫成 C++ 做成 PHP 擴展來處理。

再來是 Nginx:
  • 功能強大,可作為 Web Server 也可作為 Reverse Proxy Server。
  • 他們去看了 Nginx 的原始程式碼,覺得程式寫的好。
  • 擴展容易,所以他們自己也寫了不少了 Nginx 擴展。

最後是資料儲存,則換成現在常見的選項 Mysql、Memcache、Redis,因為要通用化、集群化及擴展容易。

雖然架構改變爲 LAMP,但是他們還是自己做了許多的擴展與開發,像是用 PHP 打造了自己的 MVC 框架、模板引擎,打造自己的分佈式 Mysql 架構,改善 Memcache 集群在批量處理的性能。

12 年之後
  • 在功能方面, 進入移動互聯網時代,產品開始平台化。
  • 在流量方面,進入幾百億流量。
  • 在研發團隊方面,團隊擴張至幾百人,分成幾十個團隊,管理主機數量進展爲幾千台。

因此這階段的關鍵問題是「維運成本高」,像是機器故障不斷,幾千台主機一年365天每天爆一台都要好幾年才夠、Alert 響個不停、維運人員激增,維運人員每天上班就是接警報、修理、機器上線然後不斷循環。

所以這個階段架構整個大調整,引入 DevOps,並建構出他們自己的 OXP 私有雲。讓開發與架構分離,讓開發端只需要專注於開發。

系統架構方面全面 Container 化,建構出一個「虛擬層」來使用 Container 提供各種服務,因此就能解決大部分的維運問題,因為在虛擬層就能做到「自動修復」、「自動遷移」、「彈性擴展」。在此架構下建構的私有雲提供開發團隊 PaaS 服務,因此開發團隊真的就只要專心把 Application 寫好,不需煩惱架構、系統資源的問題。

本場簡報心得
本場的收獲可以用許立強講的一句話來總結「我們做基礎架構永遠是隨著產品需求去調整架構。」

在不同的時空背景之下,面對不同的需求必然會有不同的解決辦法,「百度貼吧」的經驗也許也只能適用於他們的時空背景,但架構演變之中的思維值得參考學習。

就像許立強在說明第一階段時,我覺得我的下巴是合不起來的,因為那真的是追求「極致」到了一個超乎「極限」的地步!果然只有在最嚴苛的環境才能焠鍊出最美麗的花朵。但假設時空背景搬移到現在,也許就會有不一樣的結果。

以上就是 DevOps & App 這條議程線的所有心得兼筆記文,如有看到哪裡記錄錯誤或不妥之處,還請留言通知我,謝謝。





沒有留言:

張貼留言

不歡迎留言打廣告,所以有進行留言管理,敬請見諒。