第十五章 互聯網架構演進 互聯網的浪潮下,各種技術層出不窮,是跟上時代的步伐,還是固守堅固的城池.... 技術選型的問題決定軟體項目的大方向,新舊技術之爭是永恆的焦點。 “不識廬山真面目,只緣身在此山中”,跳出技術的範疇,用業務發展的角度去審視技術,答案就會非常清晰。 1000以內的加減乘除用計算器 ...
第十五章 互聯網架構演進
互聯網的浪潮下,各種技術層出不窮,是跟上時代的步伐,還是固守堅固的城池....
技術選型的問題決定軟體項目的大方向,新舊技術之爭是永恆的焦點。
“不識廬山真面目,只緣身在此山中”,跳出技術的範疇,用業務發展的角度去審視技術,答案就會非常清晰。
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.org2007年,開發分散式緩存系統Tair(TaoBao Pair),由一個中心控制節點和一系列的服務節點組成。
Tair已開源:code.taobao.org2008年後:
打散樹狀節點,把品牌、款式、材質等做成類似於標簽的概念(屬性),建立離散、靈活的數據結構。
拆分底層業務,例如建訂單、減庫存、修改訂單狀態等原子級操作,由原子級操作組成模塊,大量模塊可以復用,每個系統可以單獨部署。開發了高性能服務框架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以上,使用公司數量,社區活躍度)
- 運維功能是否具備(日誌,命令行,管理控制台,故障檢測)
如何使用開源方案
- 深入研究,仔細測試
- 通讀文檔,瞭解設計原理
- 核對每個配置項的作用,識別關鍵配置項
- 進行多種場景的性能測試
- 進行壓力測試
- 進行故障測試
- 灰度發佈
- 做好應急(選用成熟的方案備份)
如何基於開源項目做二次開發
- 包裝,做輔助系統
- 自己發明輪子