在线看黄色av网站-国外又粗又长又硬的性视频-刘亦菲国产一区二区三区在线观看-国产精品一区二区高清在线-日本放荡的熟妇在线-男男视频网站高清观看-韩国电影伦理韩国电影-日韩一区二区免费高清在线观看-欧美日韩亚洲一区二区在线

掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇


掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
聯(lián)席作者:謝璐 謝慶芳 伊安娜 任浩軍鄭重鳴謝:Nacos - 彥林 , Spring Cloud Alibaba - 小馬哥、洛夜,Nacos 社區(qū) - 張龍(pader)、春少(chuntaojun)
相關文章推薦:
  • 掌門教育微服務體系 Solar | 阿里巴巴 Nacos 企業(yè)級落地上篇
  • 掌門教育微服務體系 Solar | 阿里巴巴 Nacos 企業(yè)級落地中篇
前言
在高速發(fā)展的時候,公司規(guī)模越來越大 , 老師人數(shù)越來越多,這時候公司不能鋪太多人去做運營與服務,必須提高每個人效,這就需要技術驅(qū)動 。因此掌門教育轉(zhuǎn)變成一家技術驅(qū)動型的公司,如果被迫成為一家靠資金驅(qū)動的公司就活不下去了 。
-- 張翼(掌門教育創(chuàng)始人兼CEO)
掌門教育自2014年正式轉(zhuǎn)型在線教育以來 , 秉承“讓教育共享智能 , 讓學習高效快樂”的宗旨和愿景,經(jīng)歷云計算、大數(shù)據(jù)、人工智能、 AR / VR / MR 以及現(xiàn)今最火的 5G  , 一直堅持用科技賦能教育 。掌門教育的業(yè)務近幾年得到了快速發(fā)展,特別是今年的疫情,使在線教育成為了新的風口,也給掌門教育新的機遇 。
隨著業(yè)務規(guī)模進一步擴大,流量進一步暴增,微服務數(shù)目進一步增長,使老的微服務體系所采用的注冊中心 Eureka 不堪重負,同時 Spring Cloud 體系已經(jīng)演進到第二代,第一代的 Eureka 注冊中心已經(jīng)不大適合現(xiàn)在的業(yè)務邏輯和規(guī)模,同時它目前被 Spring Cloud 官方置于維護模式,將不再向前發(fā)展 。如何選擇一個更為優(yōu)秀和適用的注冊中心,這個課題就擺在了掌門人的面前 。經(jīng)過對 Alibaba Nacos 、HashiCorp Consul等開源注冊中心做了深入的調(diào)研和比較,最終選定 Alibaba Nacos 做微服務體系 Solar 中的新注冊中心 。
背景故事
基礎架構部選擇新的注冊中心,測試組需要配合對業(yè)界成熟的注冊中心產(chǎn)品做分析和比較 。由于掌門教育采用的是比較純凈的 Spring Cloud 技術棧,所以我們需要圍繞它的注冊中心 , 從測試角度 , 進行功能和性能上研究 。
Spring Cloud 技術棧官方支持 Netflix Eureka  , HashiCorp Consul ,Zookeeper 三個注冊中心,它們可以相互間實現(xiàn)無縫遷移,Alibaba Nacos 是新加盟 Spring Cloud 技術棧的新成員 。測試組的同學們對上述四個注冊中心做了一一研究和分析,鑒于時間緊迫,除了 Eureka 和 Nacos 之外 , 其它兩個中間件未做深入的功能測試和性能測試 。下面提供來自阿里巴巴 Nacos 官方某次業(yè)界宣講的資料截圖以供大家參考:
  • Eureka 介紹

掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
  • Zookeeper 介紹

掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
  • Consul 介紹

掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
  • 上述三個注冊中心比較

掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
本文將圍繞 Alibaba Nacos 著重針對其功能測試和性能測試兩方面進行剖析和介紹 。
Nacos 測試篇
Nacos 性能測試
① Nacos Server 性能測試
開發(fā)部署了 UAT 的 Nacos ,測試親自壓測 。
  • 核心腳本
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)
  • 壓測數(shù)據(jù)

掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
  • 壓測結(jié)果圖

掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
Nacos Server 是3臺 1C4G 集群,同時承受1499個服務和12715個實例注冊,而且 CPU 和內(nèi)存長期保持在一個合適的范圍內(nèi),果真 Nacos 性能是相當 OK 的 。
Nacos 功能測試
【掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇】① Nacos Server 接口測試
掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
更多更詳 API 請參見 Nacos 官方文檔: Open API 指南
***/docs/open-api.html
② Nacos Eureka Sync 測試
  • 交叉注冊
網(wǎng)關,服務 A  , 服務 B 各10臺實例,網(wǎng)關注冊 Eureka,A 注冊 Nacos,B 注冊 Eureka,同步正常,可調(diào)用 。
  • 壓力測試
請求大于100萬次,查看 Sync Server 會不會受到影響,結(jié)果 ErrorRequest = 0 , 同步服務數(shù)和實例數(shù)沒有變化 。
掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
  • 有無損調(diào)用
網(wǎng)關 Sync Server 掛掉,網(wǎng)關服務 Eureka 同步 Nacos 失敗,不影響網(wǎng)關 -> A -> B 調(diào)用 。
  • 自動創(chuàng)建同步
發(fā)布系統(tǒng)第一次發(fā)布應用到 Eureka / Nacos,會自動創(chuàng)建 Eureka -> Nacos 的同步任務或 Nacos -> Eureka 的同步任務
掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
  • 減少 Sync Server
Sync Server 4C8G,停止機器,逐臺遞減,結(jié)論:平均1臺 4C8G 機器最大可同步100個服務 。
  • 增加 Sync Server
2臺 Etcd 節(jié)點,停機一臺 , Etcd 讀取超時,結(jié)論:600個服務至少2臺 Etcd 節(jié)點,這里重點強調(diào),新增服務時, Hash 算法虛擬節(jié)點數(shù),務必和原有的保持一致 , 不然會出現(xiàn)同步失敗,影響跨注冊中心調(diào)用 。
掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
  • 重啟 Sync Server
增加 Sync Server 個數(shù) , 重啟 Sync Server,各節(jié)點同步數(shù)重新計算且均衡 。
③ Nacos Client 功能測試
Nacos Client 界面重點測試集群管理,服務列表和權限控制 。
  • Nacos Server 重啟后,集群管理界面正常展示3臺集群節(jié)點 IP。
  • 服務注冊 Nacos Server 后,服務列表新增注冊上去的服務名和實例個數(shù),而且可查看詳情 。

掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
  • 服務上下線操作,健康狀態(tài)和元數(shù)據(jù)等展示正常 。
  • 編輯,刪除等操作只有具備 Admin 權限的人員才可操作 。
④ Nacos Client 自動化測試
  • 自動化測試鏈路
全鏈路測試路徑
API網(wǎng)關 -> 服務A(兩個實例) -> 服務B(兩個實例)
掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
全鏈路服務部署
掌門教育微服務體系Solar第3彈:Nacos企業(yè)級落地下篇

文章插圖
  • 自動化測試入口
結(jié)合 Spring Boot Junit ,TestApplication.class 為測試框架內(nèi)置應用啟動程序, MyTestConfiguration 用于初始化所有測試用例類 。在測試方法上面加入 JUnit 的 @Test注解
@RunWith(SpringRunner.class)@SpringBootTest(classes = { TestApplication.class, MyTestConfiguration.class }, webEnvirOnment= SpringBootTest.WebEnvironment.RANDOM_PORT)public class MyTest { @Autowired private MyTestCases myTestCases; private static long startTime; @BeforeClass public static void beforeTest() { startTime = System.currentTimeMillis(); } @AfterClass public static void afterTest() { LOG.info("* Finished automation test in {} seconds", (System.currentTimeMillis() - startTime) / 1000); } @Test public void testNoGray() throws Exception { myTestCases.testNoGray(gatewayTestUrl); myTestCases.testNoGray(zuulTestUrl); } @Test public void testVersionStrategyGray() throws Exception { myTestCases.testVersionStrategyGray1(gatewayGroup, gatewayServiceId, gatewayTestUrl); myTestCases.testVersionStrategyGray1(zuulGroup, zuulServiceId, zuulTestUrl); }}@Configurationpublic class MyTestConfiguration { @Bean public MyTestCases myTestCases() { return new MyTestCases(); }}
  • 基于 Nacos Client 的普通調(diào)用自動化測試
在測試方法上面增加注解 @DTest ,通過斷言 Assert 來判斷測試結(jié)果 。注解 @DTest 內(nèi)容如下:
@Target({ ElementType.METHOD, ElementType.TYPE })@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface DTest {}代碼如下:
public class MyTestCases { @Autowired private TestRestTemplate testRestTemplate; @DTest public 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 的灰度藍綠調(diào)用自動化測試
在測試方法上面增加注解 @DTestConfig ,通過斷言 Assert 來判斷測試結(jié)果 。注解 DTestConfig 注解內(nèi)容如下:
@Target({ ElementType.METHOD, ElementType.TYPE })@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface DTestConfig { // 組名 String group(); // 服務名 String serviceId(); // 組名-服務名組合鍵值的前綴 String prefix() default StringUtils.EMPTY; // 組名-服務名組合鍵值的后綴 String suffix() default StringUtils.EMPTY; // 執(zhí)行配置的文件路徑 。測試用例運行前 , 會把該文件里的內(nèi)容推送到遠程配置中心或者服務 String executePath(); // 重置配置的文件路徑 。測試用例運行后,會把該文件里的內(nèi)容推送到遠程配置中心或者服務 。該文件內(nèi)容是最初的默認配置 // 如果該注解屬性為空,則直接刪除從配置中心刪除組名-服務名組合鍵值 String resetPath() default StringUtils.EMPTY;}代碼如下:
public class MyTestCases { @Autowired private 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); } }}初始默認無灰度藍綠的配置文件 gray-default.xml
<?xml version="1.0" encoding="UTF-8"?><rule></rule>灰度藍綠生效的配置文件 gray-strategy-version.xml
<?xml version="1.0" encoding="UTF-8"?><rule> <strategy> <version>1.0</version> </strategy></rule>
  • 基于 Nacos Client 的自動化測試報告樣例
---------- 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]* PassedNacos 測試總結(jié)
Nacos 不僅性能好,而且界面簡潔 , 這樣的注冊中心你值得擁有 。
作者介紹
  • 吳毅挺,掌門技術副總裁,負責技術中臺和少兒技術團隊 。曾就職于百度、eBay 、攜程 , 曾任攜程高級研發(fā)總監(jiān),負責從零打造攜程私有云、容器云、桌面云和 PaaS 平臺 。
  • 任浩軍,掌門基礎架構部負責人 。曾就職于平安銀行、萬達、惠普 , 曾負責平安銀行平臺架構部 PaaS 平臺 Halo 基礎服務框架研發(fā) 。10 多年開源經(jīng)歷,Github ID:@HaojunRen,Nepxion 開源社區(qū)創(chuàng)始人 , Nacos Group Member,Spring Cloud Alibaba & Nacos & Sentinel & OpenTracing Committer 。
參與 Nacos 落地的基礎架構部成員,包括:
  • 童子龍 , 張彬彬,廖夢鴿,張金星,胡振建 , 謝璐,謝慶芳,伊安娜
“阿里巴巴云原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規(guī)模的落地實踐 , 做最懂云原生開發(fā)者的公眾號 。”