開(kāi)源項目研究與應用小結

本文就高并發(fā)敏捷WEB架構、消息隊列/總線(xiàn)服務(wù)、大規模數據存儲、數據緩存等幾個(gè)大方向在開(kāi)源領(lǐng)域的研究與應用進(jìn)行總結。

 

高并發(fā)敏捷WEB架構

企業(yè)級、重型

Java
Apache + Java/Tomcat + DB

優(yōu)點(diǎn))成熟度高,豐富的開(kāi)源jar

缺點(diǎn))項目負載重,開(kāi)發(fā)相對笨重,不適合快速演化的創(chuàng )新項目

已有項目需在某種程度上去除過(guò)度框架化,比如O/R映射,復雜的MVC框架

 

 

輕量級、敏捷

Pythonnginx + python/tornado + mongodb[mysql]

PHP
apache + php + mysql

優(yōu)點(diǎn))敏捷與成熟之間取得不錯的平衡,輕量級,敏捷響應需求

缺點(diǎn))第三方包的成熟度不如JAVA平臺

 

高并發(fā)、進(jìn)取

Javascript
Google V8 引擎
+ node.js +
mongodb[mysql]

優(yōu)點(diǎn))基于javascript的事件模型,高并發(fā),前后端統一使用javascript

缺點(diǎn))不少開(kāi)源產(chǎn)品的node.js封裝還在適配階段,但國外社區很活躍

 

偏好推薦:

輕量級敏捷框架:
nginx + tornado + mongodb[mysql]

nginx
--- 
成熟度高,并發(fā)能力極強的WEB接入(2x
Apache

tornado
--- Facebook
旗下使用的基于事件的Python
WEB
應用框架,高并發(fā),社區活躍

mongodb
--- OO
角度抽象業(yè)務(wù)邏輯,便捷的集群設置,良好的對象邏輯設計帶來(lái)高性能

mysql---
成熟度高,廣泛應用在開(kāi)源WEB社區,對集群的支持逐步增強

偏好原因:

1)業(yè)務(wù)變化迅速,

2)潛在證券業(yè)務(wù)創(chuàng )新的WEB項目,

3python學(xué)習門(mén)檻低,語(yǔ)言動(dòng)態(tài)魅力

 

消息隊列、數據總線(xiàn)服務(wù)

Apache
ActiveMQ

優(yōu)點(diǎn):附帶Apache
Camel
項目整合模式,支持JMS1.1,CXF/Axis
Web
服務(wù)支持

缺點(diǎn):重量級,適合整體部署,特性需求切割困難

 

Apache
Qpid

優(yōu)點(diǎn):遵循高級消息隊列協(xié)議(AMQP),提供C++/JAVA兩個(gè)版本實(shí)現,消息模式可編程性比ActiveMQ方便(AMQP提供)

缺點(diǎn):AMQP協(xié)議需要掌握,存在協(xié)議負載,成熟度不如ActiveMQ

 

Spring
RabbitMQ

優(yōu)點(diǎn):遵循高級消息隊列協(xié)議(AMQP),提供Erlang實(shí)現,Spring社區活躍

缺點(diǎn):愛(ài)立信Erlang語(yǔ)言團隊不大熟悉,和Qpid一樣需要掌握AMQP協(xié)議,存在協(xié)議負載

 

ZeroMQ

確切的說(shuō)ZeroMQ不是一個(gè)成品的消息隊列項目,而是一個(gè)通訊層次框架。ZeroMQ定位在TCP/IP之上的智能網(wǎng)絡(luò )協(xié)議層;提供通訊中的常見(jiàn)的多線(xiàn)程,APP層錯誤處理,點(diǎn)對點(diǎn)/發(fā)布訂閱/路由等通訊模型的抽象;線(xiàn)程之間、進(jìn)程之間、多機之間消息通訊的無(wú)差別抽象。ZeroMQ社區放棄了AMQP協(xié)議標準,追求的目標是輕量級、速度與語(yǔ)言適配。

 

優(yōu)點(diǎn):輕量級極其高效的編程模型,多種常見(jiàn)通訊模式的抽象,幾乎所有主流語(yǔ)言的適配,方便自由修改通訊模式與組合適應各種業(yè)務(wù)場(chǎng)景—Magic

缺點(diǎn):需要二次開(kāi)發(fā)投入,通訊雙方必須同時(shí)使用ZeroMQ

 

偏好選擇:

多異構系統適配,性能要求不是特別高的場(chǎng)景下偏向選擇相對成熟的ActiveMQ。

新開(kāi)發(fā)涉及到復雜通訊的處理的場(chǎng)景下或者需要高效通訊的業(yè)務(wù)場(chǎng)景下選擇ZeroMQ。

 

 

大規模數據存儲

 

MySQL
Cluster

優(yōu)點(diǎn):MySQL成熟穩定,社區非常龐大,受大規模應用考驗(Twitter/Facebook/QQ注:基本上都經(jīng)過(guò)修改)

缺點(diǎn):SQL模式的缺點(diǎn)

 

MongoDB

優(yōu)點(diǎn):面向OO的模式思考存儲適合業(yè)務(wù)抽象,方便集群,合理的OO設計帶來(lái)高性能提升。

缺點(diǎn):SQL模式的優(yōu)點(diǎn)在MongoDB中不存在了,比如多表關(guān)聯(lián)失效了,某些查詢(xún)的性能因為特殊的OO設計變低了(MongoDB目前采用javascript版本的MapReduce模式統計)。

Hadoop

Hadoop近兩年廣受開(kāi)源社區關(guān)注,獲得2011年度MediaGuardian最佳創(chuàng )新項目大獎。通俗的講,HadoopGoogle存儲與計算平臺的開(kāi)源版本(山寨版本)。Facebook,Yahoo大容量存儲后臺已經(jīng)采用Hadoop,淘寶在開(kāi)源社區大勢高薪招聘Hadoop架構師并已實(shí)現基于Hadoop的‘云梯’混搭myql實(shí)現即時(shí)數據推送,Hadoop的影響力可見(jiàn)一斑。

Hadoop分為基礎文件系統HDFS,大規模數據表存儲Hbase,數據倉庫HiveFacebook貢獻),數據挖掘Mahout,高性能分布式協(xié)同ZooKeeper等幾個(gè)子項目。

優(yōu)點(diǎn):
集分布式存儲與計算一體,大規模數據應用觸發(fā)而生的項目

缺點(diǎn):需要投入大量研發(fā)能力,屬于牛刀類(lèi)型。(已經(jīng)有商業(yè)版MapR

 

偏好選擇:

證券業(yè)務(wù)WEB創(chuàng )新項目從輕量級的角度看選擇MongoDB可以快速Imaging業(yè)務(wù)。

公司基礎大規模業(yè)務(wù)數據采用傳統的SQL方式,長(cháng)期戰略上看甚至可以考慮往Hadoop方向上思考,但前提是能駕馭類(lèi)似Hadoop這樣的平臺。

 

數據緩存

Memcahced

Memcahced是一款分布式高性能緩存,接口簡(jiǎn)潔,Key=>Value+失效時(shí)間的簡(jiǎn)單模式能解決大部分緩存問(wèn)題。Nginx服務(wù)接入可直接配置memcached的緩存模式,以URL地址為Key從源頭緩存WEB請求。

優(yōu)點(diǎn):
成熟,不少
linux發(fā)行版本中自帶。性能優(yōu)越,簡(jiǎn)單易用,PHP+Memcached模式久經(jīng)考驗

缺點(diǎn):無(wú)磁盤(pán)存儲支持(嚴格上說(shuō)這是設計)

 

Redis

Redis在近3年的發(fā)展非常迅速,出現了很多成功應用的案例。Redis不完全是簡(jiǎn)單定位于Key/Value的緩存,更準確的描述是數據結構服務(wù)器,簡(jiǎn)單字符串映射字符串—key/value的緩存,Redis支持的非常好,同時(shí)還支持value部分更復雜操作,操作比如list、set、sortedset、hashset等等,甚至還支持Pub/Sub訂閱消息模式。

優(yōu)點(diǎn):性能卓越,比memcached略高,支持key/value數據結構高性能計算,集群,持久化

缺點(diǎn):相對memcached成熟度還不夠(但已經(jīng)很多成功使用案例)

 

Ehcache

EhcacheJAVA平臺下常見(jiàn)的開(kāi)源緩存產(chǎn)品,O/R映射產(chǎn)品Hibernate中就采用Ehcache,我們互動(dòng)平臺項目中采用的緩存產(chǎn)品就是Ehcache。

優(yōu)點(diǎn):成熟,JAVA項目集成相對方便。

缺點(diǎn):緩存結構相對memcached/redis有些復雜,性能低于memcached/redisc/c++實(shí)現)

偏好選擇:

簡(jiǎn)單緩存業(yè)務(wù)、混搭平臺選擇memcached,可以參考大量應用案例

性能積極進(jìn)取型的項目嘗試redis,嘗試redis集群高可用

 

研究成果在項目中應用


zeromq智能網(wǎng)絡(luò )通訊框架

 

公司算法交易組中涉及pub/sub模式中在嘗試使用zeromqpython封裝),我將樂(lè )意提供基礎的技術(shù)支持,與團隊共享zeromq的使用經(jīng)驗。

 

公司算法交易組中IPython(交互式Python版本)內部已經(jīng)采用zeromq


基于zeromqzbus輕量級總線(xiàn)服務(wù)

我們自主開(kāi)發(fā)的基于zeromq的輕量級總線(xiàn)服務(wù)zbus,支持分布式協(xié)同,經(jīng)過(guò)多次測試,zbus在普通PC上性能保持1.3萬(wàn)QPS,bus提供pythonc/c++兩個(gè)版本,在輕量級的場(chǎng)景下可以采用。

HD投資顧問(wèn)交流平臺早期已經(jīng)嘗試部署使用,但尚未接受高壓業(yè)務(wù)場(chǎng)景。


nginx高并發(fā)WEB接入服務(wù)

nginx類(lèi)似apache,提供更好的靜態(tài)文件服務(wù),速度在2x
Apache
,普通PC上能達到1.6萬(wàn)QPS,nginx除了卓越的性能之外還保持其靈巧簡(jiǎn)便的配置。目前在投資顧問(wèn)交流平臺中充當WEB接入服務(wù)。


MongoDB面向文檔(key/value)大規模數據存儲服務(wù)

MongoDB在投資顧問(wèn)交流平臺中充當唯一數據存儲服務(wù),提供集群服務(wù)。從項目5月份上線(xiàn)至今,MongoDB尚未重啟過(guò),內存/CPU/帶寬等要素整體表現穩定。在類(lèi)似的WEB項目中建議采用,獲取其敏捷的開(kāi)發(fā)優(yōu)勢。


redis/memcached緩存技術(shù)

redis

在互動(dòng)平臺中redis充當計算在線(xiàn)用戶(hù)狀態(tài)的緩存。

memcached

在投資顧問(wèn)交流平臺中memcached充當多個(gè)python應用實(shí)例之間共享session狀態(tài)共享,從而避免了多個(gè)容器之間的集群

memcached在投資顧問(wèn)交流平臺中的成功應用后,我跟唐斌討論了把目前CAS單點(diǎn)登錄采用兩個(gè)tomcat容器集群(jboss組播)產(chǎn)生的難以維護擴展問(wèn)題,近期修改成后臺session共享memcached或者redis的模式。在其他項目中建議這種處理方案可以參考。

CAS單點(diǎn)登錄

CAS在互動(dòng)平臺項目中做為單點(diǎn)登錄服務(wù)

互動(dòng)平臺項目之初采用的是開(kāi)發(fā)商獨立開(kāi)發(fā)的SSO模式,但是很快就給bug和擴展性從項目中拉下,在開(kāi)源社區中我推薦開(kāi)源廣為使用的CAS(后期由唐斌負責維護),CAS社區至今仍然十分活躍,支持幾乎所有主流語(yǔ)言的客戶(hù)端接入,CAS專(zhuān)業(yè)做安全相關(guān)的協(xié)議完善和認證后端框架的抽象。CAS在互動(dòng)平臺這幾年的運營(yíng)中系統層面是穩定的,不斷的滿(mǎn)足了手機,python,air客戶(hù)端的SSO接入。系統本身的某些小問(wèn)題在于我們使用的模式(容器集群,需逐步改良)以及后端的認證框架(經(jīng)過(guò)多個(gè)層次比如TC到達用戶(hù)信息表),和CAS
WEB
界面的優(yōu)化問(wèn)題。CASWEB應用中我認為是SSO的不二選擇。

 

 

階段性研究方向:

1Google V8引擎,Node.JS

高并發(fā)框架在公司項目中應用的可能性

2Hadoop(大象)

Google存儲,MapReduce計算的開(kāi)源版本

3Tornado(颶風(fēng))

Facebook旗下的重點(diǎn)開(kāi)源項目,基于事件的高并發(fā)Python
WEB
框架