姓名:裴航
學(xué)號:14020181049
轉(zhuǎn)載自http://www.infoq.com/cn/news/2014/11/proxygen
【嵌牛導(dǎo)讀】:近日退腥,F(xiàn)acebook開源了其Proxygen逝薪。這是一款開源的HTTP框架。其目的不是替換Apache,而是有能力創(chuàng)建一個(gè)專用的高性能Web服務(wù)器,使其可以嵌入到Facebook提供Web服務(wù)的現(xiàn)有應(yīng)用中。Facebook從2011年開始構(gòu)建一款代理服務(wù)器(Proxygen這個(gè)名字也是由此而來),在該項(xiàng)目演進(jìn)并在生產(chǎn)環(huán)境中測試了數(shù)年之后梅垄,F(xiàn)acebook將其代碼開源了。
【嵌牛鼻子】:Facebook输玷、Proxygen
【嵌牛提問】:為什么沒有從Apache队丝、nginx或者其他的服務(wù)器入手呢?
Facebook列出了很多原因:
??? ?能夠與他們現(xiàn)有的基礎(chǔ)設(shè)施和工具集成(Thrift欲鹏、ODS)
??? ?創(chuàng)建一個(gè)可以供不同的內(nèi)部項(xiàng)目(Haystack机久、HHVM和負(fù)載均衡器等)使用的事件驅(qū)動(dòng)庫
?? ???? ?據(jù)Facebook介紹,他們之前的HTTP基礎(chǔ)設(shè)施在伸縮性方面遇到了一些限制赔嚎,需要大量的變通方案膘盖,所以希望根據(jù)需要內(nèi)部自行開發(fā)
?? ???? ?那時(shí),既有的HTTP服務(wù)器還缺少很多特性尤误,如:SPDY侠畔、WebSockets、HTTP/1.1 (keep-alive)损晤、TLS false start和特定的負(fù)載調(diào)度算法
Proxygen用到了下列概念:transaction(事務(wù))软棺、session(會(huì)話)、codec(編解碼器)和handler(處理器)尤勋。事務(wù)表示的是在客戶端和服務(wù)器之間交換的請求-響應(yīng)對喘落。這類相關(guān)的事務(wù)所組成的序列就是一個(gè)會(huì)話。編解碼器負(fù)責(zé)將來自線路上的字節(jié)解析為對象最冰,并將其與事務(wù)關(guān)聯(lián)起來瘦棋。消息最終傳遞給處理器進(jìn)行真正地處理。盡管通過底層的編解碼器和事務(wù)來與該框架交互也是可能的暖哨,但還是建議開發(fā)者借助API使用更高層次的抽象赌朋。
Proxygen依賴的框架有:?
?Folly——Facebook內(nèi)部使用的一個(gè)開源的C++11組件庫,其中包括代碼基準(zhǔn)測試框架、大小端轉(zhuǎn)換原語箕慧、優(yōu)化的字符串和vector服球、JSON序列化器等組件。
?FBThrift——Apache Trift的一個(gè)分支颠焦。
Proxygen支持SPDY 3.1,目前正在添加對HTTP/2的支持往枣。 Facebook內(nèi)部做的基準(zhǔn)測試表明伐庭,在一個(gè)Proxygenecho服務(wù)器(搭載了一個(gè)包含32個(gè)邏輯核的Xeon CPU E5-2670 @ 2.60GHz和16 GB主存)上,每秒可以支撐多達(dá)304 197次基于SPDY 3.1的內(nèi)存GET請求分冈。
在GitHub上發(fā)布的源代碼已經(jīng)在Ubuntu 14.04上測試過圾另,盡管沒有特別指出,但是Facebook認(rèn)為該框架在其他系統(tǒng)上運(yùn)行也是安全的雕沉。