原创 Thrift in python

Thrift官網上的文檔很少,從網上搜到的也大都千篇一律,即使是《Thrift: the missing guide》對如何構建python的server和client也沒有進行詳盡講述。本博特意看了下thrift提供的python l

原创 Linux下實現C++類的動態鏈接

1. 背景 在java中,jvm支持類的動態鏈接(Class.forName(String className)),用起來也很方便。動態鏈接是實現IOC(Inversion of Control,控制反轉,更形象的稱作依賴注入)的關鍵,用

原创 延遲與吞吐

對於一個request-response類型的在線服務來說,延遲和吞吐量是至關重要的性能指標。 延遲:從客戶端來看,就是從發送請求到接收響應的整體耗時,包括:請求的網絡耗時,請求在服務端的處理耗時以及響應的網絡耗時。 吞吐量:服務在一定

原创 localtime死鎖——多線程下fork子進程

最近測試我們自己改進的redis,發現在做rdb時,子進程會一直hang住,gdb attach上,堆棧如下:(gdb) bt #0 0x0000003f6d4f805e in __lll_lock_wait_private () f

原创 redis源碼分析(8)——replication

redis的主從同步用於實現高可用,並且可以實現讀寫分離,用於抗大量讀請求。通過兩種方式指定一個slave從master複製: - 在配置文件中配置:slaveof <masterip> <masterport> - 或者在客戶端中執行

原创 FlatBuffers vs Protocol Buffers

FlatBuffers去年發佈,最近看了一下,與同是出自Google之手的Protocol Buffers非常類似。在官網上介紹,FlatBuffers(簡稱FB)主要針對game development和對性能有要求的應用。相對於Pr

原创 redis源碼分析(5)——aof

前面幾篇基本介紹了redis的主要功能、流程,接下來是一些相對獨立的部分,首先看一下持久化。redis持久化支持兩種方式:RDB和AOF,我們首先看一下AOF的實現。 AOF(Append only file)實際上就是redis的re

原创 redis3.0深入詳解(1)

4月1日,redis3.0-stable正式發佈。引入了久違的cluster模式,同時進行了多處優化。本文,從源碼級別對3.0和2.8.19進行對比,詳細解釋優化細節。由於能力及時間有限,只會對我已經讀過的源碼部分進行對比,同時不涉及c

原创 redis源碼分析(7)——rdb

RDB是redis的另一種持久化方式,相當於是定時快照,也用於主從同步中快照+redo log。redis在進行RDB時,不需要加鎖,這是通過利用父子進程共享同一份內存完成的。在父進程fork子進程之後,父子以copy-on-write

原创 infQ——不受限於內存的隊列

一、背景 在常見的內存隊列(redis的list結構)中,經常會因爲隊列阻塞,導致內存撐爆。類似的,在redis主從同步過程中,由於內存限制,redo log的buffer是固定的,如果從庫的進度在buffer之外,就需要進行一次全量同步

原创 redis源碼分析(4)——發送響應內容

前一篇介紹了redis處理請求的過程,接下來是如何發送響應內容。  在請求處理完之後,進行響應時,需要調用addReplyXXX族函數,具體包括:           void addReply(redisClient *c, rob

原创 swoole IO處理模型

公司的php服務框架是通過swool實現的,發現線上存在丟請求的情況。爲了排查這個問題,順便看了一下swoole的源碼,瞭解了其IO、進程模型。本篇文章主要介紹選用swoole官方推薦的多進程、多線程模型時IO處理模型。 swoole的

原创 redis源碼分析(6)——aof rewrite

隨着redis的運行,aof會不斷膨脹(對於一個key會有多條aof日誌),導致通過aof恢復數據時,耗費大量不必要的時間。redis提供的解決方案是aof rewrite。根據db的內容,對於每個key,生成一條日誌。aof觸發的時機

原创 Redis EXISTS命令耗時過長case排查

一、背景 redis慢日誌分析平臺上線後,隨便看了一下,發現onestore使用的緩存集羣,存在大量的EXISTS命令慢查詢的情況: 平均每個EXISTS命令需要13ms,最大耗時近20ms。這個結果很不科學啊,EXISTS命令只是執行

原创 高可用架構經驗

之前給組內同學分享了高可用方面的一些經驗,具體見slideshare。一些關鍵點整理如下:高可用    - 冗餘        - 服務            - 負載均衡                - lvs + keepaliv