Ecs实例创建接口升级-RunInstances

现在提供的ECSOpenAPI有2个实例创建接口RunInstances和CreateInstance,由于CreateInstance接口提供时间较早,因此还有有依赖该接口的调用,但是RunInstances接口其实在设计和使用便利性上其实更胜一筹。

CreateInstance的创建调用是一次非常细粒度的原子操作,只会将实例创建成功,因此对于接口使用者来说并不一定是最方便的。首先最明显的区别就是RunInstances接口的终态稳定状态是Running,这会带来多方面的影响,

调用效率提升

直接的优化就是实例从创建到启动可以工作,调用的管控接口大大减少,创建n(小于100)台实例时,之前的调用需要n次CreateInstance调用,需要至少n次StartInstance调用,而更换使用RunInstances接口后,由于支持批量创建,只需要一次接口调用即可。

CreateInstance接口创建的实例由于不去启动,所以创建过程中也是不会直接分配公网IP的(当然我们的最佳实践也不建议每台使用的实例都使用公网IP进行管理--可以使用VPC和跳板机的方式进行网络管理),如果有公网分配的需求,那么使用RunInstances接口就再方便不过了,接口的原子操作中包含了实例的公网IP分配和实例启动过程。创建成功的机器会带有公网IP,可以直接登录运维。

弹性能力的提升

其次就是创建参数中的差别,我们知道ECS的收费模式有包年包月和按量收费两种,RunInstances接口天然支持了两种收费模式(InstanceChargeType参数),同时一次请求的创建量从CreateInstance支持的单一实例创建提高支持到一次请求可以创建[1, 100]个实例(Amount参数),同时为了方便实例的批量管理,批量创建出来的实例也可以设定一套顺序的实例name(UniqueSuffix参数),所以使用RunInstances接口带来的不仅是调用方式的提升,而且更是基础设施平台的弹性能力和运维效率提升。

提到批量创建,可能会有“直接的批量创建和循环一下创建批量不是一样的”问题,其实这两种操作(CreateInstance创建多次和RunInstances创建一次)是完全不同的,单个实例的创建封装为批量操作实际是将整个操作的原子性交给了自己,就会存在创建一半以后创建失败无法处理的情况。而一次创建多个实例是将原子操作交给接口,要么全部创建成功,要么请求会直接失败,如果有比如库存不够创建需求等情况,接口会直接返回失败,可以提前知道整批实例的创建情况,也可以提早进行部署架构的调整(可用区的调整等)。同时,对于实例状态的保证,RunInstances接口会不停重试启动实例,直到启动成功或达到重试上限次数,充分保证创建出的实例均为Running状态。

对其他特性的支持,得益于RunInstances的批量创建,可以很好地支持实例启动模板功能 https://help.aliyun.com/document_detail/73916.html , 这个功能允许创建一套自定义的实例Spec(规格、网络等特性)描述,并依托RunInstances的批量创建,可以秒级扩容出一组符合定义的实例。

接口对比图

最后,放上RunInstances接口定义: https://help.aliyun.com/document_detail/63440.html , 并附上简单版本接口对比

RunInstances CreateInstance
一次请求创建量 [1, 100] 1
创建稳定终态 Running Stopped
公网IP分配模式 可以接口直接分配 不分配,需要使用AllocatePublicIpAddress接口分配
支持的创建收费类型 包年包月和按量 按量
LaunchTemplate支持

代码示例见ecs购买页面( https://ecs-buy.aliyun.com/wizard/ ),选择完参数后确认订单页的“生成Open API最佳实践脚本”。

上一篇:7大技术龙头合力为数据中心等市场推出开放式加速架构


下一篇:Spring Bean生命周期-obtainFreshBeanFactory(三)