要理解分布式系統,主要需要明白一下2個方面:
1.分布式系統一定是由多個節點組成的系統。
其中,節點指的是計算機伺服器,而且這些節點一般不是孤立的,而是互通的。
2.這些連通的節點上部署了我們的節點,並且相互的操作會有協同。
分布式系統對於使用者而言,他們面對的就是乙個伺服器,提供使用者需要的服務而已,而實際上這些服務是通過背後的眾多伺服器組成的乙個分布式系統,因此分布式系統看起來像是乙個超級計算機一樣。
例如**,平時大家都會使用,它本身就是乙個分布式系統,我們通過瀏覽器訪問****時,這個請求的背後就是乙個龐大的分布式系統在為我們提供服務,整個系統中有的負責請求處理,有的負責儲存,有的負責計算,最終他們相互協調把最後的結果返回並呈現給使用者。
隨著**的訪問量越來越大,資料量也越來越多,系統對資料庫的各種操作越來越頻繁,導致單機的資料庫伺服器越來越慢,資料庫壓力越來越大,那麼這個時候就需要對資料庫層進行優化,目前可以從幾個方面進行下手:
1.優化應用,看看是否有不必要的壓力給了資料庫(應用的優化)。這個減壓作用相對小。
2.看看有沒有通過引入快取、搜尋引擎等地中介軟體來對資料庫進行檢驗。這個對區域性資料減壓作用大,但是對整體上作用不是很大。
3.最後一種思路就是,把資料庫的資料和訪問轉移到多台資料庫上,分開支援,這也是最優的減壓方式,下面主要介紹這種方式:
a.垂直拆分
垂直拆分就是把乙個資料庫中不同業務單元的資料分到不同的資料庫裡面。比如使用者相關資訊放到乙個庫中,訂單先關資料放到另乙個庫中,費用相關資訊放到另外乙個資料庫中等等,這種通過劃分不同的庫的方式就是資料的垂直劃分方式。
帶來的影響:
(1) 單機的事務acid特性的保證被打破了。資料到了多機後,原來在單機通過事務進行的處理邏輯會收到很大的影響。我們面臨的選擇是,要麼放棄原來的單機事務,修改實現。要麼引入分布式事務機制。
(2) 一些聯表操作會變得比較困難,因為資料可能在不同的資料庫中了,所以不能很方便的利用資料庫自身的join,需要應用或者其他方式來解決。
(3) 靠外來鍵去進行約束的場景會收到影響。
b.水平拆分
水平拆分是根據一定的規則把同一業務單元的資料拆分到多個資料庫中。
即,比如將訂單相關的庫,部署到多台伺服器中,每台伺服器中的訂單庫的表結構完全一樣,但是不同的伺服器中的訂單庫中的資料分別存放了不同的訂單相關資料。
帶來的影響:
1.同樣具有與垂直劃分帶來的三種影響。
2. 依賴單庫的自增序列生成唯一id會受影響。
3.針對單個邏輯意義上的表的查詢要跨庫查詢了。
總之,這2種方式都是將原來乙個資料庫中的資料拆分到了不同的資料庫中,所以原來單機資料庫可以支援的特性現在未必支援了。而且資料庫的拆分給應用帶來的影響還是比較明顯,這裡只是列出其中的幾部分,比如儲存過程,觸發器等也需要改寫才能完成相應的工作。
分布式之分布式事務
被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...
分布式技術之分布式ID和分布式事務
mycat不支援只能使用在sharding jdbc中 public class mysharding implements preciseshardingalgorithm spring.shardingsphere.sharding.tables.t order.actual data node...
TransactionScope 之分布式配置
本文 transactionscope是個好東西,可以自動管理transaction,即使是對分布式資料庫也可以,但是需要一些配置 摸索了2天。本文的環境為windows 2003 1.對跑 的機器和sql所在的伺服器進行component services的配置 administative too...