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

来源:http://www.cnblogs.com/agileai/archive/2016/01/19/5141102.html
-Advertisement-
Play Games

導讀:本文作者是淘寶技術部技術專家陳康賢(花名龍隆),他是《大型分散式網站架構設計與實踐》一書的作者,在本文中他分享了他對大型網站架構的理解,優優分享之,希望對你有幫助。大型網站架構從來都不是一個預先定義的架構,而是一個演進式的架構。很少有一個網站從建站開始,就能夠因具備大型網站的所有屬性而一成不變...


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

大型網站架構從來都不是一個預先定義的架構,而是一個演進式的架構。很少有一個網站從建站開始,就能夠因具備大型網站的所有屬性而一成不變的,從最簡單的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)馬上刪除,謝謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄數組函數類和對象字元串操作會話控制時間和日期異常處理一、數組 1、索引數組header("Content-Type: text/html; charset=utf-8");//創建空數組$str = array();//索引數組:數組的鍵是整數的數組,並且鍵的整數順序是從0開始,依次類推。$f....
  • 今日所講知識點總結:1、set集合2、collectionsPython擁有一些內置的數據類型,比如str, int, list, tuple, dict等, collections模塊在這些內置數據類型的基礎上,提供了幾個額外的數據類型:1)Counter:計數器2)OrderedDict:有序字...
  • 1,編譯live555源碼目錄下的BasicUsageEnvironment、groupsock、liveMedia、UsageEnvironment四個工程生成相應的庫文件;目錄結構如下:2,包含上面四個工程目錄下的include目錄文件和生成的庫文件,編譯mediaServer目錄下的文件,會生...
  • 上篇說完瞭如何接入微信公眾號,本文說一下微信公眾號的最基本功能:普通消息的接收和回覆。說到普通消息,那麼什麼是微信公眾號所定義的普通消息呢,微信開發者文檔中提到的接收的普通消息包括如下幾類:1.文本消息2.圖片消息3.語音消息4.視頻消息5.小視頻消息6.地理位置消息7.鏈接消息(被動回覆的消息)被...
  • 說到線程就不得說進程。進程 進程對應一個程式,每個進程對應一定的記憶體地址空間,並且只能使用它自己的記憶體空間,各個進程間互不幹擾。並且進程保存了程式每個時刻的運行狀態,這樣就為進程切換提供了可能。當進程暫時時,它會保存當前進程的狀態(比如進程標識、進程的使用的資源等),在下一次重新切換回來時,便...
  • 題目在這裡:http://acm.hdu.edu.cn/showproblem.php?pid=1520題解,這是我的備忘錄,沒有任何註釋。 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 8 /* 9 dp[i...
  • 一、主要思路scrapy爬取是有課程地址及名稱使用multiprocessing進行下載就是為了爬點視頻,所以是簡單的代碼堆砌想而未實行,進行共用的方式二、文件說明itemsscray欄位piplines.py存儲資料庫setting.py scrapy配置 需要註意的是DEFAULT_REQUES...
  • 設計模式(Design Patterns) ——可復用面向對象軟體的基礎設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的,設...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...