淘寶技術專家談大型網站架構

導讀:本文做者是淘寶技術部技術專家陳康賢(花名龍隆),他是《大型分佈式網站架構設計與實踐》一書的做者,在本文中他分享了他對大型網站架構的理解,優優分享之,但願對你有幫助。

web

大型網站架構歷來都不是一個預先定義的架構,而是一個演進式的架構。不多有一個網站從建站開始,就可以因具有大型網站的全部屬性而一成不變的,從最簡單的LAMP架構,再到基於IOE的大型集中式應用架構,再演變成時下的分佈式應用架構,隨着網站用戶規模的擴大,架構也在不斷演進。

數據庫

從實體機到虛擬機再到當前流行的Docker技術,從單機房到同城多機房再到異地多活,從LAMP到J2EE再到各類分佈式中間件如服務框架、分佈式消息隊列、配置管理中間件、分佈式數據訪問層,由簡至繁的艱難蛻變,也正是一個網站從小變大由弱變強的成長曆程,哪裏有挑戰,哪裏纔會有變革,這正是做爲技術人建功立業的時刻。

緩存

規模不斷擴大,但成本不可能隨之線性增加,所以,如何利用規模效應下降資源成本,抽取公共部分,避免重複造輪子,提升開發效率和響應速度,成了必須思考的問題。技術存在的核心價值就是爲了生產力的提升,當技術架構制約了生產力發展,就須要進行技術變革。當前支撐大型網站的幾大核心技術,分佈式、服務化、虛擬化,其中分佈式解決的是規模化帶來的問題,所謂的規模化即包括數據規模愈來愈大,訪問量愈來愈高,也包括開發團隊規模愈來愈大,工程代碼規模愈來愈大。

架構

單機的存儲能力以及負載能力必然有限,從PC到小型機再到中型機、大型機,成本將成指數級升高,而成百上千人開發同一個工程,則致使系統臃腫,開發、發佈效率極低,互聯網將喪失了賴以生存的靈活性,回到之前傳統軟件的開發模式。經過應用垂直拆分,集羣分佈式水平擴展,不只使系統容量獲得提高,存儲和負載將分配到大規模的廉價集羣上,以下降成本,開發效率和開發模式也獲得改變。經過公共業務抽取,將誕生一批處於系統底層的基礎服務,避免相同的內容重複造輪子,提升開發效率。做爲大型網站架構中最重要的中間件,服務化框架簡化了服務調用所涉及的對象序列化與反序列化,通訊協議,服務路由等操做,以及到後來誕生的一個新名詞—服務治理,去梳理服務的依賴關係、調用鏈路、強弱依賴等等更復雜的問題。除此以外,在架構師的武器庫中,還有衆多不一樣應用場景下使用的中間件,如消息中間件、 分佈式數據訪問層、配置管理中心、數據遷移工具、分佈式文件系統等等,這些都是平常系統架構中的粘合劑。

併發

大型網站的另一個核心技術就是資源的虛擬化,從實體機到Xen、KVM再到基於LXC的輕量級虛擬化方案,再到Docker,技術的更新換代使得資源的利用率愈來愈高,集羣的運維、部署和管理愈來愈方便。另外不一樣的場景下如何選擇存儲也十分重要,高併發和大數據每每都不會單獨出現,究竟是採用磁盤、SSD仍是採用內存,究竟是採用分佈式文件系統,關係數據庫,仍是NOSQL,仍是採用內存分佈式緩存,不一樣的場景下方案會截然不同,分佈式文件系統存儲容量幾乎能夠理解爲無限,可是吞吐低,關係型數據庫有嚴謹的schema以及功能強大的SQL語句,能夠知足各類複雜的查詢條件,但無奈擴展太麻煩,爲了應對高併發讀寫訪問,master-slave、讀寫分離、分庫分表一折騰,不只工做量大增,且查詢維度受限,還須要引入垂直化搜索引擎來擴展查詢維度,NOSQL雖然能自動分區擴容,但無奈不支持SQL,而緩存雖快,內存條又太貴,架構就是要不斷的權衡取捨。

框架

大公司之因此不如小公司響應速度快,緣由在於大公司有太多積累,有時候積累多了也會成爲包袱,現有的模型會使得新業務難以快速融入。當遇到問題和挫折的時候,就是思考改進和系統變革的時候,歷來沒有哪一個系統在設計好以後就封存代碼永不改變的,技術永遠是不斷髮展,需求和市場也是不斷變化的,所以不要期望用一種架構知足全部的需求,系統設計須要知足一段時間內的可擴展性,但千萬不要過分設計,由於過了半年以後你回過頭來從新review,你會發現需求早已改變,這就是互聯網的快節奏。

運維

對於系統的架構來講,一段時間以內架構的演變,經常會經歷從清晰,再到模糊混亂,再重構,再清晰,而後又變得模糊的過程,市場環境老是瞬息萬變的,所以,系統的設計要遵循對擴展開放,對修改封閉的原則,作到這點便可方便及時的接入新流程,又可以不影響既有的流程。從宏觀來看,各個系統間的關係必定不是煙囪與煙囪的關係,而是猶如城市裏的高樓大廈,經過公路鏈接起來,所以,要提升建房子的速度,就要充分利用已有的基礎設施,已有的中間件,來下降系統構建的成本和風險。

分佈式

架構設計的幾個層次,沒有架構也是架構,專一於解決現有問題也能稱爲架構,而好的架構應該是即可以約束開發者又可以解放開發者使其專一於功能的設計。儘可能將複雜的事情變的簡單,而不要將簡單的事情變的複雜,技術歷來都不是用來炫的,而是用來解決實際問題的,所以咱們不須要花拳繡腿,洛克希德·馬丁公司的著名飛機設計師凱利·約翰遜所提出的KISS原則,就是最好的詮釋。風險驅動的架構理念告訴咱們,避免失敗是全部工程技術的核心,架構也是技術,運用架構技術去緩解風險,避免走極端,是架構師的最根本職責。

高併發

做者介紹:陳康賢(花名龍隆, 博客),淘寶技術部技術專家,著有《大型分佈式網站架構設計與實踐》一書,在分佈式系統架構設計、高併發系統設計、系統穩定性保障等領域積累了較爲豐富的實踐經驗,對新技術有濃厚的興趣 。工具

來源:CSDN

原文:http://www.csdn.net/article/2015-12-17/2826505

轉載文章,向原做者致敬!若有侵權或不周之處,敬請勞煩聯繫數通暢聯(QQ:299719834)立刻刪除,謝謝!

相關文章
相關標籤/搜索