java面試題 --- Spring③

1. 什麼是 SpringCloud Alibaba?

  • 阿里巴巴推出的一套微服務解決方案,主要提供了 nacos,sentinel 和 seata。

2. nacos 有什麼作用?

  • nacos 可以用來做註冊中心和配置中心。它需要我們下載安裝 nacos server,啓動後訪問 ip 加上 8848/nacos 即可訪問其圖形界面。支持 CPA 理論中的 AP 和 CP,可以自行選擇。在項目中,引入 nacos 相關依賴然後進行相關配置就可以使用了。

3. 怎麼保證 nacos 的高可用?

  • nacos 做集羣,nacos 的集羣架構就是提供一個統一對外的虛擬 ip,然後這個 ip 再將請求分發到各個 nacos 節點上。我們一般用 nginx 來做 nacos 的集羣,首先對 nacos 進行配置,拷貝 nacos 的 cluster.conf.example 文件,改名爲 cluster.conf,然後在此文件中配置各個 nacos 節點的 ip 和對應端口;接着修改 nacos 的 startup.sh,使其能指定端口啓動;最後修改 nginx 的 conf 文件,對流量進行分發,比如對外提供的是 80 端口,然後將 80 端口的流量分發到剛纔配置的那幾臺 nacos 中。

4. nacos 中寫的配置更新了,項目中要怎麼獲取到最新的配置?

  • 獲取配置的類加上 @RefreshScope 註解,就可以自動刷新了。

5. 如何保證 nacos 中配置的可靠性?

  • 進行持久化,在 nacos 的 application.properties 文件中配置數據源,然後在 MySQL 中新建 nacos_config 數據庫,在數據庫中執行 nacos 提供的腳本,重啓 nacos 後,nacos 中新增的配置就會出現在 config_info 表中。

6. sentinel 用來做什麼?

  • 服務熔斷降級,配置限流規則。它可以和 nacos 一起使用,把規則都配置進 nacos,只要 nacos 做了持久化,就相當於 sentinel 也做了持久化。

7. 說一說分佈式事務的實現方案。

  • 我們用的是 seata,下載seata,然後註冊進 nacos,用 MySQL 持久化,在項目中引入相關依賴,用 seata 對數據源進行代理,在需要加分佈式事務的方法或類加上 @Global Transaction 註解即可。

8. 對 seata 的原理了解嗎?

  • seata 的核心就是三個組件加一個 ID。一個 ID 是指全局事務的 ID,三個組件是事務管理者,就是加了全局事務註解的方法;事務協調者,就是安裝的 seata 組件;資源管理器,就是數據庫。加了全局事務註解的方法向 seata 申請開啓一個全局事務,seata 就會返回一個全局事務 ID在微服務調用鏈路中傳播;數據庫向 seata 註冊分支事務,將其納入到全局事務 ID 的管轄中;加了註解的方法發起對全局事務的提交或者回滾,然後 seata 再告訴數據庫對事務進行提交或者回滾。

9. seata 的 AT 模式如何做到對業務無侵入的?

  • 使用了兩階段提交協議。首先 seata 會攔截業務 SQL,將更新前的數據保存爲 before image,然後執行 SQL 更新數據,再將更新後的數據保存爲 after image,同時會生成行鎖;如果順利,二階段就提交事務,刪除 before image 和 after image 以及行鎖;如果二階段要回滾,首先會比較當前數據和 after image 是否一致,如果一致,將其還原成 before image,否則就是異常情況,人工處理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章