0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

技術(shù)速遞 | 分布式政企應(yīng)用如何快速實現(xiàn)云原生的微服務(wù)架構(gòu)改造

華為DevCloud ? 來源:未知 ? 2023-04-19 00:45 ? 次閱讀

作者:楊奕 華為云技術(shù)規(guī)劃專家

在以往的文章《云原生微服務(wù)治理技術(shù)朝無代理架構(gòu)的演進(jìn)之路》中,我們介紹了幾種微服務(wù)架構(gòu)模式,如下圖所示。

04278c40-de08-11ed-bfe3-dac502259ad0.png

注:圖片來源https://twitter.com/bibryam/status/1026429379587567616

今天主要是介紹,第一種SOA/ESB架構(gòu),在Java語言場景下,如何朝第三種 云原生ServiceMesh架構(gòu)的演進(jìn)的問題。

SOA/ESB架構(gòu)簡介和問題概覽

首先我們來看看 SOA/ESB 架構(gòu)模式 在目前公有云上的典型參考架構(gòu)。

如下圖所示,以華為云為例,以該模式部署應(yīng)用時,其使用到的典型云服務(wù)為 彈性負(fù)載均衡 (ELB) + 彈性伸縮(AS,包含ECS)。在這種場景下:

·需要發(fā)起調(diào)用的客戶端程序,通過配置好的域名或地址,直接調(diào)用到ELB上,通過ELB去調(diào)用到后端的ECS服務(wù)器。

·ELB上需要配置后端服務(wù)器的多個IP地址。當(dāng)然,一般這類操作可以簡化為添加某類彈性伸縮組。這樣,當(dāng)ECS發(fā)生彈性伸縮時管理員無需處理ELB配置,ELB即可自動刷新ECS的IP列表的變化。

(配置操作可參見:https://support.huaweicloud.com/usermanual-as/as_01_0102.html)

044cebf2-de08-11ed-bfe3-dac502259ad0.png

值得注意的是,以上的模式可能存在幾種變種。

·對于ELB,可能會采用API網(wǎng)關(guān)替代,或者用戶自建的KONG, APISIX,Envoy等,具體取決各個企業(yè)的自身業(yè)務(wù)場景。例如,某些互聯(lián)網(wǎng)公司傾向于采用企業(yè)自建的KONG,其主要原因是除了基本的服務(wù)發(fā)現(xiàn)和負(fù)載均衡能力以外,網(wǎng)關(guān)還需要處理面向內(nèi)部跨域調(diào)用的一些鑒權(quán)情況處理。

·對于彈性伸縮,可能也會直接采用Kubernetes的Deployment + HorizontalPodAutoscaler替代。這當(dāng)然取決于企業(yè)內(nèi)部的基礎(chǔ)架構(gòu)采用情況,看是更傾向于使用虛擬機(jī)架構(gòu)還是容器架構(gòu)。

以上架構(gòu)雖然在隔離性、安全性上存在一定優(yōu)點,但是短板也非常明顯。

·性能和資源開銷。這個比較好理解,相對微服務(wù)架構(gòu),SOA/ESB架構(gòu)上網(wǎng)絡(luò)增加了額外一跳,而且ELB的引入也會導(dǎo)致資源的額外消耗增多。

·運維成本。畢竟額外引入了一個ELB的組件,因此在微服務(wù)之間調(diào)用時,瓶頸在哪里,ELB是否需要擴(kuò)縮容,都是問題。

045b7118-de08-11ed-bfe3-dac502259ad0.png ? ? ? ? ?

微服務(wù)和云原生架構(gòu)改造方法和問題

對于如何改造 SOA/ESB 架構(gòu),朝微服務(wù)架構(gòu)或云原生架構(gòu)演進(jìn),業(yè)界也有很多方法。主要是以下兩類。

046af4bc-de08-11ed-bfe3-dac502259ad0.png

·通過修改代碼,將應(yīng)用改造為微服務(wù)架構(gòu)。例如直接在代碼中引入比如SpringCloud的服務(wù)注冊發(fā)現(xiàn)和負(fù)載均衡等組件。當(dāng)然,這種改造往往也并不簡單,主要取決于現(xiàn)有應(yīng)用已采用的開發(fā)框架等。比如應(yīng)用本身沒有采用spring來進(jìn)行開發(fā),那么直接采用SpringCloud可能會為應(yīng)用帶來海量的改造成本。

·采用istio方案,通過有限改造應(yīng)用,將架構(gòu)升級為ServiceMesh架構(gòu)。之所以該方案說是有限改造,而不是無改造,也是因為在服務(wù)調(diào)用方式上,istio方案對應(yīng)用并不是完全無限制。其至少需要在客戶端將調(diào)用的http調(diào)用地址改造成為k8s原生的服務(wù)地址,調(diào)用的服務(wù)治理才能被envoy有效接管。當(dāng)然,改造完畢后,用戶在接下來在面向邊車的性能衰減,更復(fù)雜的調(diào)用運維問題上,恐怕一個也不會少。

綜上所述,兩種方案都存在比較明顯的短板。接下來分析下采用Sermant方式進(jìn)行架構(gòu)改造,如何彌補(bǔ)上述兩種方案的短板。

Sermant對SOA/ESB架構(gòu)升級的思路

采用Sermant (https://sermant.io/zh/) 對SOA/ESB架構(gòu)升級,本質(zhì)上的最后的架構(gòu)終態(tài)是Service-Mesh。但是因為采用的方法稍有不同,從而導(dǎo)致方案在性能和運維問題上都不存在短板。主要是以下兩點:

·首先,Sermant采用Java Agent來動態(tài)注入增強(qiáng)的服務(wù)邏輯治理,因此應(yīng)用側(cè)理論可以做到完全不用改代碼。

·其次,由于Sermant的核心邏輯是以AOP (面向切面編程) 方式,Java Agent和業(yè)務(wù)屬于同一進(jìn)程,因此在性能方面不存在sidecar形態(tài)的特別大的損耗。

Sermant方案架構(gòu)如下圖所示。

048c7146-de08-11ed-bfe3-dac502259ad0.png

在核心技術(shù)點上,Sermant改造方案的功能主要有以下幾個方面:

·內(nèi)置的服務(wù)注冊發(fā)現(xiàn)機(jī)制。(上圖中的第一點和第三點)

-插件本身會帶服務(wù)注冊功能,在Provider應(yīng)用啟動的時候自動到注冊中心進(jìn)行服務(wù)注冊。

- 在Consumer應(yīng)用進(jìn)行URL服務(wù)調(diào)用的時候,通過微服務(wù)服務(wù)發(fā)現(xiàn)+負(fù)載均衡機(jī)制替代原先的服務(wù)直調(diào)。

·域名到服務(wù)名(有時也稱應(yīng)用名)的轉(zhuǎn)換。(上圖中的第二點)

- 服務(wù)發(fā)現(xiàn)時,由于原先的調(diào)用采用URL直調(diào),并不包含應(yīng)用信息。這就需要一個調(diào)用關(guān)系到應(yīng)用名的映射。對于這塊內(nèi)容,未來我們計劃做成了一個動態(tài)配置,存儲到配置中心里。這樣當(dāng)有應(yīng)用需要發(fā)起調(diào)用時,Sermant直接將URL轉(zhuǎn)換成應(yīng)用名,就可以在注冊中心獲取響應(yīng)的應(yīng)用IP列表。

- 通過URL獲取Provider應(yīng)用名后,由于在改造過程中,不用Provider應(yīng)用并不是同批次發(fā)布攜帶Sermant Java Agent,因此還需要有個白名單機(jī)制,來配合灰度發(fā)布。

·增強(qiáng)的客戶端側(cè)負(fù)載均衡、重試、隔離、降級機(jī)制。(上圖中的第四點)

- 通過URL獲取Provider應(yīng)用名后,由于在改造過程中,不用Provider應(yīng)用并不是同批次發(fā)布攜帶Sermant Java Agent,因此還需要有個白名單機(jī)制,來配合灰度發(fā)布。

-此外,對于一些必要的東西向流量的治理能力,如服務(wù)間的3A認(rèn)證等,也需要進(jìn)一步在Sermant端補(bǔ)齊。

以上便是Sermant改造方案的主要功能點。另外,在實操中如何針對現(xiàn)有環(huán)境進(jìn)行升級還是需要一定方法,避免對現(xiàn)有環(huán)境進(jìn)行太大沖擊。以下詳細(xì)敘述。

采用Sermant

對SOA/ESB架構(gòu)升級的方案實操

應(yīng)用改造在具體局點上不可能一蹴而就,因此在具體上實施上肯定是一個慢慢灰度的過程。以Kubernetes容器場景為例,介紹下在上百個微服務(wù)應(yīng)用上千實例的情況下,如何采用Sermant對SOA/ESB基于灰度進(jìn)行安全可控的云原生架構(gòu)升級。

04a427c8-de08-11ed-bfe3-dac502259ad0.gif

以下為準(zhǔn)備工作:

準(zhǔn)備步驟一:

自身應(yīng)用是否支持。當(dāng)前Sermant支持的微服務(wù)升級的Java框架可以在該文檔中查詢。如未支持,可以考慮給社區(qū)提Issue解決。

?參考鏈接:

https://sermant.io/zh/document/plugin/springboot-registry.html#%E8%AF%A6%E7%BB%86%E6%B2%BB%E7%90%86%E8%A7%84%E5%88%99

準(zhǔn)備步驟二:

在Kubernetes中安裝Injector,方便以非侵入方式讓Java應(yīng)用自動掛載Sermant Java Agent.

(本步驟可選。如跳過,則需要手動改變應(yīng)用部署腳本加載Sermant Java Agent。)

?參考鏈接:

https://sermant.io/zh/document/user-guide/injector.html

以下介紹詳細(xì)實施過程。假設(shè)初始架構(gòu)如下。一共三個App,其中App1通過ELB連接到App2和App3。為簡化表述,圖中為應(yīng)用均為單實例,實際生產(chǎn)中的實例可能會有多個。

04a8ef74-de08-11ed-bfe3-dac502259ad0.png

接下來,在Kubernetes中對新版本的App1, App2進(jìn)行發(fā)布(圖中為V2版本),并在發(fā)布時攜帶Sermant Java Agent,以及激活SpringBoot注冊插件。但是此時可以先不配置Provider白名單規(guī)則,因此發(fā)布后,應(yīng)用流量應(yīng)該還是走ELB,未發(fā)生任何變化。

04b4f422-de08-11ed-bfe3-dac502259ad0.png

接著在配置中心,將App2加入到白名單中。此時,對識別到App2的應(yīng)用,掛有Sermant Java Agent的App1實例 (圖中的V2實例) 會對App2的實例以負(fù)載均衡方式直接發(fā)起調(diào)用。與此同時,App1訪問App3的流量沒有變化。

04c0522c-de08-11ed-bfe3-dac502259ad0.png

驗證成功后,刪除App1、 App2的V1版本,App1到App2的流量通過注冊中心的注冊發(fā)現(xiàn),完全實現(xiàn)直連。同時,App1訪問App3的流量維持不變。

04cd0b52-de08-11ed-bfe3-dac502259ad0.png

至此,使用Sermant對App1、App2的云原生架構(gòu)升級結(jié)束。后續(xù)其他App應(yīng)用,可以按照類似方案,進(jìn)行灰度升級,直至所有應(yīng)用全部掛載上Sermant,完成微服務(wù)直連改造。

結(jié)束語

Sermant 作為專注于服務(wù)治理領(lǐng)域的字節(jié)碼增強(qiáng)框架,致力于提供高性能、可擴(kuò)展、易接入、功能豐富的服務(wù)治理體驗,并會在每個版本中做好性能、功能、體驗的看護(hù),廣泛歡迎大家的加入。

當(dāng)前Sermant已在華為云云服務(wù)CSE中被集成,用戶可以在華為云的CSE云服務(wù)中使用相關(guān)功能。(點擊文末“閱讀原文”跳轉(zhuǎn),了解更多相關(guān)功能)

戳“閱讀原文”,了解更多!


原文標(biāo)題:技術(shù)速遞 | 分布式政企應(yīng)用如何快速實現(xiàn)云原生的微服務(wù)架構(gòu)改造

文章出處:【微信公眾號:華為DevCloud】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 華為
    +關(guān)注

    關(guān)注

    215

    文章

    34258

    瀏覽量

    250990

原文標(biāo)題:技術(shù)速遞 | 分布式政企應(yīng)用如何快速實現(xiàn)云原生的微服務(wù)架構(gòu)改造

文章出處:【微信號:華為DevCloud,微信公眾號:華為DevCloud】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    微服務(wù)架構(gòu)與容器云的關(guān)系與區(qū)別

    微服務(wù)架構(gòu)與容器云密切相關(guān)又有所區(qū)別。微服務(wù)將大型應(yīng)用拆分為小型、獨立的服務(wù),而容器云基于容器技術(shù),為
    的頭像 發(fā)表于 10-21 17:28 ?148次閱讀

    云原生和非云原生哪個好?六大區(qū)別詳細(xì)對比

    云原生和非云原生各有優(yōu)劣,具體選擇取決于應(yīng)用場景。云原生利用云計算的優(yōu)勢,通過微服務(wù)、容器化和自動化運維等技術(shù),提高了應(yīng)用的可擴(kuò)展性、更新速
    的頭像 發(fā)表于 09-13 09:53 ?294次閱讀

    京東云原生安全產(chǎn)品重磅發(fā)布

    “安全產(chǎn)品那么多,我怎么知道防住了?”“大家都說自己是云原生的,我看都是換湯不換藥”在與客戶溝通云原生安全方案的時候,經(jīng)常會遇到這樣的吐槽。越來越的客戶已經(jīng)開始了云原生化的技術(shù)
    的頭像 發(fā)表于 07-26 10:36 ?401次閱讀
    京東<b class='flag-5'>云原生</b>安全產(chǎn)品重磅發(fā)布

    從積木到裝配云原生安全

    云原生安全風(fēng)險 隨著云原生架構(gòu)快速發(fā)展,核心能力逐漸穩(wěn)定,安全問題日趨緊急。在云原生安全領(lǐng)域不但有新
    的頭像 發(fā)表于 07-26 10:35 ?251次閱讀
    從積木<b class='flag-5'>式</b>到裝配<b class='flag-5'>式</b><b class='flag-5'>云原生</b>安全

    什么是分布式架構(gòu)?

    分布式架構(gòu)是指將一個系統(tǒng)或應(yīng)用拆分成多個獨立的節(jié)點,這些節(jié)點通過網(wǎng)絡(luò)連接進(jìn)行通信和協(xié)作,以實現(xiàn)共同完成任務(wù)的一種架構(gòu)模式。這種架構(gòu)模式旨在提
    的頭像 發(fā)表于 01-12 15:04 ?1126次閱讀
    什么是<b class='flag-5'>分布式</b><b class='flag-5'>架構(gòu)</b>?

    分布式節(jié)點服務(wù)器是什么?

    分布式節(jié)點服務(wù)器是一種將多個服務(wù)分布式連接、協(xié)同工作,以實現(xiàn)負(fù)載均衡、提高系統(tǒng)性能和可靠性、提供高可用性的
    的頭像 發(fā)表于 01-12 15:04 ?686次閱讀
    <b class='flag-5'>分布式</b>節(jié)點<b class='flag-5'>服務(wù)</b>器是什么?

    米哈游大數(shù)據(jù)云原生實踐

    近年來,容器、微服務(wù)、Kubernetes 等各項云原生技術(shù)的日漸成熟,越來越多的公司開始選擇擁抱云原生,并開始將 AI、大數(shù)據(jù)等類型的企業(yè)應(yīng)用部署運行在
    的頭像 發(fā)表于 01-09 10:41 ?551次閱讀
    米哈游大數(shù)據(jù)<b class='flag-5'>云原生</b>實踐

    云原生數(shù)據(jù)庫GaiaDB架構(gòu)設(shè)計解析

    目前,云原生數(shù)據(jù)庫已經(jīng)被各行各業(yè)大規(guī)模投入到實際生產(chǎn)中,最終的目標(biāo)都是「單機(jī) + 分布式一體化」。但在演進(jìn)路線上,當(dāng)前主要有兩個略有不同的路徑。
    的頭像 發(fā)表于 12-14 14:48 ?533次閱讀
    <b class='flag-5'>云原生</b>數(shù)據(jù)庫GaiaDB<b class='flag-5'>架構(gòu)</b>設(shè)計解析

    設(shè)計微服務(wù)架構(gòu)的原則

    微服務(wù)是一種軟件架構(gòu)策略,有利于改善整體性能和可擴(kuò)展性。你可能會想,我的團(tuán)隊需不需要采用微服務(wù),設(shè)計微服務(wù)架構(gòu)有哪些原則?本文會給你一些靈感
    的頭像 發(fā)表于 11-26 08:05 ?538次閱讀
    設(shè)計<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>的原則

    docker微服務(wù)架構(gòu)實戰(zhàn)

    隨著云計算和容器化技術(shù)快速發(fā)展,微服務(wù)架構(gòu)在軟件開發(fā)領(lǐng)域中變得越來越流行。微服務(wù)架構(gòu)將一個大型
    的頭像 發(fā)表于 11-23 09:26 ?616次閱讀

    springcloud微服務(wù)架構(gòu)

    Spring Cloud是一個開源的微服務(wù)架構(gòu)框架,它提供了一系列工具和組件,用于構(gòu)建和管理分布式系統(tǒng)中的微服務(wù)。它基于Spring框架,旨在通過簡化開發(fā)過程和降低系統(tǒng)復(fù)雜性來幫助開發(fā)
    的頭像 發(fā)表于 11-23 09:24 ?1166次閱讀

    springcloud分布式事務(wù)解決方案

    Spring Cloud是一套用于構(gòu)建分布式系統(tǒng)的開源框架,它提供了一系列組件和工具,可以幫助開發(fā)人員快速構(gòu)建和管理基于微服務(wù)架構(gòu)的應(yīng)用程序。在分布
    的頭像 發(fā)表于 11-16 11:03 ?1976次閱讀

    springcloud如何實現(xiàn)分布式

    ,我們可以快速搭建分布式系統(tǒng),并且靈活地進(jìn)行伸縮和擴(kuò)展。 要實現(xiàn)分布式系統(tǒng),我們可以按照以下步驟來使用Spring Cloud: 服務(wù)注冊與
    的頭像 發(fā)表于 11-16 11:01 ?637次閱讀

    springclould分布式教程

    的基本概念、主要組件以及如何使用Spring Cloud構(gòu)建分布式系統(tǒng)。 一、Spring Cloud的基本概念 分布式系統(tǒng) 分布式系統(tǒng)是由多個獨立計算機(jī)集合而成的系統(tǒng),這些計算機(jī)通過網(wǎng)絡(luò)進(jìn)行通信和協(xié)作,共同完成系統(tǒng)的任務(wù)。
    的頭像 發(fā)表于 11-16 10:59 ?453次閱讀

    spring分布式框架有哪些

    的Spring分布式框架。 Spring Cloud Spring Cloud是基于Spring Boot的分布式開發(fā)工具包。它提供了多個子項目,包括服務(wù)注冊與發(fā)現(xiàn)、客戶端負(fù)載均衡、斷路器、網(wǎng)關(guān)等。Spring Cloud可以幫
    的頭像 發(fā)表于 11-16 10:58 ?735次閱讀