分布式常見面試題整理

、分布式理論:

  1. CAP理論
    分布式系統最多同時滿足一致性(C)、可用性(A)、分區容錯性(P)中的兩個,無法三者兼得。

  2. BASE理論
    對CAP中一致性和可用性的權衡,強調基本可用(BA)、軟狀態(S)和最終一致性(E),適用于高可用場景。

  3. 2PC(兩階段提交)
    分布式事務協議,分準備(投票)和提交/回滾兩個階段,保證強一致性但存在同步阻塞和單點問題。

  4. 3PC(三階段提交)
    2PC的改進,增加預提交階段減少阻塞,但仍可能數據不一致。

  5. ZAB協議
    ZooKeeper的核心協議,通過選舉Leader和原子廣播實現數據一致性,用于分布式協調。

  6. Raft協議
    更易理解的共識算法,通過選舉Leader、日志復制保證一致性,替代Paxos用于分布式系統一致性管理。

二、Zookeeper:

  1. ZooKeeper是什么?
    分布式協調服務,提供數據發布/訂閱、分布式鎖、集群管理等功能,基于ZAB協議保證一致性。

  2. Zookeeper怎么保證主從節點的數據同步?
    通過ZAB協議:Leader接收寫請求,廣播提案(Proposal),Follower/Observer同步日志并ACK,超過半數確認后Leader提交事務。

  3. Zookeeper為什么能用做注冊中心?
    支持臨時節點和Watcher機制,服務注冊(創建節點)、下線(節點自動刪除)、發現(監聽節點變化)實時通知。

  4. Zookeeper中有哪些類型的數據節點?

    • 持久節點(PERSISTENT)

    • 臨時節點(EPHEMERAL)

    • 持久順序節點(PERSISTENT_SEQUENTIAL)

    • 臨時順序節點(EPHEMERAL_SEQUENTIAL)

  5. Zookeeper中Watcher機制是什么?
    事件監聽回調:客戶端對節點注冊Watcher,節點變化(增刪改)時服務端觸發事件通知,但是一次性的(需反復注冊)。

  6. Zookeeper集群中有哪些服務器角色?

    • Leader:處理寫請求,發起提案和提交。

    • Follower:參與投票和選舉,同步Leader數據。

    • Observer:同步數據但不投票,擴展讀性能。

  7. Zookeeper中的領導者選舉是如何實現的?
    基于ZAB協議:節點啟動或Leader崩潰時進入選舉狀態,投票優先投zxid(事務ID)最大、其次serverid最大的節點,超過半數當選。

  8. ZAB協議包括哪些內容?

    • 崩潰恢復:選舉新Leader,數據同步到最新狀態。

    • 消息廣播:Leader將寫請求以提案廣播,半數確認后提交。

  9. Zookeeper能解決腦裂問題嗎?
    能。基于過半機制(Quorum),寫請求需多數節點確認,分裂后僅多數派分區能選舉Leader和服務,少數派分區拒絕請求。

  10. 為什么Zookeeper集群的節點個數要用奇數個?
    容錯與成本平衡:n節點集群容忍(n-1)/2個故障。奇數節點在相同容錯能力下(如3節點和4節點均容錯1故障)更節省資源。

  11. Zookeeper能用來做什么?

    • 注冊中心(如Dubbo)

    • 分布式鎖(臨時順序節點)

    • 配置管理(持久節點+Watcher)

    • 集群選主(臨時節點+選舉)

  12. Zookeeper實現分布式鎖的原理?

    • 爭搶鎖:所有客戶端在指定目錄下創建臨時順序節點。

    • 判斷最小節點:最小節點獲鎖。

    • 監聽前序節點:非最小節點監聽前一個節點,釋放時觸發通知。

    • 避免驚群:僅監聽前一個節點。

  13. Zookeeper實現配置中心的原理?

    • 存儲配置:配置信息存儲在持久節點。

    • 動態更新:客戶端監聽節點Watcher,配置變更時服務端通知,客戶端拉取新配置。

  14. Zookeeper和Dubbo的關系?
    Zookeeper作為Dubbo的注冊中心,服務提供者注冊地址到ZK,消費者從ZK發現服務列表,并監聽變化實現動態路由。

三、分布式緩存:

  1. 什么是Redis?
    開源內存數據結構存儲,用作數據庫、緩存、消息隊列,支持多種數據結構與持久化。

  2. 為什么要用緩存?

    • 高性能:內存讀寫快,降低數據庫壓力。

    • 高并發:緩解數據庫負載,提升系統吞吐量。

  3. 為什么用Redis不用Map?

    • Redis是分布式緩存,支持多服務共享;本地Map僅單機有效。

    • Redis提供持久化、豐富數據結構、過期策略等。

  4. Redis線程模型?
    單線程Reactor模型(6.0前):單線程處理命令+IO多路復用,避免上下文切換,保證原子性。

  5. Redis和Memcached區別?

    • Redis:支持多種數據結構、持久化、主從復制,適用復雜場景。

    • Memcached:只支持KV、多線程、無持久化,純緩存場景性能更高。

  6. Redis常見數據結構及使用場景?

    • String:緩存、計數器

    • Hash:存儲對象

    • List:消息隊列、棧

    • Set:標簽、好友關系

    • ZSet:排行榜

    • Bitmap:位統計

    • HyperLogLog:基數估算

    • Stream:消息流(5.0+)

  7. Redis故障恢復?
    通過持久化:

    • RDB:快照恢復,數據可能丟失。

    • AOF:日志重放,數據更完整(可配置fsync策略)。

  8. 保證Redis中為熱點數據?
    設置內存上限+淘汰策略(如LRU/LFU),自動淘汰冷數據。

  9. 如何實現Redis事務?

    • MULTI開啟事務,命令入隊。

    • EXEC執行(原子性,但無回滾)。

    • WATCH監控Key(樂觀鎖)。

  10. 緩存雪崩及解決?

    • 問題:大量緩存同時過期,請求直接擊穿數據庫。

    • 解決:隨機過期時間、集群高可用、永不過期(后臺更新)。

  11. 緩存穿透及解決?

    • 問題:查詢不存在的數據(如惡意攻擊),繞過緩存。

    • 解決:布隆過濾器、空值緩存、接口校驗。

  12. 緩存擊穿及解決?

    • 問題:熱點Key過期,瞬間高并發查詢數據庫。

    • 解決:互斥鎖(如Redis SETNX)、永不過期(邏輯過期)。

  13. 并發競爭Key問題?

    • 用WATCH+事務(樂觀鎖)。

    • 或分布式鎖(如Redisson)保證串行訪問。

  14. 什么是RedLock?
    Redis官方分布式鎖算法:向多個獨立Redis實例申請鎖,過半成功才算獲取,避免單點故障。

  15. 緩存與數據庫雙寫一致性?

    • 策略:先更新數據庫,再刪除緩存(延遲雙刪)。

    • 補充:讀請求先讀緩存,未命中讀庫+回寫。

  16. 單節點實現分布式鎖?
    SET key random_value NX PX 3000(原子設值+過期時間),解鎖時用Lua腳本校驗值再刪除。

  17. Redis使用場景?
    緩存、會話存儲、排行榜、消息隊列、分布式鎖等。

  18. Redis功能?
    持久化、主從復制、哨兵、集群、事務、Pub/Sub等。

  19. Redis為什么單線程?
    避免鎖競爭和上下文切換,內存操作+IO多路復用已足夠高效(6.0后多線程僅處理網絡IO)。

  20. Redis的Java客戶端?
    Jedis(同步阻塞)、Lettuce(異步非阻塞)、Redisson(分布式功能封裝)。

  21. Jedis和Redisson區別?

    • Jedis:輕量級API,直接操作Redis。

    • Redisson:分布式對象(如鎖、隊列)封裝,更高級抽象。

  22. Redis實現分布式鎖?

    • 命令:SETNX+過期時間(防死鎖)。

    • 推薦:Redisson的RLock,支持可重入、續期。

  23. Redis持久化方式?

    • RDB:快照,二進制壓縮文件。

    • AOF:日志追加,可配置每秒/每次同步。

    • 混合持久化(4.0+):RDB+AOF。

  24. Redis內存優化?

    • 使用合適數據結構(如Hash代替多個String)。

    • 配置最大內存+淘汰策略。

    • 縮短鍵值長度,使用整數池。

  25. Redis分布式鎖缺陷?

    • 非強一致性(主從切換可能鎖失效)。

    • 需自己解決續期、原子性等問題(推薦Redisson)。

  26. Redis性能問題及解決?

    • 慢查詢:優化命令,避免大數據操作。

    • 內存不足:增加內存或優化數據。

    • 網絡瓶頸:集群分片或客戶端優化。

  27. Redis淘汰策略?

    • volatile-lru/ttl:過期鍵中淘汰。

    • allkeys-lru/lfu:所有鍵中淘汰。

    • random:隨機淘汰。

    • noeviction:不淘汰(默認)。

  28. 單線程Redis為什么快?

    • 內存操作。

    • IO多路復用(epoll)。

    • 單線程無鎖競爭。

  29. Redis應用場景?
    緩存、會話共享、分布式鎖、排行榜、消息隊列、地理空間計算等。

四、消息隊列:

  1. MQ選型考慮因素?
    吞吐量(Kafka/RocketMQ)、延遲(RabbitMQ)、可靠性、功能(事務/延遲消息)、生態和運維成本。

  2. RabbitMQ消息發送過程?
    生產者→交換機(Exchange)→路由綁定(Binding)→隊列(Queue)→消費者。

  3. RabbitMQ保證消息穩定性?

    • 持久化(交換機、隊列、消息)。

    • 生產者確認(Confirm)、消費者手動ACK。

    • 集群鏡像隊列。

  4. 避免消息丟失?

    • 生產者:開啟Confirm機制(確認Broker接收)。

    • Broker:持久化+鏡像隊列。

    • 消費者:手動ACK(處理完再確認)。

  5. 持久化缺點?
    磁盤IO性能下降(但內存+磁盤組合仍可接受)。

  6. 消息持久化成功條件?

    • 交換機、隊列持久化。

    • 消息投遞模式(delivery_mode=2)。

    • 寫入磁盤(刷盤策略)。

  7. RabbitMQ廣播類型?

    • 直連(Direct)、主題(Topic)、扇出(Fanout)、頭(Headers)。

  8. 實現延遲消息隊列?
    插件(rabbitmq_delayed_message_exchange)或TTL+死信隊列(DLX)。

  9. RabbitMQ節點類型?

    • 磁盤節點(元數據持久化)。

    • 內存節點(元數據內存,性能高)。

  10. 每個節點是完整拷貝嗎?
    不是。僅元數據(隊列結構等)同步,消息數據需配置鏡像隊列才復制。

  11. 唯一磁盤節點崩潰?
    集群無法修改元數據(如創建隊列),但內存節點仍可服務(需至少一個磁盤節點存活)。

  12. 集群節點停止順序?
    先停內存節點,最后停磁盤節點(避免元數據丟失)。

  13. RabbitMQ使用場景?
    異步解耦、流量削峰、延遲消息、順序消息(單隊列)。

  14. 重要角色?
    生產者、消費者、Broker(服務器)、交換機、隊列。

  15. 重要組件?
    連接(Connection)、信道(Channel)、虛擬主機(vhost)。

  16. vhost作用?
    邏輯隔離(不同業務組獨立使用),類似命名空間。

  17. 什么是Kafka?
    分布式流處理平臺,高吞吐、持久化、多訂閱,用于日志、消息隊列等。

  18. 為什么用消息隊列?
    解耦、異步、削峰。

  19. Kafka中ISR、AR?

    • AR:所有副本。

    • ISR:與Leader同步的副本(含Leader)。

    • ISR伸縮:副本滯后(超過replica.lag.time.max.ms)被踢出,追上后加入。

  20. Broker作用?
    存儲消息,處理讀寫請求。

  21. Zookeeper在Kafka中的作用?可不用嗎?

    • 存儲元數據(Broker、Topic、分區信息)、選Controller。

    • 2.8.0后支持不用Zookeeper(KRaft模式)。

  22. Follower同步數據?
    拉取(Pull)Leader數據,寫入本地日志。

  23. Broker被踢出ISR?
    同步滯后(如網絡慢、宕機)超過閾值(replica.lag.time.max.ms)。

  24. Kafka為什么快?

    • 順序讀寫磁盤。

    • 零拷貝(sendfile)。

    • 分區并行+批量壓縮。

  25. Producer優化速度?
    批量發送(linger.ms、batch.size)、壓縮、異步發送。

  26. ack含義?

    • 0:不等待確認(可能丟失)。

    • 1:Leader確認(可能丟失)。

    • -1(all):ISR所有副本確認(可靠)。

  27. Message格式?
    偏移量+時間戳+Key+Value+頭部字段。

  28. Consumer Group作用?
    實現發布訂閱(不同Group獨立消費)和隊列(同Group內競爭消費)。

  29. 消息丟失和重復消費?

    • 丟失:ack配置不當、未處理完消費者宕機。

    • 重復:生產者重試、消費者提交偏移量失敗。

  30. 為什么不支持讀寫分離?
    Leader處理讀寫,利用順序寫和頁緩存,避免數據不一致和網絡開銷。

  31. 消息順序性?
    分區內順序(同一分區消息順序消費),但全局不保證。

  32. 實現延遲隊列?
    使用時間戳+多個Topic(或Kafka自2.1+支持內部延遲)。

  33. 事務實現?
    跨分區原子寫(Producer端),使用事務協調器。

  34. 選舉及策略?

    • Controller選舉:基于Zookeeper(臨時節點)。

    • Partition Leader:Controller指定(ISR中首選)。

  35. RocketMQ選型原因?
    對比Kafka(高吞吐但延遲高)、RabbitMQ(低延遲但吞吐低),RocketMQ平衡吞吐、延遲、事務消息、中文生態。

  36. RocketMQ分布式存儲?
    主題分多個隊列(Queue),分布在不同Broker,每個隊列多副本。

  37. Broker宕機處理?

    • 主從切換(Slave同步數據,自動提升為Master)。

    • 集群消費模式(重試其他Broker)。

  38. 發現Broker?
    通過NameServer(服務發現)獲取Broker路由信息。

  39. RocketMQ核心部分?
    NameServer(元數據)、Broker(存儲)、Producer、Consumer。

  40. NameServer部署幾臺?
    可多臺(通常2-4),集群部署避免單點,但節點間無數據同步(各存全量數據)。

  41. Broker注冊到哪個NameServer?
    配置的所有NameServer(全部注冊)。

  42. 獲取Broker信息?
    客戶端定時從NameServer拉取路由表。

  43. 感知Broker宕機?
    NameServer心跳檢測(Broker定時上報),超時則剔除。

  44. Master同步Slave?
    異步或同步復制(取決于配置)。

  45. Slave掛掉影響?
    無直接影響(Master仍服務),但降低可用性(無法故障切換)。

  46. Master掛掉?

    • 自動切換:Slave提升為Master(需配置Dledger或故障轉移)。

    • 手動干預:依賴運維腳本。

  47. Dledger機制?
    Raft協議實現,保證多副本數據一致性,自動選主和故障轉移。

五、分布式鎖:

  1. 需要使用分布式鎖的場景?
    秒殺庫存扣減、集群定時任務調度、共享資源訪問(如文件修改)、防止重復提交等。

  2. 常見的分布式鎖解決方案?

    • 基于數據庫(唯一索引、悲觀鎖)

    • 基于Redis(SETNX+過期時間)

    • 基于ZooKeeper(臨時順序節點)

    • 基于Etcd(租約機制)

  3. Redis分布式鎖實現方法?
    命令:SET lock_key random_value NX PX 3000(原子操作設值+過期時間)。
    釋放:Lua腳本校驗值再刪除(防誤刪)。
    缺陷:主從切換可能鎖失效(可用RedLock算法緩解)。

  4. ZooKeeper分布式鎖實現原理?

    • 爭搶鎖:所有客戶端在鎖目錄下創建臨時順序節點。

    • 判斷最小節點:序號最小的節點獲鎖。

    • 監聽前序節點:未獲鎖的客戶端監聽前一個節點,釋放時通知下一個節點。

    • 優點:強一致性,無鎖失效問題;缺點:性能較低。

  5. ZK和Redis分布式鎖優缺點?

    • Redis
      優點:性能高、實現簡單。
      缺點:非強一致性(主從同步延遲可能鎖失效)。

    • ZooKeeper
      優點:強一致性、可靠性高。
      缺點:性能較低、依賴ZK集群。

  6. Mysql如何做分布式鎖?

    • 方法1:基于唯一索引(插入成功獲鎖,刪除釋放)。

    • 方法2:基于悲觀鎖(SELECT ... FOR UPDATE)。
      缺點:數據庫性能瓶頸,鎖無自動失效(需超時機制)。

  7. 業界大公司的分布式鎖框架?

    • Google:Chubby(基于Paxos,類似ZK)。

    • 阿里巴巴:基于Redis的分布式鎖(Redisson封裝)。

    • Netflix:基于ZooKeeper的分布式鎖。

    • Apache:Curator(ZK客戶端,提供分布式鎖封裝)。

六、分布式服務調用:

  1. 什么是RPC?
    遠程過程調用,像調用本地方法一樣調用遠程服務,隱藏網絡細節。

  2. RPC over HTTP vs RPC over TCP?

    • HTTP:通用、穿透性好(如Rest),但性能較低。

    • TCP:自定義協議(如Dubbo),性能高,但更復雜。

  3. Dubbo核心組件?

    • Provider:服務提供者

    • Consumer:服務消費者

    • Registry:注冊中心(如Zookeeper)

    • Monitor:監控中心

    • Container:服務運行容器

  4. Dubbo服務調用過程?
    消費者通過代理調用→從注冊中心獲取服務列表→負載均衡選Provider→網絡傳輸(序列化/反序列化)→執行并返回結果。

  5. 集群容錯方案?

    • Failover(默認):失敗自動重試其他節點。

    • Failfast:快速失敗,立即報錯。

    • Failsafe:忽略錯誤,記錄日志。

    • Failback:失敗后臺記錄,定時重試。

    • Forking:并行調用多個節點,取最先返回的結果。

    • Broadcast:廣播調用所有節點,任意一個報錯則報錯。

  6. 服務調用是阻塞的嗎?
    默認同步阻塞調用,但支持異步調用(Future或回調)。

  7. Dubbo支持的協議及場景?

    • dubbo協議(默認):TCP長連接,高性能,適合大并發小數據量。

    • rmi協議:JDK標準,適合短連接大數據包。

    • http協議:基于HTTP,易跨語言。

    • hessian協議:基于HTTP,適合多語言交互。

  8. Dubbo vs Spring Cloud?

    • Dubbo:性能高(RPC),適合內部服務調用。

    • Spring Cloud:生態全(HTTP+Rest),適合微服務全家桶。
      根據團隊技術棧和需求選擇。

  9. 負載均衡策略?

    • Random(默認):隨機選擇。

    • RoundRobin:輪詢。

    • LeastActive:選最不活躍的節點(請求數最少)。

    • ConsistentHash:一致性Hash,相同參數總是請求同一節點。

  10. 序列化框架?
    默認Hessian2,還支持Kryo(高性能)、FST、JSON等。

  11. 服務降級?

    • 配置mock值:強制返回默認值(如null)。

    • 容錯mock:失敗時執行mock邏輯。

  12. 服務暴露過程?
    服務提供者啟動→向注冊中心注冊服務→本地暴露服務(啟動Netty服務器監聽請求)。

  13. 服務引入過程?
    消費者啟動→從注冊中心訂閱服務→獲取提供者列表→創建代理對象(用于遠程調用)。

  14. 支持一個服務多個協議?
    支持,可在@Service注解中配置多個協議(如dubbo和hessian),不同協議不同端口。

  15. 支持一個服務多個注冊中心?
    支持,可配置服務同時注冊到多個注冊中心(如Zookeeper和Nacos)。

  16. 支持一個服務多個版本?
    支持,通過版本號(version)區分,消費者可指定調用特定版本的服務。

七、微服務:

  1. 如何理解微服務?
    將單體應用拆分為一組小型、獨立部署的服務,每個服務圍繞特定業務能力構建,服務間通過輕量級通信協作。

  2. 微服務特點?

    • 單一職責

    • 獨立部署、擴展和技術選型

    • 去中心化治理

    • 容錯性強

    • 通過API交互

  3. SOA vs 微服務?

    • SOA:強調集成(ESB總線)、復用、粗粒度服務。

    • 微服務:強調獨立、輕量通信(HTTP/RPC)、細粒度服務、快速交付。

  4. 微服務優缺點?

    • 優點:靈活技術棧、獨立擴縮容、故障隔離、易于迭代。

    • 缺點:運維復雜、網絡延遲、數據一致性難、測試部署復雜。

  5. Spring Cloud Netflix組件?

    • Eureka:服務注冊發現

    • Ribbon:客戶端負載均衡

    • Feign:聲明式HTTP客戶端

    • Hystrix:熔斷降級

    • Zuul:網關(舊版)

  6. Spring Cloud Alibaba組件?

    • Nacos:注冊中心+配置中心

    • Sentinel:流量控制、熔斷降級

    • Seata:分布式事務

    • Dubbo:RPC調用

  7. 斷路器作用?
    防止服務雪崩:當下游服務故障時,快速失敗或降級,避免資源耗盡。

  8. Spring Cloud實現服務注冊?
    服務提供者通過@EnableDiscoveryClient向注冊中心(如Eureka/Nacos)注冊實例信息。

  9. Eureka vs Zookeeper?

    • Eureka:AP架構,保證可用性,適合注冊中心。

    • Zookeeper:CP架構,保證一致性,適合分布式協調。

  10. Ribbon作用?
    客戶端負載均衡:從注冊中心獲取服務列表,根據策略(如輪詢、隨機)選擇實例調用。

  11. Feign作用?
    聲明式REST客戶端:基于注解和接口定義HTTP請求,整合Ribbon和Hystrix。

  12. Hystrix作用?
    熔斷器:實現服務熔斷、降級、線程隔離,提高系統彈性。

  13. Spring Cloud Bus作用?
    消息總線:用于廣播配置變更(配合Config),實現批量刷新配置。

  14. 網關作用?

    • 路由轉發

    • 認證鑒權

    • 限流熔斷

    • 日志監控
      (如Spring Cloud Gateway)

  15. Spring Cloud vs Dubbo?

    • Spring Cloud:生態全(HTTP+Rest),適合微服務全家桶。

    • Dubbo:性能高(RPC),適合內部服務調用。

    • 現在可融合(Spring Cloud Alibaba整合Dubbo)。

  16. Restful?
    一種架構風格:資源用URI標識,通過HTTP方法(GET/POST/PUT/DELETE)操作,無狀態、可緩存。

  17. 如何拆分服務?拆分原則?

    • 根據業務領域(DDD限界上下文)

    • 單一職責、高內聚低耦合

    • 團隊結構(康威定律)

    • 避免分布式大單體

  18. 服務網格(Service Mesh)?

    • 是什么:基礎設施層,處理服務間通信(如Istio、Linkerd)。

    • 特點:解耦業務代碼與通信邏輯(Sidecar代理)。

    • 解決:服務發現、負載均衡、熔斷、安全、可觀測性等。

  19. DDD(領域驅動設計)?
    通過領域模型和通用語言解決復雜業務問題,核心包括:

    • 限界上下文(Bounded Context)

    • 實體、值對象、聚合根

    • 領域事件、倉儲、工廠
      用于指導微服務拆分和架構設計。

八、分布式事務:

  1. 什么是分布式事務?
    跨多個數據庫或服務的事務操作,需要保證所有操作要么全部成功,要么全部失敗。

  2. 常用解決方案?

    • 2PC/3PC(強一致性)

    • TCC(補償型)

    • 消息事務(最終一致性)

    • Saga(長事務)

    • 本地消息表

  3. XA方案流程?
    基于數據庫XA協議:

    1. 事務管理器(TM)啟動全局事務。

    2. 資源管理器(RM)執行分支事務(預提交)。

    3. TM收集所有RM狀態,決定提交或回滾。
      缺點:同步阻塞,性能低。

  4. 2PC(兩階段提交)?

    • 階段一(準備):協調者詢問所有參與者是否可提交,參與者執行事務但不提交。

    • 階段二(提交/回滾):若所有參與者同意,協調者通知提交;否則回滾。
      缺點:同步阻塞、單點問題、數據不一致(協調者宕機)。

  5. 3PC(三階段提交)?
    在2PC基礎上增加超時機制和預提交階段:

    • CanCommit:詢問參與者是否具備條件。

    • PreCommit:預執行事務。

    • DoCommit:提交或回滾。
      減少阻塞,但仍可能數據不一致。

  6. TCC(Try-Confirm-Cancel)?
    業務層補償型方案:

    • Try:預留資源(如凍結庫存)。

    • Confirm:確認操作(扣減庫存)。

    • Cancel:取消操作(釋放庫存)。
      需業務實現補償邏輯,保證最終一致性。

  7. Seata解決方案?

    • AT模式(默認):基于undo_log日志,實現兩階段提交(無侵入)。

    • TCC模式:需業務實現Try/Confirm/Cancel接口。

    • Saga模式:長事務補償流程。

    • XA模式:基于數據庫XA協議。

  8. 如何選擇方案?考慮維度:

    • 一致性要求(強/最終)

    • 性能(吞吐、延遲)

    • 業務侵入性

    • 復雜度與維護成本

    • 技術棧兼容性

  9. Saga模式?
    長事務解決方案:將大事務拆分為多個本地事務,每個事務有對應補償操作。失敗時逆向執行補償。
    適用于業務流程長、低一致性要求的場景。

  10. 常見分布式事務框架及原理?

    • Seata:AT/TCC/XA/Saga模式。

    • RocketMQ事務消息:半消息機制實現最終一致性。

    • LCN(早期):基于代理連接池,模擬兩階段提交。

  11. 消息隊列解決分布式事務?
    使用事務消息(如RocketMQ):

    1. 發送半消息(對消費者不可見)。

    2. 執行本地事務。

    3. 根據本地事務結果提交或回滾消息。

    4. 消費者消費消息,保證最終一致性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98274.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98274.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98274.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python基礎入門常用198英語單詞詳解

最近,我總結了一份Python學習者入門常用單詞表,列出了Python學習中常見的198個高頻單詞,供初學者學習使用。 這些單詞都比較簡單,非常易于理解,在掌握好單詞的基礎上,再去學Python可以達到事半功倍的效果。…

EP-SPY 網路追蹤規避實驗:山脈通聯測試

EP-SPY V3.0 https://github.com/MartinxMax/ep-spy 基於 GI6E 編碼的無線電通信工具,用於保護您的隱私。 https://github.com/MartinxMax/gi6e 編寫了偽協議以防止內容被解密無法通過網絡追蹤,抵抗官方監控無線音頻廣播,用於隱蔽信息傳輸…

蘋果 FoundationModels 秘典俠客行:隱私為先的端側 AI 江湖

引子 話說俠客島之上,有一對年輕俠侶 ——「青鋒劍客」凌云與「素心仙子」蘇凝,二人自幼習武,尤擅拆解各路奇功秘籍。 近日聽聞蘋果谷(Apple)于 WWDC 2025 武林大會之上,亮出一門全新絕學「FoundationMod…

華為基于IPD的產品質量計劃模板

目錄 模板:產品質量計劃模板....................................... 1 1. 介紹...................................................................... 5 1.1. 范圍和目的.................................................... 5 1.2. 參考資料..…

事務管理的選擇:為何 @Transactional 并非萬能,TransactionTemplate 更值得信賴

在 Spring 生態的后端開發中,事務管理是保障數據一致性的核心環節。開發者常常會使用 Transactional 注解快速開啟事務,一行代碼似乎就能解決問題。但隨著業務復雜度提升,這種“簡單”的背后往往隱藏著難以察覺的隱患。本文將深入剖析 Spring…

CodePerfAI體驗:AI代碼性能分析工具如何高效排查性能瓶頸、優化SQL執行耗時?

前陣子幫同事排查用戶下單接口的性能問題時,我算是真切感受到 “找性能瓶頸比寫代碼還磨人”—— 接口偶爾會突然卡到 3 秒以上,查日志只看到 “SQL 執行耗時過長”,但具體是哪個查詢慢、為什么慢,翻了半天監控也沒頭緒&#xff0…

《sklearn機器學習——繪制分數以評估模型》驗證曲線、學習曲線

估計器的偏差、方差和噪聲 每一個估計器都有其優勢和劣勢。它的泛化誤差可以分解為偏差、方差和噪聲。估計器的偏差是不同訓練集的平均誤差。估計器的方差表示對不同訓練集,模型的敏感度。噪聲是數據的特質。 在下圖中,可以看見一個函數 f(x)cos?32πxf…

2025年AI PPT必修課-匯報中AI相關內容的“陷阱”與“亮點”

《2025年AI PPT必修課-匯報中AI相關內容的“陷阱”與“亮點”》 (適用于方案匯報、戰略PPT、標書/投資人演示)一、內容類坑(戰略/趨勢層面)? Pitfall (不要寫)? Correct Expression (推薦寫法)Why (原因)還在強調 Caffe / Theano / TF1.x / LSTM采用 P…

Java數據結構 - 順序表模擬實現與使用

目錄1.順序表的基本介紹2.順序表的模擬實現2.1 常見的功能2.2 基本框架2.3 方法的實現2.3.1 add方法2.3.2 size方法2.3.3 display方法2.3.4 add(int pos,E data)方法2.3.5 remove方法2.3.6 get方法2.3.7 contain方法2.3.8 indexOf方法2.3.9 set方法2.3.1…

rust語言 (1.88) egui (0.32.1) 學習筆記(逐行注釋)(二十六)windows平臺運行時隱藏控制臺

1、主程序第一句添加: 必須放在所有代碼第一句 #![cfg_attr(windows, windows_subsystem "windows")]2、 編譯命令:cargo build --release3、 編譯完成后運行可執行文件: 項目目錄/target/release/項目名.exe

什么是靜態住宅IP 跨境電商為什么要用靜態住宅IP

靜態住宅IP的定義靜態住宅IP是指由互聯網服務提供商(ISP)分配給家庭用戶的固定IP地址。與動態IP不同,靜態IP不會頻繁變動,長期保持穩定。其特點包括:固定性:IP地址長期不變,適合需要穩定網絡環境…

RabbitMQ 初步認識

目錄 1. 基本概念 2. RabbitMq 的工作流程 3. 協議 4. 簡單的生產者, 消費者模型 4.1 我們先引入 rabbitmq 的依賴 4.2 生產者 4.3 消費者 1. 基本概念 Pruducer : 生產者, 產生消息Consumer : 消費者, 消費消息Broker : RabbitMq Server, 用來接收和發送消息Connectio…

Redis(46) 如何搭建Redis哨兵?

搭建 Redis 哨兵(Sentinel)集群,確保 Redis 服務具有高可用性。以下是詳細的步驟,從 Redis 安裝、配置主從復制到配置和啟動 Sentinel 集群,并結合相關的代碼示例。 步驟 1:安裝 Redis 首先,需要…

Grafana 多指標相乘

PromQL中多指標相乘 PromQL表達式: 0.045 * h9_daily_income{coin"nock"} * h9_pool_price_cny{coin"nock"}📈 基礎:單指標運算 常數與指標相乘 在PromQL中,常數與指標的乘法是最簡單的運算: # ?…

【微服務】springboot3 集成 Flink CDC 1.17 實現mysql數據同步

目錄 一、前言 二、常用的數據同步解決方案 2.1 為什么需要數據同步 2.2 常用的數據同步方案 2.2.1 Debezium 2.2.2 DataX 2.2.3 Canal 2.2.4 Sqoop 2.2.5 Kettle 2.2.6 Flink CDC 三、Flink CDC介紹 3.1 Flink CDC 概述 3.1.1 Flink CDC 工作原理 3.2 Flink CDC…

分布式數據架構

分布式數據架構是一種將數據分散存儲在多臺獨立計算機(節點)上,并通過網絡協調工作的系統設計。其核心目標是解決海量數據處理、高并發訪問、高可用性及可擴展性等傳統集中式數據庫難以應對的挑戰。以下是關鍵要點解析:一、核心原…

Spark 中spark.implicits._ 中的 toDF和DataFrame 類本身的 toDF 方法

1. spark.implicits._ 中的 toDF(隱式轉換方法)本質這是一個隱式轉換(implicit conversion),通過 import spark.implicits._ 被引入到作用域中。它的作用是為本地 Scala 集合(如 Seq, List, Array 等&#…

如何在MacOS上卸載并且重新安裝Homebrew

Homebrew是一款針對macOS操作系統的包管理工具,它允許用戶通過命令行界面輕松安裝、升級和管理各種開源軟件包和工具。Homebrew是一個非常流行的工具,用于簡化macOS系統上的軟件安裝和管理過程。一、卸載 Homebrew方法1:官方卸載腳本&#xf…

如何簡單理解狀態機、流程圖和時序圖

狀態機、流程圖和時序圖都是軟件工程中用來描述系統行為的工具,但它們像不同的“眼鏡”一樣,幫助我們從不同角度看問題。下面用生活比喻來簡單理解思路:狀態機:想象一個交通信號燈。它總是在“紅燈”“黃燈”“綠燈”這些狀態之間…

消失的6個月!

已經6個月沒有更新了 四個月的研一下生活 兩個月暑假,哈哈,其實也沒閑著。每天都有好好的學習,每天學習時長6h 暑假按照導師的指示開始搞項目了,項目是關于RAG那塊中的應用場景,簡單來說就是deepseek puls ,使用大…