微信開源軟件列表

StaDZA 7年前發布 | 11K 次閱讀 開源 數據庫

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

相比來說,非死book就是互聯網公司里的開源大戶,目前他們的開源項目已經有近300個。對于為什么要發布開源項目,非死book開源項目負責人也曾經解釋過,總結起來說有三點,一是開源能夠幫助他人更快地開發軟件,促進世界創新,主要是社會價值層面的考慮。二是開源能夠倒逼非死book的工程師寫出更好的代碼。三是開源能夠更有效利用社區的力量,幫助非死book一起解決難題。

那微信是如何理解開源這件事,以及他們未來準備通過哪種機制保證開源項目的健康發展,帶著這些問題,InfoQ記者采訪了微信終端團隊的負責人趙原。

趙原認為開源不僅是一種態度,更是一種能力,微信希望通過開源打通內部團隊和外部社區,一方面可以把微信的頂級技術輸出給了社區,另一方面也可以把外部的優秀的思想傳遞到內部團隊。對于開源的理解,趙原這樣解釋:

第一個關鍵詞價值。微信團隊通過將內部的研究成功優化、整合,并輸出,以幫助更多的開發者更方便地構建他們的軟件。工程師之間最好的交流媒介就是代碼,通過代碼,微信團隊可以將他們的技術思想傳遞到社區,并影響更多的人。

第二個關鍵詞優勢。微信最大的優勢是有海量的用戶,很多外界開發者根本沒有發現或者遇到過的復雜問題,微信團隊都早已經解決掉了,比如在移動開發領域的系統兼容性、用戶多樣化的網絡環境等問題。通過開源,微信不僅可以授之以魚,還可以授之以漁。

第三個關鍵詞活力,微信開源的項目必須來自微信,最后必須在微信落地。開源項目最怕沒人維護,通過產品迭代,這些開源的項目持續的更新,給他們一個心跳的機制,使他們依然有活力。

第四個關鍵詞易用。一個優秀程序員可以花上很多的時間研究微信開放的技術源碼的技術思想和設計。但對于不是很有技術實力的開發人員,是否能從微信的開源項目中依然獲益呢?答案是肯定的。他可以將微信開源的項目引入在自己的APP中,將微信很多的能力運用在自己的APP中。

而對于項目開源之后的運營問題,趙原也做了思考:

活力,不得不提起一個尖銳的問題,在大公司里面做開源項目,開源通常意味著這個項目的結束。優秀的開源項目意味著開始,和大公司里的開源項目做法天生有一些沖突。

第一大公司里面做開源項目其實是有一些短期KPI導向的短期項目,開源項目需要持續的人力投入在其中。第二個問題,每一個團隊里面員工開發的精力是有限的,做技術研究的時候,需要花很多時間在供應商的開發,這是從員工方面看開發精力的沖突。第三大公司內通常有完備的開發體系,而這些開發是封閉的,很難說和外部的開源體系對接起來。

今天看這個問題,微信也想過很暴力、很簡單的想法,比如說團隊10個人,這10個人可以做功能開發,如果為了解決這個問題,再招10個員工砸在開源項目上,大公司可能最不缺的就是人力,問題是在大公司里面看上去是可以解決的,但放在微信上面卻覺得行不通,微信講究小團隊作戰,講究精兵策略,不浪費一兵一卒。

為了解決這個問題,微信在開發Tinker項目的過程中,大概用了快一年的時間解決,其實解決問題的方法很簡單。簡而言之,就是將微信的開發團隊改造成一個開源化的開發模式。

微信通過對內部系統的改造,使內部的開發和外部的開發模式基本沒什么不同。一份代碼,既可以在微信中使用,也可以在外部的開發者中使用,這科技減少額外的人力投入。

另外微信還收獲了很多價值。比如外部的開發者還可以提供一些微信團隊沒有發現的問題,對于微信來說是一個很好的優化bug的渠道。通過與外部社區的深入交流,團隊的學習能力也能得到很大提升。

下面是InfoQ編輯整理的微信現有的比較活躍的開源項目列表,歡迎交流討論。

C/C++協程庫Libco

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

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

GitHub地址: https://github.com/tencent/libco

Star數量:1043

生產級paxos類庫PhxPaxos

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

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

GitHub地址: https://github.com/tencent-wechat/phxpaxos

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地址: https://github.com/tencent-wechat/phxsql

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地址: https://github.com/tencent-wechat/phxrpc

Star數量:467

終端跨平臺網絡組件:Mars

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

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

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

GitHub地址: https://github.com/Tencent/mars

Star數量:5895

熱補丁技術Tinker

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

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

Tinker的具體設計目標如下:

  • 開發透明 :開發者無需關心是否在補丁版本,他可以隨意修改,不由框架限制。
  • 性能無影響 :補丁框架不能對應用帶來性能損耗。
  • 完整支持 :支持代碼,So 庫以及資源的修復,可以發布功能。
  • 補丁大小較小 : 補丁大小應該盡量的小,提高升級率。
  • 穩定,兼容性好 :保證微信的數億用戶的使用,盡量減少反射。

GitHub地址: https://github.com/Tencent/tinker

Star數量:6707

 

來自:http://www.infoq.com/cn/news/2017/01/wechat-open-source

 

 本文由用戶 StaDZA 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!