分布式概念
要理解分布式系統,主要需要明白一下2個方面:
1.分布式系統一定是由多個節點組成的系統。
其中,節點指的是計算機伺服器,而且這些節點一般不是孤立的,而是互通的。
2.這些連通的節點上部署了我們的節點,並且相互的操作會有協同。
分布式系統對於使用者而言,他們面對的就是乙個伺服器,提供使用者需要的服務而已,而實際上這些服務是通過背後的眾多伺服器組成的乙個分布式系統,因此分布式系統看起來像是乙個超級計算機一樣。
例如**,平時大家都會使用,它本身就是乙個分布式系統,我們通過瀏覽器訪問****時,這個請求的背後就是乙個龐大的分布式系統在為我們提供服務,整個系統中有的負責請求處理,有的負責儲存,有的負責計算,最終他們相互協調把最後的結果返回並呈現給使用者。
分布式之資料庫訪問
隨著**的訪問量越來越大,資料量也越來越多,系統對資料庫的各種操作越來越頻繁,導致單機的資料庫伺服器越來越慢,資料庫壓力越來越大,那麼這個時候就需要對資料庫層進行優化,目前可以從幾個方面進行下手:
1.優化應用,看看是否有不必要的壓力給了資料庫(應用的優化)。這個減壓作用相對小。
2.看看有沒有通過引入快取、搜尋引擎等地中介軟體來對資料庫進行檢驗。這個對區域性資料減壓作用大,但是對整體上作用不是很大。
3.最後一種思路就是,把資料庫的資料和訪問轉移到多台資料庫上,分開支援,這也是最優的減壓方式,下面主要介紹這種方式:
1.資料的拆分的2種方式及帶來的影響
a.垂直拆分
垂直拆分就是把乙個資料庫中不同業務單元的資料分到不同的資料庫裡面。比如使用者相關資訊放到乙個庫中,訂單先關資料放到另乙個庫中,費用相關資訊放到另外乙個資料庫中等等,這種通過劃分不同的庫的方式就是資料的垂直劃分方式。
帶來的影響:
(1) 單機的事務acid特性的保證被打破了。資料到了多機後,原來在單機通過事務進行的處理邏輯會收到很大的影響。我們面臨的選擇是,要麼放棄原來的單機事務,修改實現。要麼引入分布式事務機制。
(2) 一些聯表操作會變得比較困難,因為資料可能在不同的資料庫中了,所以不能很方便的利用資料庫自身的join,需要應用或者其他方式來解決。
(3) 靠外來鍵去進行約束的場景會收到影響。
b.水平拆分
水平拆分是根據一定的規則把同一業務單元的資料拆分到多個資料庫中。
即,比如將訂單相關的庫,部署到多台伺服器中,每台伺服器中的訂單庫的表結構完全一樣,但是不同的伺服器中的訂單庫中的資料分別存放了不同的訂單相關資料。
帶來的影響:
1.同樣具有與垂直劃分帶來的三種影響。
2. 依賴單庫的自增序列生成唯一id會受影響。
3.針對單個邏輯意義上的表的查詢要跨庫查詢了。
總之,這2種方式都是將原來乙個資料庫中的資料拆分到了不同的資料庫中,所以原來單機資料庫可以支援的特性現在未必支援了。而且資料庫的拆分給應用帶來的影響還是比較明顯,這裡只是列出其中的幾部分,比如儲存過程,觸發器等也需要改寫才能完成相應的工作。
2.資料的拆分帶來的影響對應的解決方案
java中的分布式應用(一)之分布式介紹
要理解分布式系統,主要需要明白一下2個方面 1.分布式系統一定是由多個節點組成的系統。其中,節點指的是計算機伺服器,而且這些節點一般不是孤立的,而是互通的。2.這些連通的節點上部署了我們的節點,並且相互的操作會有協同。分布式系統對於使用者而言,他們面對的就是乙個伺服器,提供使用者需要的服務而已,而實...
java分布式開發,什麼是分布式開發
就是同乙個服務,把資料庫的不同部分分開建立到不同的伺服器上。以緩解資料庫大量資料訪問的壓力。很多大公司的業務量比較大,每天的訪問量都達到幾百萬上千萬,甚至上億的訪問量,在訪問量不是很大的情況下,是可以通過提高單台伺服器的配置來滿足需求的。但是當單臺伺服器已經滿足不了需求的時候就需要做分布式處理了。畢...
程式設計開發分布式Session介紹
當專案使用分布式時,session問題就顯得比較突出,因為有不同伺服器的緣故,如果你按照一般方式儲存session,那麼你的session會儲存在某一台伺服器上,如果下個請求並不是訪問這台伺服器,那麼會發生讀取不到session的情況。這種情況的解決方案有許多種,例如 1 採用session sti...