久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Nacos性能測試的示例分析

169次閱讀
沒有評論

共計 6627 個字符,預計需要花費 17 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 Nacos 性能測試的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

背景故事

基礎架構部選擇新的注冊中心,測試組需要配合對業界成熟的注冊中心產品做分析和比較。由于掌門教育采用的是比較純凈的 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,測試親自壓測。

核心腳本

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)

壓測數據

壓測結果圖

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 算法虛擬節點數,務必和原有的保持一致,不然會出現同步失敗,影響跨注冊中心調用。

Nacos 性能測試的示例分析

重啟 Sync Server

增加 Sync Server 個數,重啟 Sync Server,各節點同步數重新計算且均衡。

③ Nacos Client 功能測試

Nacos Client 界面重點測試集群管理,服務列表和權限控制。

Nacos Server 重啟后,集群管理界面正常展示 3 臺集群節點 IP。

服務注冊 Nacos Server 后,服務列表新增注冊上去的服務名和實例個數,而且可查看詳情。

Nacos 性能測試的示例分析

服務上下線操作,健康狀態和元數據等展示正常。

編輯,刪除等操作只有具備 Admin 權限的人員才可操作。

④ Nacos Client 自動化測試

自動化測試鏈路

全鏈路測試路徑

API 網關  -   服務 A(兩個實例) -   服務 B(兩個實例)

Nacos 性能測試的示例分析

全鏈路服務部署

Nacos 性能測試的示例分析

自動化測試入口

結合 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 {
 @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);
 }
}
@Configuration
public class MyTestConfiguration {
 @Bean
 public 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 {
 @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 的灰度藍綠調用自動化測試

在測試方法上面增加注解 @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 {
 @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]
* Passed

Nacos 測試總結

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

以上是“Nacos 性能測試的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計6627字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 伊川县| 平乐县| 五华县| 高要市| 万安县| 霞浦县| 安龙县| 连州市| 北碚区| 渝中区| 札达县| 金山区| 西畴县| 扬州市| 沁源县| 余姚市| 寿宁县| 特克斯县| 井冈山市| 永顺县| 清新县| 汉川市| 攀枝花市| 叶城县| 肥东县| 濮阳县| 黄浦区| 五台县| 汽车| 山阴县| 宁陵县| 阜新市| 无棣县| 平邑县| 汪清县| 吴川市| 江源县| 和政县| 二连浩特市| 河津市| 万山特区|