知乎在線部分的技術架構


知乎在線部分的技術架構

 

作者:姚鋼強
鏈接:https://www.zhihu.com/question/314356555/answer/625772570
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

知乎截至 2019 年 1 月的數據:

  • 用戶數:2.2 億
  • 話題數: 27 萬
  • 問題數: 3000 萬
  • 回答數: 1.3 億

以下內容全部基於 2019.1 之前情況

簡述下知乎在線部分的技術架構,先看下整體的架構圖,整體比較清晰不再贅述。

知乎在線架構

  1. 微服務架構,知乎從 11 年就開始了微服務的探索,嘗試過 protocol buffersAvroThrift,最終在 16 年確認使用 Thrift,同時使用 Consul 和 HAProxy 作為注冊中心和負載均衡。是在 14 年確認的這套微服務架構,並且穩定使用到了現在。所以大家不要問為什么不使用 gRPC 了。
  2. 雲平台,知乎有自己的內部研發的 ZAE ,絕大部分的在線業務容器在 15 年就已經全部跑在了 Docker 里,現在我們 HBase 和 Kafka 也是跑在容器里的。我們最開始使用的是Mesos 做的資源調度,現在已經切換到了 Kubernetes 。
  3. 部署平台,知乎的部署平台是與 ZAE 在一起的, 基於 Jenkins 搭建的自動集成,在 MR(Gitlab) 階段自動使用 SonarQube 進行靜態代碼檢查。部署分為測試環境,辦公室環境,金絲雀1(灰度單個容器),金絲雀2(灰度 20% 流量),生產環境(100% 流量上線)。如果金絲雀階段出現錯誤,會自動進行回滾操作。
  4. 監控,我們主要基於 GrafanaOpenTracingGraphite 等搭建了監控系統。同時自研了 Halo 可以方便的是業務方觀測到服務之間的依賴關系、響應時間(P95, P99, P999)、錯誤數。同時也進行了新技術的嘗試,目前在業務容器監控使用了Prometheus 。
  5. 存儲,主要是 MySQLRedisHBase;正在調研 TiDB,目前有一套生產集群上線准備給「已讀」服務使用。
  6. 消息隊列,早期使用自研的 Sink,目前使用 Kafka,同時提供在 Kafka 的基礎上包裝了Beanstalkd 作為任務隊列方便業務進行使用。
  7. 編程語言,PythonGolangJavaRust。目前 Golang 使用比較廣泛,Python 使用場景逐漸變少。Java 在一些算法項目和商業系統中有使用。搜索系統使用的 Rust 重寫 Lucene,現並在此基礎上重寫了類 ES 的集群化搜索引擎。架構師 會去 做分享。
  8. 目前已經搭建好完備的測試環境,會在 Q2 投入使用。
  9. 現在已經搭建了多機房,目前重要的業務都是異地多活。

總結:

  1. 勇於探索新的技術,例如早期的微服務(11 年)和容器化(15年)。
  2. 在開源技術可以滿足的前提下,盡量不自造輪子,從而使項目可以持續維護。
  3. 知乎技術上一直崇尚工具化、自動化,例如我們的部署平台,監控,報警系統等,不管是平台還是業務方,都沒有專職的運維人員。
  4. 整體來說知乎的平台化(我不是做平台的)一直做得很統一,比較少出現業務方自造一套輪子的情況,但是也不排斥業務方的嘗試。

感謝知乎優秀的技術平台工程師,給我們業務方帶來這么好的基礎設施。:-D

 

==================== End

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM