在看如下這樣的圖,我們是否有一種**系統的衝動?這樣乙個花花綠綠的介面,背後隱藏著什麼樣的奧秘!使用者輸入某個網域名稱的時候,比如www.taobao.com的時候,頁面是如何展示的,使用者在搜尋框搜寶貝的時候,系統又是如何處理的,使用者在參加秒殺活動的時候,系統又是如何處理的。經過兩年多的網際網路從業經驗,以及自己的思考,在這裡我就拋磚引玉對電商系統架構進行**,**系統是如何設計的,以及設計這個系統的各種權衡。
隱藏在花花綠綠的介面之後,是乙個龐大複雜的系統,圖(二)是這個系統的鳥瞰圖。我只描繪了一些枝幹子系統,省略掉其他輔助子系統。
在這個複雜的系統中,各個子系統是如何工作的?
1: user 是如何訪問到類似www.taobao.com 的頁面呢?user 在瀏覽器輸入www.taobao.com 的網域名稱,瀏覽器通過dns伺服器解析該網域名稱指向的ip位址。ip位址可能不只乙個,有可能是多個。那該選擇哪乙個,一般由dns基於一定的策略返回。
2: 假如瀏覽器選擇了乙個ip位址,那麼通過該ip位址訪問到了頁面伺服器,即webserver。從可靠性、效能來講,webserver 不只部署一台機器,而是多台。這樣部署既要負載均衡,又要在某個子節點崩潰後,能夠正常服務。我們的做法可以採用額外的負載均衡器方法,也可以通過lvs來實現。
5:使用者在搜尋框輸入寶貝名稱的時候,搜尋請求是通過搜尋子系統來完成的。搜尋子系統定時從備db增量建索引,這種方式容忍搜尋有一定的延遲。
其實也可以採用一些實時搜尋系統,比如solr,或者採用大系統聚合小系統的方式,新增資料通過訊息佇列的方式進入搜尋系統的記憶體中,或者實時系統中,然後在使用者搜尋的時候採用聚合的方式返回結果。
6:使用者購買商品的時候,先將物品加入購物車,這需要購物車系統,購物系統要訪問庫存系統,判斷當前是否有貨,如果有貨才允許使用者新增到購物車,並計算總價錢。新增購物車的時候,是否允許使用者減庫存,取決於使用者體驗和惡意使用者之間的矛盾:如果不允許減庫存,則有時使用者要下單的時候,會出現沒貨。如果允許減庫存,則存在惡意使用者佔著庫存,影響其他使用者購買。
8:訂單系統:在活動期間,訂單系統會遇到峰值,所以訂單系統宜採用非同步方式。
9:商品系統:管理商品資訊的系統。
10:db採用主備方式,現在常見的模式:寫主、查備。這種模式有主備資料一致性問題。備資料的實時性取決於同步,比較簡單的方式,採用資料庫本身的備份功能;或者在商品系統中通過非同步寫。那寫主查備是基於什麼考慮的呢?只要是讀寫分離,提高效能。
11:跨區域容災,採用非同步的方式,這種影響效能比較小,但是資料一致性不敢保障。這裡只能具體業務採取不同的策略,對一致性要求高的子系統,則採用異地同時雙寫。
12:子系統基於soa的方式進行交付,現在一般採用某個rpc框架。個人覺得開源的ice是不錯的選擇。
13:各個子系統,在本區域內採用主備模式。底層資料都掛了,則在底層系統跨地區訪問資料。所以需要乙個跨區域的資料訪問**,同時降級提供業務。
或者將訪問切向另外的乙個區域,這裡要考慮另外乙個區域的負載情況。
這裡,概略地介紹了電商系統的架構原理,接著後繼將對各個子系統的設計進行**! HBase內部結構
table表 就是有乙個或者多個列族組成,加上之前的 使用,這個表概念應該很熟了 row行 乙個行包括了多個列,這些列通過列族來分類 column family列族 列族是多個列的集合,hbase會盡量的將乙個列族的列放入同乙個伺服器內,這樣可以提高訪問效能,並且可以批量管理有關聯的一堆列,所有的資...
linux系統的各種內部結構
先給個圖,看看調優要涉及的。這個圖是網上搞了。還有乙個是書上的。很漂亮吧。對了,本文就是介紹下。想深入理解的,去看看書吧。1 程序概念 程序是裝入記憶體執行的程式段,是許多的系統物件擁有權的集合,換句大家經常引用的話說程序是資源分配的基本單位。2 執行緒 執行緒是cpu執行排程的基本單位,執行緒必須...
Oracle檢視內部結構
1 分析資料檔案塊,轉儲資料檔案n的塊m alter system dump datafile n block m 2 分析日誌檔案 alter system dump logfile logfilename 3 分析控制檔案的內容 alter session set events immediat...