成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

你所不知的TARS,卻幫閱文集團(tuán)完成技術(shù)架構(gòu)變革! ——TARS開啟閱文集團(tuán)技術(shù)架構(gòu)變革之門

Achilles / 997人閱讀

摘要:什么是是騰訊從年到今天一直在使用的后臺(tái)邏輯層統(tǒng)一應(yīng)用框架的開源版本,目前支持和三種語言。目前該框架在騰訊內(nèi)部的各大核心業(yè)務(wù)都在使用,頗受歡迎,基于該框架部署運(yùn)行的服務(wù)節(jié)點(diǎn)規(guī)模達(dá)到上萬個(gè)。

| 博客文章

你所不知的TARS,卻幫閱文集團(tuán)完成技術(shù)架構(gòu)變革!
——TARS開啟閱文集團(tuán)技術(shù)架構(gòu)變革之門

作者簡介|歐樑
后端研發(fā)架構(gòu)師,現(xiàn)任職于閱文集團(tuán)技術(shù)部基礎(chǔ)服務(wù)研發(fā)組,一直致力于Java應(yīng)用架構(gòu)設(shè)計(jì)以及業(yè)務(wù)架構(gòu)演進(jìn)研發(fā),對(duì)分布式系統(tǒng)架構(gòu)有深入理解。

0x00 什么是TARS
TARS是騰訊從2008年到今天一直在使用的后臺(tái)邏輯層統(tǒng)一應(yīng)用框架(Total Application Framework)的開源版本,目前支持C++,Java和NodeJs三種語言。
該框架為用戶提供了涉及到開發(fā)、運(yùn)維、以及測試的一整套解決方案,幫助一個(gè)產(chǎn)品或者服務(wù)快速開發(fā)、部署、測試、上線。 它集可擴(kuò)展協(xié)議編解碼、高性能RPC通信框架、名字路由與發(fā)現(xiàn)、發(fā)布監(jiān)控、日志統(tǒng)計(jì)、配置管理等于一體,通過它可以快速用微服務(wù)的方式構(gòu)建自己的穩(wěn)定可靠的分布式應(yīng)用,并實(shí)現(xiàn)完整有效的服務(wù)治理。
目前該框架在騰訊內(nèi)部的各大核心業(yè)務(wù)都在使用,頗受歡迎,基于該框架部署運(yùn)行的服務(wù)節(jié)點(diǎn)規(guī)模達(dá)到上萬個(gè)。內(nèi)外部版本在代碼結(jié)構(gòu)、功能上基本相同。本文基于私有云版本的TARS,部分功能可能與目前開源及公有云TARS版本有所區(qū)別。

0x01 使用TARS的原由
一年半前,公司后端服務(wù)技術(shù)棧是.net加上各種Oracle存儲(chǔ)過程,就著當(dāng)年頂級(jí)服務(wù)器,裝配著windows server前前后后浩浩蕩蕩300多臺(tái)。不論好壞,撐起了10多年網(wǎng)絡(luò)文學(xué)的情懷。
現(xiàn)今,隨著IP熱潮的涌動(dòng)以及公司業(yè)務(wù)的飛速擴(kuò)展,什么都不用說了,必須重構(gòu)。
于是乎,我們選擇了90%的人會(huì)選擇的,擁有成熟技術(shù)圈的JAVA來做這件事情。秉承快速構(gòu)建、共性開發(fā)、持續(xù)集成、快速迭代的理念,我們順理成章地開始了。
去年年初的某日,運(yùn)維側(cè)力薦TARS。一時(shí)掀起波瀾,“這個(gè)東西學(xué)習(xí)成本如何?”,“和騰訊側(cè)用的是一套嗎?”,“用于線上合適嗎?”。揣著疑惑和擔(dān)心,看了內(nèi)部使用資料和壓測報(bào)告(如今官方立碑于此https://github.com/Tencent/TA...),開始了TARS之旅。

0x02業(yè)務(wù)集的現(xiàn)狀
公司TARS業(yè)務(wù)服務(wù)集每日接口調(diào)用最大值近百億,單業(yè)務(wù)峰值可在數(shù)萬每秒,近300種業(yè)務(wù)服務(wù)。對(duì)于常規(guī)的開發(fā)部署方式,必然會(huì)花費(fèi)大量成本進(jìn)行編碼、部署以及運(yùn)維的統(tǒng)一。使用TARS則輕松很多,正是TARS優(yōu)秀的服務(wù)表現(xiàn),為公司的APP抗住了515書友粉絲節(jié),百萬紅包,除夕手Q線上聯(lián)動(dòng)等過億級(jí)用戶量的活動(dòng)。
][2]
業(yè)務(wù)集結(jié)構(gòu)

0x03 TARS哪里好
TARS是個(gè)大而全的分布式應(yīng)用。拋開對(duì)開發(fā)部署習(xí)慣的改變,用了TARS之后,確實(shí)省卻了很多且又方便了很多。
服務(wù)容錯(cuò)方面,TARS擁有基本的容錯(cuò)和負(fù)載均衡,讓我們可以忽略間歇、偶發(fā)、永久的設(shè)備故障,任何一臺(tái)服務(wù)器down掉都不影響業(yè)務(wù)訪問,同時(shí)提供對(duì)網(wǎng)絡(luò)異常,超時(shí)節(jié)點(diǎn)屏蔽,定時(shí)重試和流量導(dǎo)回的切換能力。
高性能方面,TARS運(yùn)用Reactor模型以及能夠高效支持百萬級(jí)別的句柄監(jiān)聽——Epoll ET。為TARS框架提供高達(dá)41w/s吞吐量。
伸縮性方面,擴(kuò)容是業(yè)務(wù)發(fā)展必不可少的過程,TARS對(duì)平滑擴(kuò)容提供良好支持,流程化的配置可完成無感知的服務(wù)擴(kuò)容升級(jí)。
管理和運(yùn)維方面,TARS自帶監(jiān)控模塊,對(duì)主調(diào)反饋?zhàn)隽藢?shí)時(shí)統(tǒng)計(jì),在管理界面提供了多維度性能數(shù)據(jù)圖。供開發(fā)及運(yùn)維判斷當(dāng)前服務(wù)狀態(tài),并可配置參數(shù)閾值進(jìn)行短信或微信告警通知。

0x04 TARS的具體使用方法

TARS開發(fā)流程

01.開發(fā)TARS,必須知道如何撰寫JCE接口文件
JCE接口文件借鑒了ICE[1] ,引入代碼生成的思路,并結(jié)合無線側(cè)手機(jī)的應(yīng)用場景,做到了編解碼效率和網(wǎng)絡(luò)帶寬使用的權(quán)衡考慮。TARS的JCE接口描述語言文件是以.tars后綴結(jié)尾的。
下圖為JCE文件:
[1] ICE是什么:ICE?,Internet Communications Engine,是一個(gè)面向?qū)ο?,適用于異構(gòu)環(huán)境的中間件平臺(tái)。

JCE文件

對(duì)于一個(gè)上層業(yè)務(wù)服務(wù),調(diào)用5-6個(gè)基礎(chǔ)TARS是常有的事情。摸清產(chǎn)品業(yè)務(wù)后,分別找到對(duì)應(yīng)服務(wù)的開發(fā)。由于每個(gè)服務(wù)基本是一個(gè)TARS服務(wù),所以溝通一個(gè)服務(wù)只需3步:1、“××服務(wù)的JCE能給我下嗎?!”;2、傳來一個(gè)JCE文件;3、“Thanks”;
JCE的內(nèi)容都是約定俗成的,對(duì)應(yīng)的結(jié)構(gòu)體和接口也有相應(yīng)注釋。所以,溝通就是那么簡潔明了。

02.JCE與TARS服務(wù)端的實(shí)際開發(fā)
通過jce-maven-plugin編譯,可生成特定Servant接口。繼承接口就可實(shí)現(xiàn)業(yè)務(wù)邏輯。

Servant接口

繼承類

在遵循TARS規(guī)范的java項(xiàng)目里面,services.xml中配置此繼承類。

services.xml
TARS項(xiàng)目有特定目錄結(jié)構(gòu),具體結(jié)構(gòu)如下圖gateway。service項(xiàng)目為一個(gè)普通java project,可在本地開發(fā)通過后,發(fā)布jar類庫引入gateway中,TARS容器只需編譯gateway即可。

TARS目錄結(jié)構(gòu)

TARS的目錄結(jié)構(gòu)以及嚴(yán)格maven化,省去了開發(fā)邏輯代碼多帶帶打包的過程。同時(shí)嚴(yán)格的區(qū)分了開發(fā)及上線測試流程,對(duì)規(guī)范研發(fā)管理流程有極大的幫助。

03.TARS客戶端調(diào)用流程
獲取Communicator實(shí)例
CommunicatorConfig cfg = CommunicatorConfig.load("config.conf");
Communicator communicator = CommunicatorFactory.getInstance().getCommunicator(cfg);

獲取ServantProxyConfig實(shí)例并配置
ServantProxyConfig proxyConfig = new ServantProxyConfig(taf.serverName);

TARS config對(duì)象常用參數(shù)設(shè)置

調(diào)用Communicator的stringToProxy方法并傳入ServantProxyConfig實(shí)例,最后返回Jce生成的動(dòng)態(tài)代理對(duì)象,并調(diào)用對(duì)應(yīng)的方法。
communicator.stringToProxy(api, proxyConfig);

ServantProxyFactory中創(chuàng)建動(dòng)態(tài)代理對(duì)象

TARS支持接口同步或異步調(diào)用,通過對(duì)config對(duì)象超時(shí)時(shí)間的設(shè)置,可以實(shí)現(xiàn)軟件層面的服務(wù)過載保護(hù)。
同步調(diào)用:
HelloPrx prx = c.stringToProxy("TestApp.HelloServer.HelloObj");
//發(fā)起遠(yuǎn)程調(diào)用
prx.hello(1000, "hello word");
異步調(diào)用:
HelloPrx prx = c.stringToProxy("TestApp.HelloServer.HelloObj");
//發(fā)起遠(yuǎn)程調(diào)用
prx.async_hello(new HelloPrxCallback() {

    @Override
    public void callback_expired() { }
    @Override
    public void callback_exception(Throwable ex) { }
    @Override
    public void callback_hello(String ret) {
        System.out.println(ret);
    }
}, 1000, "hello word");

從去年到現(xiàn)在,公司遷移改造如火如荼的進(jìn)行。主要目標(biāo)是從.net代碼中閱讀邏輯,用JAVA改寫成一個(gè)個(gè)TARS服務(wù)。同時(shí)提供更高的可用性,為公司app相關(guān)的新需求迭代保駕護(hù)航。
在這個(gè)過程中,對(duì)于app的接口提供層(Tomcat部署)改動(dòng)極大,從原來直接訪問數(shù)據(jù)持久層到調(diào)用一個(gè)個(gè)TARS微服務(wù),其中不乏一些問題。
曾經(jīng)一段時(shí)間,對(duì)于TARS的接入采取了最簡單有效的同步方式,并利用TARS提供的客戶端同步超時(shí)配置來處理接口超時(shí)。結(jié)果,一個(gè)訪問頻繁的讀取接口由于網(wǎng)絡(luò)傳輸?shù)牟环€(wěn)定,會(huì)導(dǎo)致連鎖的處理線程獨(dú)占,從而降低整個(gè)服務(wù)吞吐能力,并伴有重啟等現(xiàn)象。
經(jīng)過jvm,gc等分析,改用TARS提供的異步方式獲取接口返回以及編碼層面細(xì)粒度的超時(shí)控制,基本解決了上述問題。目前,業(yè)務(wù)層調(diào)用總量也翻了番(峰值從當(dāng)時(shí)120W左右到目前250W),節(jié)省了一半的設(shè)備。
TARS被調(diào)方式的多樣性也對(duì)不同業(yè)務(wù)場景支持更加全面。

JCE-WUP協(xié)議
TARS除了支持客戶端通過JCE生成類的調(diào)用方式,還可以發(fā)起WUP數(shù)據(jù)包協(xié)議調(diào)用。

什么是WUP:
WUP(wireless uni-protocol)無線統(tǒng)一協(xié)議
基于JCE編碼的命令字(Command)層協(xié)議封裝
UniPacket實(shí)現(xiàn)請(qǐng)求與回應(yīng)包對(duì)象的封裝
支持協(xié)議動(dòng)態(tài)擴(kuò)展
序列化的數(shù)據(jù)可用于網(wǎng)絡(luò)傳輸或者持久化存儲(chǔ)
支持直接調(diào)用TARS的服務(wù)端

JAVA版本封包方式
TafUniPacket uniPacket = new TafUniPacket();
uniPacket.setTafVersion(Const.VERSION_WUP3);
uniPacket.setEncodeName("UTF-8");
uniPacket.setServantName("TestApp.HelloServer.HelloObj");
uniPacket.setFuncName("hello");
uniPacket.put("word", "Hello World");
byte[] sendPackect = uniPacket.encode();
隨后自己使用Socket發(fā)包,調(diào)用信息為TARS服務(wù)物理機(jī)URL,而非主控URL。
TARS通過輪詢或者健康統(tǒng)計(jì)來選擇可用URL。
具體邏輯可查看tars-core源碼,com.qq.TARS.client.cluster.DefaultLoadBalance類:

對(duì)應(yīng)于WUP,TARS有相同的概念TUP。相關(guān)工具類為TARSUniPacket,封包、解包、調(diào)用TARS服務(wù)方式完全一樣。
https://github.com/Tencent/TA...

05.結(jié)合版本控制工具編譯和發(fā)布
TARS支持常用版本控制管理工具的關(guān)聯(lián)編譯:SVN/GIT。錄入SVN路徑,可掃描到該路徑下有效的分支。錄入GIT路徑,可掃描該目錄下有效TAG分支。

TARS編譯界面

發(fā)布的相關(guān)日志管理也集成在平臺(tái)中,可實(shí)時(shí)確定發(fā)布情況。

TARS發(fā)布界面

所有的TARS項(xiàng)目用的編譯發(fā)布都是一套,通過一定隊(duì)列分配進(jìn)行作業(yè)。編譯后會(huì)生成唯一的發(fā)布版本。存儲(chǔ)了歷史發(fā)布記錄,可追溯,方便回滾。
團(tuán)隊(duì)中有很多業(yè)務(wù)開發(fā)并行進(jìn)行,會(huì)創(chuàng)建很多分支。有時(shí)你想學(xué)習(xí)別人的代碼,但又發(fā)現(xiàn)有很多分支無法確定目前線上運(yùn)行的版本,通過發(fā)布日志就可查詢最近發(fā)布的版本分支。

06.TARS提供了容器接口測試功能
服務(wù)正常發(fā)布后,遵循TARS自定義入?yún)⒊鰠⒌母袷?,即可調(diào)用JCE中定義的方法進(jìn)行自測。

TARS接口測試

對(duì)于一個(gè)接口的開發(fā),本地測試完,只能說接口邏輯通了。放到線上可能會(huì)出種種問題,環(huán)境配置、接口性能、接口未能符合分布式的考慮等等。這個(gè)測試功能無疑是可以驗(yàn)證線上是否正確的良好手段。
加上TARS的接口可以轉(zhuǎn)換暴露成HTTP形式,所以,QA與我們達(dá)成一致,每次提測的接口必須提供HTTP的調(diào)用。這樣既方便的了功能驗(yàn)證,又可以遵循原先的壓測形式。

07.服務(wù)多維度監(jiān)控
服務(wù)調(diào)量和性能指標(biāo)監(jiān)控直觀反應(yīng)服務(wù)運(yùn)行情況,通過不同維度的設(shè)置和查詢,可迅速評(píng)估流量高峰、定位響應(yīng)異常、查看調(diào)用路徑以及優(yōu)化調(diào)用毛刺。

TARS監(jiān)控已經(jīng)成為我們定位問題的第一入口。流量抖動(dòng)和耗時(shí)增加基本可以一目了然。監(jiān)控還細(xì)化到接口維度,為“閑暇時(shí)間”接口優(yōu)化提供了參考。

08.TARS提供了豐富的參數(shù)配置
TARS的默認(rèn)配置對(duì)于平日開發(fā)維護(hù)基本夠用。對(duì)于特殊業(yè)務(wù)的特定配置,TARS同樣支持,可通過調(diào)節(jié)各種參數(shù)來增加服務(wù)表現(xiàn)。舉例TARS-JAVA,可通過節(jié)點(diǎn)服務(wù)管理增加Reactor模型工作線程數(shù),亦可通過修改配置模板調(diào)優(yōu)jvm參數(shù)或服務(wù)超時(shí)等特性。
記得某業(yè)務(wù)服務(wù)從Tomcat改用TARS。原因不必多說,主要是默認(rèn)了TARS的高吞吐以及容錯(cuò)等特性??蛇\(yùn)行一天后,突然收到了短信告警,平均耗時(shí)超過閾值。打開TARS監(jiān)控觀察,調(diào)用量沒有明顯上漲,調(diào)用曲線也符合之前業(yè)務(wù)特性。
“怎么耗時(shí)一直在慢慢上漲”。當(dāng)時(shí)第一反應(yīng)是不是代碼層面問題,排查了一圈,基本確定和原有“湯姆貓”上運(yùn)行的代碼一致,除了適配TARS入口調(diào)用的代碼。再查看了物理機(jī)的監(jiān)控,CPU/IO/MEM均沒有特別異常。
通過對(duì)TARS特性監(jiān)控的查看,注意到相關(guān)監(jiān)控中req.queue.waitingtime(請(qǐng)求在隊(duì)列中等待時(shí)間),jvm.thread.num(jvm當(dāng)前線程總數(shù)) 確有異常。等待時(shí)間曲線階段性增長,線程數(shù)卻不多。初步判定應(yīng)該與服務(wù)器處理線程有關(guān)。
“都是應(yīng)用服務(wù)器,處理能力怎么那么低,如果是Tomcat會(huì)器調(diào)整maxConnections,acceptCount等等”。
倒騰了半天,原來TARS也支持容器性能細(xì)粒度的修改。于是把工作線程數(shù),從默認(rèn)配置的5改成了32,重啟觀察一陣,現(xiàn)象沒有再發(fā)生。
TARS同時(shí)提供私有模板功能,可做更細(xì)粒度的配置,甚至jvm層面的調(diào)優(yōu)。把配置能力沒有保留的提供給使用者也是個(gè)優(yōu)秀架構(gòu)易用性的重要體現(xiàn)。

0x05 TARS的展望
Tencent已于2017年04月10日正式在github上對(duì)外開放了TARS的開源版本,同時(shí)提供了技術(shù)討論群(qq技術(shù)交流群:579079160),并表示會(huì)內(nèi)部一直使用和對(duì)外一直維護(hù)。

可以預(yù)見,TARS將能夠支持更多天馬行空的產(chǎn)品需求,對(duì)于業(yè)務(wù)支撐和線上極端情況的容錯(cuò)度將越來越大。希望這篇科普可以勾起各位的興趣,幫助大家早日加入使用TARS的行列。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/23244.html

相關(guān)文章

  • 騰訊與閱文技術(shù)合作 微服務(wù)框架Tars再添PHP

    摘要:引言作為由騰訊公司開源的優(yōu)秀框架與服務(wù)部署運(yùn)維解決方案,被閱文集團(tuán)引入了實(shí)際實(shí)踐中,同時(shí)閱文集團(tuán)對(duì)在語言層面進(jìn)行了能力的補(bǔ)全,令如虎添翼。作為騰訊公司的優(yōu)秀框架與服務(wù)部署運(yùn)維解決方案,可以滿足上述的所有需求。 梁晨(Ted),任職閱文集團(tuán)技術(shù)中心,負(fù)責(zé)起點(diǎn)中文網(wǎng)的WEB后臺(tái)開發(fā)工作。曾負(fù)責(zé)騰訊上海企業(yè)產(chǎn)品部營銷QQWeb后臺(tái)開發(fā)、QQ公眾號(hào)Web后臺(tái)開發(fā),對(duì)大型網(wǎng)站技術(shù)架構(gòu),有自己的經(jīng)...

    yanwei 評(píng)論0 收藏0
  • 騰訊開源項(xiàng)目TARS首次全面發(fā)布PHP版本

    摘要:月日,在上海舉行的第六屆中國開發(fā)者大會(huì)上,騰訊開源項(xiàng)目首次全面發(fā)布版本,閱文集團(tuán)高級(jí)開發(fā)工程師梁晨對(duì)如何通過構(gòu)建高性能框架做了經(jīng)驗(yàn)分享。騰訊開源項(xiàng)目貢獻(xiàn)者,騰訊開發(fā)組成員,對(duì)于構(gòu)建高性能后臺(tái)微服務(wù)治理有豐富的經(jīng)驗(yàn)。 5月19日,在上海舉行的第六屆中國PHP開發(fā)者大會(huì)(PHPCon)上,騰訊開源項(xiàng)目TARS首次全面發(fā)布PHP版本,閱文集團(tuán)高級(jí)開發(fā)工程師梁晨(Ted)對(duì)PHP如何通過TAR...

    appetizerio 評(píng)論0 收藏0
  • 干貨| PHPCon上TARS-PHP全面解讀及PPT下載

    摘要:年月日,在上海舉行的第六屆中國開發(fā)者大會(huì)上,騰訊開源項(xiàng)目首次全面發(fā)布版本,閱文集團(tuán)高級(jí)開發(fā)工程師梁晨對(duì)如何通過構(gòu)建高性能框架做了經(jīng)驗(yàn)分享。分享內(nèi)容作為騰訊開源的框架,在發(fā)布之后即受到開源領(lǐng)域的關(guān)注。閱文集團(tuán)本身也有一塊新的業(yè)務(wù)在使用。 2018年5月19日,在上海舉行的第六屆中國PHP開發(fā)者大會(huì)(PHPCon)上,騰訊開源項(xiàng)目TARS首次全面發(fā)布PHP版本,閱文集團(tuán)高級(jí)開發(fā)工程師梁晨對(duì)...

    JasonZhang 評(píng)論0 收藏0
  • 騰訊公司副總裁曾宇:技術(shù)必須產(chǎn)生價(jià)值,開源需要攜手發(fā)展

    摘要:會(huì)議期間騰訊副總裁曾宇,閱文集團(tuán)副總裁傅徐軍等嘉賓共同啟動(dòng)合作發(fā)布儀式,并進(jìn)行了圓桌會(huì)議,對(duì)進(jìn)行了詳細(xì)的探討發(fā)言。會(huì)上,騰訊公司副總裁曾宇談到了騰訊整體的開源策略,并表示技術(shù)必須產(chǎn)生價(jià)值,開源需要攜手發(fā)展。 近日,由中國工信部指導(dǎo),信通院主辦的云計(jì)算開源產(chǎn)業(yè)大會(huì)在國家會(huì)議中心舉行。大會(huì)邀請(qǐng)了行業(yè)內(nèi)多位重磅人物與共同探討、交流云計(jì)算開源技術(shù)及產(chǎn)業(yè)化經(jīng)驗(yàn),探索開源技術(shù)創(chuàng)新的發(fā)展途徑,也開啟...

    liaoyg8023 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<