Facebook、微信團隊、Twitter、微軟開源軟體列表一覽

boxti發表於2017-07-05

xxtfjpw9rzxu2ax8.jpg!heading

 

編者按:本文來自微信公眾號“InfoQ”(ID:infoqchina),編輯小智;36氪經授權釋出。

對於為什麼要釋出開源專案,Facebook開源專案負責人曾經解釋過:一是開源能夠幫助他人更快地開發軟體,促進世界創新,主要是社會價值層面的考慮。二是開源能夠倒逼Facebook的工程師寫出更好的程式碼。三是開源能夠更有效利用社群的力量,幫助Facebook一起解決難題。開源,讓世界更美好,不是嗎?

Facebook開源軟體列表

從Facebook的GitHub賬戶中可以看到,Facebook已經開源的開源專案有近300個,領域涉及移動、前端、Web、後端、大資料、資料庫、工具和硬體等。Facebook開源專案負責人James Pearce曾在OSCON解釋過Facebook究竟為何要使用、支援和釋出開源專案。具體如下:

  • 共享Facebook的程式碼(通常是軟體“棧”,偶爾也包括硬體設計)促進了這個世界的創新。這些程式碼幫助他人更快地開發軟體。因為Facebook不是一家軟體公司,所以它在開源過程中沒有面臨競爭對手的威脅,相反,開源帶來的價值在逐漸顯現。使用者使用Facebook的開原始碼可以更快地構建應用,而他們也樂於回饋程式碼,使Facebook從中受益。

  • 擁抱開源,意味著Facebook必須一開始就寫出更優秀的軟體。如果他們知道某個軟體從誕生起就要公開,那就必須要好好做,提高可用性和可靠性,因為將來外面的人都會用它。這種壓力也會給公司內部帶來更多的價值。

  • 開源帶來了共享挑戰的機會。開源專案面臨的難題會吸引一些外部的優秀人員,而結果是,他們也帶動了公司內部人員的能力提升。每天Facebook都承載了超過一億人的溝通互聯,何以能做到?唯有開源的力量。

下面是InfoQ編輯整理的Facebook現有的比較活躍的開源專案列表,歡迎交流討論。

移動開發框架:React Native

React Native是Facebook在2015年開源的基於React.js的移動開發框架,它的設計理念是讓移動應用既擁有Native的使用者體驗,同時又可以保留React的開發效率,提高程式碼的複用率。React Native的宗旨是,學習一次,高效編寫跨平臺原生應用。開發者可以使用JavaScript編寫應用,並利用相同的核心程式碼就可以建立Web、iOS 和Android平臺的原生應用,目前已經實現了對iOS和Android兩大平臺的支援。

GitHub主頁地址

Star數量:33108

資料查詢語言:GraphQL

GraphQL是Facebook開源的資料查詢語言。Facebook在構建移動應用程式時,需要用API獲取足夠強大的資料來描述所有的臉譜,同時簡單易學易用,於是開發了GraphQL,並支援每天千億級的呼叫。GraphQL不是像MySQL或Redis這樣直接面向資料的介面,而是面向已經存在的應用程式碼的介面。你可以把GraphQL看作是為了呼叫應用伺服器上的方法的一些內嵌的RPC。

GitHub主頁地址

Star數量:2902

大資料查詢引擎:Presto

Presto是Facebook開發的一款分散式SQL引擎,主要用於針對各種大小的資料來源(從GB到PB)來執行互動式分析查詢。Facebook建立Presto的主要目的在於幫助他們更快地分析資料,因為Facebook的資料量一直在持續增長,產品週期的節奏也變得越來越快。自從2013年11月開源後,Presto的使用者量呈現了爆發式增長。諸如Airbnb、京東、Dropbox以及Netflix等公司都將Presto作為自己的互動式查詢引擎。

GitHub主頁地址

Star數量:4792

PHP執行引擎:HHVM

HHVM(HipHop Virtual Machine)是Facebook於2013年開源的PHP執行引擎。它採用一種JIT(just-in-time)的編譯機制實現了高效能,同時又保持對 PHP 語法的充分支援。HHVM常常用作獨立的伺服器,用於替代Apache與mod_php,旨在執行使用Hack與PHP所編寫的程式。它使用了即時編譯方法來實現超高的效能,同時又保持了PHP開發者所習慣的靈活性。

GitHub主頁地址

Star數量:13652

JavaScript庫:React

React是Facebook開發的用於構建使用者介面的JavaScript庫,現已為很多公司所用,因為它採用了一種不同的方式來構建應用:藉助於React,開發者可以將應用分解為彼此解耦的獨立元件,這樣就可以獨立維護並迭代各種元件了。2015年,React有兩個主要的釋出,同時還發布了React Native,並且釋出了新的開發者工具。現在已經有越來越多的公司(包括Netflix與WordPress)開始使用React構建自己的產品了。

GitHub主頁地址

Star數量:43146

鍵值儲存系統:RocksDB

RocksDB是Facebook開源的嵌入式、可持久化鍵值儲存系統,它基於Google的LevelDB,但提高了擴充套件性可以執行在多核處理器上,可以有效使用快速儲存,支援IO繫結、記憶體和一次寫負荷。過去一段時間,RocksDB在社群非常流行,Facebook分析其原因在於它能夠對由於網路延遲等原因造成的慢查詢響應時間起到消除的作用,RocksDB非常靈活,完全可以針對各種新興的硬體發展趨勢進行定製。LinkedIn與Yahoo都是RocksDB的重度使用者。

GitHub主頁地址

Star數量:5418

人工智慧硬體平臺:Big Sur

近些年,人工智慧和機器學習方向取得了長足的發展。據Kevin Lee透露,Facebook的AI軟體已經能夠閱讀故事、回答相關場景的問題、玩遊戲以及通過一些例子來學習非指定的內容。作為計算密集型的應用,AI軟體的效能與資料集規模/硬體效能密切相關。尤其是硬體方面,高效能微處理器、儲存器以及圖形處理器(Graphics Processing Unit,GPU)的發展為AI演算法的快速執行提供了堅實基礎。為了進一步更好地服務大規模AI計算,Facebook推出了基於GPU的、用於訓練神經網路的“Big Sur”硬體系統。

瞭解更多

網路模擬測試工具:ATC

Augmented Traffic Control(ATC)能夠利用Wi-Fi網路模擬2G、2.5G(Edge)、3G以及LTE 4G行動網路環境,測試工程師們可以快速在各種不同的模擬網路環境中切換,從而實現對智慧手機和App在不同國家地區和應用環境下的效能表現進行測試。ATC是Facebook內部團隊在2013年的一次Hackathon活動上開發出來的工具,其原理實際是利用了Linux流量控制系統,通過純Python的網路庫pyroute2呼叫netlink的API控制,而開發其的目的是為了確保更多的使用者獲得最好的應用體驗。

GitHub主頁地址

Star數量:2962

開源資料庫:HydraBase

HydraBase是HBase資料庫的升級版。Facebook是HBase的重度使用者,Facebook的HBase資料庫系統儲存著Facebook的很多關鍵業務資料,包括內部監控系統、搜尋索 引、流資料分析以及資料抓取等。HydraBase相比HBase穩定性和可用性更高,可以減少伺服器當機時間。HydraBase能夠讓一個資料域分佈在多個域伺服器中,域伺服器之間能相互備份,因此能夠大大減少資料恢復所用的時間。Facebook聲稱HydraBase能將Facebook全年的當機時間縮減到不到5分鐘。

Facebook已經將HydraBase捐贈給Apache,目前很多程式碼都已經被合併到HBase中。

關係型資料庫:WebScaleSQL

WebScaleSQL是基於MySQL 5.6 社群版本改編的MySQL通用分支,基於GPL開源協議釋出。WebScaleSQL目前已經做了很多效能改進工作,包括:客戶端非同步協調、邏輯預讀、查詢限流、服務端執行緒池優化、InnoDB大頁支援等等。WebScaleSQL上的功能都是很“Web Scale”和接地氣的。比如執行緒池優化,WebScaleSQL基於Mariadb的執行緒池實現進行重寫並優化,對讀寫佇列進行分離,重新設計佇列優先順序策略,避免了餓死現象。要知道執行緒餓死在有些場景下是很嚴重的。尤其是在併發連線數往往很大的網際網路應用裡面。

GitHub主頁地址

Star數量:2940

程式碼審查工具Phabricator

程式碼審查方面,Facebook開源了視覺化工具Phabricator。工程師可以在頁面上非常方便的針對每一段(單行或者多行)程式碼進行互動討論;負責審查的工程師可以接受程式碼改變,可以提出疑問要求原作者繼續修改,可以提出自己不適合以推出該程式碼審查,等等。只有程式碼被明確接受之後才能被工程師提交到伺服器端的程式碼庫,這一點整合到提交工具中強制執行。

GitHub主頁地址

Star數量:7022

C++HTTP框架:Proxygen

Proxygen是一款Facebook開源的支援SPDY 3.1的HTTP框架。其目的不是替換Apache,而是有能力建立一個專用的高效能Web伺服器,使其可以嵌入到Facebook提供Web服務的現有應用中。Facebook從2011年開始構建一款代理伺服器(Proxygen這個名字也是由此而來),在該專案演進並在生產環境中測試了數年之後,Facebook將其程式碼開源了。 Facebook內部做的基準測試表明,在一個Proxygen echo伺服器上,每秒可以支撐多達304 197次基於SPDY 3.1的記憶體GET請求。

GitHub主頁地址

Star數量:3961

開源動畫庫:Pop

Pop是Facebook推出的一個可擴充套件的iOS 和OS X動畫庫,其新聞聚合閱讀應用Paper背後的核心技術就是由Pop支援。除了增加基本的靜態動畫外,還支援Spring和衰變動態動畫,可非常方便的構建現實的、基於物理的互動。Pop動畫庫的動畫效果非常流暢,因為它使用了CADisplayLink來重新整理畫面(幀),一秒鐘重新整理幀數為60幀,接近於遊戲開發引擎。Pop動畫的自成體系,與系統的CoreAnimation有很大的區別,但使用上非常相似。

GitHub主頁地址

Star數量:15468

靜態程式碼分析工具:Infer

Infer是Facebook的開發團隊在程式碼提交內部評審時,用來執行增量分析的一款靜態分析工具,在程式碼提交到程式碼庫或者部署到使用者的裝置之前找出bug。由OCaml語言編寫的Infer目前能檢測出空指標訪問、資源洩露以及記憶體洩露,可對C、Java或Objective-C程式碼進行檢測。Facebook使用Infer自動驗證iOS和安卓上的移動應用的程式碼,bug報告的正確率達80%。Infer通過捕獲編譯命令,把要被編譯的檔案轉換為可用於分析潛在錯誤的中間語言格式。整個過程是增量進行的,意味著通常只有那些有修改過並提交編譯的檔案才會被Infer分析。Infer還整合了大量的構建或編譯工具,包括Gradle、Maven、Buck、Xcodebuild、clang、make和javac。

GitHub主頁地址

Star數量:5259

作業系統監控工具:osquery

osquery是一款面向OSX和Linux的作業系統檢測框架。它將作業系統暴露為一個高效能的關係型資料庫,允許使用者編寫SQL查詢檢視作業系統資料。在osquery中,SQL表代表像下面這樣的抽象概念:

  • 正在執行的程式

  • 已載入的核心模組

  • 開啟的網路連線

雖然osquery利用了非常底層的作業系統API,但它允許使用者在Ubuntu、CentOS和Mac OS X上構建並使用它。osquery效能極高,記憶體佔用小,支援使用者在整個基礎設施上執行查詢。

GitHub主頁地址

Star數量:6209

JavaScript靜態型別檢查工具:Flow

Flow是Facebook出品的一個JavaScript程式碼的靜態型別檢查工具,該工具採用開放原始碼的OCaml(Objective Caml)語言開發,。Flow能夠幫助開發人員查詢出JavaScript程式碼中的型別錯誤,從而提高開發效率和程式碼質量。Flow已經能夠捕獲JavaScript程式碼中的常見問題,如靜態型別轉換不匹配、空指標引用等問題。同時,Flow還為JavaScript新增了型別語法,如型別別名。

GitHub主頁地址

Star數量:7510

Web應用架構:Flux

Facebook認為MVC無法滿足他們的擴充套件需求,因此他們決定使用另一種模式:Flux。由於Facebook非常巨大的程式碼庫和龐大的組織,所以MVC真的很快就變得非常複雜,於是他們得出結論,認為MVC不適合於大規模應用。

每次Facebook工程師努力增加一項新特性時,系統的複雜性成級數增長,程式碼變得“脆弱和不可預測”。對於剛接觸某個程式碼庫的開發人員來說,這正成為一個嚴重的問題。Flux是一個Facebook開發的、利用單向資料流實現的應用架構,用於 React。Flux應用有三個主要的部分組成:排程程式、儲存和檢視(React 元件)。

GitHub主頁地址

Star數量:11616

Android除錯工具:Stetho

Stetho是一個Android應用的除錯工具。當Android應用整合Stetho時,開發者可以通過訪問Chrome,在Chrome Developer Tools中檢視應用佈局、網路請求、sqlite、preference等等,視覺化一切應用操作(更重要的是不用root)。開發者也可通過它的dumpapp工具提供的命令列介面來訪問應用內部。

GitHub主頁地址

Star數量:5079

微信團隊開源專案列表

從GitHub上可以看出,到目前為止,由騰訊微信團隊發起的開源專案已經有6個,並且這其中大部分都是在2016年開源的,領域涉及移動、資料庫、基礎類庫、框架。中國大公司的開源曾經給社群留下不好的印象,比如有人就這麼說,大公司的開源,開源也就意味著結束。也有人說,大公司的開源大部分都是KPI專案,開源與業務不能相得益彰,所以根本無法持續投入。

開源不僅是一種態度,更是一種能力,微信希望通過開源打通內部團隊和外部社群,一方面可以把微信的頂級技術輸出給了社群,另一方面也可以把外部的優秀的思想傳遞到內部團隊。

C/C++協程庫Libco

Libco是微信後臺大規模使用的C/C++協程庫,2013年至今穩定執行在微信後臺的數萬臺機器上。Libco提供了完善的協程程式設計介面、常用的Socket族函式Hook等,使得業務可用同步程式設計模型快速迭代開發。

早期微信後臺因為業務需求複雜多變、產品要求快速迭代等需求,大部分模組都採用了半同步半非同步模型。接入層為非同步模型,業務邏輯層則是同步的多程式或多執行緒模型,業務邏輯的併發能力只有幾十到幾百。隨著微信業務的增長,系統規模變得越來越龐大,每個模組很容易受到後端服務/網路抖動的影響。基於這樣的背景,微信開發了Libco,實現了對業務邏輯非侵入的非同步化改造。

GitHub地址

Star數量:1043

生產級paxos類庫PhxPaxos

PhxPaxos是微信後臺團隊自主研發的一套基於Paxos協議的多機狀態拷貝類庫。它以庫函式的方式嵌入到開發者的程式碼當中,使得一些單機狀態服務可以擴充套件到多機器,從而獲得強一致性的多副本以及自動容災的特性。PhxPaxos在微信服務裡面經過一系列的工程驗證和大量的惡劣環境下的測試,在一致性的保證上極為健壯。

PhxPaxos的特性包括使用基於訊息傳遞機制的純非同步工程架構、每次寫盤使用fsync嚴格保證正確性、支援Checkpoint以及對PaxosLog的自動清理、使用點對點流式協議進行快速學習、支援跨機器的Checkpoint自動拉取、內建Master選舉功能、自適應的過載保護等。

GitHub地址

Star數量:970

高可用、強一致的MySQL叢集PhxSQL

PhxSQL是一個相容MySQL、服務高可用、資料強一致的關係型資料庫叢集。PhxSQL以單Master多Slave方式部署,在叢集內超過一半機器存活的情況下、即可提供服務,並且自身實現自動Master切換、保證資料一致性。PhxSQL不依賴於ZooKeeper等任何第三方做存活檢測及選主。PhxSQL基於MySQL的一個分支Percona 5.6開發,功能和實現與MySQL基本一致。

MySQL主備在主機上支援完整SQL、全域性事務、以repeatable read和serializable級別的事務隔離,在金融、帳號等關鍵業務中有巨大的價值。但是MySQL傳統主備方案也有其缺點。最明顯的就是主機故障後的自動換主和新舊主資料一致性,即所謂的一致性和可用性。為了解決這個問題,並同時完全相容MySQL,微信在MySQL的基礎上應用Paxos,設計和開發了PhxSQL。

GitHub地址

Star數量:1485

RPC框架PhxRPC

PhxRPC是微信後臺團隊推出的一個簡潔小巧的RPC框架,編譯生成的庫只有450K(編譯只依賴第三方庫Protobuf)。PhxRPC的特性如下:

  • 使用Protobuf作為IDL用於描述RPC介面以及通訊資料結構。

  • 基於Protobuf檔案自動生成Client以及Server介面,用於Client的構建,以及Server的實現。

  • 半同步半非同步模式,採用獨立多IO執行緒,通過Epoll管理請求的接入以及讀寫,工作執行緒採用固定執行緒池。IO執行緒與工作執行緒通過記憶體佇列進行互動。

  • 提供完善的過載保護,無需配置閾值,支援動態自適應拒絕請求。

  • 提供簡易的Client/Server配置讀入方式。

  • 基於lambda函式實現併發訪問Server,可以非常方便地實現Google提出的 Backup Requests 模式。

GitHub地址

Star數量:467

終端跨平臺網路元件:Mars

Mars是微信官方的終端基礎元件,是一個結合移動應用所設計的基於Socket層的解決方案,在網路調優方面有更好的可控性,採用C++開發。目前已接入微信 Android、iOS、Mac、Windows、WP 等客戶端。

在微信中,任何網路實現的bug都可能導致重大事故。例如微信的容災實現,如果因為版本的實現差異,導致某些版本上無法進行容災恢復,將會嚴重的影響使用者體驗。微信研發了統一的跨平臺的網路基礎庫Mars來滿足發展的需要,一方面,基礎元件可以提高研發效率,另外一方面,也可以提高系統的穩健性。

在設計上,Mars以跨平臺、跨業務為前提,遵從高可用,高效能,負載均衡的設計原則。以網路的可用性為例,移動網際網路有著丟包率高、頻寬受限、延遲波動、第三方影響等特點,使得網路的可用性,尤其是弱網路下的可用性變得尤為關鍵。Mars 的STN元件作為基於 socket 層的網路解決方案,在很多細節設計上會充分考慮弱網路下的可用性。

GitHub地址

Star數量:5895

熱補丁技術Tinker

Tinker是微信官方的Android熱補丁解決方案,它支援動態下發程式碼、So庫以及資源,讓應用能夠在不需要重新安裝的情況下實現更新。

當前市面的熱補丁方案有很多,其中比較出名的有阿里的AndFix、美團的Robust以及QZone的超級補丁方案,但它們都存在無法解決的問題,所以微信研發了自己的解決方案。總的來說,AndFix作為native解決方案,首先面臨的是穩定性與相容性問題,更重要的是它無法實現類替換,它是需要大量額外的開發成本的。而Robust相容性與成功率較高,但是它與AndFix一樣,無法新增變數與類只能用做的bugFix方案。Qzone方案可以做到釋出產品功能,但是它主要問題是插樁帶來Dalvik的效能問題,以及為了解決Art下記憶體地址問題而導致補丁包急速增大的。

Tinker的具體設計目標如下:

  • 開發透明:開發者無需關心是否在補丁版本,他可以隨意修改,不由框架限制。

  • 效能無影響:補丁框架不能對應用帶來效能損耗。

  • 完整支援:支援程式碼,So 庫以及資源的修復,可以釋出功能。

  • 補丁大小較小: 補丁大小應該儘量的小,提高升級率。

  • 穩定,相容性好:保證微信的數億使用者的使用,儘量減少反射。

GitHub地址

Star數量:6707

Twitter開源軟體專案列表

從Twitter的GitHub賬戶中可以看到,Twitter已經開源的開源專案有近200個,領域涉及分散式架構、大資料、非同步網路傳輸(客戶端、服務端)、Web、工具等。Twitter可以稱為構建於開源專案之上,該公司開源負責人Chris Aniszczyk表示,如果沒有開源軟體,Twitter將不會存在,使用者在移動端和PC端傳送和接收的每一條推文都會需要開源軟體。

Twitter從開源社群中獲得了大量的好處,而Twitter也在不斷地回饋社群,開源了大量基礎設施和工具,使得其他企業和開發者不必重新發明輪子,在這些開源專案的基礎上更加快速地實現自己所需。可以看到,Twitter在開源社群的貢獻是顯著的,甚至其貢獻的某些開源專案在一定程度上比Twitter本身帶來的影響力更大。

下面是InfoQ編輯整理的Twitter現有的比較活躍的開源專案列表,歡迎交流討論。

 jQuery外掛,快速、全功能的自動完成庫:Typeahead.js

Typeahead.js是Twitter的一個jQuery外掛,支援遠端和本地的資料集。比較有特色的地方在於,你可以將資料集使用本地儲存(local storage)來儲存在本地,有效的提高使用者體驗。同時也擁有很多遠端資料集的處理選項,例如請求頻率,最大的併發請求數,等等。它的主要特性有:

  • 支援資料本地儲存,客戶端載入,優化載入速度;

  • 支援多語言,並且支援阿拉伯文;

  • 支援Hogan.js模板引擎整合;

  • 支援多資料集拼裝;

  • 支援本地和遠端的資料集。

GitHub主頁

Star數量:12700

JavaScript庫:Twemoji

Twemoji是Twitter於2014年開源的完整的Emoji表情圖片,Twemoji包含872個表情,相容最新的Unicode 7.0。Emoji,來自日本的小巧符號,通過影像表達感情,已經征服了移動網際網路的資訊世界。現在,你可以在虛擬世界中隨處使用它們。開發者可以去GitHub下載完整的表情庫,並把這些表情加入到自己的應用或網頁中。

GitHub主頁

Star數量:4899

JavaScript模板引擎:Hogan.js

Hogan.js是Twitter團隊所製作的一個針對mustache模板的語法解析器。Hogan.js不依賴其他任何庫或框架,同時保證了高效率的模板解析,而其體積卻僅有2.5K。用它作為你的一部分資產打包編譯模板提前或將它包括在你的瀏覽器來處理動態模板。

GitHub主頁

Star數量:4470

RPC框架:Finagle

Finagle是一個允許開發者使用Java、Scala或其他JVM語言來構建非同步RPC伺服器和客戶端的庫,主要用於Twitter的後端服務。Finagle是Twitter基於Netty開發的支援容錯的、協議無關的RPC框架,該框架支撐了Twitter的核心服務。

Twitter面向服務的架構是由一個龐大的Ruby on Rails應用轉化而來的。為了適應這種架構的變化,需要有一個高效能的、支援容錯的、協議無關且非同步的RPC框架。在面向服務的架構之中,服務會將大多數的時間花費在等待上游服務的響應上,因此使用非同步的庫能夠讓服務併發地處理請求,從而充分發揮硬體的潛能。Finagle構建在Netty之上,並不是直接在原生NIO之上構建的,這是因為Netty已經解決了許多Twitter所遇到的問題並提供了乾淨整潔的API。

GitHub主頁地址

Star數量:4690

自動化測試工具:Diffy

Diffy是一個開源的自動化測試工具,它能夠自動檢測基於Apache Thrift或者基於HTTP的服務。使用Diffy,只需要進行簡單的配置,之後不需要再編寫測試程式碼。

Diffy主要基於穩定版本和它的副本的輸出,對候選版本的輸出進行比較,以檢查候選版本是否正確。因此,Diffy首先假設候選版本應該和穩定版本有“相似”的輸出。即不論候選版本和穩定版本系統模組是否相同,他們的最終輸出應該是“相似”的。這裡一直使用“相似”,而不是使用相同,是因為相同請求可能會有一些Diffy不需要關心的干擾,比如:

  • 響應中包含伺服器生成的時間戳;

  • 程式碼中使用了隨機數;

  • 系統服務間有條件競爭。

GitHub主頁地址

Star數量:2544

Scala庫:Scalding

Scalding是一個Scala庫,簡化了Hadoop MapReduce作業開發,基於Cascading構建。Scalding跟Pig類似,但提供更緊密的Scala整合。Scalding是用於Cascading的Scala API。Cascading是一個構建於Hadoop上的API,用來建立複雜和容錯資料處理工作流,它抽象了叢集拓撲結構和配置,允許開發者快速開發複雜分散式的應用,而不用考慮背後的MapReduce。

GitHub主頁地址

Star數量:2536

資料實時分析平臺:Heron

2016年5月25日,Twitter正式宣佈Heron開源。Heron的基本原理和方法:實時流系統是在大規模資料分析的基礎上實現系統性的分析。另外,它還需要:每分鐘處理數十億事件的能力、有秒級延遲,和行為可預見;在故障時保證資料的準確性,在達到流量峰值時是彈性的,並且易於除錯和在共享的基礎設施上實現簡單部署。

為了滿足這些需求,Twitter討論出了幾種方案,包括:擴充套件Storm、使用其他的開源系統、開發一個全新的平臺。因為有幾個需求是要求改變 Storm的核心架構,所以對它進行擴充套件需要一個很長的開發週期。其他的開源流處理框架並不能完美滿足Twitter對於規模、吞吐量和延遲的需求。而且,這些系統也不能相容Storm API——適應一個新的API需要重寫幾個topologies和修改高階的abstractions,這會導致一個很長的遷移過程。所以,Twitter決定建立 一個新的系統來滿足以上提到需求和相容Storm API。

在Twitter,Heron作為主要的流媒體系統,執行數以百萬計的開發和生產topologies。由於Heron可高效使用資源,在遷移Twitter所有的topologies後,整體硬體減少了3倍,導致Twitter的基礎設定效率有了顯著的提升。

GitHub主頁地址

Star數量:1873

Web安全開發工具:SecureHeaders

SecureHeaders是Twitter送給Web開發者的一份大禮,作為一款Web安全開發工具,Secureheaders能夠自動實施安全相關的header規則,包括內容安全政策(CSP),防止XSS、HSTS等攻擊,防止火綿羊(Firesheep)攻擊以及XFO點選劫持等。

GitHub主頁地址

Star數量:1697

代理伺服器:Twemproxy

Twemproxy是一個快速的單執行緒代理程式,支援Memcached ASCII協議和更新的Redis協議。它全部用C寫成,使用Apache 2.0 License授權。Twemproxy的強大之處在於可以通過配置的方式讓它禁用掉失敗的結點,同時還能在一段時間後進行重試,抑或使用指定的鍵->伺服器對映。這意味著在將Redis用作資料儲存時,它可以對Redis資料集進行分片(禁用掉結點驅逐);在將Redis用作快取時,它可以啟用結點驅逐以實現簡單的高可用性。它的特性是:

  • 通過代理的方式減少快取伺服器的連線數;

  • 自動在多臺快取伺服器間共享資料;

  • 通過不同的策略與雜湊函式支援一致性雜湊;

  • 通過配置的方式禁用失敗的結點;

  • 執行在多個例項上,客戶端可以連線到首個可用的代理伺服器;

  • 支援請求的流式與批處理,因而能夠降低來回的消耗;

  • 速度快;

  • 輕量級。

GitHub主頁地址

Star數量:5434

微軟開源軟體列表

提起微軟公司,不少人第一反應是老牌巨頭專注於私有化軟體盈利模式,這大抵是源於微軟前CEO Steve Ballmer曾經宣稱“Linux是顆毒瘤(Linux is a cancer)”,並曾經偏執地認為所有開源軟體都不值一提。但是,這是2001年的事情了,是時候更新大家對微軟的刻板印象。

2014年10月,出任微軟執行長的薩提亞 納德拉,第一次公開宣佈“微軟愛Linux”。同年,微軟首次釋出.NET Core並將其開源;眾所周知,微軟核心的技術棧長期以來基於.NET和Windows繫結。在重寫標準庫之後,2016年6月.NET Core 1.0實現跨平臺(Windows、Linux和Mac),這意味著開發者可以使用Windows開發而Linux部署。

2016年3月,Windows原生支援 Ubuntu Linux Bash, 這意味著Windows作業系統級別的開放,Win10 可以當作一臺Ubuntu開發機來使用。此外,微軟稱Azure全面支援所有開源技術棧,並且從IaaS(VM),PaaS和SaaS(CRM、PowerBI、Office365)全面支援使用者的靈活選擇。

InfoQ對數個較受社群歡迎的專案進行了整理如下:

Visual Studio Code:跨平臺原始碼編輯器

Visual Studio Code是微軟於2015年正式釋出的專案,可以執行在Mac OS X、Windows和Linux之上,面向Web和雲應用的一款跨平臺原始碼編輯器。

雖然它的名字與Visual Studio相近,但前者是程式碼編輯器,後者是整合開發環境(IDE)並且目前只執行在Windows上。

Star數量: 24.3k;  Fork數量:3.3k

GitHub主頁地址

TypeScript:開源程式語言,JavaScript的超集

TypeScript是JavaScript強型別的超集,可以編譯成純JavaScript。由微軟開發的自由和開源的程式語言,可以執行在各類瀏覽器和作業系統之上。

Star數量:19.8k ;Fork數量:2.8k

GitHub主頁地址

CNTK: 深度學習開源工具包

CNTK全稱為The Microsoft Cognitive Toolkit, 將神經網路描述為計算機可處理的有向圖,有向圖的葉節點表示輸入值或網路引數,其他節點表示輸入對應的矩陣運算。CNTK便於實現並且也結合了很多流行計算模型如前饋DNN,卷積網(CNN)和復現網路(RNN / LSTM)。它可以跨多個GPU和伺服器實現隨機梯度下降(SGD,誤差反向傳播)學習與自動微分和並行化。

可以在Python或者C++語言中如同庫版應用,也可以使用其自有的描述語言BrainScript單機化使用。CNTK可適用於64位的Linux和Window,於2015年4月開源。

下圖比較CNTK的處理速度(每秒處理的幀數)與四個其他眾所周知的工具包的處理速度。 配置使用完全連線的4層神經網路(參見微軟的基準指令碼)和有效的迷你批量大小(8192)。在相同硬體上獲得的結果。

Star數量:9.9k;Fork數量:2.4k

GitHub地址

Donnet:採用系統虛擬機器執行的程式設計平臺

.NET是微軟研發的XML Web services平臺,此框架支援多種語言(如C#、F#、VB.Net、C++、Python等)的開發。.NET框架歷經亟待,最終於2014年開源。

C#通常被認為是微軟專屬,是.NET框架上最常用的程式語言之一, 其著名競爭對手是Java。

Star數量: 7.8k ;Fork數量:1.2k

GitHub主頁地址

PowerShell :為任何系統提供Windows的命令列工具

一個跨平臺(Windows、Linux和macOS)自動化和配置工具/框架,可與現有工具完美配合,並優化用於處理結構化資料(例如JSON,CSV,XML等)、REST API 和物件模型。 它包括命令列shell,相關的指令碼語言和用於處理cmdlet的框架。

Star數量:6.4k;Fork數量:800

GitHub地址

MSOpenTech/redis: 在Windows使用Redis

官方只支援64位,可自行構建32位版。

該開源專案,在2.8版本中,替代UNIX fork()API中的記憶體對映檔案模擬寫時複製行為。 版本3.0類似,為了便於系統檔案分頁,刪除了記憶體對映檔案,在管理堆碎片方面進行了改進。

Redis對檔案描述符的值做了一些假設,微軟構建了一個虛擬檔案描述符對映層。

Star數量:5.8k;Fork數量:8.7k

GitHub地址

WinObjc:Windows下的Objective-C

為Visual Studio提供了一個Objective-C開發環境並支援iOS API。通過重新使用Objective-C程式碼和iOS API,配以Windows自有Cortana(中文名:微軟小娜,微軟釋出的全球第一款個人智慧助理)和通知等功能,使用者可以建立通用Windows平臺(UWP)應用程式並執行在Windows裝置上。

Star數量:5.8k;Fork數量:745

GitHub地址

GitHub地址

ASP.NET之MVC核:模型(model)-檢視(view)-控制器(controller)框架

旨在TDD友好,用於建立符合最新Web標準的複雜應用程式、構建動態網站,可以在IIS中託管或自我託管。

Star數量:4.4k;Fork數量:1.6k

GitHub地址

BashOnWindows:解決Ubuntu Bash在Windows的使用問題

微軟在Build 2016大會上宣佈了一條振奮人心的訊息,大家驚呼Ubuntu on Windows。Bash on Windows 為開發者們提供了Bash shell、Linux類似環境,在不需要Linux虛擬機器的情況下,大部分的Linux命令列工具基本上可以不經修改地執行在Windows上。

Star數量:3.7k;Fork數量:129

GitHub地址

Azure相關:文件、SDK和程式碼示例

微軟支援開發者們將各種開源軟體工具和技術帶入Azure。Azure 應用市場支援很多Linux 分發,包括 Ubuntu、Debian 和 SUSE;也支援藉助支援 Node.js、PHP、Python 和 Java 的 Azure 應用服務,生成 Web 和移動應用。

在GitHub上Azure相關的儲存庫有1700+個。

Star數量(共計):149k;Fork數量(共計):291k

地址

編者按:本文來自微信公眾號“InfoQ”(ID:infoqchina),編輯小智;36氪經授權釋出。

對於為什麼要釋出開源專案,Facebook開源專案負責人曾經解釋過:一是開源能夠幫助他人更快地開發軟體,促進世界創新,主要是社會價值層面的考慮。二是開源能夠倒逼Facebook的工程師寫出更好的程式碼。三是開源能夠更有效利用社群的力量,幫助Facebook一起解決難題。開源,讓世界更美好,不是嗎?

Facebook開源軟體列表

從Facebook的GitHub賬戶中可以看到,Facebook已經開源的開源專案有近300個,領域涉及移動、前端、Web、後端、大資料、資料庫、工具和硬體等。Facebook開源專案負責人James Pearce曾在OSCON解釋過Facebook究竟為何要使用、支援和釋出開源專案。具體如下:

共享Facebook的程式碼(通常是軟體“棧”,偶爾也包括硬體設計)促進了這個世界的創新。這些程式碼幫助他人更快地開發軟體。因為Facebook不是一家軟體公司,所以它在開源過程中沒有面臨競爭對手的威脅,相反,開源帶來的價值在逐漸顯現。使用者使用Facebook的開原始碼可以更快地構建應用,而他們也樂於回饋程式碼,使Facebook從中受益。

擁抱開源,意味著Facebook必須一開始就寫出更優秀的軟體。如果他們知道某個軟體從誕生起就要公開,那就必須要好好做,提高可用性和可靠性,因為將來外面的人都會用它。這種壓力也會給公司內部帶來更多的價值。

開源帶來了共享挑戰的機會。開源專案面臨的難題會吸引一些外部的優秀人員,而結果是,他們也帶動了公司內部人員的能力提升。每天Facebook都承載了超過一億人的溝通互聯,何以能做到?唯有開源的力量。

下面是InfoQ編輯整理的Facebook現有的比較活躍的開源專案列表,歡迎交流討論。

移動開發框架:React Native

React Native是Facebook在2015年開源的基於React.js的移動開發框架,它的設計理念是讓移動應用既擁有Native的使用者體驗,同時又可以保留React的開發效率,提高程式碼的複用率。React Native的宗旨是,學習一次,高效編寫跨平臺原生應用。開發者可以使用JavaScript編寫應用,並利用相同的核心程式碼就可以建立Web、iOS 和Android平臺的原生應用,目前已經實現了對iOS和Android兩大平臺的支援。

GitHub主頁地址

Star數量:33108

資料查詢語言:GraphQL

GraphQL是Facebook開源的資料查詢語言。Facebook在構建移動應用程式時,需要用API獲取足夠強大的資料來描述所有的臉譜,同時簡單易學易用,於是開發了GraphQL,並支援每天千億級的呼叫。GraphQL不是像MySQL或Redis這樣直接面向資料的介面,而是面向已經存在的應用程式碼的介面。你可以把GraphQL看作是為了呼叫應用伺服器上的方法的一些內嵌的RPC。

GitHub主頁地址

Star數量:2902

大資料查詢引擎:Presto

Presto是Facebook開發的一款分散式SQL引擎,主要用於針對各種大小的資料來源(從GB到PB)來執行互動式分析查詢。Facebook建立Presto的主要目的在於幫助他們更快地分析資料,因為Facebook的資料量一直在持續增長,產品週期的節奏也變得越來越快。自從2013年11月開源後,Presto的使用者量呈現了爆發式增長。諸如Airbnb、京東、Dropbox以及Netflix等公司都將Presto作為自己的互動式查詢引擎。

GitHub主頁地址

Star數量:4792

PHP執行引擎:HHVM

HHVM(HipHop Virtual Machine)是Facebook於2013年開源的PHP執行引擎。它採用一種JIT(just-in-time)的編譯機制實現了高效能,同時又保持對 PHP 語法的充分支援。HHVM常常用作獨立的伺服器,用於替代Apache與mod_php,旨在執行使用Hack與PHP所編寫的程式。它使用了即時編譯方法來實現超高的效能,同時又保持了PHP開發者所習慣的靈活性。

GitHub主頁地址

Star數量:13652

JavaScript庫:React

React是Facebook開發的用於構建使用者介面的JavaScript庫,現已為很多公司所用,因為它採用了一種不同的方式來構建應用:藉助於React,開發者可以將應用分解為彼此解耦的獨立元件,這樣就可以獨立維護並迭代各種元件了。2015年,React有兩個主要的釋出,同時還發布了React Native,並且釋出了新的開發者工具。現在已經有越來越多的公司(包括Netflix與WordPress)開始使用React構建自己的產品了。

GitHub主頁地址

Star數量:43146

鍵值儲存系統:RocksDB

RocksDB是Facebook開源的嵌入式、可持久化鍵值儲存系統,它基於Google的LevelDB,但提高了擴充套件性可以執行在多核處理器上,可以有效使用快速儲存,支援IO繫結、記憶體和一次寫負荷。過去一段時間,RocksDB在社群非常流行,Facebook分析其原因在於它能夠對由於網路延遲等原因造成的慢查詢響應時間起到消除的作用,RocksDB非常靈活,完全可以針對各種新興的硬體發展趨勢進行定製。LinkedIn與Yahoo都是RocksDB的重度使用者。

GitHub主頁地址

Star數量:5418

人工智慧硬體平臺:Big Sur

近些年,人工智慧和機器學習方向取得了長足的發展。據Kevin Lee透露,Facebook的AI軟體已經能夠閱讀故事、回答相關場景的問題、玩遊戲以及通過一些例子來學習非指定的內容。作為計算密集型的應用,AI軟體的效能與資料集規模/硬體效能密切相關。尤其是硬體方面,高效能微處理器、儲存器以及圖形處理器(Graphics Processing Unit,GPU)的發展為AI演算法的快速執行提供了堅實基礎。為了進一步更好地服務大規模AI計算,Facebook推出了基於GPU的、用於訓練神經網路的“Big Sur”硬體系統。

瞭解更多

網路模擬測試工具:ATC

Augmented Traffic Control(ATC)能夠利用Wi-Fi網路模擬2G、2.5G(Edge)、3G以及LTE 4G行動網路環境,測試工程師們可以快速在各種不同的模擬網路環境中切換,從而實現對智慧手機和App在不同國家地區和應用環境下的效能表現進行測試。ATC是Facebook內部團隊在2013年的一次Hackathon活動上開發出來的工具,其原理實際是利用了Linux流量控制系統,通過純Python的網路庫pyroute2呼叫netlink的API控制,而開發其的目的是為了確保更多的使用者獲得最好的應用體驗。

GitHub主頁地址

Star數量:2962

開源資料庫:HydraBase

HydraBase是HBase資料庫的升級版。Facebook是HBase的重度使用者,Facebook的HBase資料庫系統儲存著Facebook的很多關鍵業務資料,包括內部監控系統、搜尋索 引、流資料分析以及資料抓取等。HydraBase相比HBase穩定性和可用性更高,可以減少伺服器當機時間。HydraBase能夠讓一個資料域分佈在多個域伺服器中,域伺服器之間能相互備份,因此能夠大大減少資料恢復所用的時間。Facebook聲稱HydraBase能將Facebook全年的當機時間縮減到不到5分鐘。

Facebook已經將HydraBase捐贈給Apache,目前很多程式碼都已經被合併到HBase中。

關係型資料庫:WebScaleSQL

WebScaleSQL是基於MySQL 5.6 社群版本改編的MySQL通用分支,基於GPL開源協議釋出。WebScaleSQL目前已經做了很多效能改進工作,包括:客戶端非同步協調、邏輯預讀、查詢限流、服務端執行緒池優化、InnoDB大頁支援等等。WebScaleSQL上的功能都是很“Web Scale”和接地氣的。比如執行緒池優化,WebScaleSQL基於Mariadb的執行緒池實現進行重寫並優化,對讀寫佇列進行分離,重新設計佇列優先順序策略,避免了餓死現象。要知道執行緒餓死在有些場景下是很嚴重的。尤其是在併發連線數往往很大的網際網路應用裡面。

GitHub主頁地址

Star數量:2940

程式碼審查工具Phabricator

程式碼審查方面,Facebook開源了視覺化工具Phabricator。工程師可以在頁面上非常方便的針對每一段(單行或者多行)程式碼進行互動討論;負責審查的工程師可以接受程式碼改變,可以提出疑問要求原作者繼續修改,可以提出自己不適合以推出該程式碼審查,等等。只有程式碼被明確接受之後才能被工程師提交到伺服器端的程式碼庫,這一點整合到提交工具中強制執行。

GitHub主頁地址

Star數量:7022

C++HTTP框架:Proxygen

Proxygen是一款Facebook開源的支援SPDY 3.1的HTTP框架。其目的不是替換Apache,而是有能力建立一個專用的高效能Web伺服器,使其可以嵌入到Facebook提供Web服務的現有應用中。Facebook從2011年開始構建一款代理伺服器(Proxygen這個名字也是由此而來),在該專案演進並在生產環境中測試了數年之後,Facebook將其程式碼開源了。 Facebook內部做的基準測試表明,在一個Proxygen echo伺服器上,每秒可以支撐多達304 197次基於SPDY 3.1的記憶體GET請求。

GitHub主頁地址

Star數量:3961

開源動畫庫:Pop

Pop是Facebook推出的一個可擴充套件的iOS 和OS X動畫庫,其新聞聚合閱讀應用Paper背後的核心技術就是由Pop支援。除了增加基本的靜態動畫外,還支援Spring和衰變動態動畫,可非常方便的構建現實的、基於物理的互動。Pop動畫庫的動畫效果非常流暢,因為它使用了CADisplayLink來重新整理畫面(幀),一秒鐘重新整理幀數為60幀,接近於遊戲開發引擎。Pop動畫的自成體系,與系統的CoreAnimation有很大的區別,但使用上非常相似。

GitHub主頁地址

Star數量:15468

靜態程式碼分析工具:Infer

Infer是Facebook的開發團隊在程式碼提交內部評審時,用來執行增量分析的一款靜態分析工具,在程式碼提交到程式碼庫或者部署到使用者的裝置之前找出bug。由OCaml語言編寫的Infer目前能檢測出空指標訪問、資源洩露以及記憶體洩露,可對C、Java或Objective-C程式碼進行檢測。Facebook使用Infer自動驗證iOS和安卓上的移動應用的程式碼,bug報告的正確率達80%。Infer通過捕獲編譯命令,把要被編譯的檔案轉換為可用於分析潛在錯誤的中間語言格式。整個過程是增量進行的,意味著通常只有那些有修改過並提交編譯的檔案才會被Infer分析。Infer還整合了大量的構建或編譯工具,包括Gradle、Maven、Buck、Xcodebuild、clang、make和javac。

GitHub主頁地址

Star數量:5259

作業系統監控工具:osquery

osquery是一款面向OSX和Linux的作業系統檢測框架。它將作業系統暴露為一個高效能的關係型資料庫,允許使用者編寫SQL查詢檢視作業系統資料。在osquery中,SQL表代表像下面這樣的抽象概念:

正在執行的程式

已載入的核心模組

開啟的網路連線

雖然osquery利用了非常底層的作業系統API,但它允許使用者在Ubuntu、CentOS和Mac OS X上構建並使用它。osquery效能極高,記憶體佔用小,支援使用者在整個基礎設施上執行查詢。

GitHub主頁地址

Star數量:6209

JavaScript靜態型別檢查工具:Flow

Flow是Facebook出品的一個JavaScript程式碼的靜態型別檢查工具,該工具採用開放原始碼的OCaml(Objective Caml)語言開發,。Flow能夠幫助開發人員查詢出JavaScript程式碼中的型別錯誤,從而提高開發效率和程式碼質量。Flow已經能夠捕獲JavaScript程式碼中的常見問題,如靜態型別轉換不匹配、空指標引用等問題。同時,Flow還為JavaScript新增了型別語法,如型別別名。

GitHub主頁地址

Star數量:7510

Web應用架構:Flux

Facebook認為MVC無法滿足他們的擴充套件需求,因此他們決定使用另一種模式:Flux。由於Facebook非常巨大的程式碼庫和龐大的組織,所以MVC真的很快就變得非常複雜,於是他們得出結論,認為MVC不適合於大規模應用。

每次Facebook工程師努力增加一項新特性時,系統的複雜性成級數增長,程式碼變得“脆弱和不可預測”。對於剛接觸某個程式碼庫的開發人員來說,這正成為一個嚴重的問題。Flux是一個Facebook開發的、利用單向資料流實現的應用架構,用於 React。Flux應用有三個主要的部分組成:排程程式、儲存和檢視(React 元件)。

GitHub主頁地址

Star數量:11616

Android除錯工具:Stetho

Stetho是一個Android應用的除錯工具。當Android應用整合Stetho時,開發者可以通過訪問Chrome,在Chrome Developer Tools中檢視應用佈局、網路請求、sqlite、preference等等,視覺化一切應用操作(更重要的是不用root)。開發者也可通過它的dumpapp工具提供的命令列介面來訪問應用內部。

GitHub主頁地址

Star數量:5079

微信團隊開源專案列表

從GitHub上可以看出,到目前為止,由騰訊微信團隊發起的開源專案已經有6個,並且這其中大部分都是在2016年開源的,領域涉及移動、資料庫、基礎類庫、框架。中國大公司的開源曾經給社群留下不好的印象,比如有人就這麼說,大公司的開源,開源也就意味著結束。也有人說,大公司的開源大部分都是KPI專案,開源與業務不能相得益彰,所以根本無法持續投入。

開源不僅是一種態度,更是一種能力,微信希望通過開源打通內部團隊和外部社群,一方面可以把微信的頂級技術輸出給了社群,另一方面也可以把外部的優秀的思想傳遞到內部團隊。

C/C++協程庫Libco

Libco是微信後臺大規模使用的C/C++協程庫,2013年至今穩定執行在微信後臺的數萬臺機器上。Libco提供了完善的協程程式設計介面、常用的Socket族函式Hook等,使得業務可用同步程式設計模型快速迭代開發。

早期微信後臺因為業務需求複雜多變、產品要求快速迭代等需求,大部分模組都採用了半同步半非同步模型。接入層為非同步模型,業務邏輯層則是同步的多程式或多執行緒模型,業務邏輯的併發能力只有幾十到幾百。隨著微信業務的增長,系統規模變得越來越龐大,每個模組很容易受到後端服務/網路抖動的影響。基於這樣的背景,微信開發了Libco,實現了對業務邏輯非侵入的非同步化改造。

GitHub地址

Star數量:1043

生產級paxos類庫PhxPaxos

PhxPaxos是微信後臺團隊自主研發的一套基於Paxos協議的多機狀態拷貝類庫。它以庫函式的方式嵌入到開發者的程式碼當中,使得一些單機狀態服務可以擴充套件到多機器,從而獲得強一致性的多副本以及自動容災的特性。PhxPaxos在微信服務裡面經過一系列的工程驗證和大量的惡劣環境下的測試,在一致性的保證上極為健壯。

PhxPaxos的特性包括使用基於訊息傳遞機制的純非同步工程架構、每次寫盤使用fsync嚴格保證正確性、支援Checkpoint以及對PaxosLog的自動清理、使用點對點流式協議進行快速學習、支援跨機器的Checkpoint自動拉取、內建Master選舉功能、自適應的過載保護等。

GitHub地址

Star數量:970

高可用、強一致的MySQL叢集PhxSQL

PhxSQL是一個相容MySQL、服務高可用、資料強一致的關係型資料庫叢集。PhxSQL以單Master多Slave方式部署,在叢集內超過一半機器存活的情況下、即可提供服務,並且自身實現自動Master切換、保證資料一致性。PhxSQL不依賴於ZooKeeper等任何第三方做存活檢測及選主。PhxSQL基於MySQL的一個分支Percona 5.6開發,功能和實現與MySQL基本一致。

MySQL主備在主機上支援完整SQL、全域性事務、以repeatable read和serializable級別的事務隔離,在金融、帳號等關鍵業務中有巨大的價值。但是MySQL傳統主備方案也有其缺點。最明顯的就是主機故障後的自動換主和新舊主資料一致性,即所謂的一致性和可用性。為了解決這個問題,並同時完全相容MySQL,微信在MySQL的基礎上應用Paxos,設計和開發了PhxSQL。

GitHub地址

Star數量:1485

RPC框架PhxRPC

PhxRPC是微信後臺團隊推出的一個簡潔小巧的RPC框架,編譯生成的庫只有450K(編譯只依賴第三方庫Protobuf)。PhxRPC的特性如下:

使用Protobuf作為IDL用於描述RPC介面以及通訊資料結構。

基於Protobuf檔案自動生成Client以及Server介面,用於Client的構建,以及Server的實現。

半同步半非同步模式,採用獨立多IO執行緒,通過Epoll管理請求的接入以及讀寫,工作執行緒採用固定執行緒池。IO執行緒與工作執行緒通過記憶體佇列進行互動。

提供完善的過載保護,無需配置閾值,支援動態自適應拒絕請求。

提供簡易的Client/Server配置讀入方式。

基於lambda函式實現併發訪問Server,可以非常方便地實現Google提出的 Backup Requests 模式。

GitHub地址

Star數量:467

終端跨平臺網路元件:Mars

Mars是微信官方的終端基礎元件,是一個結合移動應用所設計的基於Socket層的解決方案,在網路調優方面有更好的可控性,採用C++開發。目前已接入微信 Android、iOS、Mac、Windows、WP 等客戶端。

在微信中,任何網路實現的bug都可能導致重大事故。例如微信的容災實現,如果因為版本的實現差異,導致某些版本上無法進行容災恢復,將會嚴重的影響使用者體驗。微信研發了統一的跨平臺的網路基礎庫Mars來滿足發展的需要,一方面,基礎元件可以提高研發效率,另外一方面,也可以提高系統的穩健性。

在設計上,Mars以跨平臺、跨業務為前提,遵從高可用,高效能,負載均衡的設計原則。以網路的可用性為例,移動網際網路有著丟包率高、頻寬受限、延遲波動、第三方影響等特點,使得網路的可用性,尤其是弱網路下的可用性變得尤為關鍵。Mars 的STN元件作為基於 socket 層的網路解決方案,在很多細節設計上會充分考慮弱網路下的可用性。

GitHub地址

Star數量:5895

熱補丁技術Tinker

Tinker是微信官方的Android熱補丁解決方案,它支援動態下發程式碼、So庫以及資源,讓應用能夠在不需要重新安裝的情況下實現更新。

當前市面的熱補丁方案有很多,其中比較出名的有阿里的AndFix、美團的Robust以及QZone的超級補丁方案,但它們都存在無法解決的問題,所以微信研發了自己的解決方案。總的來說,AndFix作為native解決方案,首先面臨的是穩定性與相容性問題,更重要的是它無法實現類替換,它是需要大量額外的開發成本的。而Robust相容性與成功率較高,但是它與AndFix一樣,無法新增變數與類只能用做的bugFix方案。Qzone方案可以做到釋出產品功能,但是它主要問題是插樁帶來Dalvik的效能問題,以及為了解決Art下記憶體地址問題而導致補丁包急速增大的。

Tinker的具體設計目標如下:

開發透明:開發者無需關心是否在補丁版本,他可以隨意修改,不由框架限制。

效能無影響:補丁框架不能對應用帶來效能損耗。

完整支援:支援程式碼,So 庫以及資源的修復,可以釋出功能。

補丁大小較小: 補丁大小應該儘量的小,提高升級率。

穩定,相容性好:保證微信的數億使用者的使用,儘量減少反射。

GitHub地址

Star數量:6707

Twitter開源軟體專案列表

從Twitter的GitHub賬戶中可以看到,Twitter已經開源的開源專案有近200個,領域涉及分散式架構、大資料、非同步網路傳輸(客戶端、服務端)、Web、工具等。Twitter可以稱為構建於開源專案之上,該公司開源負責人Chris Aniszczyk表示,如果沒有開源軟體,Twitter將不會存在,使用者在移動端和PC端傳送和接收的每一條推文都會需要開源軟體。

Twitter從開源社群中獲得了大量的好處,而Twitter也在不斷地回饋社群,開源了大量基礎設施和工具,使得其他企業和開發者不必重新發明輪子,在這些開源專案的基礎上更加快速地實現自己所需。可以看到,Twitter在開源社群的貢獻是顯著的,甚至其貢獻的某些開源專案在一定程度上比Twitter本身帶來的影響力更大。

下面是InfoQ編輯整理的Twitter現有的比較活躍的開源專案列表,歡迎交流討論。

jQuery外掛,快速、全功能的自動完成庫:Typeahead.js

Typeahead.js是Twitter的一個jQuery外掛,支援遠端和本地的資料集。比較有特色的地方在於,你可以將資料集使用本地儲存(local storage)來儲存在本地,有效的提高使用者體驗。同時也擁有很多遠端資料集的處理選項,例如請求頻率,最大的併發請求數,等等。它的主要特性有:

支援資料本地儲存,客戶端載入,優化載入速度;

支援多語言,並且支援阿拉伯文;

支援Hogan.js模板引擎整合;

支援多資料集拼裝;

支援本地和遠端的資料集。

GitHub主頁

Star數量:12700

JavaScript庫:Twemoji

Twemoji是Twitter於2014年開源的完整的Emoji表情圖片,Twemoji包含872個表情,相容最新的Unicode 7.0。Emoji,來自日本的小巧符號,通過影像表達感情,已經征服了移動網際網路的資訊世界。現在,你可以在虛擬世界中隨處使用它們。開發者可以去GitHub下載完整的表情庫,並把這些表情加入到自己的應用或網頁中。

GitHub主頁

Star數量:4899

JavaScript模板引擎:Hogan.js

Hogan.js是Twitter團隊所製作的一個針對mustache模板的語法解析器。Hogan.js不依賴其他任何庫或框架,同時保證了高效率的模板解析,而其體積卻僅有2.5K。用它作為你的一部分資產打包編譯模板提前或將它包括在你的瀏覽器來處理動態模板。

GitHub主頁

Star數量:4470

RPC框架:Finagle

Finagle是一個允許開發者使用Java、Scala或其他JVM語言來構建非同步RPC伺服器和客戶端的庫,主要用於Twitter的後端服務。Finagle是Twitter基於Netty開發的支援容錯的、協議無關的RPC框架,該框架支撐了Twitter的核心服務。

Twitter面向服務的架構是由一個龐大的Ruby on Rails應用轉化而來的。為了適應這種架構的變化,需要有一個高效能的、支援容錯的、協議無關且非同步的RPC框架。在面向服務的架構之中,服務會將大多數的時間花費在等待上游服務的響應上,因此使用非同步的庫能夠讓服務併發地處理請求,從而充分發揮硬體的潛能。Finagle構建在Netty之上,並不是直接在原生NIO之上構建的,這是因為Netty已經解決了許多Twitter所遇到的問題並提供了乾淨整潔的API。

GitHub主頁地址

Star數量:4690

自動化測試工具:Diffy

Diffy是一個開源的自動化測試工具,它能夠自動檢測基於Apache Thrift或者基於HTTP的服務。使用Diffy,只需要進行簡單的配置,之後不需要再編寫測試程式碼。

Diffy主要基於穩定版本和它的副本的輸出,對候選版本的輸出進行比較,以檢查候選版本是否正確。因此,Diffy首先假設候選版本應該和穩定版本有“相似”的輸出。即不論候選版本和穩定版本系統模組是否相同,他們的最終輸出應該是“相似”的。這裡一直使用“相似”,而不是使用相同,是因為相同請求可能會有一些Diffy不需要關心的干擾,比如:

響應中包含伺服器生成的時間戳;

程式碼中使用了隨機數;

系統服務間有條件競爭。

GitHub主頁地址

Star數量:2544

Scala庫:Scalding

Scalding是一個Scala庫,簡化了Hadoop MapReduce作業開發,基於Cascading構建。Scalding跟Pig類似,但提供更緊密的Scala整合。Scalding是用於Cascading的Scala API。Cascading是一個構建於Hadoop上的API,用來建立複雜和容錯資料處理工作流,它抽象了叢集拓撲結構和配置,允許開發者快速開發複雜分散式的應用,而不用考慮背後的MapReduce。

GitHub主頁地址

Star數量:2536

資料實時分析平臺:Heron

2016年5月25日,Twitter正式宣佈Heron開源。Heron的基本原理和方法:實時流系統是在大規模資料分析的基礎上實現系統性的分析。另外,它還需要:每分鐘處理數十億事件的能力、有秒級延遲,和行為可預見;在故障時保證資料的準確性,在達到流量峰值時是彈性的,並且易於除錯和在共享的基礎設施上實現簡單部署。

為了滿足這些需求,Twitter討論出了幾種方案,包括:擴充套件Storm、使用其他的開源系統、開發一個全新的平臺。因為有幾個需求是要求改變 Storm的核心架構,所以對它進行擴充套件需要一個很長的開發週期。其他的開源流處理框架並不能完美滿足Twitter對於規模、吞吐量和延遲的需求。而且,這些系統也不能相容Storm API——適應一個新的API需要重寫幾個topologies和修改高階的abstractions,這會導致一個很長的遷移過程。所以,Twitter決定建立 一個新的系統來滿足以上提到需求和相容Storm API。

在Twitter,Heron作為主要的流媒體系統,執行數以百萬計的開發和生產topologies。由於Heron可高效使用資源,在遷移Twitter所有的topologies後,整體硬體減少了3倍,導致Twitter的基礎設定效率有了顯著的提升。

GitHub主頁地址

Star數量:1873

Web安全開發工具:SecureHeaders

SecureHeaders是Twitter送給Web開發者的一份大禮,作為一款Web安全開發工具,Secureheaders能夠自動實施安全相關的header規則,包括內容安全政策(CSP),防止XSS、HSTS等攻擊,防止火綿羊(Firesheep)攻擊以及XFO點選劫持等。

GitHub主頁地址

Star數量:1697

代理伺服器:Twemproxy

Twemproxy是一個快速的單執行緒代理程式,支援Memcached ASCII協議和更新的Redis協議。它全部用C寫成,使用Apache 2.0 License授權。Twemproxy的強大之處在於可以通過配置的方式讓它禁用掉失敗的結點,同時還能在一段時間後進行重試,抑或使用指定的鍵->伺服器對映。這意味著在將Redis用作資料儲存時,它可以對Redis資料集進行分片(禁用掉結點驅逐);在將Redis用作快取時,它可以啟用結點驅逐以實現簡單的高可用性。它的特性是:

通過代理的方式減少快取伺服器的連線數;

自動在多臺快取伺服器間共享資料;

通過不同的策略與雜湊函式支援一致性雜湊;

通過配置的方式禁用失敗的結點;

執行在多個例項上,客戶端可以連線到首個可用的代理伺服器;

支援請求的流式與批處理,因而能夠降低來回的消耗;

速度快;

輕量級。

GitHub主頁地址

Star數量:5434

微軟開源軟體列表

提起微軟公司,不少人第一反應是老牌巨頭專注於私有化軟體盈利模式,這大抵是源於微軟前CEO Steve Ballmer曾經宣稱“Linux是顆毒瘤(Linux is a cancer)”,並曾經偏執地認為所有開源軟體都不值一提。但是,這是2001年的事情了,是時候更新大家對微軟的刻板印象。

2014年10月,出任微軟執行長的薩提亞 納德拉,第一次公開宣佈“微軟愛Linux”。同年,微軟首次釋出.NET Core並將其開源;眾所周知,微軟核心的技術棧長期以來基於.NET和Windows繫結。在重寫標準庫之後,2016年6月.NET Core 1.0實現跨平臺(Windows、Linux和Mac),這意味著開發者可以使用Windows開發而Linux部署。

2016年3月,Windows原生支援 Ubuntu Linux Bash, 這意味著Windows作業系統級別的開放,Win10 可以當作一臺Ubuntu開發機來使用。此外,微軟稱Azure全面支援所有開源技術棧,並且從IaaS(VM),PaaS和SaaS(CRM、PowerBI、Office365)全面支援使用者的靈活選擇。

InfoQ對數個較受社群歡迎的專案進行了整理如下:

Visual Studio Code:跨平臺原始碼編輯器

Visual Studio Code是微軟於2015年正式釋出的專案,可以執行在Mac OS X、Windows和Linux之上,面向Web和雲應用的一款跨平臺原始碼編輯器。

雖然它的名字與Visual Studio相近,但前者是程式碼編輯器,後者是整合開發環境(IDE)並且目前只執行在Windows上。

Star數量: 24.3k; Fork數量:3.3k

GitHub主頁地址

TypeScript:開源程式語言,JavaScript的超集

TypeScript是JavaScript強型別的超集,可以編譯成純JavaScript。由微軟開發的自由和開源的程式語言,可以執行在各類瀏覽器和作業系統之上。

Star數量:19.8k ;Fork數量:2.8k

GitHub主頁地址

CNTK: 深度學習開源工具包

CNTK全稱為The Microsoft Cognitive Toolkit, 將神經網路描述為計算機可處理的有向圖,有向圖的葉節點表示輸入值或網路引數,其他節點表示輸入對應的矩陣運算。CNTK便於實現並且也結合了很多流行計算模型如前饋DNN,卷積網(CNN)和復現網路(RNN / LSTM)。它可以跨多個GPU和伺服器實現隨機梯度下降(SGD,誤差反向傳播)學習與自動微分和並行化。

可以在Python或者C++語言中如同庫版應用,也可以使用其自有的描述語言BrainScript單機化使用。CNTK可適用於64位的Linux和Window,於2015年4月開源。

下圖比較CNTK的處理速度(每秒處理的幀數)與四個其他眾所周知的工具包的處理速度。 配置使用完全連線的4層神經網路(參見微軟的基準指令碼)和有效的迷你批量大小(8192)。在相同硬體上獲得的結果。

Star數量:9.9k;Fork數量:2.4k

GitHub地址

Donnet:採用系統虛擬機器執行的程式設計平臺

.NET是微軟研發的XML Web services平臺,此框架支援多種語言(如C#、F#、VB.Net、C++、Python等)的開發。.NET框架歷經亟待,最終於2014年開源。

C#通常被認為是微軟專屬,是.NET框架上最常用的程式語言之一, 其著名競爭對手是Java。

Star數量: 7.8k ;Fork數量:1.2k

GitHub主頁地址

PowerShell :為任何系統提供Windows的命令列工具

一個跨平臺(Windows、Linux和macOS)自動化和配置工具/框架,可與現有工具完美配合,並優化用於處理結構化資料(例如JSON,CSV,XML等)、REST API 和物件模型。 它包括命令列shell,相關的指令碼語言和用於處理cmdlet的框架。

Star數量:6.4k;Fork數量:800

GitHub地址

MSOpenTech/redis: 在Windows使用Redis

官方只支援64位,可自行構建32位版。

該開源專案,在2.8版本中,替代UNIX fork()API中的記憶體對映檔案模擬寫時複製行為。 版本3.0類似,為了便於系統檔案分頁,刪除了記憶體對映檔案,在管理堆碎片方面進行了改進。

Redis對檔案描述符的值做了一些假設,微軟構建了一個虛擬檔案描述符對映層。

Star數量:5.8k;Fork數量:8.7k

GitHub地址

WinObjc:Windows下的Objective-C

為Visual Studio提供了一個Objective-C開發環境並支援iOS API。通過重新使用Objective-C程式碼和iOS API,配以Windows自有Cortana(中文名:微軟小娜,微軟釋出的全球第一款個人智慧助理)和通知等功能,使用者可以建立通用Windows平臺(UWP)應用程式並執行在Windows裝置上。

Star數量:5.8k;Fork數量:745

GitHub地址

GitHub地址

ASP.NET之MVC核:模型(model)-檢視(view)-控制器(controller)框架

旨在TDD友好,用於建立符合最新Web標準的複雜應用程式、構建動態網站,可以在IIS中託管或自我託管。

Star數量:4.4k;Fork數量:1.6k

GitHub地址

BashOnWindows:解決Ubuntu Bash在Windows的使用問題

微軟在Build 2016大會上宣佈了一條振奮人心的訊息,大家驚呼Ubuntu on Windows。Bash on Windows 為開發者們提供了Bash shell、Linux類似環境,在不需要Linux虛擬機器的情況下,大部分的Linux命令列工具基本上可以不經修改地執行在Windows上。

Star數量:3.7k;Fork數量:129

GitHub地址

Azure相關:文件、SDK和程式碼示例

微軟支援開發者們將各種開源軟體工具和技術帶入Azure。Azure 應用市場支援很多Linux 分發,包括 Ubuntu、Debian 和 SUSE;也支援藉助支援 Node.js、PHP、Python 和 Java 的 Azure 應用服務,生成 Web 和移動應用。 


  

本文轉自d1net(轉載)


相關文章