1. 什么是 SpringCloud Alibaba?
- 阿里巴巴推出的一套微服務(wù)解決方案,主要提供了 nacos,sentinel 和 seata。
2. nacos 有什么作用?
- nacos 可以用來做注冊(cè)中心和配置中心。它需要我們下載安裝 nacos server,啟動(dòng)后訪問 ip 加上 8848/nacos 即可訪問其圖形界面。支持 CPA 理論中的 AP 和 CP,可以自行選擇。在項(xiàng)目中,引入 nacos 相關(guān)依賴然后進(jìn)行相關(guān)配置就可以使用了。
3. 怎么保證 nacos 的高可用?
- nacos 做集群,nacos 的集群架構(gòu)就是提供一個(gè)統(tǒng)一對(duì)外的虛擬 ip,然后這個(gè) ip 再將請(qǐng)求分發(fā)到各個(gè) nacos 節(jié)點(diǎn)上。我們一般用 nginx 來做 nacos 的集群,首先對(duì) nacos 進(jìn)行配置,拷貝 nacos 的 cluster.conf.example 文件,改名為 cluster.conf,然后在此文件中配置各個(gè) nacos 節(jié)點(diǎn)的 ip 和對(duì)應(yīng)端口;接著修改 nacos 的 startup.sh,使其能指定端口啟動(dòng);最后修改 nginx 的 conf 文件,對(duì)流量進(jìn)行分發(fā),比如對(duì)外提供的是 80 端口,然后將 80 端口的流量分發(fā)到剛才配置的那幾臺(tái) nacos 中。
4. nacos 中寫的配置更新了,項(xiàng)目中要怎么獲取到最新的配置?
- 獲取配置的類加上 @RefreshScope 注解,就可以自動(dòng)刷新了。
5. 如何保證 nacos 中配置的可靠性?
- 進(jìn)行持久化,在 nacos 的 application.properties 文件中配置數(shù)據(jù)源,然后在 MySQL 中新建 nacos_config 數(shù)據(jù)庫,在數(shù)據(jù)庫中執(zhí)行 nacos 提供的腳本,重啟 nacos 后,nacos 中新增的配置就會(huì)出現(xiàn)在 config_info 表中。
6. sentinel 用來做什么?
- 服務(wù)熔斷降級(jí),配置限流規(guī)則。它可以和 nacos 一起使用,把規(guī)則都配置進(jìn) nacos,只要 nacos 做了持久化,就相當(dāng)于 sentinel 也做了持久化。
7. 說一說分布式事務(wù)的實(shí)現(xiàn)方案。
- 我們用的是 seata,下載seata,然后注冊(cè)進(jìn) nacos,用 MySQL 持久化,在項(xiàng)目中引入相關(guān)依賴,用 seata 對(duì)數(shù)據(jù)源進(jìn)行代理,在需要加分布式事務(wù)的方法或類加上 @Global Transaction 注解即可。
8. 對(duì) seata 的原理了解嗎?
- seata 的核心就是三個(gè)組件加一個(gè) ID。一個(gè) ID 是指全局事務(wù)的 ID,三個(gè)組件是事務(wù)管理者,就是加了全局事務(wù)注解的方法;事務(wù)協(xié)調(diào)者,就是安裝的 seata 組件;資源管理器,就是數(shù)據(jù)庫。加了全局事務(wù)注解的方法向 seata 申請(qǐng)開啟一個(gè)全局事務(wù),seata 就會(huì)返回一個(gè)全局事務(wù) ID在微服務(wù)調(diào)用鏈路中傳播;數(shù)據(jù)庫向 seata 注冊(cè)分支事務(wù),將其納入到全局事務(wù) ID 的管轄中;加了注解的方法發(fā)起對(duì)全局事務(wù)的提交或者回滾,然后 seata 再告訴數(shù)據(jù)庫對(duì)事務(wù)進(jìn)行提交或者回滾。
9. seata 的 AT 模式如何做到對(duì)業(yè)務(wù)無侵入的?
- 使用了兩階段提交協(xié)議。首先 seata 會(huì)攔截業(yè)務(wù) SQL,將更新前的數(shù)據(jù)保存為 before image,然后執(zhí)行 SQL 更新數(shù)據(jù),再將更新后的數(shù)據(jù)保存為 after image,同時(shí)會(huì)生成行鎖;如果順利,二階段就提交事務(wù),刪除 before image 和 after image 以及行鎖;如果二階段要回滾,首先會(huì)比較當(dāng)前數(shù)據(jù)和 after image 是否一致,如果一致,將其還原成 before image,否則就是異常情況,人工處理。
|