原创 遇到了 Netty ByteBufUtil.indexOf 的一個小 BUG

0. 問題 我在解析 Redis Simple Strings 和 Errors 時用到了 Netty 的一個工具類 io.netty.buffer.ByteBufUtil 裏的 indexOf(ByteBuf needle, ByteBu

原创 探討一下共享內存通信中的通知機制

最近基於 Aeron 實現了一下 Service Mesh Sidecar 的本地通信,但是在 IdleStrategy 上犯了難,無論怎麼選都感覺不合適,這幾天跟大數據部門寫 C++ 的同學聊了一下,一句話幫我解開了難題,不得不感慨一下:

原创 探討一下 Linux 共享內存的 N 種方式

關於 Linux 共享內存,寫得最好的應該是宋寶華的 《世上最好的共享內存》一文。 本文可以說是對這篇文章的學習筆記,順手練習了一下 rust libc —— shichaoyuan/learn_rust/linux-shmipc-demo

原创 剖析 Aeron IPC 實現

0. 最近玩了一下 Aeron,主要用了其中的 IPC 通信功能,總的感覺封裝的很好,用起來很方便,所以花了點兒時間研究了一下內部實現,簡單做個筆記。 至於 UDP 通信和 archive、cluster 高級特性沒有嘗試,本文不涉及。 1

原创 通過 QEMU 打開學習 Linux kernel 的新世界

最近面試了一位同學,在校期間對 QEMU 進行了二次開發,實現了設備建模、故障注入、信息提取功能。面試結束後感覺挺受啓發,所以自己又多瞭解了一下 QEMU,發現可以基於 QEMU debug Linux kernel,打開了一個學習 ker

原创 通過源碼學習G1GC —— 新生代自適應策略

0. 最近發現有個 Java 寫的 sidecar 程序本來運行很平穩,忽然 Young GC 的頻率就開始升高,新生代大小頻繁的調整,最終是在一輪 Mixed GC 之後才恢復平穩。 根據以往學習的理論知識可知 G1 有一個特性就是自適應

原创 瞭解一下 HikariCP 連接池的邏輯

0. 最近使用 commons-pool2 遇到了各種問題,所以瞭解了一下其它連接池方案: 用得比較多的通用連接池(對象池)也就是 commons-pool2 了,其它都比較小衆。 JDBC 連接池真是百花齊放。 Netty RPC 連接

原创 Netty 出現 Connection reset by peer 異常的幾個原因

最近使用 netty 過程中發現了幾個比較細節的 Connection reset by peer 異常,做個筆記。 1. 服務端 a. 客戶端設置 SO_LINGER=0 這個場景出現在用 Jedis ping 檢測的場景,用完直接 cl

原创 《深入剖析Kubernetes》學習筆記 —— Custom Resource Definition

最近學習張磊的《深入剖析Kubernetes》,感覺 Kubernetes 編程範式確實優秀,這裏總結一下。 1. 聲明式 API API 對象 從 Kubernetes 使用者的角度來看,使用 YAML 文件聲明 API 對象,例如一個

原创 【譯】爲 Rust 設計 futures

原文鏈接:Designing futures for Rust 07 Sep 2016 · Aaron Turon 我最近寫了一篇關於 Rust 中異步 I/O 重要性和新 futures 庫目標的文章。本文將通過解釋該庫的核心設計來深化這

原创 【譯】Rust 的零成本 futures

原文鏈接:Zero-cost futures in Rust 11 Aug 2016 · Aaron Turon Rust 生態的一個主要缺陷是快速高效的異步 I/O。我們有堅實的基礎,比如 mio 庫,但是這些都比較低層:你不得不創建狀態

原创 【譯】無所畏懼的 Rust 併發

原文鏈接:Fearless Concurrency with Rust Apr. 10, 2015 · Aaron Turon Rust 項目旨在解決這兩個棘手的問題: 如何進行安全的系統編程? 如何使得併發更容易? 起初,這兩個問題看

原创 【譯】沒有開銷的抽象:Rust 中的 traits

原文鏈接:Abstraction without overhead: traits in Rust May 11, 2015 · Aaron Turon 之前的文章已經介紹了 Rust 設計的兩大支柱: 沒有垃圾回收的內存安全 沒有數據爭

原创 Rust 學習筆記 2 - 異步編程基礎 0. 1. overview 2. std::future::Future

0. Rust 在 1.39.0 爲異步編程提供了語法層面的支持,也就是 async 和 await。 跟 Go 等語言不同的是 Rust 自身並沒有內建異步執行的運行時(例如 Go 中的goroutine)。運行時是類庫提供的功能,目前實