色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ServiceComb的通信處理詳解

華為開發者社區 ? 來源:未知 ? 作者:李倩 ? 2018-05-15 09:39 ? 次閱讀

今天的介紹ServiceComb的通信處理詳解。

整體介紹

ServiceComb的底層通信框架依賴Vert.x. vertx標準工作模式為高性能的Reactive模式,其工作方式如下圖所示:

圖 Reactive模式工作方式

業務邏輯直接在Eventloop中執行,整個業務流程中沒有線程切換,所有的等待邏輯都是異步的,只要有任務,則不會讓線程停下來,充分、有效地利用系統資源。

vertx生態中包含了業界常用各種組件的Reactive封裝,包括jdbc、zookeeper、各種mq等等。但是Reactive模式對業務的要求相當高,業務主流程中不允許有任何的阻塞行為。因此,為了簡化上層業務邏輯,方便開發人員的使用,在Vertx之上提供同步模式的開發接口還是必不可少的,例如:

各種安全加固的組件,只提供了同步工作模式,比如redis、zookeeper等等;

一些存量代碼工作于同步模式,需要低成本遷移;

開發人員技能不足以控制Reactive邏輯。

所以ServiceComb底層基于vertx,但在vertx之上進行了進一步封裝,同時支持Reactive及同步模式。

工作于Reactive模式時,利用Vertx原生的能力,不必做什么額外的優化,僅需要注意不要在業務代碼中阻塞整個進程。

而同步模式則會遭遇各種并發性能問題。,本文描述同步模式下的各種問題以及解決方案。

RESTful流程中,連接由vertx管理,當前沒有特別的優化,所以本文中,連接都是指highway流程中的tcp連接。

同步模式下的整體線程模型

圖 同步模式下的整體線程模型

一個微服務進程中,為transport創建了一個獨立的vertx實例;

Eventloop是vertx中的網絡、任務線程;

一個vertx實例默認的Eventloop數為:

2 * Runtime.getRuntime().availableProcessors()

服務消費者端

在服務消費者端,主要需要處理的問題是如何更加高效地把請求推送到服務提供者上去,然后拿到服務提供者的返回信息。所以在這一端我們主要關注“如何更高效的發送數據”這個話題

單連接模型

1、最簡單的單連接模型

圖 最簡單的單連接模型

從模型圖中,我們可以看到,所有的consumer線程,如果向同一個目標發送數據,必然產生資源競爭,此時實際的處理如下:

Connection.send內部直接調用Vertx的socket.write(buf),是必然加鎖互斥的。

這必然導致大量并發時,大多數consumer線程都無法及時地發送自己的數據。

Socket.write內部會調用netty的channel.write,此時會判斷出執行線程不是Eventloop線程,所以會創建出一個任務并加入到Eventloop任務隊列中,如果Eventloop線程當前在睡眠態,則立即喚醒Eventloop線程,異步執行任務。

這導致頻繁的任務下發及線程喚醒,無謂地增加cpu占用,降低性能。

2、優化的單連接模型

圖 優化的單連接模型

在優化模型中:

每個TcpClientConnection額外配備一個CAS消息隊列;

Connection.send不再直接調用vertx的write方法,而是:

所有消息保存到CAS隊列中,減少入隊競爭;

通過原子變量判定,只有入隊前CAS隊列為空,才向Eventloop下發write任務,喚醒Eventloop線程;

在Eventloop中處理write任務時,將多個請求數據包裝為composite buffer,批量發送,減少進入os內核的次數,提高tcp發送效率。

代碼參見:

https://github.com/ServiceComb/ServiceComb-Java-Chassis/blob/master/foundations/foundation-vertx/src/main/java/io/servicecomb/foundation/vertx/client/tcp/TcpClientConnection.java

io.servicecomb.foundation.vertx.client.tcp.TcpClientConnection.packageQueueio.servicecomb.foundation.vertx.client.tcp.TcpClientConnection.send(AbstractTcpClientPackage, long, TcpResponseCallback)

https://github.com/ServiceComb/ServiceComb-Java-Chassis/blob/master/foundations/foundation-vertx/src/main/java/io/servicecomb/foundation/vertx/tcp/TcpConnection.java

io.servicecomb.foundation.vertx.tcp.TcpConnection.write(ByteBuf)

io.servicecomb.foundation.vertx.tcp.TcpConnection.writeInContext()

進行此項優化后,在同一環境下測試2組數據,可以看到性能有明顯提升(不同硬件的測試環境,數據可能差異巨大,不具備比較意義):

TPS Latency(ms) CPU TPS提升比例 時延提升比例
Consumer Producer (新-舊)/舊 (舊-新)/新
優化前 81986 1.22 290% 290% 77.31% 43.61%
優化后 145369 0.688 270% 270%

表:單連接模型優化前后性能對比

多連接模型

在單連接場景下進行相應的優化后,我們發現其實還有更多的優化空間。因為在大多數場景中,實際機器配置足夠高,比如多核、萬兆網絡連接、網卡支持RSS特性等。此時,需要允許一對consumer與producer之間建立多條連接來充分發揮硬件的性能。

圖 多連接模型

允許配置多個Eventloop線程

在microservice.yaml中進行以下配置:

cse:

highway:

client:

thread-count: 線程數

server:

thread-count: 線程數

Consumer線程與Eventloop線程建立均衡的綁定關系,進一步降低consumer線程的競爭概率。

代碼參見:

https://github.com/ServiceComb/ServiceComb-Java-Chassis/blob/master/foundations/foundation-vertx/src/main/java/io/servicecomb/foundation/vertx/client/ClientPoolManager.java

io.servicecomb.foundation.vertx.client.ClientPoolManager.findThreadBindClientPool()

優化后的性能對比:

TPS Latency
(ms)
CPU TPS提升比例 時延提升比例
Consumer Producer (新-舊)/舊 (舊-新)/新
簡單單連接*10 543442 0.919 2305% 1766% 72.81% 42.11%
CAS單連接*10 939117 0.532 1960% 1758%

表 多連接下線程模型優化前后性能對比

每請求大小為1KB,可以看到萬兆網的帶寬接近吃滿了,可以充分利用硬件性能。

(該測試環境,網卡支持RSS特性。)

服務提供者端

不同于服務消費者,服務提供者主要的工作模式就是等待消費者的請求,然后處理后返回應答的信息。所以在這一端,我們更加關注“如何高效的接收和處理數據”這件事情。

同步模式下,業務邏輯和IO邏輯分開,且根據“隔離倉”原則,為了保證整個系統更加穩定和高效地運行,業務邏輯本身也需要在不同隔離的區域內運行。而這些區域,就是線程池。所以構建服務提供者,就需要對線程池進行精細的管理。

下面是針對線程池的各種管理方式。

1、單線程池(ThreadPoolExecutor)

下圖表示的是將業務邏輯用單獨的線程池實現的方式。在這種方式下,IO仍然采用異步模式,所有接到的請求放入隊列中等待處理。在同一個線程池內的線程消費這個隊列并進行業務處理。

圖 單線程池實現方式

在這種方式下,有以下瓶頸點:

所有的Eventloop向同一個Blocking Queue中提交任務;

線程池中所有線程從同一個Blocking Queue中搶任務執行;

ServiceComb默認不使用這種線程池。

2、多線程池(ThreadPoolExecutor)

為規避線程池中Queue帶來的瓶頸點,我們可以使用一個Executor將多個真正的Executor包起來。

圖 多線程池實現方式

Eventloop線程與線程池建立均衡的綁定關系,降低鎖沖突概率;

相當于將線程分組,不同線程從不同Queue中搶任務,降低沖突概率。

ServiceComb默認所有請求使用同一個線程池實例:

io.servicecomb.core.executor.FixedThreadExecutor

FixedThreadExecutor內部默認創建2個真正的線程池,每個池中有CPU數目的線程,可以通過配置修改默認值:

servicecomb:

executor:

default:

group: 內部真正線程池的數目

thread-per-group: 每個線程池中的線程數

代碼參見:

https://github.com/ServiceComb/ServiceComb-Java-Chassis/blob/master/core/src/main/java/io/servicecomb/core/executor/FixedThreadExecutor.java

3、隔離倉

業務接口的處理速度有快有慢,如果所有的請求統一在同一個Executor中進行處理,則可能每個線程都在處理慢速請求,導致其他請求在Queue中排隊。

此時,可以根據業務特征,事先做好規劃,將不同的業務處理按照一定的方式進行分組,每個組用不同的線程池,以達到隔離的目的。

圖 隔離倉

隔離倉的實現依托到ServiceComb靈活的線程池策略,具體在下一節進行描述。

4、靈活的線程池策略

ServiceComb微服務的概念模型如下:

圖 ServiceComb微服務概念模型

可以針對這3個層次進行線程池的配置,operation與線程池之間的對應關系,在啟動階段既完成綁定。

operation與線程池之間的綁定按以下邏輯進行:

查看配置項cse.executors.Provider.[schemaId].[operationId]是否有值;

如果有值,則將值作為beanId從spring中獲取bean實例,該實例即是一個Executor。

如果沒有值,則繼續嘗試下一步:

使用相同的方式,查看配置項cse.executors.Provider.[schemaId]是否有值;

使用相同的方式,查看配置項cse.executors.default是否有值;

以”cse.executor.groupThreadPool”作為beanId,獲取線程池(系統內置的FixedThreadExecutor)。

代碼參見:

https://github.com/ServiceComb/ServiceComb-Java-Chassis/blob/master/core/src/main/java/io/servicecomb/core/executor/ExecutorManager.java

按以上策略,用戶如果需要創建自定義的線程池,需要按以下步驟執行:

實現java.util.concurrent.Executor接口

將實現類定義為一個bean;

在microservice.yaml中將線程池與對應的業務進行綁定。

5、線程池模型總結

如上一節所述,在默認多線程池的基礎上,CSE提供了更為靈活的線程池配置。“隔離倉”模式的核心價值是實現不同業務之間的相互隔離,從而讓一個業務的故障不要影響其他業務。這一點在CSE中可以通過對線程池的配置實現。例如,可以為不同的operation配置各自獨立的線程池。

另外,靈活性也帶來了一定的危險性。要避免將線程池配置為前面提到的“單業務線程池”模式,從而為整個系統引入瓶頸點。

寫在最后:ServiceComb除了在華為云微服務引擎商用之外,也于2017年12月全票通過進入Apache孵化器。歡迎感興趣的讀者前往開源社區和我們討論切磋,希望此文可以給正在進行微服務方案實施的讀者們一些啟發。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 華為
    +關注

    關注

    216

    文章

    34470

    瀏覽量

    251935
  • 無線通信
    +關注

    關注

    58

    文章

    4573

    瀏覽量

    143606
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1362

    瀏覽量

    79108

原文標題:微服務|打造企業級微服務開發框架(下)

文章出處:【微信號:Huawei_Developer,微信公眾號:華為開發者社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    飛思卡爾QorIQ通信處理器內部架構詳解

    飛思卡爾半導體QorIQ通信處理器多年來一直作為業界通信處理器的主力軍,為應對信息大爆炸和物聯網的發展,QorIQ也在不斷革新。本文詳解QorIQ T1040和T1042通信處理器內部
    發表于 11-26 10:13 ?4267次閱讀
    飛思卡爾QorIQ<b class='flag-5'>通信處理</b>器內部架構<b class='flag-5'>詳解</b>

    什么是飛思卡爾運籌帷幄細化QorIQ通信處理器?

    從模擬制式手機到2G、3G、4G甚至是未來的5G,每到轉折期就有一些人被技術牽絆而不知何去何從,飛思卡爾半導體總是能應景推出相應的通信處理器等創新產品,為通信時代的跨越保駕護航。在物聯網時代,通信處理
    發表于 07-30 06:47

    飛思卡爾LS1系列通信處理器迎來了哪些機遇?

    甚至互聯網公司都推出了極富競爭力的智能路由器,而物聯網時代必將有更多五花八門的智能設備孕育而生,這都離不開強大的智能芯片作為技術支撐,特別是通信處理器。集成的誘惑。可以說從計算機發明開始,人類就在謀求
    發表于 07-31 07:38

    蘇州求購CP443-1通信處理器卡件/回收西門子通信處理

    蘇州上門大量求購全新CP443-1通信處理器卡件/回收西門子通信處理器、6GK7 243-2AX01-0XA0、6GK7 443-1EX30-0XE0、6GK7 343-1GX30-0XE0
    發表于 06-12 20:47

    串口通信處理數據的思路是什么

    串口通信處理數據的思路是什么
    發表于 02-18 07:52

    RTU560遠方終端單元數據表格通信處理單元/插件560CM

    RTU560遠方終端單元數據表格通信處理單元/插件560CMU05
    發表于 08-18 18:55 ?30次下載

    QorIQ通信處理器飛思卡爾

    QorIQ 通信處理器飛思卡爾 飛思卡爾半導體推出第一款基于其QorIQ 通信平臺,并且融入 QUICC Engine多協議技術的處理器。QorIQ P1012/P1021 產品系列為使用
    發表于 12-09 09:38 ?773次閱讀

    LSI推出的最新Axxia通信處理

    LSI推出的最新Axxia通信處理器 LSI 公司日前宣布推出專為無線基礎設施應用設計的 Axxia™ 系列通信處理器。Axxia 通信處理器采用突破性 LSI™ Virtual Pipeline
    發表于 02-22 10:19 ?994次閱讀

    LSI推出Axxia 系列通信處理

    LSI推出Axxia 系列通信處理器 LSI 公司宣布推出專為無線基礎設施應用設計的 Axxia 系列通信處理器。Axxia 通信處理器采用突破性 LSI™ Virtual Pipeline™ 消息傳遞
    發表于 02-23 09:30 ?1018次閱讀

    LSI推出無需外部存儲器的多核通信處理器-APP3100

    LSI推出無需外部存儲器的多核通信處理器-APP3100       LSI 公司 (NYSE: LSI) 日前宣布面向企業及服務提供商推出 LSI™ APP3100 多核通信處理器。LSI APP3100
    發表于 04-24 11:09 ?594次閱讀

    LSI推出無需外部存儲器的多核通信處理器APP3100

    LSI推出無需外部存儲器的多核通信處理器APP3100 LSI公司日前宣布面向企業及服務提供商推出LSI APP3100多核通信處理器。LSI APP3100基于獲獎的LSI APP3300通信處理器之上,能夠為
    發表于 04-27 10:08 ?629次閱讀

    Marvell發布業界首款單芯片“全球制式”通信處理

    美滿電子科技(Marvell)近日宣布全球移動通信領域的最新突破性技術——Marvell PXA 1800系列單芯片LTE“全球制式”通信處理器。
    發表于 09-09 09:32 ?787次閱讀

    通信處理器的新能如何

    C-Port的C-5數字通信處理器(DCP)面向各種通信應用 - 從高功能以太網交換機和多業務接入平臺到太比特路由器和光邊緣交換機。憑借其通用和通信專用處理能力,C-5取代了制造商通常
    的頭像 發表于 08-13 16:04 ?2517次閱讀

    QorIQ通信處理器的詳細介紹

    從模擬制式手機到2G、3G、4G甚至是未來的5G,每到轉折期就有一些人被技術牽絆而不知何去何從,飛思卡爾半導體總是能應景推出相應的通信處理器等創新產品,為通信時代的跨越保駕護航。在物聯網時代,通信處理
    發表于 09-29 10:44 ?0次下載
    QorIQ<b class='flag-5'>通信處理</b>器的詳細介紹

    PROFIBUS通信處理器功能的介紹

    PROFIBUS通信處理器(CP)用于將SIMATIC plc連接到PROFIBUS網絡,可以提供S7通信、S5兼容通信(FDL)和PG/OP(編程器/操作員面板)通信,實現SYNC/
    發表于 12-15 10:37 ?1098次閱讀
    主站蜘蛛池模板: 欧美精品一区二区三区视频| 亚洲精品一区三区三区在线观看| 又黄又猛又爽大片免费| 久久久久久人精品免费费看| 最近的2019中文字幕HD| 青青久在线视频免费观看| 国产精品高清m3u8在线播放| 亚洲涩福利高清在线| 蜜桃传媒视频| 国产高清免费视频免费观看| 伊人久在线观看视频| 欧美videqsdesex0| 国产精品一区二区AV97| 中国人泡妞www免费| 日本乱子人伦在线视频| 国语自产偷成人精品视频| 91久久偷偷做嫩草影院免费看| 三叶草成人| 久久性色AV亚洲电影无码| 动漫成人片| 伊人久久综合热青草| 色姊姊真舒服| 久久无码av三级| 国产精品XXXXX免费A片| 在线观看免费精品国产| 视频网站入口在线看| 噜噜噜狠狠夜夜躁| 国产精品美女久久久久AV超清| 1788vv视频| 亚洲国产成人久久一区www妖精| 年轻的老师5理伦片| 国偷自产视频一区二区久| YELLOW日本动漫高清免费| 伊人久久精品中文字幕| 婷婷开心激情综合五月天| 女攻男受高h全文肉肉| 精品国产在线亚洲欧美| 国产精品第十页| qvod 电影| 52av我爱| 伊人久久伊人|