網站從一萬到億級流量的全景描述 原

故事的開頭

如果你一畢業參見工作就進入了大型互聯網公司,那麼恭喜你了,你將體驗到大公司深厚的技術底蘊以及企業文化。
如果你進入到了一個初創的中小型企業,那麼也恭喜你了,你將可能體會到從0到1的那種激情和完整的架構演變帶來的驚喜。
經過漫漫長路,當你也成長爲一名架構師,意氣風發、金光閃閃的時候,讓你操刀一家初創公司,你會怎麼做呢?激情滿滿之下,你會怎麼思考呢?
下面我以主視角帶你來推演一下這個進程。

擺正角色

對於一家互聯網初創公司來說,創始人的情況可能有幾種。一是自己努力+幸運掙到了第一桶金,心中有夢,開始創業;二是趕上投資熱潮期,加上自己教育背景好,聰明又情商高,心中有夢,開始創業;三是家庭助力良多,兒孫子侄出來闖蕩,心中有夢,開始創業。
這就可以看到資本的重要性呀,心中想:我什麼時候掙到自己的第一桶金呢?
不管怎麼說,創始人是公司的靈魂,是基石。有了一個雛形之後,就需要找到共創大業的夥伴了,我以前和創始人有過小交流,他找到了我當技術負責人,夢想說了一堆,薪金也很有競爭力,我決定加入新公司。
經過長年的崗位磨練,我有這樣的思考:技術是爲業務服務,業務是爲商業服務,商業是爲創始人們...哦,不,爲大衆和世界人民服務。
那麼帶着這樣的思考,第一步該怎麼開始呢?

“天山”階段

未來是不可測的,最好的方式就是先做然後看反饋,有了正反饋就繼續投入資源;如果被現實教育,最好能調整方向。如果用戶有這個需求,創始人也眼光獨到,一般來說第一步都會是正反饋。只是看反饋的持久性和爆發性了。
經過和創始人的討論,公司前期的投入會比較緊張,第一步是先把產品做起來。
人員緊張,時間緊張,想了想,分佈式系統那一套還是先簡化一下,只選擇基礎的技術棧,大家先幹起來。
申請完域名之後,我選擇的基礎服務器配置如下:

  • 測試機:8核 64G 放在公司自己買的服務器
  • 正式機:16核 64G 使用雲服務器

運維方面的選型大概是:Centos7+Nginx+Docker+Jenkins+雲監控。Docker中運行MySQL、Redis、RabbitMQ、ElasticSearch。
後端和前端的技術選型大概是:Spring Cloud、Freemarker、Vue.js、HTML5。
我們會有自己的一個網站,還有自己的APP,所以也會有一個移動端的團隊,分別選用Kotlin和Swift語言來開發。
這時候的團隊有2個Java後端工程師、一個前端工程師、一個Android和一個IOS工程師,有一個產品經理和一個助理,2個UI設計師,加上我總共10個人。
經過兩到三個月的奮戰,我們做出了初版的產品,內部代號爲“天山”,推廣到市場。

“秦嶺”階段

由於精準的產品定位加上獨特的營銷手段,半個月後產品獲得了50萬的用戶,兩個月後猛增到300萬用戶,這時候的QPS爲400左右。產品還是不停的迭代,這一大週期在內部代號“秦嶺”。
用戶的指數級增長對服務器的性能是很大的考驗,運維團隊對整體架構做出了調整。
300W用戶,活躍值是20%,放在互聯網公司中只能算是中等水平,這時候由於前期投入成本巨大,所以還沒有盈利,不過已經接到幾個VC的投資意向,老闆正在洽談。
對應的技術團隊此時也開始擴充人員,原先的單體應用需要拆分成不同的業務模塊,因爲創立時期就上了微服務,拆分完業務模塊,分了業務團隊之後,微服務的東西也該擴展一下了。
此時在團隊管理和架構管理上會有幾條原則:

  • 每個團隊不超過16個人,吃自己的狗糧,每個團隊負責一塊業務,按職責分工,不是按技能分工。這就要求每個人都是全棧
  • 所有團隊的服務模塊都要通過接口的形式提供出去,比如RESTFul
  • 團隊的通信都要通過這些接口,除此之外沒有其他的通信方式,其他通信方式一概不允許
  • 所有的服務接口都必須設計成是對外開放的,必須做好規劃和設計,便於未來把接口開放給全世界程序員。比如用好服務網關和保證SLA
  • 所有成員必須深度參與業務,理解業務。團隊間都用領域對象來溝通

我主要精力呢,也是放在招聘和團隊管理上,兩個月要組建3到4個團隊,壓力還是很大的。
提一下架構方面的變遷,緩存和數據庫暫時用雲服務商提供的IaaS基礎服務,分佈式緩存+分佈式數據庫來解決基礎設施層訪問壓力的問題,服務層用到4臺雲服務器來支撐,應用層用到2臺雲服務器來支撐。因爲網站是偏電商類,所以圖片會非常多,這時需要分佈式存儲系統和CDN等基礎服務,也暫時用雲服務商提供的IaaS服務。
隨着服務的變多,調用關係開始變得複雜,沒有一張全局鳥瞰圖和鏈路追蹤,出現問題的時候會變得非常麻煩。微服務的自動化運維此時顯得非常重要,開始着手做這方面的工作。

“太行”階段

“秦嶺”上線半年後,業務突飛猛進,已經有了2000萬的用戶,PV已經有一億以上,QPS達到了30000以上。內部的業務模塊變爲了20個左右,比較核心的業務服務有:會員中心、支付中心、訂單中心、評價中心、物流中心等。
公司進入到高速發展期,“秦嶺”之後,內部項目代號爲“太行”。
“太行”階段,微服務已經提供給我們了靈活性和可拔插性,現在團隊主要精力放在了系統的高可用和穩定性上,這就需要一套高效的自動化運維平臺。經過半年的奮戰,我們階段性的完成了以下目標:

  • 應用整體全棧監控搭建完畢。從基礎層的服務器到中間件層的監控,從應用層的各種數據收集到客戶端的性能指標分析都一應俱全。有了全棧監控,有兩層意義:一、解決線上問題變得快捷;二、爲架構師提供了全景信息,更容易做出決策,比如服務器的增減
  • 服務調度系統搭建完畢。包括服務關鍵程度,服務依賴關係,服務發現,版本管理,服務生命週期管理等,有了這些,對服務進行查看變得清晰,管理變的方便且優雅
  • 流量調度系統搭建完畢。包括服務熔斷、降級、保護等,也包括流量的控制、異地多活,還包括流量的管理,如協議轉換等。流量調度的部分自動化構建了一個如水般絲滑的後臺服務,靈活的配置體系大大提高了系統的穩定性和應急處理能力

“賀蘭”階段

“太行”階段兩年後,網站整體用戶達到了2個億,日活用戶有4000萬。這時的公司已經有了大量的現金,也開始考慮新的增長點,收購了不少其他創業公司來補充自己的短板。
此時公司的核心贏利點還是在電商業務,其他創新業務也百花齊放,有的甚至開始狂飆突進。
此時的我作爲技術團隊負責人,關注的點在於全局的技術戰略了。主要的精力放在大數據、人工智能、人機交互、物聯網的思考上,同時怎麼樣招攬到頂級人才,怎麼樣從工程到科學,怎麼樣用技術來改變世界也會成爲日常工作和思考的一部分。

總結

縱觀網站從0到1,起步階段以業務爲主,發展階段以基礎設施建設爲主,高峯期以大型工程構建爲主,L型新常態下,以整理舊世界並探索新世界爲主。
每個階段都有大量的東西需要學習,每個階段也都要突破自己,真是漫漫長路,江湖路遠,也唯有不斷精進,才能hold住局面。


好了,以上我們一起體驗了一把從初級架構師到CTO的神奇旅程,不知道你對此有什麼思考或建議呢,歡迎討論!

文中的內容參考了大神們的智慧,羅列如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章