《從零開始學架構》筆記——第四部分:架構實戰

  • 2019 年 10 月 6 日
  • 筆記

第十五章 互聯網架構演進

互聯網的浪潮下,各種技術層出不窮,是跟上時代的步伐,還是固守堅固的城池….

技術選型的問題決定軟體項目的大方向,新舊技術之爭是永恆的焦點。


「不識廬山真面目,只緣身在此山中」,跳出技術的範疇,用業務發展的角度去審視技術,答案就會非常清晰。

1000以內的加減乘除用計算器就足夠了,不必使用曙光超級電腦。

技術的權衡本質是在業務和成本之間尋求一個平衡點。

淘寶

  • 個人網站,2003年4月,淘寶秘密起始於湖畔花園,購買了一個LAMP(Linux+Apache+MySQL+PHP)架構的網站。
  • 2003年底,MySQL換成Oracle,同時使用一個開源的連接池代理服務SQL Relay。Oracle容量大、穩定、安全、性能高,Oracle的性能和並發訪問能力之所以如此強大,有一個關鍵性設計——連接池,連接池中放的是長連接,任何一個請求只需要從連接池中取得一個鏈接即可,用完後釋放,不需要頻繁的創建和斷開連接。
  • 2004年,為解決SQL Relay死鎖問題,開發語言從PHP換成Jave。原因是當時(04年)Jave是最成熟的網站開發語言,有比較良好的企業開發框架,被世界上主流的大規模網站普遍採用。另外市場上Jave開發人才比較多,後期維護成本較低。
  • 2004-2005(大概是這個時間段),引入IBM小型機、使用EMC存儲。
  • 2005年工作: 1、Oracle資料庫分庫,商品資訊和用戶資訊分庫存放,由資料庫路由的框架DBRoute統一處理數據的合併、排序、分頁等操作; 2、控制層用Spring框架替換EJB; 3、研發基於Berkeley DB的快取系統,把很多不太變動的只讀資訊放了進去; 4、加入CDN內容分發網路。 目的:圍繞提高容量、提高性能和節約成本。
  • 2007年,參照GFS(Google File System),研發了淘寶圖片存儲系統TFS(TaoBao File System)。 特點:文件比較小;並發量高;讀操作遠大於寫操作;訪問隨機;沒有文件修改的操作;存儲成本低;能容災、能備份。 TFS已開源:code.taobao.org
  • 2007年,開發分散式快取系統Tair(TaoBao Pair),由一個中心控制節點和一系列的服務節點組成。 Tair已開源:code.taobao.org
  • 2008年後: 打散樹狀節點,把品牌、款式、材質等做成類似於標籤的概念(屬性),建立離散、靈活的數據結構。 拆分底層業務,例如建訂單、減庫存、修改訂單狀態等原子級操作,由原子級操作組成模組,大量模組可以復用,每個系統可以單獨部署。 開發了高性能服務框架HSF,解決分散式情況下的服務調用問題。 推出消息中間件Notify:把要發出的通知存放在資料庫中,如果實時發送失敗,再用一個時間程式來周期性地發送這些通知,系統記錄下消息的中間狀態和時間戳,保證消息一定能發出,也一定能通知到,且通知帶有時間順序,通知甚至可以實現事務性的操作。 資料庫分庫數量增多後,研發出數據查詢的中間件TDDL(分散式數據訪問層) 三個主要特性: 1、將針對數據的讀寫請求發送到最合適的地方; 2、數據的多向非對稱複製——一次寫入,多點讀取;

互聯網業務發展

  • 業務複雜性
    • 初創期(創新,快)0-1w
    • 發展期(堆功能,優化期)1w-10w
    • 架構期(拆功能,拆資料庫,拆伺服器)10w到100w
    • 競爭期(平台化,避免重複造輪子;服務化,解決系統交互問題)1000w+
    • 成熟期(優化)1億+
  • 用戶規模增大
    • 性能
    • 可用性

第十六章 互聯網架構模板

存儲層技術

  • SQL 當業務發展到一定程度時,獨立成中間件,例如百度的DBProxy,淘寶的TDDL。(適合大規模公司) 中小公司適合使用開源方案:MySQL Router,Atlas
  • NoSQL 性能強,存儲結構豐富。
  • 小文件存儲 海量存儲,海量訪問。(圖片) HBase,Hadoop,Hypertable,FastDFS。
  • 大文件存儲 影片。Hadoop,HBase,Storm,Hive

開發層技術

  • 開發框架 選擇成熟的框架
  • Web伺服器 Tomca,JBoss,Resin,Apache
  • 容器 docker

網路層技術

  • 負載均衡 DNS,Nginx,LVS,F5
  • CDN
  • 多機房

用戶層技術

  • 用戶管理 sso,CAS
  • 消息推送

平台技術

  • 運維平台 配置 部署 監控 應急
    • 標準化
    • 平台化
    • 自動化
    • 可視化
  • 數據平台
    • 數據管理
      • 採集,存儲,訪問,安全
    • 數據分析
      • 統計
      • 挖掘
      • 機器學習
      • 深度學習

第十七章 開源系統

如何選擇一個開源項目

  • 是否滿足業務
  • 是否成熟(版本號1.x以上,使用公司數量,社區活躍度)
  • 運維功能是否具備(日誌,命令行,管理控制台,故障檢測)

如何使用開源方案

  • 深入研究,仔細測試
    • 通讀文檔,了解設計原理
    • 核對每個配置項的作用,識別關鍵配置項
    • 進行多種場景的性能測試
    • 進行壓力測試
    • 進行故障測試
  • 灰度發布
  • 做好應急(選用成熟的方案備份)

如何基於開源項目做二次開發

  • 包裝,做輔助系統
  • 自己發明輪子