原创 Dubbo 優雅停機演進之路

一、前言 在 『ShutdownHook- Java 優雅停機解決方案』 一文中我們聊到了 Java 實現優雅停機原理。接下來我們就跟根據上面知識點,深入 Dubbo 內部,去了解一下 Dubbo 如何實現優雅停機。 二、Dubbo 優雅停

原创 聊聊緩存淘汰算法-LRU 實現原理

前言 我們常用緩存提升數據查詢速度,由於緩存容量有限,當緩存容量到達上限,就需要刪除部分數據挪出空間,這樣新數據纔可以添加進來。緩存數據不能隨機刪除,一般情況下我們需要根據某種算法刪除緩存數據。常用淘汰算法有 LRU,LFU,FIFO,這篇

原创 還在重複寫空指針檢查代碼?考慮使用 Optional 吧!

一、前言 如果要給 Java 所有異常弄個榜單,我會選擇將 NullPointerException 放在榜首。這個異常潛伏在代碼中,就像個遙控炸彈,不知道什麼時候這個按鈕會被突然按下(傳入 null 對象)。 <!--more--> 還

原创 一文教你安全的關閉線程池

上篇文章 ShutdownHook- Java 優雅停機解決方案 提到應用停機時需要釋放資源,關閉連接。對於一些定時任務或者網絡請求服務將會使用線程池,當應用停機時需要正確安全的關閉線程池,如果處理不當,可能造成數據丟失,業務請求結果不正

原创 ShutdownHook - Java 優雅停機解決方案

想象一下,如果你現在剛好在 word 上寫需求文檔,電腦突然重啓。等待開機完成,你可能會發現寫了一個小時文檔沒有保存,就這麼沒了。。。 一個正在運行 Java 應用如果突然將其停止,影響不止數據丟失,還會造成其他影響。比如: 請求丟失:

原创 協作,才能更好的中斷線程

聊起中斷,大家可能最熟悉的例子就是線程休眠。下面就是一個線程休眠的 demo,在這個例子中,當我們調用 sleep 方法,該方法將會拋出一個需要捕獲的中斷異常,這裏捕獲該異常並直接返回。 for (int i = 0; i

原创 Kafka 異步消息也會阻塞?記一次 Dubbo 頻繁超時排查過程

線上某服務 A 調用服務 B 接口完成一次交易,一次晚上的生產變更之後,系統監控發現服務 B 接口頻繁超時,後續甚至返回線程池耗盡錯誤 Thread pool is EXHAUSTED。因爲服務 B 依賴外部接口,剛開始誤以爲外部接口延時

原创 面試官:都說阻塞 I/O 模型將會使線程休眠,爲什麼 Java 線程狀態卻是 RUNNABLE?

摘要: 原創出處 https://studyidea.cn 「公衆號:程序通事 」歡迎關注和轉載,保留摘要,謝謝! 使用 Java 阻塞 I/O 模型讀取數據,將會導致線程阻塞,線程將會進入休眠,從而讓出 CPU 的執行權,直到數據讀取完

原创 不知道如何實現服務的動態發現?快來看看 Dubbo 是如何做到的

上篇文章如果有人問你 Dubbo 中註冊中心工作原理,就把這篇文章給他大致瞭解了註冊中心作用以及 Dubbo Registry 模塊源碼,這篇文章將深入 Dubbo ZooKeeper 模塊,去了解如何實現服務動態的發現。 ps: 以下將

原创 rocketmq 部署啓動指南-Docker 版

最近學習使用 rocketmq,需要搭建 rocketmq 服務端,本文主要記錄 rocketmq 搭建過程以及這個過程踩到的一些坑。 準備工作 在搭建之前,我們需要做一些準備工作,這裏我們需要使用 docker 搭建服務,所以需要提前安

原创 SPI 機制-插件化擴展功能

SPI(Service Provider Interfaces),中文直譯服務提供者接口,一種服務發現機制。可能很多人都不太熟悉這個機制,但是平常或多或少都用到了這個機制,比如我們使用 JDBC 連接操作數據庫的時候。 SPI 主要適用於功

原创 ZooKeeper 相關概念以及使用小結

Dubbo 通過註冊中心在分佈式環境中實現服務的註冊與發現,而註冊中心通常採用 ZooKeeper,研究註冊中心相關源碼繞不開 ZooKeeper,所以學習了 ZooKeeper 的基本概念以及相關 API 操作。 ZooKeeper 相

原创 如果有人問你 Dubbo 中註冊中心工作原理,就把這篇文章給他

註冊中心作用 開篇首先想思考一個問題,沒有註冊中心 Dubbo 還能玩下去嗎? 當然可以,只要知道服務提供者地址相關信息,消費者配置之後就可以調用。如果只有幾個服務,這麼玩當然沒問題。但是生產服務動輒成千上百,如果每個服務都需要手寫配置信

原创 爲什麼雙重檢查鎖模式需要 volatile ?

雙重檢查鎖定(Double check locked)模式經常會出現在一些框架源碼中,目的是爲了延遲初始化變量。這個模式還可以用來創建單例。下面來看一個 Spring 中雙重檢查鎖定的例子。 這個例子中需要將配置文件加載到 handler

原创 ibatis 核心原理解析

最近查找一個生產問題的原因,需要深入研究 ibatis 框架的源碼。雖然最後證明問題的原因與 ibatis 無關,但是這個過程加深了對 ibatis 框架原理的理解。 這篇文章主要就來講講 ibatis 框架的原理。 可能現在很多人已不再使