真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Nacos性能測(cè)試的示例分析

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

為蒼溪等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及蒼溪網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、蒼溪網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

背景故事

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

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

  • Eureka 介紹

Nacos性能測(cè)試的示例分析

  • Zookeeper 介紹

Nacos性能測(cè)試的示例分析

  • Consul 介紹

Nacos性能測(cè)試的示例分析

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

Nacos性能測(cè)試的示例分析

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

Nacos 測(cè)試篇

Nacos 性能測(cè)試

① Nacos Server 性能測(cè)試

開發(fā)部署了 UATNacos ,測(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ù)

Nacos性能測(cè)試的示例分析

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

Nacos性能測(cè)試的示例分析

Nacos性能測(cè)試的示例分析

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

Nacos 功能測(cè)試

① Nacos Server 接口測(cè)試

Nacos性能測(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è) EurekaA 注冊(cè) Nacos , B 注冊(cè) Eureka ,同步正常,可調(diào)用。

  • 壓力測(cè)試

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

Nacos性能測(cè)試的示例分析

  • 有無損調(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ù)

Nacos性能測(cè)試的示例分析

  • 減少 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)用。

Nacos性能測(cè)試的示例分析

  • 重啟 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ù),而且可查看詳情。

Nacos性能測(cè)試的示例分析

  • 服務(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í)例)

Nacos性能測(cè)試的示例分析

全鏈路服務(wù)部署

Nacos性能測(cè)試的示例分析

  • 自動(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 {
    @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 的普通調(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 {
    @Autowired
    private TestRestTemplate testRestTemplate;

    @DTest
    public void testNoGray(String testUrl) {
        int noRepeatCount = 0;
        List resultList = new ArrayList();
        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 {
    @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);
        }
    }
}

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




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



    
        1.0
    
  • 基于 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 不僅性能好,而且界面簡(jiǎn)潔,這樣的注冊(cè)中心你值得擁有。

以上是“Nacos性能測(cè)試的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


本文名稱:Nacos性能測(cè)試的示例分析
網(wǎng)站網(wǎng)址:http://weahome.cn/article/jjjphh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部