異步RPC框架:Missian
大家都知道,Hessian是一個了不起的RPC框架。但是,它的調用是同步的,并且只能基于HTTP傳輸。
作者創建missian(mina+hessian的意思)的目的有二:
1、實現異步的RPC調用。同步遠程操作帶來的損耗有時候是無法忍受的。異步操作要復雜一些,但是能夠提高系統的并發能力和響應時間。
2、讓hessian可以在tcp上傳輸。HTTP是構建在tcp之上的應用層協議,本身是比較復雜的,對HTTP編碼解碼的過程也無疑是一個性能損耗。如果把HTTP這一層去掉,能夠一定程度的提供性能。
有多種辦法可以對hessian進行擴展以支持tcp傳輸,但是很難讓它異步,因此我決定大刀闊斧的對其進行改造,以達到我的目的。
Missian的服務器端是基于mina的;同步客戶端之基于傳統的阻塞式Socket實現的,支持連接池;異步的客戶端基于mina NioSocketConnector。
這里也推薦一下mina這個了不起的nio框架。我從06年底就開始使用。最近的一個項目中,寫的基于mina的http服務,在全部擊中緩存的情況下(仍有一定的邏輯,諸如幾個小列表進行取并集、交集,返回數據包在1-2K之間),測試達到了23000個TPS,此時CPU僅達到40%左右。我推薦大家使用mina來開發網絡通信方面的東西,包括服務器。
Missian沒有綁定spring,但是我強烈推薦使用spring,這樣missian可以直接去spring里面找到對應的bean,否則還需要你自己實現一個BeanLocator接口。
同時我提供了幾個例子:
1、構建服務器端(基于spring)
2、構建服務器端(無spring)
3、同步客戶端(無spring,使用spring來創建也很簡單)
4、異步客戶端(基于spring)
5、異步客戶端(無spring)
Missian 即將支持基于HTTP的異步/同步調用,這時協議和hessian是完全一致的,因此missian http客戶端可以調用hessian servlet(僅同步調用,因為異步需要服務器端回傳方法名稱,hessian是沒有這個的),hessian也可以調用missian的服務。 Missian http客戶端調用missian服務則即可以是同步的也可以是異步的。