服務框架及服務治理組件——業界調研

聲明:主要內容來自公司內部 對業界的調研,不一定恰當、準確、實時。
表格文字較多,APP閱讀體驗較差

團隊服務相關組件\方案通信框架監控負載均衡\路由是否開源
騰訊完全自研;BG內部自治,每個BG有自己相應的解決方案,單獨演進;

包括:服務注冊路由中心;流量定義ABTesting方案;日志分布式收集;
配置中心等沒有公司級的服務治理組織去統一
各個BG也不一樣

技術工程TEG\原搜索:自定義二進制協議編解碼,或Protocol Buffer(以下簡稱PB)進行序列化\反序列化,自研服務容器、進程框架(e.g. Poppy – 基于PB的RPC框架)

原電商ECC:自研web container\app container,采用類PB方式auto gen業務代碼骨架,通信采用二進制協議

社交SNG、游戲IEG:也都是自研組件+序列化\反序列化工具+二進制協議

QQ后臺:msec(Mass Service Engine in Cluster)毫秒服務引擎,使用PB。

基礎監控公司相對比較統一,使用監控平臺itils,每臺機器部署單獨agent收集業務上報的數據。

部分BG會構建自己的業務統計監控系統
公司級組件L5(Aim to High Availabliliy 99.999%),提供系統內各層、各模塊間調用的路由決策、負載均衡及容錯,以agent模式部署運行

部分BG在用,主要覆蓋為SNG的業務
個別開源
百度之前使用codename為伽利略的系統,負責服務的注冊路由、配置管理,基于zookeeper(以下簡稱zk)構建。
后來由于接口lib調用不穩定等各種問題,
大家逐漸失去信心而改用另一套自研系統BNS,也是類似zk的層次目錄樹結構存儲組織。

沒有公司級的服務治理組織去統一
主要采用ub通信框架(基礎架構部提供,lbs等部門在用)
采用的協議為mcpack 一種類似json文本協議(據說內部當時爭議較大),優勢是可讀性好,
缺點是數據交換傳輸量大,效率不高。

網頁PS部門采用sofa-pbrpc,基于pb實現輕量級rpc服務框架:https://github.com/BaiduPS/sofa-pbrpc/wiki;https://github.com/BaiduPS/sofa-pbrpc
監控系統為noah,所有服務器都部署noah agent。以服務接口形式提供,由業務自己去調用,沒有封裝在框架內,也沒有以單獨代理進程形式實現。不開源,除了sofa-pbrpc
阿里巴巴各子公司(淘寶、1688、阿里云、阿里媽媽等)在基礎組件、服務治理組件方面復用不多,基本也自成體系,有各自方案。dubbo(2008年底開始設計,2011.11開源 https://github.com/alibaba/dubbo;http://alibaba.github.io/dubbo-doc-static/User+Guide-zh.htm ) 阿里內部已放棄。不過外部有一些公司在用,如京東、人人等

現內部主要使用hsf(http://www.doc88.com/p-8866142882055.html),service定義參考了OSGi

Hsf vs dubbo:hsf是淘寶團隊做的,dubbo是阿里巴巴團隊做的,而2011年底時hsf每天的服務調用量是dubbo的20+倍,穩定性、成熟度、使用范圍更廣(http://www.iteye.com/topic/1116866?page=3 )c\c++開發主要使用arpc基于protocol buffer
N\A封裝在服務框架中,直接調用遠端的服務注冊\路由系統不開源
google整個公司使用比較統一的解決方案

Protocol buffer - 數據通信交換、存儲格式,序列化\反序列化工具

BNS - Borg Name Service 名字服務,與gslb負載均衡器進行交互,獲取service對應的IP:Port,服務不同權重在gslb中進行登記。

Stubby - RPC服務框架。

支持基于http的服務狀態、健康狀態請求訪問。在框架中封裝了對權限認證服務、BNS服務的接口訪問,從而實現權限認證、負載均衡、路由等策略。
Borg進行集群資源管理、任務調度\監控在框架內會做路由緩存,每次拿到m個下游服務節點進行random access。且watch服務列表或定期到BNS去刷新獲取。PB開源。其他組件系統耦合依賴太多,沒有開源
amazonAmazon AWS提供了一系列比較成熟的產品組件和一致的解決方案。

Elastic beanstalk - 應用程序部署和管理服務。用戶只需上傳程序代碼,
Elastic Beanstalk 即可自動處理從容量預配置、負載均衡、自動擴展到應用程序運行狀況監控的部署。

SWF(Simple Workflow) - 工作流框架。協助構建、運行與擴展平行或序列分步的后臺作業程序

針對不同的應用場景提供相應的建議解決方案,如電商架構方案http://media.amazonwebservices.com/architecturecenter/AWS_ac_ra_ecommerce_webfrontend_14.pdf

SQS(Simple Queue Service) - 快速可靠、可擴展且完全托管的消息隊列服務Amazon CloudWatch - 針對AWS云資源及應用程序進行監控的服務。可以收集和跟蹤指標,收集和監控日志文件,設置警報。通過單獨部署的負載均衡設備Elastic Load Balancing,在可用區域內,自動分發請求流量到不同的EC2實例中不開源
ebayebay內部并沒有太統一的方案,內部的很多開源方案都是使用的restfull的工具,
很多基于eclipse的開發插件,github路徑:https://github.com/ebay

消息隊列使用的是bes(Business Event Stream)

SOA框架是Turmeric框架:http://www.ebaytechblog.com/2011/02/17/ebay-open-sourced-its-soa-platform/#.U-LYVIAzAf4

框架比較多,目前了解到的,可能不太準確,主要有基于Turmeric的客戶端方案SIF和SPF,前端同學介紹說還有一個ginger framework:http://www.gingerframework.com/ Turmeric的監控主要體現在,運行時server和Client的監控,調用監控,存儲監控服務數據,查看監控等。但是內部的同學說只有”大的方面的監控“N/A目前還沒有開源,準備開源,另外據幾個同學說,目前使用的并不廣泛,另外目前的版本還是有很多的rough edges
京東自2014年初開始研發JSF(Jingdong Service Framework)。前身為SAF(Service Architecture Framework),2012年開始推動SOA,統一rpc調用框架。

SAF:

JSF: 詳見附件pdf

JSF vs SAF,主要改進點:

服務不再直連ZK,注冊中心registry不是簡單zk cluster,而是多機房分布式部署的server,所有注冊信息持久化到DB中。犧牲強一致性,通過定期sync實現最終一致性。

(關于這個點,京東其實發生過幾個小時大部分online服務不可用的大事故)

很多邏輯不再放到客戶端,避免升級更新周期過長,難以一致的問題。

增加流控;增加豐富的調用監控、數據可視化圖表等功能。

研發團隊:云平臺-系統技術部-服務框架組

個人介紹:

高廣超:多年一線互聯網研發與架構設計經驗,擅長設計與落地高可用、高性能互聯網架構。

本文首發在 高廣超的簡書博客 轉載請注明!

img_7015b3c64a6b1e4a95d4739adf2bbaa0.png
image.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453565.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453565.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453565.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在操作系統重啟后恢復應用程序的工作狀態

Windows 10 創意者更新之后,默認開啟了重啟后恢復應用程序狀態的功能。這是自 Vista 以來就提供的功能——Restart Manager。 應用程序實現這一功能只需要調用 RegisterApplicationRestart 即可。傳入兩個參數: 重啟后使用的命令行參數(例如當…

裁員感悟

好員工,別以為裁員與你無關(上) 版權聲明:原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章原始出版、作者信息和本聲明。否則將追究法律責任。本文地址:http://blog.csdn.net/jobchanceleo/archive/2007/05/26/…

php傳中文給Java_完美解決PHP中文亂碼(轉) - - JavaEye技術網站

PHP中文亂碼一般是字符集問題,編碼主要有下面幾個問題。一.首先是PHP網頁的編碼1.文件本身的編碼與網頁的編碼應匹配a.如果欲使用gb2312編碼,那么php要輸出頭:header(“Content-Type: text/html; charsetgb2312")&#xff0c…

CharSequence類

CharSequence是char類型的一個可讀序列,它本身是一個接口,CharBuffer、String、StringBuffer、StringBuilder這個四個類實現了這個接口。此接口對于不同種類的char序列提供統一的只讀訪問以下是這個函數的API 它只定義了四個方法 /*** This interface re…

程序員考核的五大死因

程序員考核的五大死因(上) 程序員作為企業開發力量的最核心資產,無疑得到公司從上至下的一致關注。開發是個智力密集型產業,程序開發的特點是,付出相同時間的情況下,兩個開發者之間的產能會相差十幾甚至幾…

java編寫螺旋矩陣講解_Java如何實現螺旋矩陣 Java實現螺旋矩陣代碼實例

本篇文章小編給大家分享一下Java實現螺旋矩陣代碼實例,小編覺得挺不錯的,現在分享給大家供大家參考,有需要的小伙伴們可以來看看。給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有…

Vue Axios的配置 (高仿餓了么)

export default {name: "app",components: {"v-header": header},data() {return {seller: {}};},created() {let _this this; // 讓this始終代表最初this指向的對象this.axios.get(../data.json).then(function(res) {_this.seller res.data.sellercons…

PagerAdapter學習

前言: ViewGroup可以實現很多功能,如簡單的頁面導航和頁面滑動等等。谷歌公司為我們提供ViewGroup的API。谷歌公司推薦我們把ViewGroup和Fragment一起使,如果一起使用的話,應該使用FragmentPagerAdapter和FragmentStatePagerAdapter來進行適配處理&#…

arXiv網站

arXiv 原先是由物理學家保羅金斯巴格在1991年建立的網站, 我們會將預稿上傳到arvix作為預收錄,因此這就是個可以證明論文原創性(上傳時間戳)的文檔收錄網站。轉載于:https://www.cnblogs.com/AntonioSu/p/8387324.html

加薪——愛你在心口難開

加薪——愛你在心口難開(1) (原文刊登于《程序員》雜志07年第4期) 剛過了春節的4月份,空氣中到處透著躁動的味道,“求職”、“招聘”不斷刺激著程序員們的耳鼓,其實大多數跳槽者如果能靜下心來審視自己一下&#xf…

java線程interrupt用法_Java線程中interrupt那點事 | 學步園

1.先看一下例子程序:import java.io.IOException;import java.net.ServerSocket;import javax.rmi.CORBA.Tie;/**author: ZhengHaibo*web: http://blog.csdn.net/nuptboyzhb*mail: zhb931706659126.com*2014-3-16 Nanjing,njupt,China*/public class TestThread {/*…

Kotlin Native新增Objective-C互操作能力以及對WebAssembly的支持

根據JetBrains技術主管Nikolay Igotti的介紹,Kotlin/Native 0.4已經可用于為iOS和macOS開發原生應用。此外該版本還為WebAssembly平臺提供了實驗性支持。 \\Kotlin/Native對iOS/macOS開發的支持,關鍵在于實現了與Objective-C的互操作性。JetBrains目前已…

TranslateAnimation動畫

眾所周知,TranslateAnimation是android中重要的一個動畫函數,很多時候我們都需要使用它來實現更好的UI效果,今天就簡單研究下這個TranslateAnimation。TranslateAnimation這個位移動畫主要有三個構造函數,對應著三種不同的參數形式…

maven項目使用jacoco插件檢測代碼覆蓋率詳細配置

使用maven構建項目&#xff08;java項目或者web項目都可以&#xff09; jacoco插件的配置參考官方網址&#xff1a;http://www.eclemma.org/jacoco/trunk/doc/maven.html &#xff08;1&#xff09;配置jacoco的依賴jar包 <dependency><groupId>org.jacoco</gro…

JAVA如何取得空list成員類型_String 類型的List作為一個成員變量保存,保存成功后取對象時報空指針...

異常&#xff1a;Caused by: java.lang.NullPointerException at org.litepal.crud.DataHandler.setToModelByReflection(DataHandler.java:1341) at org.litepal.crud.DataHandler.setGenericValueToModel(DataHandler.java:787) at org.litepal.crud.DataHandler.query(DataH…

C語言:幾種字符輸入函數的區別

幾種字符輸入函數的區別&#xff1a; 1、getche()函數:用于從鍵盤讀入一個字符并顯示&#xff0c;然后直接執行下一條語 句。2、getch()函數:用于從鍵盤中讀入一個字符&#xff0c;但不顯示在屏幕上&#xff0c;然后執行下一條語句。3、getchar()函數&#xff1a;用于從鍵盤讀…

VCG Mesh剛性旋轉(變換矩陣)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 旋轉矩陣如果從線性空間的角度來看,它類似于一個投影過程。假設坐標 P ( x 1 , y 1 , z 1 ) P(x_1,y_1,z_1)

薪水增長多少,新機會才值得考慮?

薪水增長多少,新機會才值得考慮? 陰歷年馬上就要來到&#xff0c;豬年正在向我們招手。相信有些朋友年后考慮新的要作機會&#xff0c;年終獎和第13個薪水已到手&#xff0c;是考慮一下離開這個讓自己不“爽”公司的時候了&#xff0c;哈哈&#xff01; 但是&#xff0c;薪水…

ScaleAnimation動畫

ScaleAnimation動畫是用來進行縮放的動畫&#xff0c;我在使用時剛開始有些不解的問題后來經過學習&#xff0c;有了一個更深的了解。先來看看源碼&#xff0c;其實ScaleAnimation有四個構造函數&#xff0c;這里我只列出了其中的一個&#xff0c;因為另外的三個其實都只是這個…

Swift快速入門(一)第一個Swift程序

1. 本系列說明 本系列只是一個Swift快速入門的教程&#xff0c;并沒有詳盡的介紹Swift&#xff0c;Swift也并不是一個簡單的編程語言&#xff0c;所以要想詳盡的系統的學習Swift&#xff0c;本系列并不適合你&#xff0c;此系列只是讓開發者可以快速的用Swift來進行開發。另外學…