原创 lua c函數註冊器

lua與c的交互 關於lua和c的交互,主要有兩個方面,一是lua調用c的函數,而另一個則是c調用lua函數。而這些都是通過lua stack來進行的。 c調用lua 在c裏面使用lua,主要是通過lua_call這類函數,下面來自l

原创 我的2013:在程序的路上不斷求索

前言 每年到這個時候,總需要回顧過去,展望未來。2013這一年學到了很多東西,收貨了很多,也成長了很多。主要在技術和生活上面,讓自己有了記錄一下的衝動。 技術 在技術上面,這一年接觸了很多新的東西,讓自己眼界開闊不少,同時也開始自我提

原创 學習tornado:異步

why asynchronous tornado是一個異步web framework,說是異步,是因爲tornado server與client的網絡交互是異步的,底層基於io event loop。但是如果client請求server

原创 web多語言url的設計

因爲項目要支持國際化,最近跟一個同事在討論多語言版本下面url如何設計,假如我們需要支持en和cn的版本。 他傾向於支持如下的url格式,後續以格式1指代: /en/group/abc.html /cn/group/abc.html

原创 在 Docker 裏對應用通過系統調用進行觀測和混沌工程

最近看到一篇 Paper,Observability and Chaos Engineering on System Calls for Containerized Applications in Docker,講的是如何對 Docker

原创 增強你的 sysbench - 給 TiDB 添加自定義測試

對於從事數據庫相關的同學來說,對數據庫進行性能測試是一個永遠繞不開的話題。這個世界上有很多的數據庫性能測試工具,而 sysbench 可以算是大家用的最多的之一。 根據官網的介紹,sysbench 是一個基於 Luajit 的,多線程的腳本

原创 在 ARM64 上面運行 TiDB

相比於 Intel 的 x86-64 架構,ARM 架構雖然作爲後來者,但在服務器領域也開始在不停地攻城拔寨,很多企業也開始將自己的服務遷移到 ARM 架構上面,自然,對於 TiDB 來說,大家也想將 TiDB 運行到 ARM 上面。因爲

原创 在 Mac 下面調優 TiKV

在多數時候,我們都只會在 Linux 系統上面去運行 TiKV,所以很多的調優經驗都是基於 Linux 的,譬如如何使用 perf,如果使用 bcc 相關的工具,還有 ftrace 和 eBPF 這些,但在我們 team,很多同學的開發機是

原创 Rust 併發編程 - Thread Pool

在併發編程領域,一個非常讓程序員興奮,感到有成就感的事情就是做性能優化,譬如發現某個線程成爲了單點瓶頸,然後上多線程。 提到了上多線程,那自然就會引入 thread pool,也就是我們通常說的線程池,我們會將任務扔給線程池,然後線程池裏面

原创 給 TiKV 開發 Grafana 的 datasource

對於 TiKV 來說,我們使用的是 Prometheus 來收集系統所有的 metrics,在加上 Grafana,幾乎已經成爲了業界的一個標準的解決方案。但是,Prometheus 是一個時序數據庫,它的數據類型的值也是浮點類型,所以有時

原创 Rust 併發編程 - Memory Ordering

在併發編程領域,Rust 提供了完善的機制來保證併發編程的安全,我們可以非常方便的使用 Mutex,Arc,Channel 等庫來處理我們的併發邏輯。 但在有些時候,爲了更高效的性能,我們可能會去寫一些 lock-free 的數據結構,而

原创 使用 tower gRPC

在 TiKV 裏面,我們使用的是 grpc-rs,這是我們自己維護的一個 Rust gRPC 庫,主要是使用 Future 這個特性,封裝了 Google 的 C gRPC,對外提供了一套易於使用的同步編程的接口。 但 grpc-rs 並不

原创 使用 go mod download 加速 docker 編譯

這幾天在折騰 go-ycsb 的 docker 環境的時候,一直被一件簡單的事情困擾,就是升級了 go 使用了 go mod 之後,已經沒有 vendor 了,那麼每次在 docker 裏面編譯 go-ycsb 的時候,都會重新去下載需要的

原创 一次奇怪的 page cache 大量突然回收的 bug

這裏記錄一下前段時間排查的一個 bug。起因是這樣,某個客戶跟我們說他的 TiDB 集羣時不時有延遲特別高的情況,然後我們通過監控排查,也確定了這個事情,於是開始排查。 首先我們需要確定這個是不是有定期的慢查詢導致,但發現用戶的業務場景其實

原创 gRPC Assembly

如果要排查網絡問題,tcpdump 或者 Wireshark 是非常好的工具,但有時候我們想要更多。譬如前一段時間我們在排查一個奇怪的問題,TiKV 在處理一個請求的時候報了 key not in range 的 bug,直觀的說,就是我們