原创 Kafka詳解(十一)Kafka日誌讀寫實現

Kafka日誌存儲結構 衆所周知,Kafka的Topic可以有多個分區,分區其實就是最小的讀取和存儲結構,即Consumer看似訂閱的是Topic,實則是從Topic下的某個分區獲得消息,Producer發送消息也是如此。 topic-

原创 JVM的GC日誌解析

前言 剛開始接觸JVM時,對待GC的日誌,是保持"逃避"態度的,線上部署的程序沒有達到期望的運行效率,或是預期目標時,往往會把問題的矛頭指向內存上。 是不是內存不夠? GC日誌怎麼這麼多?佔用磁盤高達幾個G? 不想看到打印怎麼多,甚至暴

原创 MySQL的buffer pool緩衝池原理

應用系統分層架構,爲了加速數據訪問,會把最常訪問的數據,放在緩存(cache)裏,避免每次都去訪問數據庫。 操作系統,會有緩衝池(buffer pool)機制,避免每次訪問磁盤,以加速數據的訪問。 MySQL作爲一個存儲系統,同樣具有緩衝

原创 Druid數據庫連接池引起的FullGC問題排查、分析、解決

問題現象 在某個工作日,突然收到線上的服務告警,有大量的請求延時產生,查看線上服務發現基本上都是獲取數據庫連接超時,而且影響時間只有3~4秒鐘,服務又恢復了正常。隔了幾分鐘之後,又出現了大量的告警,還是影響3~4秒後又恢復正常。 由於我們

原创 Redis詳解(六)漸進式rehash機制

在Redis中,鍵值對(Key-Value Pair)存儲方式是由字典(Dict)保存的,而字典底層是通過哈希表來實現的。通過哈希表中的節點保存字典中的鍵值對。我們知道當HashMap中由於Hash衝突(負載因子)超過某個閾值時,出於鏈表

原创 適配器模式(Adapter模式)詳解

在現實生活中,經常出現兩個對象因接口不兼容而不能在一起工作的實例,這時需要第三者進行適配。例如,講中文的人同講英文的人對話時需要一個翻譯,用直流電的筆記本電腦接交流電源時需要一個電源適配器,用計算機訪問照相機的 SD 內存卡時需要一個讀卡

原创 組合模式(Composite模式)詳解

在現實生活中,存在很多“部分-整體”的關係,例如,大學中的部門與學院、總公司中的部門與分公司、學習用品中的書與書包、生活用品中的衣月艮與衣櫃以及廚房中的鍋碗瓢盆等。在軟件開發中也是這樣,例如,文件系統中的文件與文件夾、窗體程序中的簡單控件

原创 Spring Cloud實操(五)Feign、Ribbon、Hystrix三者相關配置

1. Springcloud 高併發配置簡介 在微服務架構的應用中, Feign、Hystrix,Ribbon三者都是必不可少的,可以說已經成爲鐵三角。 瘋狂創客圈(筆者尼恩創建的高併發研習社羣)中,有不少小夥伴問到尼恩,關於Feign、

原创 JVM參數詳細配置說明

對於大多數應用來說,Java 堆(Java Heap)是Java 虛擬機所管理的內存中最大的一塊。Java 堆是被所有線程共享的一塊內存區域,在虛擬機啓動時創建。 1. JVM內存結構   由上圖可以清楚的看到JVM的內存空間分爲3大部

原创 ArrayBlockingQueue和LinkedBlockingQueue解析

1. BlockingQueue接口簡介 java.util.concurrent 包裏的 BlockingQueue是一個接口, 繼承Queue接口,Queue接口繼承 Collection。 BlockingQueue 具有 4 組不

原创 MongoDB4.0事務實現解析

MongoDB 4.0 引入的事務功能,支持多文檔ACID特性,例如使用 mongo shell 進行事務操作 > s = db.getMongo().startSession() session { "id" : UUID("3bf5

原创 裝飾模式(Decorator模式)詳解

在現實生活中,常常需要對現有產品增加新的功能或美化其外觀,如房子裝修、相片加相框等。在軟件開發過程中,有時想用一些現存的組件。這些組件可能只是完成了一些核心功能。但在不改變其結構的情況下,可以動態地擴展其功能。所有這些都可以釆用裝飾模式來

原创 代理模式(Proxy模式)詳解

在有些情況下,一個客戶不能或者不想直接訪問另一個對象,這時需要找一箇中介幫忙完成某項任務,這個中介就是代理對象。例如,購買火車票不一定要去火車站買,可以通過 12306 網站或者去火車票代售點買。又如找女朋友、找保姆、找工作等都可以通過找

原创 命令模式(Command模式)詳解

在軟件開發系統中,常常出現“方法的請求者”與“方法的實現者”之間存在緊密的耦合關係。這不利於軟件功能的擴展與維護。例如,想對行爲進行“撤銷、重做、記錄”等處理都很不方便,因此“如何將方法的請求者與方法的實現者解耦?”變得很重要,命令模式能

原创 MongoDB索引詳解

索引能夠提高數據庫的查詢效率,沒有索引的話,查詢會進行全表掃描(scan every document in a collection),嚴重降低了查詢效率。默認情況下,Mongo在一個集合(collection)創建時,自動地對集合的_