日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分布式——分布式面试题

發(fā)布時間:2023/12/14 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式——分布式面试题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 分布式
      • 分布式概述
        • 分布式
        • 集群
        • 微服務(wù)
        • 多線程
        • 高并發(fā)
      • 分布式系統(tǒng)設(shè)計理念
        • 分布式系統(tǒng)的目標(biāo)與要素
        • 分布式系統(tǒng)設(shè)計兩大思路:中心化和去中心化
        • 分布式與集群的區(qū)別是什么?
      • CAP定理
    • CAP定理的證明
      • BASE理論
        • BASE理論的核心思想
        • BASE理論三要素
          • 1. 基本可用
          • 2. 軟狀態(tài)
          • 3. 最終一致性

分布式

分布式概述

分布式

分布式(distributed)是為了解決單個物理服務(wù)器容量和性能瓶頸問題而采用的優(yōu)化手段,將一個業(yè)務(wù)拆分成不同的子業(yè)務(wù),分布在不同的機器上執(zhí)行。服務(wù)之間通過遠(yuǎn)程調(diào)用協(xié)同工作,對外提供服務(wù)。

該領(lǐng)域需要解決的問題極多,在不同的技術(shù)層面上,又包括:分布式緩存、分布式數(shù)據(jù)庫、分布式計算、分布式文件系統(tǒng)等,一些技術(shù)如MQ、Redis、zookeeper等都跟分布式有關(guān)。

從理念上講,分布式的實現(xiàn)有兩種形式:

水平擴展:當(dāng)一臺機器扛不住流量時,就通過添加機器的方式,將流量平分到所有服務(wù)器上,所有機器都可以提供 相同的服務(wù);

垂直拆分:前端有多種查詢需求時,一臺機器扛不住,可以將不同的業(yè)務(wù)需求分發(fā)到不同的機器上,比如A機器處理余票查詢的請求,B機器處理支付的請求。

集群

集群(cluster)是指在多臺不同的服務(wù)器中部署相同應(yīng)用或服務(wù)模塊,構(gòu)成一個集群,通過負(fù)載均衡設(shè)備對外提供服務(wù)。

兩個特點

可擴展性:集群中的服務(wù)節(jié)點,可以動態(tài)的添加機器,從而增加集群的處理能力。

高可用性:如果集群某個節(jié)點發(fā)生故障,這臺節(jié)點上面運行的服務(wù),可以被其他服務(wù)節(jié)點接管,從而增強集群的高可用性。

兩大能力

負(fù)載均衡:負(fù)載均衡能把任務(wù)比較均衡地分布到集群環(huán)境下的計算和網(wǎng)絡(luò)資源。

集群容錯:當(dāng)我們的系統(tǒng)中用到集群環(huán)境,因為各種原因在集群調(diào)用失敗時,集群容錯起到關(guān)鍵性的作用。

微服務(wù)

微服務(wù)就是很小的服務(wù),小到一個服務(wù)只對應(yīng)一個單一的功能,只做一件事。這個服務(wù)可以單獨部署運行,服務(wù)之間通過遠(yuǎn)程調(diào)用協(xié)同工作,每個微服務(wù)都是由獨立的小團隊開發(fā),測試,部署,上線,負(fù)責(zé)它的整個生命周期。

多線程

多線程(multi-thread):多線程是指程序中包含多個執(zhí)行流,即在一個程序中可以同時運行多個不同的線程來執(zhí)行不同的任務(wù)。多線程是為了提高CPU的利用率。

高并發(fā)

高并發(fā)(High Concurrency)是一種系統(tǒng)運行過程中發(fā)生了一種“短時間內(nèi)遇到大量請求”的情況,高并發(fā)對應(yīng)的是訪問請求,多線程是解決高并發(fā)的方法之一,高并發(fā)還可以通過分布式,集群,算法優(yōu)化,數(shù)據(jù)庫優(yōu)化等方法解決。

分布式系統(tǒng)設(shè)計理念

分布式系統(tǒng)的目標(biāo)與要素

分布式系統(tǒng)的目標(biāo)是提升系統(tǒng)的整體性能和吞吐量另外還要盡量保證分布式系統(tǒng)的容錯性(假如增加10臺服務(wù)器才達(dá)到單機運行效果2倍左右的性能,那么這個分布式系統(tǒng)就根本沒有存在的意義)。

即使采用了分布式系統(tǒng),我們也要盡力運用并發(fā)編程、高性能網(wǎng)絡(luò)框架等等手段提升單機上的程序性能。

分布式系統(tǒng)設(shè)計兩大思路:中心化和去中心化

中心化設(shè)計

  • 兩個角色: 中心化的設(shè)計思想很簡單,分布式集群中的節(jié)點機器按照角色分工,大體上分為兩種角色: “領(lǐng)導(dǎo)”“干活的”
  • 角色職責(zé): “領(lǐng)導(dǎo)”通常負(fù)責(zé)分發(fā)任務(wù)并監(jiān)督“干活的”,發(fā)現(xiàn)誰太閑了,就想發(fā)設(shè)法地給其安排新任務(wù),確保沒有一個“干活的”能夠偷懶,如果“領(lǐng)導(dǎo)”發(fā)現(xiàn)某個“干活的”因為勞累過度而病倒了,則是不會考慮先嘗試“醫(yī)治”他的,而是一腳踢出去,然后把他的任務(wù)分給其他人。其中微服務(wù)架構(gòu) Kubernetes 就恰好采用了這一設(shè)計思路。
  • 中心化設(shè)計的問題
  • 中心化的設(shè)計存在的最大問題是“領(lǐng)導(dǎo)”的安危問題,如果“領(lǐng)導(dǎo)”出了問題,則群龍無首,整個集群就奔潰了。但我們難以同時安排兩個“領(lǐng)導(dǎo)”以避免單點問題。
  • 中心化設(shè)計還存在另外一個潛在的問題,既“領(lǐng)導(dǎo)”的能力問題:可以領(lǐng)導(dǎo)10個人高效工作并不意味著可以領(lǐng)導(dǎo)100個人高效工作,所以如果系統(tǒng)設(shè)計和實現(xiàn)得不好,問題就會卡在“領(lǐng)導(dǎo)”身上。
  • 領(lǐng)導(dǎo)安危問題的解決辦法: 大多數(shù)中心化系統(tǒng)都采用了主備兩個“領(lǐng)導(dǎo)”的設(shè)計方案,可以是熱備或者冷備,也可以是自動切換或者手動切換,而且越來越多的新系統(tǒng)都開始具備自動選舉切換“領(lǐng)導(dǎo)”的能力,以提升系統(tǒng)的可用性。

去中心化設(shè)計

  • 眾生地位平等: 在去中心化的設(shè)計里,通常沒有“領(lǐng)導(dǎo)”和“干活的”這兩種角色的區(qū)分,大家的角色都是一樣的,地位是平等的,全球互聯(lián)網(wǎng)就是一個典型的去中心化的分布式系統(tǒng),聯(lián)網(wǎng)的任意節(jié)點設(shè)備宕機,都只會影響很小范圍的功能。
  • “去中心化”不是不要中心,而是由節(jié)點來自由選擇中心。 (集群的成員會自發(fā)的舉行“會議”選舉新的“領(lǐng)導(dǎo)”主持工作。最典型的案例就是ZooKeeper及Go語言實現(xiàn)的Etcd)
  • 去中心化設(shè)計的問題: 去中心化設(shè)計里最難解決的一個問題是 “腦裂”問題 ,這種情況的發(fā)生概率很低,但影響很大。腦裂指一個集群由于網(wǎng)絡(luò)的故障,被分為至少兩個彼此無法通信的單獨集群,此時如果兩個集群都各自工作,則可能會產(chǎn)生嚴(yán)重的數(shù)據(jù)沖突和錯誤。一般的設(shè)計思路是,當(dāng)集群判斷發(fā)生了腦裂問題時,規(guī)模較小的集群就“自殺”或者拒絕服務(wù)。

分布式與集群的區(qū)別是什么?

  • 分布式: 一個業(yè)務(wù)分拆多個子業(yè)務(wù),部署在不同的服務(wù)器上
  • 集群: 同一個業(yè)務(wù),部署在多個服務(wù)器上。比如之前做電商網(wǎng)站搭的redis集群以及solr集群都是屬于將redis服務(wù)器提供的緩存服務(wù)以及solr服務(wù)器提供的搜索服務(wù)部署在多個服務(wù)器上以提高系統(tǒng)性能、并發(fā)量解決海量存儲問題。

CAP定理

在理論計算機科學(xué)中,CAP定理(CAP theorem),又被稱作布魯爾定理(Brewer’s theorem),它指出對于一個分布式計算系統(tǒng)來說,不可能同時滿足以下三點:

選項描述
Consistency(一致性)指數(shù)據(jù)在多個副本之間能夠保持一致的特性(嚴(yán)格的一致性)
Availability(可用性)指系統(tǒng)提供的服務(wù)必須一直處于可用的狀態(tài),每次請求都能獲取到非錯的響應(yīng)(不保證獲取的數(shù)據(jù)為最新數(shù)據(jù))
Partition tolerance(分區(qū)容錯性)分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障的時候,仍然能夠?qū)ν馓峁M足一致性和可用性的服務(wù),除非整個網(wǎng)絡(luò)環(huán)境都發(fā)生了故障

Spring Cloud在CAP法則上主要滿足的是A和P法則,Dubbo和Zookeeper在CAP法則主要滿足的是C和P法則

CAP僅適用于原子讀寫的NOSQL場景中,并不適合數(shù)據(jù)庫系統(tǒng)。現(xiàn)在的分布式系統(tǒng)具有更多特性比如擴展性、可用性等等,在進行系統(tǒng)設(shè)計和開發(fā)時,我們不應(yīng)該僅僅局限在CAP問題上。

注意:不是所謂的3選2(不要被網(wǎng)上大多數(shù)文章誤導(dǎo)了)

現(xiàn)實生活中,大部分人解釋這一定律時,常常簡單的表述為:“一致性、可用性、分區(qū)容忍性三者你只能同時達(dá)到其中兩個,不可能同時達(dá)到”。實際上這是一個非常具有誤導(dǎo)性質(zhì)的說法,而且在CAP理論誕生12年之后,CAP之父也在2012年重寫了之前的論文。

當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)的時候,如果我們要繼續(xù)服務(wù),那么強一致性和可用性只能2選1。也就是說當(dāng)網(wǎng)絡(luò)分區(qū)之后P是前提,決定了P之后才有C和A的選擇。也就是說分區(qū)容錯性(Partition tolerance)我們是必須要實現(xiàn)的。

CAP定理的證明

關(guān)于CAP這三個特性我們就介紹完了,接下來我們試著證明一下為什么CAP不能同時滿足

為了簡化證明的過程,我們假設(shè)整個集群里只有兩個N1和N2兩個節(jié)點,如下圖:

N1和N2當(dāng)中各自有一個應(yīng)用程序AB和數(shù)據(jù)庫,當(dāng)系統(tǒng)滿足一致性的時候,我們認(rèn)為N1和N2數(shù)據(jù)庫中的數(shù)據(jù)保持一致。在滿足可用性的時候,我們認(rèn)為無論用戶訪問N1還是N2,都可以獲得正確的結(jié)果,在滿足分區(qū)容錯性的時候,我們認(rèn)為無論N1還是N2宕機或者是兩者的通信中斷,都不影響系統(tǒng)的運行。

我們假設(shè)一種極端情況,假設(shè)某個時刻N1和N2之間的網(wǎng)絡(luò)通信突然中斷了。如果系統(tǒng)滿足分區(qū)容錯性,那么顯然可以支持這種異常。問題是在此前提下,一致性和可用性是否可以做到不受影響呢?

我們做個假象實驗,如下圖,突然某一時刻N1和N2之間的關(guān)聯(lián)斷開:

有用戶向N1發(fā)送了請求更改了數(shù)據(jù),將數(shù)據(jù)庫從V0更新成了V1。由于網(wǎng)絡(luò)斷開,所以N2數(shù)據(jù)庫依然是V0,如果這個時候有一個請求發(fā)給了N2,但是N2并沒有辦法可以直接給出最新的結(jié)果V1,這個時候該怎么辦呢?

這個時候無法兩種方法,一種是將錯就錯,將錯誤的V0數(shù)據(jù)返回給用戶。第二種是阻塞等待,等待網(wǎng)絡(luò)通信恢復(fù),N2中的數(shù)據(jù)更新之后再返回給用戶。顯然前者犧牲了一致性,后者犧牲了可用性。

這個例子雖然簡單,但是說明的內(nèi)容卻很重要。在分布式系統(tǒng)當(dāng)中,CAP三個特性我們是無法同時滿足的,必然要舍棄一個。三者舍棄一個,顯然排列組合一共有三種可能。

BASE理論

BASE理論由eBay架構(gòu)師Dan Pritchett提出,在2008年上被分表為論文,并且eBay給出了他們在實踐中總結(jié)的基于BASE理論的一套新的分布式事務(wù)解決方案。

BASEBasically Available(基本可用)Soft-state(軟狀態(tài))Eventually Consistent(最終一致性) 三個短語的縮寫。BASE理論是對CAP中一致性和可用性權(quán)衡的結(jié)果,其來源于對大規(guī)模互聯(lián)網(wǎng)系統(tǒng)分布式實踐的總結(jié),是基于CAP定理逐步演化而來的,它大大降低了我們對系統(tǒng)的要求。

BASE理論的核心思想

即使無法做到強一致性,但每個應(yīng)用都可以根據(jù)自身業(yè)務(wù)特點,采用適當(dāng)?shù)姆绞絹硎瓜到y(tǒng)達(dá)到最終一致性。也就是犧牲數(shù)據(jù)的一致性來滿足系統(tǒng)的高可用性,系統(tǒng)中一部分?jǐn)?shù)據(jù)不可用或者不一致時,仍需要保持系統(tǒng)整體“主要可用”。

針對數(shù)據(jù)庫領(lǐng)域,BASE思想的主要實現(xiàn)是對業(yè)務(wù)數(shù)據(jù)進行拆分,讓不同的數(shù)據(jù)分布在不同的機器上,以提升系統(tǒng)的可用性,當(dāng)前主要有以下兩種做法:

  • 按功能劃分?jǐn)?shù)據(jù)庫
  • 分片(如開源的Mycat、Amoeba等)。

由于拆分后會涉及分布式事務(wù)問題,所以eBay在該BASE論文中提到了如何用最終一致性的思路來實現(xiàn)高性能的分布式事務(wù)。

BASE理論三要素

1. 基本可用

基本可用是指分布式系統(tǒng)在出現(xiàn)不可預(yù)知故障的時候,允許損失部分可用性。但是,這絕不等價于系統(tǒng)不可用。

比如:

  • 響應(yīng)時間上的損失:正常情況下,一個在線搜索引擎需要在0.5秒之內(nèi)返回給用戶相應(yīng)的查詢結(jié)果,但由于出現(xiàn)故障,查詢結(jié)果的響應(yīng)時間增加了1~2秒
  • 系統(tǒng)功能上的損失:正常情況下,在一個電子商務(wù)網(wǎng)站上進行購物的時候,消費者幾乎能夠順利完成每一筆訂單,但是在一些節(jié)日大促購物高峰的時候,由于消費者的購物行為激增,為了保護購物系統(tǒng)的穩(wěn)定性,部分消費者可能會被引導(dǎo)到一個降級頁面
2. 軟狀態(tài)

軟狀態(tài)指允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該中間狀態(tài)的存在不會影響系統(tǒng)的整體可用性,即允許系統(tǒng)在不同節(jié)點的數(shù)據(jù)副本之間進行數(shù)據(jù)同步的過程存在延時

3. 最終一致性

最終一致性強調(diào)的是系統(tǒng)中所有的數(shù)據(jù)副本,在經(jīng)過一段時間的同步后,最終能夠達(dá)到一個一致的狀態(tài)。因此,最終一致性的本質(zhì)是需要系統(tǒng)保證最終數(shù)據(jù)能夠達(dá)到一致,而不需要實時保證系統(tǒng)數(shù)據(jù)的強一致性。

總結(jié)

以上是生活随笔為你收集整理的分布式——分布式面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。