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();
    }

}

目录
相关文章
|
弹性计算 监控 网络协议
ecs资源监控操作
监控阿里云ECS服务器资源分为7步:登录阿里云控制台,进入ECS管理界面,选择要监控的实例,查看基础监控数据,通过云监控服务获取详细图表、配置报警规则,可选安装云监控插件获取OS级数据,最后定期审查优化资源配置。通过这些步骤,确保系统稳定运行并及时处理问题。如需帮助,参考官方文档或联系阿里云支持。
535 3
|
安全 网络安全 网络虚拟化
OCSP
OCSP
568 5
|
数据采集 存储 Web App开发
利用Python 的爬虫技术淘宝天猫销量和库存
使用 Python 爬虫技术获取淘宝天猫商品销量和库存的步骤包括:1. 安装 Python 和相关库(如 selenium、pandas),下载浏览器驱动;2. 使用 selenium 登录淘宝或天猫;3. 访问商品页面,分析网页结构,提取销量和库存信息;4. 处理和存储数据。注意网页结构可能变化,需遵守法律法规。
|
网络安全 数据安全/隐私保护 网络架构
ABCDE类网络的划分及保留网段
ABCDE类网络的划分及保留网段
4568 7
|
弹性计算 运维 对象存储
如何把阿里云ECS里的文件下载到本地(免登录免配置)
阿里云推出新功能,无需安装额外工具、不需ECS开通公网或登录ECS,仅通过控制台即可将ECS中的文件轻松下载至本地。只需开通OSS对象存储服务,按步骤创建任务,获取临时下载链接,即可在浏览器中直接下载文件。操作简便快捷,适合频繁需要从ECS下载文件的用户。
|
存储 NoSQL 固态存储
阿里云服务器云盘选择参考,ESSD Entry云盘和Entry云盘区别
在我们选择阿里云服务器系统盘和数据盘的时候,有部分云服务器同时支持ESSD Entry云盘和ESSD云盘,对于部分初次接触阿里云服务器的用户来说,可能并不是很清楚他们之间的区别,因此不知道选择哪种更好更能满足自己场景的需求,本文为大家介绍一下阿里云服务器ESSD Entry云盘和ESSD云盘的区别及选择参考。
|
前端开发 Java C++
超简单使用Vite+Vue3构建共享开发和分模块打包的前端项目
使用Vite和Vue3构建支持共享组件和分模块独立打包的前端项目的方法。
1473 0
超简单使用Vite+Vue3构建共享开发和分模块打包的前端项目
|
测试技术 Linux Android开发
i2c总线及设备测试工具i2ctools:i2cdetect、i2cdump、i2cget、i2cset
本文介绍了i2ctools工具集的使用,包括i2cdetect、i2cdump、i2cget和i2cset,这些工具有助于I2C设备的开发和调试,通过检测设备、读写寄存器和数据块来提高开发效率。
3477 1
|
弹性计算 JSON 开发工具
"一键玩转阿里云ECS!Python大神揭秘:如何自动化创建镜像并跨地域复制,让你的云资源部署秒变高效达人!"
【8月更文挑战第14天】本文介绍如何使用Python与阿里云SDK自动化管理ECS镜像,包括创建镜像及跨地域复制,以优化云资源部署。首先安装`aliyun-python-sdk-ecs`并配置阿里云凭证。接着,通过Python脚本实现镜像创建与复制功能,简化日常运维工作并增强灾难恢复能力。注意权限及费用问题。
345 2
|
存储 弹性计算 运维
阿里云经济型e实例详细介绍_性能测试_使用限制说明
阿里云服务器ECS推出经济型e系列,经济型e实例是阿里云面向个人开发者、学生、小微企业,在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器,CPU采用Intel Xeon Platinum架构处理器