掌门教育微服务体系 Solar 第 3 弹:Nacos 企业级落地下篇
聯席作者:謝璐 謝慶芳 伊安娜 任浩軍
鄭重鳴謝:Nacos - 彥林,Spring Cloud Alibaba - 小馬哥、洛夜,Nacos 社區 - 張龍(pader)、春少(chuntaojun)
相關文章推薦:
- 掌門教育微服務體系 Solar | 阿里巴巴 Nacos 企業級落地上篇
- 掌門教育微服務體系 Solar | 阿里巴巴 Nacos 企業級落地中篇
前言
在高速發展的時候,公司規模越來越大,老師人數越來越多,這時候公司不能鋪太多人去做運營與服務,必須提高每個人效,這就需要技術驅動。因此掌門教育轉變成一家技術驅動型的公司,如果被迫成為一家靠資金驅動的公司就活不下去了。
– 張翼(掌門教育創始人兼CEO)
掌門教育自2014年正式轉型在線教育以來,秉承“讓教育共享智能,讓學習高效快樂”的宗旨和愿景,經歷云計算、大數據、人工智能、 AR / VR / MR 以及現今最火的 5G ,一直堅持用科技賦能教育。掌門教育的業務近幾年得到了快速發展,特別是今年的疫情,使在線教育成為了新的風口,也給掌門教育新的機遇。
隨著業務規模進一步擴大,流量進一步暴增,微服務數目進一步增長,使老的微服務體系所采用的注冊中心 Eureka 不堪重負,同時 Spring Cloud 體系已經演進到第二代,第一代的 Eureka 注冊中心已經不大適合現在的業務邏輯和規模,同時它目前被 Spring Cloud 官方置于維護模式,將不再向前發展。如何選擇一個更為優秀和適用的注冊中心,這個課題就擺在了掌門人的面前。經過對 Alibaba Nacos 、HashiCorp Consul等開源注冊中心做了深入的調研和比較,最終選定 Alibaba Nacos 做微服務體系 Solar 中的新注冊中心。
背景故事
基礎架構部選擇新的注冊中心,測試組需要配合對業界成熟的注冊中心產品做分析和比較。由于掌門教育采用的是比較純凈的 Spring Cloud 技術棧,所以我們需要圍繞它的注冊中心,從測試角度,進行功能和性能上研究。
Spring Cloud 技術棧官方支持 Netflix Eureka ,HashiCorp Consul ,Zookeeper 三個注冊中心,它們可以相互間實現無縫遷移,Alibaba Nacos 是新加盟 Spring Cloud 技術棧的新成員。測試組的同學們對上述四個注冊中心做了一一研究和分析,鑒于時間緊迫,除了 Eureka 和 Nacos 之外,其它兩個中間件未做深入的功能測試和性能測試。下面提供來自阿里巴巴 Nacos 官方某次業界宣講的資料截圖以供大家參考:
- Eureka 介紹
- Zookeeper 介紹
- Consul 介紹
- 上述三個注冊中心比較
本文將圍繞 Alibaba Nacos 著重針對其功能測試和性能測試兩方面進行剖析和介紹。
Nacos 測試篇
Nacos 性能測試
① Nacos Server 性能測試
開發部署了 UAT 的 Nacos ,測試親自壓測。
- 核心腳本
- 壓測數據
- 壓測結果圖
Nacos Server 是3臺 1C4G 集群,同時承受1499個服務和12715個實例注冊,而且 CPU 和內存長期保持在一個合適的范圍內,果真 Nacos 性能是相當 OK 的。
Nacos 功能測試
① Nacos Server 接口測試
更多更詳 API 請參見 Nacos 官方文檔: Open API 指南
https://nacos.io/zh-cn/docs/open-api.html
② Nacos Eureka Sync 測試
- 交叉注冊
網關,服務 A ,服務 B 各10臺實例,網關注冊 Eureka , A 注冊 Nacos , B 注冊 Eureka ,同步正常,可調用。
- 壓力測試
請求大于100萬次,查看 Sync Server 會不會受到影響,結果 ErrorRequest = 0,同步服務數和實例數沒有變化。
- 有無損調用
網關 Sync Server 掛掉,網關服務 Eureka 同步 Nacos 失敗,不影響網關 -> A -> B 調用。
- 自動創建同步
發布系統第一次發布應用到 Eureka / Nacos ,會自動創建 Eureka -> Nacos 的同步任務或 Nacos -> Eureka 的同步任務
- 減少 Sync Server
Sync Server 4C8G ,停止機器,逐臺遞減,結論:平均1臺 4C8G 機器最大可同步100個服務。
- 增加 Sync Server
2臺 Etcd 節點,停機一臺,Etcd 讀取超時,結論:600個服務至少2臺 Etcd 節點,這里重點強調,新增服務時, Hash 算法虛擬節點數,務必和原有的保持一致,不然會出現同步失敗,影響跨注冊中心調用。
- 重啟 Sync Server
增加 Sync Server 個數,重啟 Sync Server ,各節點同步數重新計算且均衡。
③ Nacos Client 功能測試
Nacos Client 界面重點測試集群管理,服務列表和權限控制。
- Nacos Server 重啟后,集群管理界面正常展示3臺集群節點 IP 。
- 服務注冊 Nacos Server 后,服務列表新增注冊上去的服務名和實例個數,而且可查看詳情。
- 服務上下線操作,健康狀態和元數據等展示正常。
- 編輯,刪除等操作只有具備 Admin 權限的人員才可操作。
④ Nacos Client 自動化測試
- 自動化測試鏈路
全鏈路測試路徑
API網關 -> 服務A(兩個實例) -> 服務B(兩個實例)全鏈路服務部署
- 自動化測試入口
結合 Spring Boot Junit , TestApplication.class 為測試框架內置應用啟動程序, MyTestConfiguration 用于初始化所有測試用例類。在測試方法上面加入 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 的普通調用自動化測試
在測試方法上面增加注解 @DTest ,通過斷言 Assert 來判斷測試結果。注解 @DTest 內容如下:
@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 的灰度藍綠調用自動化測試
在測試方法上面增加注解 @DTestConfig ,通過斷言 Assert 來判斷測試結果。注解 DTestConfig 注解內容如下:
@Target({ ElementType.METHOD, ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface DTestConfig {// 組名String group();// 服務名String serviceId();// 組名-服務名組合鍵值的前綴String prefix() default StringUtils.EMPTY;// 組名-服務名組合鍵值的后綴String suffix() default StringUtils.EMPTY;// 執行配置的文件路徑。測試用例運行前,會把該文件里的內容推送到遠程配置中心或者服務String executePath();// 重置配置的文件路徑。測試用例運行后,會把該文件里的內容推送到遠程配置中心或者服務。該文件內容是最初的默認配置// 如果該注解屬性為空,則直接刪除從配置中心刪除組名-服務名組合鍵值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);}} }初始默認無灰度藍綠的配置文件 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 的自動化測試報告樣例
Nacos 測試總結
Nacos 不僅性能好,而且界面簡潔,這樣的注冊中心你值得擁有。
作者介紹
- 吳毅挺,掌門技術副總裁,負責技術中臺和少兒技術團隊。曾就職于百度、eBay 、攜程,曾任攜程高級研發總監,負責從零打造攜程私有云、容器云、桌面云和 PaaS 平臺。
- 任浩軍,掌門基礎架構部負責人。曾就職于平安銀行、萬達、惠普,曾負責平安銀行平臺架構部 PaaS 平臺 Halo 基礎服務框架研發。10 多年開源經歷,Github ID:@HaojunRen,Nepxion 開源社區創始人,Nacos Group Member,Spring Cloud Alibaba & Nacos & Sentinel & OpenTracing Committer。
參與 Nacos 落地的基礎架構部成員,包括:
- 童子龍,張彬彬,廖夢鴿,張金星,胡振建,謝璐,謝慶芳,伊安娜
“阿里巴巴云原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的公眾號。”
總結
以上是生活随笔為你收集整理的掌门教育微服务体系 Solar 第 3 弹:Nacos 企业级落地下篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 灵魂拷问,上 Kubernetes 有什
- 下一篇: 阿里张磊:如何构建以应用为中心的“Kub