在上节中提到,云计算服务软件根据具体情况和应用场景的不同,其开发语言及框架会有所区别。也就是说,云计算服务没有Spring Boot这样的通用基础框架,云计算服务架构的实现一般需要从零开始。
本篇的剩余部分将围绕构造一个云计算服务的通用基础框架展开介绍。一般来说,构造一个通用的基础框架需要以下3个步骤:
一个足够通用的应用场景及其解决思路。
明确需要解决的问题以及问题出现的原因。
逐一解决相关问题。
从宏观上讲,通用的云计算服务架构主要分为4个部分,即任务发布和任务回馈、任务进度或中间结果、任务变更、云计算服务软件监控。宏观的云计算服务架构如图5.7所示。其中,监控软件只能监控在同一服务器上运行的云计算服务软件,每个运行云计算服务软件的服务器都需要运行一个监控软件。
图5.7 宏观的云计算服务架构
在图5.7中,任务池、进度数据池、指令池和状态数据池是公共服务,监控软件和云计算服务软件部署在相同的服务器中。一个服务器中只有一个监控软件的进程,云计算服务软件的进程可能有多个。
云计算服务架构需要解决的问题共有4个,分别是云计算服务软件基础框架的构建、任务池与指令池的搭建及使用、进度数据池与状态数据池的搭建及使用,以及监控软件的构造。
说明:任务池与指令池都涉及消息队列,因此归为一类讲解。进度数据池与状态数据池都涉及公共的数据空间,因此归为一类讲解。
虽然云计算服务软件需要执行的任务千差万别,但是从主要功能来看,云计算服务软件的结构是类似的。云计算服务软件的主要功能包括任务获取、任务执行、定期汇报任务进度或中间结果、定期汇报运行状态以及监听并执行任务变更指令。云计算服务软件的基础结构如图5.8所示。
图5.8 云计算服务软件的基础结构
从图5.8中的基础结构可知,除了任务执行模块以外,其他模块都是不需要根据具体任务而定制的。也就是说,通过构建云计算服务软件的基础框架,可以建立云计算服务软件的基本模型,开发人员在开发新的云计算服务软件时,只需要根据具体任务修改任务执行模块即可,而通用模块是可以直接复用的。
任务池是后端应用程序发布任务和云计算服务软件领取任务的地方,其基本作用是抹平发布任务频率高而处理任务时间长的矛盾。指令池是服务于任务变更的,如取消任务、暂停任务和执行指令等,后端应用程序可以通过指令池把任务变更指令通知到执行该任务的云计算服务软件。
任务池和指令池都与消息队列相关,因此对于任务池和指令池的搭建与使用来说,只需要选用一个合适的消息队列服务并根据具体问题制定使用规则即可。
进度数据池是后端应用程序获取任务进度和云计算服务软件定期汇报任务进度的地方,状态数据池是监控软件获取云计算服务软件运行状态和云计算服务软件定期汇报其运行状态的地方。
从本质上讲,进度数据池和状态数据池都只是一片公共的数据空间,只是它们存储的数据结构有所区别而已。因此,进度数据池和状态数据池可以通过使用Redis等非关系型数据库实现。
在每个运行云计算服务软件的服务器中都需要有一个监控软件。
监控软件的任务是监控和启动云计算服务软件。监控软件会根据配置个数和当前系统资源的使用情况(如CPU和内存的使用率)判断是否启动云计算服务软件,并通过状态池监控所启动的云计算服务软件的运行状态。
如果存在超过设定的时间还没更新状态数据的云计算服务软件,则认为该云计算服务软件已发生异常(自动消亡、异常退出或发生其他异常),进而使用进程ID强制关闭该进程,如果进程早已退出,则不需要做进一步处理。
监控软件的职责是保证云计算服务软件的正常运行,而其本身也是需要保证正常运行的,它也可能会因为异常而退出。因此,监控软件的构造除了要构造监控软件,还需要找到一种方法以保证监控软件的正常运行。
下篇文章给大家讲解的内容是大型网站架构的技术细节:云计算服务软件基础框架的构建
感谢大家的支持
联系客服