原创 java設計模式分析之工廠、享元、建造者、原型模式

一個優秀的開源框架中往往會體現出很多Java設計模式的影子,瞭解設計模式有助於理解開源框架中的程序設計之美接下來我會將自己整理的對一些設計模式的理解記錄在這裏 這個系列我會盡量將設計模式中比較容易混淆的概念統一起來進行分析和比較, 而一些

原创 深入kafka之消息分區策略原理

kafka消息消費原理 在實際生產過程中,每個topic都會有多個partitions,多個partitions的好處在於,一方面能夠對broker上的數據進行分片有效減少了消息的容量從而提升io性能。另外一方面,爲了提高消費端的

原创 dubbo服務引用源碼分析

dubbo服務引用流程大致如下: (1)首先在dubbo容器啓動的時候,會掃描所有的reference配置(也就是dubbo客戶端配置的遠程引用),生成對應ReferenceBean,例如:客戶端的DemoClient類依賴了遠程服務De

原创 分佈式架構dubbo

1.爲什麼需要dubbo dubbo不僅僅是一個RPC框架,還是一個服務治理框架 遠程通信背景 技術架構的發展從單體到分佈式,是一種順勢而爲的架構演進,和傳統的單體架構相比,分佈式多了一個遠程服務之間的通信 不管是 soa還是微服

原创 zookeeper服務的實現原理

1.ZooKeeper是什麼? ZooKeeper是分佈式應用程序協調服務,是集羣的管理者,監視着集羣中各個節點的狀態根據節點提交的反饋進行下一步合理操作 2.ZooKeeper提供了什麼? 1)文件系統 2)通知機制 3.Zoo

原创 CAP與一致性協議算法

一致性算法是爲了解決分佈式系統的CAP理論中的一致性(Consistency)問題 數據一致性協議廣泛存在於分佈式系統中,例如:註冊中心,消息中間件(kafka),分佈式數據庫 可以說只要是涉及到集羣的數據一致性都需要協議來保證   分佈

原创 InnoDB 內存結構和磁盤結構

一條更新 SQL 是如何執行的? update 操作其實包括了更新、插入和刪除。如果有看過 MyBatis 的源碼,應該知道 Executor 裏面也只有 doQuery()和 doUpdate()的方法, 更新流程和查詢流程有什

原创 Dubbo 服務導出過程

Dubbo 服務導出過程 dubbo採用 URL 作爲配置信息的統一格式,所有擴展點都通過傳遞 URL 攜帶配置信息,通過上一篇文章: dubbo源碼實現之SPI 和自適應擴展點 中我們可以瞭解到dubbo是如何確保擴展點一定可以獲取到u

原创 一致性協議總覽

一致性模型 一致性模型本質上是進程與數據存儲的約定,主要是用於解決分佈式系統中數據複製時保持一致性的問題   一致性協議 一致性模型就像是接口,而一致性協議就像是接口的具體實現 一致性協議根據是否允許數據分歧可以分爲兩種: 單主協議(不允

原创 一致性協議 Zab協議

Zab協議 Zab協議 的全稱是 Zookeeper Atomic Broadcast (Zookeeper原子廣播)。Zookeeper 是通過 Zab 協議來保證分佈式事務的最終一致性   zab 協議介紹(單主模式--順序一致性協議

原创 dubbo源碼實現之SPI 和自適應擴展點

API和SPI API (應用程序接口編程)直接被應用開發人員使用,SPI(服務提供者接口編程) 被框架擴展人員使用,兩者本質都是面向接口進行編程 兩者的區別是什麼呢? 區別是一個將接口放在調用者包中,一個將實現放在實現者包中   SPI

原创 SpringBoot數據訪問和事務

1、連接數據庫 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</arti

原创 MyCat分片策略

MyCat分片策略 分片的目標是將大量數據和訪問請求均勻分佈在多個節點上,通過這種方式提升數據服務的存儲和負載能力 Mycat 分片策略總體上分爲連續分片和離散分片,還有一種是連續分片和離散分片的結合,例如先範圍後取模 比如範圍

原创 聊一聊GC(垃圾回收器)

垃圾回收器: 垃圾回收算法是理論垃圾回收器是實現 目前有如下幾種垃圾回收器,連線描述了各個垃圾回收器應用在哪裏,以及相互之間是否可以相互配合使用 新生代的這三個都是複製回收算法 區別在於具體的實現方式 新生代收集器:Seria

原创 深入探究synchronize鎖機制

synchronized 有三種方式來加鎖,分別是: **1. 修飾實例方法:**作用於當前實例加鎖,進入同步代碼前要獲得當前實例的鎖 **2. 靜態方法:**作用於當前類加鎖,進入同步代碼前要獲得當前類的鎖 **3. 修飾代碼塊