原创 NOVA:一個支持混合 DRAM 和 NVMM 的結構化日誌文件系統

前言 前段時間有幸跟 NOVA 的作者 Jian Xu 博士深入交流了一番,受益頗多,決定趁熱打鐵,好好研究一下 NOVA,一方面可以知道在 Linux 下面如何開發一個文件系統,而另一方面,則是想了解下當前硬件的發展水平,以及爲了更好的發

原创 高性能nosql ledisdb設計與實現(1)

ledisdb是一個用go實現的基於leveldb的高性能nosql數據庫,它提供多種數據結構的支持,網絡交互協議參考redis,你可以很方便的將其作爲redis的替代品,用來存儲大於內存容量的數據(當然你的硬盤得足夠大!)。同時ledi

原创 golang函數可變參數傳遞性能問題

幾天前糾結了一個蛋疼的問題,在go裏面函數式支持可變參數的,譬如...T,go會創建一個slice,用來存放傳入的可變參數,那麼,如果創建一個slice,例如a,然後以a...這種方式傳入,go會不會還會新建一個slice,將a的數據全部

原创 高性能nosql ledisdb設計與實現 (2):replication

ledisdb現在已經支持replication機制,爲ledisdb的高可用做出了保障。使用假設master的ip爲10.20.187.100,端口6380,slave的ip爲10.20.187.101,端口爲6380.首先我們需要ma

原创 高性能C++網絡庫libtnet實踐:comet單機百萬連接掛載測試

最近在用go語言做一個掛載大量長連接的推送服務器,雖然已經完成,但是內存佔用情況讓我不怎麼滿意,於是考慮使用libtnet來重新實現一個。後續我會使用comet來表明推送服務器。 對於comet來說,單機能支撐大量的併發連接,是最優先

原创 golang:使用timingwheel進行大量ticker的優化

Ticker 最近的項目用go實現的服務器需要掛載大量的socket連接。如何判斷連接是否還存活就是我們需要考慮的一個問題了。 通常情況下面,socket如果被客戶端正常close,服務器是能檢測到的,但是如果客戶端突然拔掉網線,或者

原创 mixer: 一個用go實現的mysql proxy

介紹 mixer是一個用go實現的mysql proxy,支持基本的mysql代理功能。 mysql的中間件很多,對於市面上面現有的功能強大的proxy,我主要考察瞭如下幾個: mysql-proxy,mysql官方的代理,使用起來並

原创 學習tornado:安全

在web編程中,安全性是我們都必須面臨的一個問題,包括cookie僞造,xsrf攻擊等。tornado作爲一個web framework,在安全性方面也提供了很多功能,這裏簡單介紹一下。 cookie 在web編程中,瀏覽器經常使用c

原创 學習tornado:模板

第一次接觸tornado的template,是在做oastub的時候,因爲一位同學在handler裏面硬編碼了html代碼,我決定引入template機制來降低邏輯與頁面的耦合。 簡介 tornado自帶了一個簡易的template引

原创 mixer: mysql協議分析

綜述 要實現一個mysql proxy,首先需要做的就是理解並實現mysql通訊協議。這樣才能通過proxy架起client到server之間的橋樑。 mixer的mysql協議實現主要參考mysql官方的internal manua

原创 polaris: 一個用go實現的支持restful的web框架

介紹 polaris是一個用go實現的支持restful的web框架,主要參考tornado進行設計。 雖然在go裏面搭建一個http server非常的簡單,這裏強烈推薦gorilla,但並沒有很好的對restful模型進行支持。

原创 polaris: session和middleware的支持

起因 polaris雖然是模仿tornado開發,但我覺得作爲一個go的web框架,還需要提供一些額外的擴展支持。 polaris現在已經支持session以及middleware,主要參加django。 polaris對於這些額外

原创 libcoro:在c++中支持coroutine

起因 在第一個版本的libtnet開發完成之後,我一直在思考如何讓異步方式的網絡編程更加簡單。 雖然libtnet通過c++ shared_ptr以及function等技術很大程度上面解決了異步代碼編寫的一些問題,但是仍然會出現代碼邏

原创 使用go reflect實現一套簡易的rpc框架

go jsonrpc 在實際項目中,我們經常會碰到服務之間交互的情況,如何方便的與遠端服務進行交互,就是一個需要我們考慮的問題。 通常,我們可以採用restful的編程方式,各個服務提供相應的web接口,相互之間通過http方式進行

原创 go-mysql,一個易用的mysql接口框架實現

介紹 go-mysql是一個用go寫的mysql driver,使用接口類似於go自身的database sql,但是稍微有一點不同,現階段還不支持集成進go database/sql中,但實現難度並不大,後續可能會接入。 go-my