最近看到有部分招聘信息,要求應聘者說一下分布式系統(tǒng)架構(gòu)的思路。今天早晨正好有些時間,我也把我們實際在.net方面網(wǎng)站架構(gòu)的演化路線整理一下,只是我自己的一些想法,歡迎大家批評指正。

首先說明的是.net下開源內(nèi)容較少,并且也不是做并行數(shù)據(jù)庫等基礎(chǔ)服務,因此在這里什么Hadoop、Spark、ZooKeeper、dubbo等我們暫不去考慮。

一、最初假設(shè)的網(wǎng)站中,我們把應用系統(tǒng)網(wǎng)站、文件和數(shù)據(jù)庫都放在一臺服務器上,一臺服務器包打天下。

二、隨著業(yè)務擴展,一臺服務器無法滿足性能需求,將應用程序、數(shù)據(jù)庫、文件分別部署在不同的服務器上,并根據(jù)服務器用途不同,配置不同的硬件,達到性能最佳的效果。

三、隨著業(yè)務擴展,一臺數(shù)據(jù)庫、網(wǎng)站、文件服務器再高性能也無法大量數(shù)據(jù)處理、高并發(fā)用戶訪問時,必須考慮采用集群方式。

1、應用服務器作為網(wǎng)站的入口,會承擔大量的請求,我們往往通過應用服務器集群來分擔請求數(shù)。應用服務器前面部署負載均衡服務器調(diào)度用戶請求,根據(jù)分發(fā)策略將請求分發(fā)到多個應用服務器節(jié)點。常用的負載均衡技術(shù)硬件的有F5,價格比較貴,軟件的有LVS、Nginx、HAProxy等。

2、隨著用戶量的增加,數(shù)據(jù)庫成為最大的瓶頸,改善數(shù)據(jù)庫性能常用的手段是進行讀寫分離以及分表,讀寫分離顧名思義就是將數(shù)據(jù)庫分為讀庫和寫庫,通過主備功能實現(xiàn)數(shù)據(jù)同步。分庫分表則分為水平切分和垂直切分,水平切換則是對一個數(shù)據(jù)庫特大的表進行拆分,例如訂單、物流信息表等。垂直切分則是根據(jù)業(yè)務不同來切換,如訂單、計稅等等不同的主題放在不同的數(shù)據(jù)庫中。這種情況下,關(guān)聯(lián)查詢是沒有的,通過程序可以比較容易的去解決,還有就是采用分布式事務,來保證數(shù)據(jù)的一致性。我們這里還有一個做法,一個大的數(shù)據(jù)表拆分為當前操作表和歷史記錄表, 當前操作表只保留正在操作的數(shù)據(jù),完成后轉(zhuǎn)入歷史記錄表,這樣可以提高當前操作數(shù)據(jù)的效率。

網(wǎng)友評論