簡述一個大型交易網站的發展旅程

來源:互聯網
上載者:User

   一、功能定義: 

  – 商品 : 展示商品, 商品管理,…… – 交易 : 建立交易, 交易管理, …… – 使用者 : 註冊使用者, 資訊查詢, 使用者 管理, ……       二、技術發展 第一版:簡單基礎版       出於快速開發的考慮,第一版往往採用 單台機器構建(這裡採用java技術,下同),這樣開發方便而且快速,採用的技術甚至可以是最簡單的jsp,servlet等。       它的技術特點:      • 三 個功能模組      • 一個資料庫中的三個表      • 串連資料庫使用了 JDBC      • 模組之間的調用是 JVM 內部的方法調用 第二版:應用和資料庫分離      隨著訪問量的上升,這台機器的負載越來越高,這時可以說是該網站遇到的第一個效能問題,此時一般的解決方案很簡單, 將應用 (App) 和資料庫 (DB) 拆分到兩台機器上        這種改造實現了應用伺服器和資料服務器的分離, 對開發、測試、部署,沒什麼影響。
第三版:多台應用伺服器      訪問量持續上升,應用伺服器的壓力也變的很大,第二版的簡單設計已經不能支撐這麼大的訪問量,所以不得不繼續對其進行改造。      它的設計方案就是將 應用從 1 台拆分到了兩台,甚至多台。但此時會遇到的問題——session。 Session 的資料儲存在伺服器中,伺服器拆分前後,如何維護session的一致性。比如,下圖中,將應用伺服器拆分為A應用伺服器和B應用伺服器,當一個顧客先訪問A伺服器,然後經過通過頁面跳轉到了B伺服器,此時A中有該使用者的session,而B沒有,造成訪問有誤。      它的解決方案: • 解法 1 : Session-Sticky            一個使用者訪問了一次後,同一個session周期內,所有的請求都定向到這個伺服器,只有當遊覽器關閉或者伺服器掛掉,session才會丟失 • 解法 2 : Session Replication          session replication 策略是複製會話,即一個使用者訪問了一次就把session複製到所有的伺服器或這一部分伺服器。這樣的好處是如果正訪問的伺服器down了, 使用者可以自動被轉到別的伺服器session不丟失。缺點當然是效率低。   • 解法 3 :基於 Cookie • 解法 4 : Session 資料集中隔離儲存區 (Isolated Storage) 特彆強調:       1. Web中的Session指的就是使用者在瀏覽某個網站時,從進入網站到遊覽器關閉所經過的這段時間,也就是使用者瀏覽這個網站所花費的時間。 A使用者和C伺服器建立串連時所處的Session同B使用者和C伺服器中建立串連時所處的Sessions是兩個不同的Session。       2. 當使用者在相同機器的應用程式的 Web 頁之間跳轉時,儲存在 Session 對象中的變數將不會丟失,而是在整個使用者會話中一直存在下去。 第四版:讀寫分離     隨著業務的發展,資料庫會成為瓶頸,讀寫比例很高(相當於讀資料庫的人很多,而寫資料庫的人相對而言少)     解決方案,通過讀寫分離,降低主庫的壓力 第五版:       1.為了方便使用者更快地找到商品,系統引入搜尋引擎;為了減輕資料庫的訪問壓力和提高訪問速度,引入了緩衝;為瞭解決海量資料存放區,引入了分布式檔案儲存體。系統架構如下            2. 引入CDN系統, CDN的全稱是Content Delivery Network,即內容分髮網絡。其目的是通過在現有的Internet中增加一層新的網路架構,將網站的內容發布到最接近使用者的網路"邊緣",使使用者可以就近取得所需的內容,解決 Internet網路擁擠的狀況,提高使用者訪問網站的響應速度。
第六版:資料庫拆分      雖然讀寫分離了,但雖這業務的增長,主庫還是會遇到瓶頸。這時,我們可以根據功能,對資料庫進行切分。具體如下圖,原先的資料庫中包含了所有資料,現在將其進行“垂直切分”——就是不同的資料庫儲存不同類型的表。            這個交易系統中,就是分庫為商品表,交易表,使用者表。      這時需要注意的問題包括:      1. 對之前的一些有事務的SQL,可能造成影響      2. 對之前的多表join的SQL,可能造成影響。       原先多張表是在同一資料庫中,用join操作是相當容易的,現在不同的表在不同的資料庫中,一個join操作要用到在不同的表,此時就需要訪問不同的伺服器。
ps: 事務講解: http://blog.csdn.net/lengyuhong/archive/2010/11/02/5981872.aspx 第七版:       用垂直分割後,能夠緩解很大的問題,但如果資料庫和訪問量地原因,造成單台資料庫還是不能夠去負擔。這時就需要對資料庫進行水平分割。 具體如下圖中的使用者表。       水平切分和垂直切分的不同在於擴充方式上,舉例而言,原先一台伺服器一個資料庫三張表TA,TB,TC。垂直切分就是三台伺服器,每台伺服器一個資料庫,伺服器A中存TA表,伺服器B存TB表,伺服器C存TC表。水平切分也是三台伺服器,每台伺服器一個資料庫,伺服器A,B,C中都存有TA,TB,TC三張表。      這楊拆分後,還是帶來了新的問題:      1. 路由          比如有兩台伺服器,都存有使用者資料,當我們要插入一條使用者資訊時,應該插入到哪台伺服器的資料庫上;當我們要檢索一條使用者資訊時,我們應該到哪台伺服器上尋找。      2. 分頁      3. 合并      個人覺得2,3兩種情況通常會一起發生,比如我們要查出前一百名的使用者(具體比如在網站購物最多的使用者),此時可能的情況是這前100名中60個在資料庫A,40個在資料庫B。      4. 唯一主鍵      使用者表分布在兩台資料庫中,如何做到兩台資料庫中的使用者表有唯一主鍵。 第八版:      引入服務化        它可以解決兩個問題:

       1. 解決了業務核心的穩定和一致的問題

       2. 解決了重要資料庫的串連數的問題 第九版:       引入訊息中介軟體       – 解耦       – 非同步          三、技術總結      最後系統的架構: 大致總結這個網站的技術發展過程: 1 台 機器 +1 個應用 +1 一個 DB 應用和 DB 分到兩個機器 應用部署多機器,走入叢集 DB 讀寫分離 引入搜尋 引入 Cache 引入分布式儲存 引入 CDN 資料庫垂直分割 資料庫水平分割 應用的拆分 服務化 引入訊息中介軟體  

 

     這篇文章來源於自己最近在淘寶參加的一個培訓課程——《java中介軟體》,當中介紹“一個交易網站的旅程”的內容,自己特別收益,所以在它的基礎上整理出這篇文章。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.