前言
云计算架构作为一种基础设施服务几乎已经成为了现代Web开发的标配,它显著地降低了 DevOps(Development and Operations)的门槛,通过云服务商提供的管理平台,Web应用开发人员可以轻松地在云上搭建自己的系统。作为一名云时代的全栈开发工程师,了解云计算架构背后的机制可以让我们更好地利用这个强大的基础设施,在设计、开发、部署和维护应用程序时做出更明智的决策。同时云计算是互联网技术的延伸,通过学习云计算架构,可以更深入地掌握互联网基础知识,这对于个人的技术水平也是一个很大的提升。
为了对云计算有一个全面的了解,最近在读 《图解云计算架构——基础设施和API》 一书,这本书主要以OpenStack和AWS为例,通过API来重点讲解IaaS云服务的本质。下面是边读边整理的学习笔记,一方面可以随时回顾,另一方面希望通过输出来促进自己思考。
正文
服务器资源就是实例,由类型和镜像这两大要素构成。服务器一定要由一种类型和一个镜像创建,而反过来,一种类型和一个镜像可以创建多台服务器。
1. 创建虚拟服务器的API流程
在OpenStack中使用nova命令创建虚拟服务器时,它的内部处理过程是怎样的呢?
- 认证:向认证服务器发送POST请求,请求数据包含用户名和密码。成功通过认证后,认证服务器向用户返回“令牌”和“端点”信息
- 验证模板镜像:在创建阶段前提前检查模板镜像是否可用
- 创建虚拟服务器:发送创建请求,请求数据包含服务器名称、套餐、模板镜像、要接入的虚拟网络、所属的安全组等。请求成功后返回虚拟服务器的UUID(异步创建,此时实例并未真正创建出来)
- 获取已创建的虚拟服务器的状态:通过GET方法确认资源的创建状态
元数据和用户数据
对创建好的虚拟服务器进行环境配置会用到元数据和用户数据。
- 元数据:用于将信息传递给创建好的服务器,包括服务器的管理信息和用户给定的任意数据
- 用户数据:用于让服务器执行某个动作
2. 创建虚拟服务器的内部流程
前面提到OpenStack创建虚拟服务器是异步处理的,那么云平台内部是怎么处理异步创建过程的呢?
- 将创建虚拟服务器的请求存储到消息队列中:此时虚拟服务器状态是
Status: BUILDING - 将请求交给调度器:称为调度器(scheduler或controller)非进程会从消息队列中取出请求的信息,然后开始为创建虚拟服务器进行必要的准备。
- 决定在哪台主机上启动:OpenStack会将各主机的资源使用情况记录到内部的状态管理数据库中,并定期更新信息。调度器从消息队列中收到创建请求后,会根据状态管理数据库的信息选择资源充足的主机,并在上面创建虚拟服务器。如果资源紧张,找不到可用的主机,就会启动失败,虚拟服务器的状态会变成
ERROR。 - 向主机发送命令:调度器决定了要在哪台主机上启动虚拟服务器后,就会向该主机发送启动虚拟服务器的命令。这个过程也是借助消息队列发送的。
- 接收消息并创建虚拟服务器:主机从消息队列中收到了启动虚拟服务器的消息后,就会开始创建虚拟服务器。这一步还包括获取待启动的模板镜像、获取分配给虚拟服务器的IP地址等。
- 变更虚拟服务器的状态:一旦虚拟服务器启动成功,OpenStack就会将配置管理数据库中的状态改成
ACTIVE,表示创建成功。
使用消息队列的好处:
- 异步处理:使用消息队列可以实现任务的异步处理。API请求不会等待计算节点完成所有操作,而是在收到确认消息后立即返回给用户一个响应,提高了用户体验。
- 解耦合:消息队列允许不同的服务组件之间进行松散耦合。
- 负载均衡:消息队列可以在多个调度器之间分发任务,确保工作负载均匀分布,从而提高系统的整体效率和性能。
使用调度器的好处:
- 资源优化:调度器根据各个计算节点的当前资源利用率(CPU、内存、磁盘空间等)智能选择最适合启动新实例的节点,从而最大化资源利用率。
- 策略支持:调度器支持多种调度策略,可以帮助确保特定的工作负载被分配到合适的物理位置上,提升应用性能和服务质量。
3. 虚拟服务器的生命周期
stateDiagram-v2
镜像 --> 启动: Run(Create)
启动 --> 重启: Reboot
启动 --> 删除: Terminate(Delete)
启动 --> 暂停: Stop
暂停 --> 启动: Start
小结
本节以创建虚拟服务器为例讲解了如何使用API操作服务器资源,以及API内部的处理过程。创建过程是异步处理的,所以自动化处理的时候要注意检查资源的状态。