大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

面試題首頁 > Java分布式面試題

分布式常見面試題

001什么是CAP理論?

CAP原理指的是,在分布式系統中這三個要素最多只能同時實現兩點,不可能三者兼顧。因此在進行分布式架構設計時,必須做出取舍。而對于分布式數據系統,分區容忍性是基本要求,否則就失去了價值。因此設計分布式數據系統,就是在一致性和可用性之間取一個平衡。對于大多數Web應用,其實并不需要強一致性,因此犧牲一致性而換取高可用性,是目前多數分布式數據庫產品的方向。 
一致性(Consistency):數據在多個副本之間是否能夠保持一致的特性。(當一個系統在一致狀態下更新后,應保持系統中所有數據仍處于一致的狀態)。 
可用性(Availability):系統提供的服務必須一直處于可用狀態,對每一個操作的請求必須在有限時間內返回結果。 
分區容錯性(Tolerance of network Partition):分布式系統在遇到網絡分區故障時,仍然需要保證對外提供一致性和可用性的服務,除非整個網絡都發生故障。

002CAP理論中為什么只能同時滿足兩個?

例如,服務器中原本存儲的value=0,當客戶端A修改value=1時,為了保證數據的一致性,要寫到3個服務器中,當服務器C故障時,數據無法寫入服務器C,則導致了此時服務器A、B和C的value是不一致的。這時候要保證分區容錯性,即當服務器C故障時,仍然能保持良好的一致性和可用性服務,則Consistency和Availability不能同時滿足。為什么呢? 如果滿足了一致性,則客戶端A的寫操作value=1不能成功,這時服務器中所有value=0。如果滿足可用性,即所有客戶端都可以提交操作并得到返回的結果,則此時允許客戶端A寫入服務器A和B,客戶端C將得到未修改之前的value=0結果。

003什么是BASE理論?

1)Basically Available(基本可用)分布式系統在出現不可預知故障的時候,允許損失部分可用性 
2)Soft state(軟狀態)軟狀態也稱為弱狀態,和硬狀態相對,是指允許系統中的數據存在中間狀態,并認為該中間狀態的存在不會影響系統的整體可用性,即允許系統在不同節點的數據副本之間進行數據同步的過程存在延時。 
2)Eventually consistent(最終一致性)最終一致性強調的是系統中所有的數據副本,在經過一段時間的同步后,最終能夠達到一個一致的狀態。因此,最終一致性的本質是需要系統保證最終數據能夠達到一致,而不需要實時保證系統數據的強一致性。

004CAP 與 ACID 關系?

ACID 是傳統數據庫常用的設計理念,追求強一致性模型。BASE 支持的是大型分布式系統,提出通過犧牲強一致性獲得高可用性。 ACID 和 BASE 代表了兩種截然相反的設計哲學,在分布式系統設計的場景中,系統組件對一致性要求是不同的,因此 ACID 和 BASE 又會結合使用。

005什么是接口冪等?

接口的冪等性實際上就是接口可重復調用,在調用方多次調用的情況下,接口最終得到的結果是一致的。有些接口可以天然的實現冪等性,比如查詢接口,對于查詢來說,你查詢一次和兩次,對于系統來說,沒有任何影響,查出的結果也是一樣。除了查詢功能具有天然的冪等性之外,增加、更新、刪除都要保證冪等性。

006如何來保證冪等性呢?

1)全局唯一ID:全局唯一ID就是根據業務的操作和內容生成一個全局ID,在執行操作前先根據這個全局唯一ID是否存在,來判斷這個操作是否已經執行。如果不存在則把全局ID,存儲到存儲系統中,比如數據庫、redis等。如果存在則表示該方法已經執行。 從工程的角度來說,使用全局ID做冪等可以作為一個業務的基礎的微服務存在,在很多的微服務中都會用到這樣的服務,在每個微服務中都完成這樣的功能,會存在工作量重復。另外打造一個高可靠的冪等服務還需要考慮很多問題,比如一臺機器雖然把全局ID先寫入了存儲,但是在寫入之后掛了,這就需要引入全局ID的超時機制。 使用全局唯一ID是一個通用方案,可以支持插入、更新、刪除業務操作。但是這個方案看起來很美但是實現起來比較麻煩,下面的方案適用于特定的場景,但是實現起來比較簡單。 
2)去重表:這種方法適用于在業務中有唯一標的插入場景中,比如在以上的支付場景中,如果一個訂單只會支付一次,所以訂單ID可以作為唯一標識。這時,我們就可以建一張去重表,并且把唯一標識作為唯一索引,在我們實現時,把創建支付單據和寫入去去重表,放在一個事務中,如果重復創建,數據庫會拋出唯一約束異常,操作就會回滾。 
3)插入或更新:這種方法插入并且有唯一索引的情況,比如我們要關聯商品品類,其中商品的ID和品類的ID可以構成唯一索引,并且在數據表中也增加了唯一索引。這時就可以使用InsertOrUpdate操作。在mysql數據庫中如下: 

insert into goods_category (goods_id,category_id,create_time,update_time)?
? ? ? ?values(#{goodsId},#{categoryId},now(),now())?
? ? ? ?on DUPLICATE KEY UPDATE
? ? ? ?update_time=now()

4)多版本控制:這種方法適合在更新的場景中,比如我們要更新商品的名字,這時我們就可以在更新的接口中增加一個版本號,來做冪等 

boolean updateGoodsName(int id,String newName,int version);

在實現時可以如下 

update goods set name=#{newName},version=#{version} where id=#{id} and version<${version}

5)狀態機控制:這種方法適合在有狀態機流轉的情況下,比如就會訂單的創建和付款,訂單的付款肯定是在之前,這時我們可以通過在設計狀態字段時,使用int類型,并且通過值類型的大小來做冪等。比如訂單的創建為0,付款成功為100,付款失敗為99 。
在做狀態機更新時,我們就這可以這樣控制 

update `order` set status=#{status} where id=#{id} and status<#{status}

007什么是分布式事務?

分布式事務是指事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位于不同的分布式系統的不同節點之上。一個大的操作由 N 多的小的操作共同完成。而這些小的操作又分布在不同的服務上。針對于這些操作,要么全部成功執行,要么全部不執行。

008分布式id生成方案有哪些?

1.UUID:時間戳+時鐘序列(計數器)+唯一的IEEE機器識別碼(比如網卡的MAC地址) 。
缺點:對數據庫不友好,因為隨機不連續。
2.數據庫自增:對于數據庫集群模型,要設置不同的數據庫起始值不同,但是步長(自增幾)相同。 
3.Leaf-segment:(美團大眾點評的)采用每次獲取一個ID區間的方式。比如一次和數據庫的交互,就請求到100個id,數據來了直接用。避免每次添加數據都請求一個id,增加了數據庫的壓力。 也是對數據庫自增策略的一個優化。
4.雪花算法:其核心思想是:41位時間戳+10位機器id+12位序列號+符號位(0)。結果是一個長度為64bit的long型的ID。  
優點:12位序列號是說每個節點在每毫秒可以產生4096 個ID,并且是遞增的。 這樣適合于Mysql的聚集索引,索引的連續性也好。 
缺點:依賴于時間戳,時間戳是根據機器的時間得到的。比如linux中,如果人為的進行時鐘回撥,就可能造成id重復。

009分布式架構下,Session 共享有什么方案?

● 使用jwt
● 使用cookie (有安全風險)
● 服務器之間進行session同步:保證每個服務器都有session信息,消耗比較大。
● ip綁定策略:比如使用Ngnix進行源地址哈希法的負載均衡,讓每一個ip固定訪問一個服務器, 但是這種就失去分布式的作用。
● 使用redis存儲:是業界最廣泛的。 可實現不同服務,不同平臺(網頁/app),甚至不同語言的session共享。

目錄

返回頂部
主站蜘蛛池模板: 真人特级毛片免费视频 | 香蕉视频免费看 | 色片网站在线观看 | 九九九精品在线观看 | 日日摸天天摸狠狠摸视频 | 一区二区三区在线 | 日本 | 天天亚洲综合 | 国产成人小视频在线观看 | 奶交性视频欧美 | 91在线精品亚洲一区二区 | 在线亚洲欧洲福利视频 | aaaaaa国产毛片孕妇版 | 好男人午夜影院 | 免费网站看v片在线成人国产系列 | 欧美天堂在线视频 | 91久久精品国产91性色tv | 国产成人教育视频在线观看 | 国内精品久久久久影院日本 | 久久99热精品免费观看k影院 | 日本黄色aa| 亚洲激情视频 | 日韩在线色 | 真人午夜a一级毛片 | 香香在线观看视频 | 国产一二三区精品 | 爱爱免费网站 | 久久精品福利 | 女性一级全黄生活片免费看 | 久久不射视频 | 永久免费精品影视网站 | 91日韩欧美 | 手机看片高清国产日韩片 | 国内精品久久影视 | 久热精品免费视频 | 欧美日韩国产片 | 色色色爱| 亚洲视频91 | 99热这里只有精品在在 | 日本不卡在线观看免费v | 亚洲va精品中文字幕 | 久久综合草 |