DescribeInstanceTypes最佳实践

简介: 背景您在阿里云云服务器ECS的选型过程中,可以参考选型最佳实践,其中对比实例性能时,可以调用DescribeInstanceTypes API获取最新的规格性能参数。当前ECS实例规格数量越来越多,为保证查询时可以获得符合条件的所有规格,及避免调用时触发限流,强烈推荐您使用分页查询的方式调用。关于DescribeInstanceTypes API的接口文档可以参考DescribeInstanceT

背景

您在阿里云云服务器ECS的选型过程中,可以参考选型最佳实践,其中对比实例性能时,可以调用DescribeInstanceTypes API获取最新的规格性能参数。

当前ECS实例规格数量越来越多,为保证查询时可以获得符合条件的所有规格,及避免调用时触发限流,强烈推荐您使用分页查询的方式调用。

关于DescribeInstanceTypes API的接口文档可以参考DescribeInstanceTypes

推荐方式

  • 采用分页查询:查询非首页时,将上页返回的 NextToken值作为请求参数
  • 设置 MaxResults以限制返回信息的条目数,推荐设置 MaxResults100及以下(当前最大为1600,后续最大值将只支持100)
  • 尽可能指定过滤条件,如设置 InstanceTypeFamily指定实例规格所属的实例规格族,或设置 InstanceTypes指定查询的实例规格。

示例代码

需求举例:查询期望最小vCPU内核的数目为4,期望最小内存为8GiB的规格,示例代码中进行了分页查询,每次查询的MaxResults设置为100,并将查询结果进行整合。

package com.example.demo;


import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.ecs20140526.models.*;
import com.aliyun.sdk.service.ecs20140526.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;
import org.apache.commons.lang3.StringUtils;

//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;

public class DescribeInstanceTypes {
    public static void main(String[] args) throws Exception {

        // HttpClient Configuration
        /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                .maxConnections(128) // Set the connection pool size
                .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                // Configure the proxy
                .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
                        .setCredentials("<your-proxy-username>", "<your-proxy-password>"))
                // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                .x509TrustManagers(new X509TrustManager[]{})
                .keyManagers(new KeyManager[]{})
                .ignoreSSL(false)
                .build();*/

        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                .accessKeyId("<your-accessKeyId>")
                .accessKeySecret("<your-accessKeySecret>")
                //.securityToken("<your-token>") // use STS token
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-zhangjiakou") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("ecs.cn-zhangjiakou.aliyuncs.com")
                        //.setReadTimeout(Duration.ofSeconds(30))
                )
                .build();

        List<DescribeInstanceTypesResponseBody.InstanceType> results = new ArrayList<>();
        // Parameter settings for API request
        DescribeInstanceTypesRequest describeInstanceTypesRequest = DescribeInstanceTypesRequest.builder()
                .minimumCpuCoreCount(4)
                .minimumMemorySize(8F)
                .maxResults(100L)
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();
        
        List<DescribeInstanceTypesResponseBody.InstanceType> results = new ArrayList<>();
        // Parameter settings for API request
        DescribeInstanceTypesRequest describeInstanceTypesRequest;
        // Asynchronously get the return value of the API request
        CompletableFuture<DescribeInstanceTypesResponse> response;
        // Synchronously get the return value of the API request
        DescribeInstanceTypesResponse resp;
        String nextToken = null;
        do {
            describeInstanceTypesRequest = DescribeInstanceTypesRequest.builder()
                    .minimumCpuCoreCount(4)
                    .minimumMemorySize(8F)
                    .maxResults(100L)
                    .nextToken(nextToken)
                    .build();
            response = client.describeInstanceTypes(describeInstanceTypesRequest);
            resp = response.get();
            nextToken = resp.getBody().getNextToken();
            results.addAll(resp.getBody().getInstanceTypes().getInstanceType());
        } while (StringUtils.isNotEmpty(nextToken));
            
        System.out.println(new Gson().toJson(results));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/

        // Finally, close the client
        client.close();
    }

}

目录
相关文章
|
3月前
|
存储 JavaScript 前端开发
基础与最佳实践
【8月更文挑战第30天】
36 5
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
|
数据处理 C#
【C#编程最佳实践 三】接口使用实践
【C#编程最佳实践 三】接口使用实践
83 0
【C#编程最佳实践 三】接口使用实践
|
SQL 弹性计算 监控
《阿里云可观测最佳实践》——2.叫叫阅读(上)
《阿里云可观测最佳实践》——2.叫叫阅读(上)
255 0
|
运维 监控
《阿里云可观测最佳实践》——2.叫叫阅读(下)
《阿里云可观测最佳实践》——2.叫叫阅读(下)
159 0
|
弹性计算 运维 监控
【最佳实践】《微服务架构日志采集运维管理》手把手实操步骤与常见问题
根据阿里云《微服务架构日志采集运维管理》最佳实践文档实践步骤复现应用搭建的过程,同时总结归纳部分在应用搭载过程中遇见的问题与解决方案。
|
IDE Java 程序员
C++开发环境最佳实践
C++开发环境最佳实践
567 0
C++开发环境最佳实践
|
存储 Unix 编译器
C++ 最佳实践 | 1. 工具
C++ 最佳实践 | 1. 工具
409 0
|
存储 监控 NoSQL
操作的最佳实践
操作的最佳实践
117 0
|
SQL 测试技术 数据库
最佳实践—如何支持热点更新场景
背景介绍 数据库中更新的模式为lock -&gt; update -&gt; unlock,当对数据库中的同一条记录有大量修改请求时,会造成大量的锁争抢与锁等待。请求量增加会导致TPS下降,延迟飙升。例如,秒杀场景中对于商品库存的扣减。 您可以选择在数据库内核中进行批处理,即对该条记录进行的更新操作使用组提交,更新的模式更改为lock-&gt; group update -&gt; unlock,从而减少锁争抢。结合流水线处理等优化,可以大大提高该场景的TPS,详情可见测试结果。
136 0