原创 Spring的@Async使用防坑

很多人會直接只用@Async來執行異步操作。但是這裏面有一個問題,如果都是用spring的默認實現,是有坑的。 當我們開啓 EnableAsync註解 就可以使用@Async註解來執行異步操作了。 我們現在通過EnableAsync註解去打

原创 分佈式事務(3)---強一致性分佈式事務Atomikos實戰 分佈式事務(1)-理論基礎 分佈式事務(2)---強一致性分佈式事務解決方案 分佈式事務(4)---最終一致性方案之TCC

分佈式事務(1)-理論基礎 分佈式事務(2)---強一致性分佈式事務解決方案 分佈式事務(4)---最終一致性方案之TCC 前面介紹強一致性分佈式解決方案,這裏用Atomikos框架寫一個實戰的demo。模擬下單扣減庫存的操作。 使用Ato

原创 分佈式事務(4)---最終一致性方案之TCC 分佈式事務(1)-理論基礎 分佈式事務(2)---強一致性分佈式事務解決方案 分佈式事務(3)---強一致性分佈式事務Atomikos實戰

分佈式事務(1)-理論基礎 分佈式事務(2)---強一致性分佈式事務解決方案 分佈式事務(3)---強一致性分佈式事務Atomikos實戰 強一致性分佈式事務解決方案要求參與事務的各個節點的數據時刻保持一致,在高併發場景下,系統的性能可能收

原创 分佈式事務(2)---強一致性分佈式事務解決方案

強一致事務要求在任意時刻各節點數據在任意時刻都是一致的。強一致事務的解決方案主要有DTP模型(全局事務模型)、2PC、3PC。 強一致性數據一致性較高,但是存在性能問題,在分佈式事務未完全提交和回滾之前,查詢不到新的數據,犧牲了可用性,實現

原创 (1)分佈式事務理論基礎

一、服務架構演進 1.單體應用: 最初的所有業務全部融合在一起,我們最初接觸到的一個java應用開發完成之後打成一個war包進行部署。 優點: 1)架構簡單,所有項目模塊部署在一起,對於小型項目來說方便維護 缺點: 1)所有模塊耦合在一起,

原创 Mysql MVCC機制

之前有說到mysql事務隔離級別和鎖,mysql事務隔離級別有:讀未提交,讀已提交,可重複讀,串行化。 可重複讀,當開啓事務之後,在此次事務中讀到的數據都不會變化(除開新增的數據(可重複讀隔離級別不能解決幻讀)),爲什麼可重複讀隔離級別能做

原创 Docker構建mysql主從

一、爲什麼要搭建主從架構呢 1.數據安全,可以進行數據的備份。 2.讀寫分離,大部分的業務系統來說都是讀數據多,寫數據少,當訪問壓力過大時,可以把讀請求給到從服務器。從而緩解數據庫訪問的壓力 3.故障轉移(高可用),當主節點宕機之後,將從服

原创 mysql事務隔離級別和鎖

1.數據庫的鎖 從性能上分爲樂觀鎖和悲觀鎖:樂觀鎖是利用版本號,比如數據字段新增一個版本號字段,操作的時候進行版本的比對,需要開發者自己實現;悲觀鎖就是在操作數據時,認爲此操作會出現數據衝突,所以在進行每次操作時都要通過獲取鎖才能進行對相同

原创 ribbon源碼分析

對於ribbon的使用我們只需要在RestTemplate的申明上面加上 @LoadBalanced 註解之後那麼這個RestTemplate就具有了負載均衡的功能 ribbon是怎麼實現這一功能的? ribbon會把所有的LoadBala

原创 nacos註冊中心源碼流程分析

作爲一個註冊中心,和eureka類似,核心的功能點: 1.服務註冊:nacos客戶端攜帶自身信息向nacos服務端進行註冊。 2.服務心跳:客戶端定時向服務端發送心跳,告知服務端自己處於可用狀態 3.服務健康檢查:服務端定時檢查客戶端是否有

原创 基於nacos註冊中心的ribbon定製規則 Nacos數據模型

前面說到基於nacos的註冊發現有可以擴展實現我們自己的負載均衡算法(Nacos數據模型),來實現同集羣調用,是基於spring.cloud.nacos.discovery.cluster-name參數。另外基於spring.cloud.n

原创 nacos配置中心使用

Nacos不僅可以作爲註冊中心使用,還可以作爲配置中心使用。相比於使用spring-cloud-config-server來說,我們可以不用再去建一個配置文件的git倉庫,直接可以在nacos的控制檯進行操作,同時配置文件熱更新也更爲方便,

原创 Zookeeper(5)---分佈式鎖

基於臨時序號節點來實現分佈式鎖 爲什麼要用臨時節點呢?如果拿到鎖的服務宕機了,會話失效ZK自己也會刪除掉臨時的序號節點,這樣也不會阻塞其他服務。   流程: 1.在一個持久節點下面創建臨時的序號節點作爲鎖節點,如:/lock/lockId0

原创 Eureka相關相關接口和代碼位置

1.服務註冊:com.netflix.eureka.registry.AbstractInstanceRegistry#register(InstanceInfo registrant, int leaseDuration, boolean

原创 Zookeeper(4)---ZK集羣部署和選舉

一、集羣部署 1.準備三臺機器,安裝好ZK。強烈建議奇數臺機器,因爲zookeeper 通過判斷大多數節點的存活來判斷整個服務是否可用。3個節點,掛掉了2個表示整個集羣掛掉,而用偶數4個,掛掉了2個也表示其並不是大部分存活,因此也會掛掉,這