日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

掌门教育微服务体系 Solar 第 3 弹:Nacos 企业级落地下篇

發(fā)布時(shí)間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 掌门教育微服务体系 Solar 第 3 弹:Nacos 企业级落地下篇 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

聯(lián)席作者:謝璐 謝慶芳 伊安娜 任浩軍
鄭重鳴謝:Nacos - 彥林,Spring Cloud Alibaba - 小馬哥、洛夜,Nacos 社區(qū) - 張龍(pader)、春少(chuntaojun)

相關(guān)文章推薦:

  • 掌門教育微服務(wù)體系 Solar | 阿里巴巴 Nacos 企業(yè)級(jí)落地上篇
  • 掌門教育微服務(wù)體系 Solar | 阿里巴巴 Nacos 企業(yè)級(jí)落地中篇

前言

在高速發(fā)展的時(shí)候,公司規(guī)模越來越大,老師人數(shù)越來越多,這時(shí)候公司不能鋪太多人去做運(yùn)營與服務(wù),必須提高每個(gè)人效,這就需要技術(shù)驅(qū)動(dòng)。因此掌門教育轉(zhuǎn)變成一家技術(shù)驅(qū)動(dòng)型的公司,如果被迫成為一家靠資金驅(qū)動(dòng)的公司就活不下去了。

– 張翼(掌門教育創(chuàng)始人兼CEO)

掌門教育自2014年正式轉(zhuǎn)型在線教育以來,秉承“讓教育共享智能,讓學(xué)習(xí)高效快樂”的宗旨和愿景,經(jīng)歷云計(jì)算、大數(shù)據(jù)、人工智能、 AR / VR / MR 以及現(xiàn)今最火的 5G ,一直堅(jiān)持用科技賦能教育。掌門教育的業(yè)務(wù)近幾年得到了快速發(fā)展,特別是今年的疫情,使在線教育成為了新的風(fēng)口,也給掌門教育新的機(jī)遇。

隨著業(yè)務(wù)規(guī)模進(jìn)一步擴(kuò)大,流量進(jìn)一步暴增,微服務(wù)數(shù)目進(jìn)一步增長,使老的微服務(wù)體系所采用的注冊(cè)中心 Eureka 不堪重負(fù),同時(shí) Spring Cloud 體系已經(jīng)演進(jìn)到第二代,第一代的 Eureka 注冊(cè)中心已經(jīng)不大適合現(xiàn)在的業(yè)務(wù)邏輯和規(guī)模,同時(shí)它目前被 Spring Cloud 官方置于維護(hù)模式,將不再向前發(fā)展。如何選擇一個(gè)更為優(yōu)秀和適用的注冊(cè)中心,這個(gè)課題就擺在了掌門人的面前。經(jīng)過對(duì) Alibaba Nacos 、HashiCorp Consul等開源注冊(cè)中心做了深入的調(diào)研和比較,最終選定 Alibaba Nacos 做微服務(wù)體系 Solar 中的新注冊(cè)中心。

背景故事

基礎(chǔ)架構(gòu)部選擇新的注冊(cè)中心,測(cè)試組需要配合對(duì)業(yè)界成熟的注冊(cè)中心產(chǎn)品做分析和比較。由于掌門教育采用的是比較純凈的 Spring Cloud 技術(shù)棧,所以我們需要圍繞它的注冊(cè)中心,從測(cè)試角度,進(jìn)行功能和性能上研究。

Spring Cloud 技術(shù)棧官方支持 Netflix Eureka ,HashiCorp Consul ,Zookeeper 三個(gè)注冊(cè)中心,它們可以相互間實(shí)現(xiàn)無縫遷移,Alibaba Nacos 是新加盟 Spring Cloud 技術(shù)棧的新成員。測(cè)試組的同學(xué)們對(duì)上述四個(gè)注冊(cè)中心做了一一研究和分析,鑒于時(shí)間緊迫,除了 Eureka 和 Nacos 之外,其它兩個(gè)中間件未做深入的功能測(cè)試和性能測(cè)試。下面提供來自阿里巴巴 Nacos 官方某次業(yè)界宣講的資料截圖以供大家參考:

  • Eureka 介紹

  • Zookeeper 介紹

  • Consul 介紹

  • 上述三個(gè)注冊(cè)中心比較

本文將圍繞 Alibaba Nacos 著重針對(duì)其功能測(cè)試和性能測(cè)試兩方面進(jìn)行剖析和介紹。

Nacos 測(cè)試篇

Nacos 性能測(cè)試

① Nacos Server 性能測(cè)試

開發(fā)部署了 UAT 的 Nacos ,測(cè)試親自壓測(cè)。

  • 核心腳本
def registry(ip):fo = open("service_name.txt", "r")str = fo.read()service_name_list = str.split(";")service_name = service_name_list[random.randint(0,len(service_name_list) - 1)]fo.close()client = nacos.NacosClient(nacos_host, namespace='')print(client.add_naming_instance(service_name,ip,333,"default",1.0,{'preserved.ip.delete.timeout':86400000},True,True))while True:print(client.send_heartbeat(service_name,ip,333,"default",1.0,"{}"))time.sleep(5)
  • 壓測(cè)數(shù)據(jù)

  • 壓測(cè)結(jié)果圖

Nacos Server 是3臺(tái) 1C4G 集群,同時(shí)承受1499個(gè)服務(wù)和12715個(gè)實(shí)例注冊(cè),而且 CPU 和內(nèi)存長期保持在一個(gè)合適的范圍內(nèi),果真 Nacos 性能是相當(dāng) OK 的。

Nacos 功能測(cè)試

① Nacos Server 接口測(cè)試

更多更詳 API 請(qǐng)參見 Nacos 官方文檔: Open API 指南

https://nacos.io/zh-cn/docs/open-api.html

② Nacos Eureka Sync 測(cè)試

  • 交叉注冊(cè)

網(wǎng)關(guān),服務(wù) A ,服務(wù) B 各10臺(tái)實(shí)例,網(wǎng)關(guān)注冊(cè) Eureka , A 注冊(cè) Nacos , B 注冊(cè) Eureka ,同步正常,可調(diào)用。

  • 壓力測(cè)試

請(qǐng)求大于100萬次,查看 Sync Server 會(huì)不會(huì)受到影響,結(jié)果 ErrorRequest = 0,同步服務(wù)數(shù)和實(shí)例數(shù)沒有變化。

  • 有無損調(diào)用

網(wǎng)關(guān) Sync Server 掛掉,網(wǎng)關(guān)服務(wù) Eureka 同步 Nacos 失敗,不影響網(wǎng)關(guān) -> A -> B 調(diào)用。

  • 自動(dòng)創(chuàng)建同步

發(fā)布系統(tǒng)第一次發(fā)布應(yīng)用到 Eureka / Nacos ,會(huì)自動(dòng)創(chuàng)建 Eureka -> Nacos 的同步任務(wù)或 Nacos -> Eureka 的同步任務(wù)

  • 減少 Sync Server

Sync Server 4C8G ,停止機(jī)器,逐臺(tái)遞減,結(jié)論:平均1臺(tái) 4C8G 機(jī)器最大可同步100個(gè)服務(wù)。

  • 增加 Sync Server

2臺(tái) Etcd 節(jié)點(diǎn),停機(jī)一臺(tái),Etcd 讀取超時(shí),結(jié)論:600個(gè)服務(wù)至少2臺(tái) Etcd 節(jié)點(diǎn),這里重點(diǎn)強(qiáng)調(diào),新增服務(wù)時(shí), Hash 算法虛擬節(jié)點(diǎn)數(shù),務(wù)必和原有的保持一致,不然會(huì)出現(xiàn)同步失敗,影響跨注冊(cè)中心調(diào)用。

  • 重啟 Sync Server

增加 Sync Server 個(gè)數(shù),重啟 Sync Server ,各節(jié)點(diǎn)同步數(shù)重新計(jì)算且均衡。

③ Nacos Client 功能測(cè)試

Nacos Client 界面重點(diǎn)測(cè)試集群管理,服務(wù)列表和權(quán)限控制。

  • Nacos Server 重啟后,集群管理界面正常展示3臺(tái)集群節(jié)點(diǎn) IP 。
  • 服務(wù)注冊(cè) Nacos Server 后,服務(wù)列表新增注冊(cè)上去的服務(wù)名和實(shí)例個(gè)數(shù),而且可查看詳情。

  • 服務(wù)上下線操作,健康狀態(tài)和元數(shù)據(jù)等展示正常。
  • 編輯,刪除等操作只有具備 Admin 權(quán)限的人員才可操作。

④ Nacos Client 自動(dòng)化測(cè)試

  • 自動(dòng)化測(cè)試鏈路

全鏈路測(cè)試路徑

API網(wǎng)關(guān) -> 服務(wù)A(兩個(gè)實(shí)例) -> 服務(wù)B(兩個(gè)實(shí)例)

全鏈路服務(wù)部署

  • 自動(dòng)化測(cè)試入口

結(jié)合 Spring Boot Junit , TestApplication.class 為測(cè)試框架內(nèi)置應(yīng)用啟動(dòng)程序, MyTestConfiguration 用于初始化所有測(cè)試用例類。在測(cè)試方法上面加入 JUnit 的 @Test注解

@RunWith(SpringRunner.class) @SpringBootTest(classes = { TestApplication.class, MyTestConfiguration.class }, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class MyTest {@Autowiredprivate MyTestCases myTestCases;private static long startTime;@BeforeClasspublic static void beforeTest() {startTime = System.currentTimeMillis();}@AfterClasspublic static void afterTest() {LOG.info("* Finished automation test in {} seconds", (System.currentTimeMillis() - startTime) / 1000);}@Testpublic void testNoGray() throws Exception {myTestCases.testNoGray(gatewayTestUrl);myTestCases.testNoGray(zuulTestUrl);}@Testpublic void testVersionStrategyGray() throws Exception {myTestCases.testVersionStrategyGray1(gatewayGroup, gatewayServiceId, gatewayTestUrl);myTestCases.testVersionStrategyGray1(zuulGroup, zuulServiceId, zuulTestUrl);} } @Configuration public class MyTestConfiguration {@Beanpublic MyTestCases myTestCases() {return new MyTestCases();} }
  • 基于 Nacos Client 的普通調(diào)用自動(dòng)化測(cè)試

在測(cè)試方法上面增加注解 @DTest ,通過斷言 Assert 來判斷測(cè)試結(jié)果。注解 @DTest 內(nèi)容如下:

@Target({ ElementType.METHOD, ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface DTest {}

代碼如下:

public class MyTestCases {@Autowiredprivate TestRestTemplate testRestTemplate;@DTestpublic void testNoGray(String testUrl) {int noRepeatCount = 0;List<String> resultList = new ArrayList<String>();for (int i = 0; i < 4; i++) {String result = testRestTemplate.getForEntity(testUrl, String.class).getBody();LOG.info("Result{} : {}", i + 1, result);if (!resultList.contains(result)) {noRepeatCount++;}resultList.add(result);}Assert.assertEquals(noRepeatCount, 4);} }
  • 基于 Nacos Client 的灰度藍(lán)綠調(diào)用自動(dòng)化測(cè)試

在測(cè)試方法上面增加注解 @DTestConfig ,通過斷言 Assert 來判斷測(cè)試結(jié)果。注解 DTestConfig 注解內(nèi)容如下:

@Target({ ElementType.METHOD, ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface DTestConfig {// 組名String group();// 服務(wù)名String serviceId();// 組名-服務(wù)名組合鍵值的前綴String prefix() default StringUtils.EMPTY;// 組名-服務(wù)名組合鍵值的后綴String suffix() default StringUtils.EMPTY;// 執(zhí)行配置的文件路徑。測(cè)試用例運(yùn)行前,會(huì)把該文件里的內(nèi)容推送到遠(yuǎn)程配置中心或者服務(wù)String executePath();// 重置配置的文件路徑。測(cè)試用例運(yùn)行后,會(huì)把該文件里的內(nèi)容推送到遠(yuǎn)程配置中心或者服務(wù)。該文件內(nèi)容是最初的默認(rèn)配置// 如果該注解屬性為空,則直接刪除從配置中心刪除組名-服務(wù)名組合鍵值String resetPath() default StringUtils.EMPTY; }

代碼如下:

public class MyTestCases {@Autowiredprivate TestRestTemplate testRestTemplate;@DTestConfig(group = "#group", serviceId = "#serviceId", executePath = "gray-strategy-version.xml", resetPath = "gray-default.xml")public void testVersionStrategyGray(String group, String serviceId, String testUrl) {for (int i = 0; i < 4; i++) {String result = testRestTemplate.getForEntity(testUrl, String.class).getBody();LOG.info("Result{} : {}", i + 1, result);int index = result.indexOf("[V=1.0]");int lastIndex = result.lastIndexOf("[V=1.0]");Assert.assertNotEquals(index, -1);Assert.assertNotEquals(lastIndex, -1);Assert.assertNotEquals(index, lastIndex);}} }

初始默認(rèn)無灰度藍(lán)綠的配置文件 gray-default.xml

<?xml version="1.0" encoding="UTF-8"?> <rule></rule>

灰度藍(lán)綠生效的配置文件 gray-strategy-version.xml

<?xml version="1.0" encoding="UTF-8"?> <rule><strategy><version>1.0</version></strategy> </rule>
  • 基于 Nacos Client 的自動(dòng)化測(cè)試報(bào)告樣例
---------- Run automation testcase :: testStrategyCustomizationGray() ---------- Header : [a:"1", b:"2"] Result1 : zuul -> solar-service-a[192.168.0.107:3002][V=1.1][R=qa][G=solar-group] -> solar-service-b[192.168.0.107:4002][V=1.1][R=dev][G=solar-group] Result2 : zuul -> solar-service-a[192.168.0.107:3002][V=1.1][R=qa][G=solar-group] -> solar-service-b[192.168.0.107:4002][V=1.1][R=dev][G=solar-group] Result3 : zuul -> solar-service-a[192.168.0.107:3002][V=1.1][R=qa][G=solar-group] -> solar-service-b[192.168.0.107:4002][V=1.1][R=dev][G=solar-group] Result4 : zuul -> solar-service-a[192.168.0.107:3002][V=1.1][R=qa][G=solar-group] -> solar-service-b[192.168.0.107:4002][V=1.1][R=dev][G=solar-group] * Passed ---------- Run automation testcase :: testVersionRuleGray() ---------- Result1 : zuul -> solar-service-a[192.168.0.107:3002][V=1.1][R=qa][G=solar-group] -> solar-service-b[192.168.0.107:4002][V=1.1][R=dev][G=solar-group] Result2 : zuul -> solar-service-a[192.168.0.107:3001][V=1.0][R=dev][G=solar-group] -> solar-service-b[192.168.0.107:4001][V=1.0][R=qa][G=solar-group] Result3 : zuul -> solar-service-a[192.168.0.107:3002][V=1.1][R=qa][G=solar-group] -> solar-service-b[192.168.0.107:4002][V=1.1][R=dev][G=solar-group] Result4 : zuul -> solar-service-a[192.168.0.107:3001][V=1.0][R=dev][G=solar-group] -> solar-service-b[192.168.0.107:4001][V=1.0][R=qa][G=solar-group] * Passed

Nacos 測(cè)試總結(jié)

Nacos 不僅性能好,而且界面簡潔,這樣的注冊(cè)中心你值得擁有。

作者介紹

  • 吳毅挺,掌門技術(shù)副總裁,負(fù)責(zé)技術(shù)中臺(tái)和少兒技術(shù)團(tuán)隊(duì)。曾就職于百度、eBay 、攜程,曾任攜程高級(jí)研發(fā)總監(jiān),負(fù)責(zé)從零打造攜程私有云、容器云、桌面云和 PaaS 平臺(tái)。
  • 任浩軍,掌門基礎(chǔ)架構(gòu)部負(fù)責(zé)人。曾就職于平安銀行、萬達(dá)、惠普,曾負(fù)責(zé)平安銀行平臺(tái)架構(gòu)部 PaaS 平臺(tái) Halo 基礎(chǔ)服務(wù)框架研發(fā)。10 多年開源經(jīng)歷,Github ID:@HaojunRen,Nepxion 開源社區(qū)創(chuàng)始人,Nacos Group Member,Spring Cloud Alibaba & Nacos & Sentinel & OpenTracing Committer。

參與 Nacos 落地的基礎(chǔ)架構(gòu)部成員,包括:

  • 童子龍,張彬彬,廖夢(mèng)鴿,張金星,胡振建,謝璐,謝慶芳,伊安娜

“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的公眾號(hào)。”

總結(jié)

以上是生活随笔為你收集整理的掌门教育微服务体系 Solar 第 3 弹:Nacos 企业级落地下篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。