原创 Nginx 的多進程異步模型要了解下麼

Ngnix 是互聯網企業使用最爲廣泛的高性能的反向代理服務器,爲何叫反向代理之前也講過。它可以爲後端分佈式服務提供負載均衡的功能,它可以將後端多個服務地址聚合爲單個地址來對外提供服務。它正是採用了多進程 PreForking 異步模型達到

原创 mysql 與sqlserver的鎖升級

鎖可謂RDBMS中最複雜、最神祕的技術。鎖升級(Lock Escalation)是指將當前鎖的粒度降低(有點Java鎖粗化的味道),是一種優化技術,數據庫設計者們認爲鎖是一種稀有資源,爲了避免鎖的開銷(佔用內存),數據庫中會頻繁的出現鎖升

原创 徹底理解mysql innodb的死鎖

死鎖只發生在併發的情況,也就是說你的程序是串行的是不可能發生死鎖。通常表現爲兩個事務都在等待某個資源可用而無法繼續進行,因爲每個事務都持有另一個事務需要的鎖,而它們都不會釋放所持有的鎖。爲此,InnoDB引擎有一個後臺的鎖監控線程,它負責

原创 隨機讀寫之DirectIO

在上一節中講過MappedByteBuffer VS FileChannel它們稱得上零拷貝技術,但留下了順序讀比隨機讀快,順序寫比隨機寫快的問題,在我們的實際應用場景中爲了迴避隨機讀寫需求,通常的做法都是對其進行文件分片(又將隨機變成了

原创 微服務交互模式:同步 & 異步 & 超時

在微服務的架構範式中由多個微應用構成,而服務間通信和執行流程是分佈式系統的基礎, 服務間的交互模式一般有3種模式:同步調用模式、接口異步調用模式、消息隊列異步模式。因此我們不得不在根據業務場景進行決策,但每種交互模式意味着存在都超時的可能

原创 如何進行微服務的演進

微服務這種架構風格迅速地成爲軟件行業的熱詞,並被許多互聯網公司採納。如今微服務已經進入所謂的Service Mesh 2.0時代,諸多微服務框架如雨後春筍般出現。由於微服務是業務而非技術在驅動,隨之開始重視領域驅動設計(DDD),並嘗試將

原创 基本功:初探對象的內存佈局

java中我們隨處可見的都是對象,而對象成爲我們與計算機內核交換的主要載體,使用起來也非常簡單,然而一個對象是如何被JVM創建的卻是極其的複雜,它要經歷類加載機制、分片內存以及設置對象頭的內存佈局。 下面講介紹下Hotspot JVM下新

原创 elasticsearch實踐篇: 智能運輸產品

Elasticsearch 是一個分佈式可擴展的實時搜索和分析引擎,一個建立在全文搜索引擎 Apache Lucene(TM) 基礎上的搜索引擎。非常幸運的是,之前規劃了很久的智能運輸產品搜索與推薦在3個月前如期上線了,下面將分享下Ela

原创 RxJava在業務系統中的實踐

在java的世界裏由於大多數接口和API都是阻塞式的交互,進而影響到很多童靴的編程思想和編程習慣。因而,有一些專家講java的編程模型是阻塞式模型(與Node.js區別大),不是沒有道理的。從高性能的視角看,任何阻塞點都可能導致性能的退步

原创 認識mysql組合索引的最左匹配原則

關於mysql組合索引的最左匹配原則很多人都理解都是不正確的,那接下來就帶你正確的認識它。 爲何要使用組合索引呢 效率高,減少查詢開銷,索引列越多,通過索引篩選出的數據越少 覆蓋索引,MySQL可以直接通過遍歷索引取得數據,而無需回表,這

原创 再談spring boot 優雅停機

再談爲了提醒明知故犯(在一坑裏迭倒兩次不是不多見),由於業務系統中大量使用了spring Boot embedded tomcat的模式運行,在一些運維腳本中經常看到Linux 中 kill 指令,然而它的使用也有些講究,要思考如何能做到

原创 InnoDB memcached Plugin要了解一下

InnoDB memcached Plugin在2012年NoSQL Memcached API for MySQL中提出 ,可謂達到mysql的最高水準,據說MySQL 5.7版本中單機已經支持到每秒百萬級,很多時候我們在研究新技術,更

原创 高逼格的位運算小結

位算法的效率有多高這裏就不講了,位運算其實有很多技巧,比如判斷是否是2的冪次方、判斷奇偶性、交換兩個數、找出不重複的數、找出不大於N的最大的2的冪指數,掌握這些可以裝逼。 位與 & 兩位數同時爲“1”,結果才爲“1”,否則爲0 0&

原创 冷知識:netty的Recycler對象池

在netty中Recycler用來實現對象池,以達到對象的循環利用,它是netty實現的一個輕量級對象回收站,具體的實現有:堆內存對應PooledHeapByteBuf,而直接內存對應的是PooledDirectByteBuf。本文基於源

原创 FastThreadLocal要了解下

Netty 作爲高性能框架,對 JDK 中的很多類都進行了封裝了和優化,Netty 使用了 FastThreadLocalRunnable 對所有 DefaultThreadFactory 創建出來的 Runnable 都進行了包裝。 n