原创 Mysql中處理JSON字段

處理json字段,可以用json_extract函數: select * from (select json_extract(ext_value,'$.high')+0 highx,batch_id from batch_ext_1 whe

原创 淺析ketamahash和murmurhash

說來趕巧,之前我有16個redis集羣,然後我要將某個key根據路由規則存到16個集羣中的某一個上面,正巧用到了這兩種哈希算法,改造完畢上線後,整體帶來的效果也十分理想。 說道ketamahash,它是一致性哈希算法,一般說來都是由若干固定

原创 System.out.println高併發下導致應用暫停

今天在進行序列號壓測的時候,通過調用genSeqId方法來獲取序列號,100併發,16臺壓測機器,發現無論怎麼壓測,調用量達到140w左右的時候,此方法的ops直接掉到了0,具體圖示如下: 從上圖可以明顯看到,整個ops呈現斷崖式下跌。

原创 CompareAndSwap原子操作原理

在翻閱AQS(AbstractQueuedSynchronizer)類的過程中,發現其進行原子操作的時候採用的是CAS。涉及的代碼如下: 1: private static final Unsafe unsafe = Unsaf

原创 寫作札記

書名:微言高併發架構 擬採用先總,然後細分,最後再以秒殺系統彙總的方式來進行。 先總,也就是先總的概述當前互聯網架構的演進方式,從最簡單的兩層模式,逐漸過渡到三層模式,直到最後的分佈式服務框架的加入,直至目前大行其道的微服務架構。 之後各章

原创 JVM調優之服務內存超過閾值報警

今早收到一條短信,具體報警信息如下: 【UMP JVM監控內存報警】應用名:發券worker(jdos_couponwkr);KEY【coupon.send.worker.jvm】,主機名:【host-10-183-72-114】,實例【1

原创 Javassist中文技術文檔

本文譯自Getting Started with Javassist,如果謬誤之處,還請指出。 bytecode讀寫 ClassPool Class loader 自有和定製 Bytecode操控接口 Generic

原创 微言Netty:分佈式服務框架

1. 前言 幾年前,我就一直想着要設計一款自己的實時通訊框架,於是出來了TinySocket,她是基於微軟的SocketAsyncEventArgs來實現的,由於此類提供的功能很簡潔,所以當時自己實現了緩衝區處理,粘包拆包等,彼時的.net

原创 共享變量邊界處理

在最近設計服務治理模塊中,涉及到如下的使用方式:abstract class mybase{ Map<String, String> cache = Maps.newConcurrentMap(); ab

原创 Netty客戶端發送消息並同步獲取結果

客戶端發送消息並同步獲取結果,其實是違背Netty的設計原則的,但是有時候不得不這麼做的話,那麼建議進行如下的設計: 比如我們的具體用法如下: NettyRequest request = new NettyRequest();

原创 壓測過程中出現ops斷崖式下跌原因及排解

壓測機器: 100臺docker redis集羣:16個分片 在開始壓測的半個小時中,一直很穩定,ops穩定在20w左右。但是接下來突然ops斷崖式下跌,ops降到了3w以下。然後持續一段時間,直至變爲0。 問題排查: 1. 檢查docke

原创 微言netty:不在浮沙築高臺

1. 寫作緣起 幾年前,我在一家農業物聯網公司,負責解決其物聯網產品線。我們當時基於.net平臺打造了一套實時數據採集系統,可以把數以百萬級的傳感器傳送回來的數據採集入庫並根據這些數據進行建模。在搭建這套實時數據採集系統的時候,高併發高可用

原创 Jedis路由key的算法剝離

在Redis集羣中,會有很多個分片,如果此時利用Jedis來操作此Redis集羣,那麼他會把數據路由到不到的分片上。而且如果動態的往集羣中增加分片,也不會影響Jedis的功能。究竟是怎麼做到的呢? 由於最近公司要集中遷移redis集羣,也就

原创 略解ByteBuf

說到ByteBuf,我們並不陌生,官網給的解釋爲,一個可以進行隨機訪問或者是順序訪問的字節集合,它是NIO buffers緩衝的底層抽象。既然是底層抽象,那麼我們就可以基於其衍生出很多的具體實現出來,事實上,netty中的很多緩衝組件都是基

原创 基於Protostuff實現的Netty編解碼器

在設計netty的編解碼器過程中,有許多組件可以選擇,這裏由於咱對Protostuff比較熟悉,所以就用這個組件了。由於數據要在網絡上傳輸,所以在發送方需要將類對象轉換成二進制,接收方接收到數據後,需要將二進制轉換成類對象,由於這個操作在之