10年程序员了竟然不懂大型网站架构技术细节:云计算服务工作原理

简介: 云计算服务的工作原理在讨论云计算服务架构之前,先介绍云计算服务的应用场景,然后介绍其开发语言及框架,之后再讲解云计算服务的工作原理。在了解了云计算服务的工作原理之后,我们才能更好地理解云计算服务架构需要关注的细节。

云计算服务的工作原理

在讨论云计算服务架构之前,先介绍云计算服务的应用场景,然后介绍其开发语言及框架,之后再讲解云计算服务的工作原理。在了解了云计算服务的工作原理之后,我们才能更好地理解云计算服务架构需要关注的细节。

云计算服务的应用场景

云计算服务一般是运行时间较长或者需要持续运行的软件,如视频转码服务、爬虫服务和数据分析服务等。也就是说,云计算服务提供的是网站系统的云计算能力。云计算服务的应用场景众多,根据网站系统的服务对象和所在领域不同会有所不同。

那么,为什么云计算服务需要和后端应用程序分离呢?这是因为后端应用程序处理的是频繁且生命周期较短的请求,而云计算服务是需要长时间运行的,如果后端应用程序运行时间过长,就会造成请求超时和Web应用服务器线程阻塞等问题。例如,前端发送一个视频转码请求到后端应用程序,后端应用程序接收到该请求后,会开启云计算服务的视频转码服务并返回结果,而云计算服务的转码服务会持续执行一段时间,如图5.1所示。

网络异常,图片无法展示
|

图5.1 视频转码任务的调度流程

云计算开发语言及其框架

由于云计算服务软件应用场景众多,且不同开发语言的擅长领域有所区别,所以云计算服务软件的开发语言是不固定的。例如,人工智能方向的云计算服务软件一般是使用Python编写的,大数据方向的云计算服务软件一般是使用Java或Python编写的,音视频方向的云计算服务软件一般是使用C++编写的。

至于云计算服务软件的框架,也是不统一的,一般是开发团队根据实际情况搭建的。搭建云计算服务软件框架需要考虑很多问题,如任务调度、异常重试、弹性伸缩和任务进程管理等,这些问题都需要长时间的验证和试错,这无疑会增加自建云计算服务的难度。不过,一套稳定的云计算服务软件框架,无疑会成为大型网站系统的强大后盾。

注意:如果云计算服务与海量数据分析相关,那么可以使用现今比较流行的Hadoop框架。然而本章介绍的是通用的云计算服务,因此不会对Hadoop展开介绍。

云计算服务软件的工作原理

通过5.1.1小节的学习可知,后端应用程序与云计算服务软件是相互独立的,且一般是多对多的关系,如图5.2所示。其中,应用程序1到应用程序4指的是相同的后端应用程序,它们部署在不同的服务器上,服务软件1到服务软件4指的是相同的云计算服务软件,它们可能部署在一个或多个服务器上。一般情况下,同一时间内,一个云计算服务软件一次只能处理一个任务。

网络异常,图片无法展示
|

图5.2 后端应用程序与云计算服务软件的多对多关系

说明:图5.2中的应用程序1到应用程序4指的是相同的后端应用程序。

因为在大型网站系统中,后端应用程序需要处理大量的请求,而单个服务器的处理能力有限,所以相同的后端应用程序会被部署在多个服务器上。

在了解了后端应用程序和云计算服务软件的关系后,下面开始介绍云计算服务的工作原理。云计算服务按任务的生命周期和云计算服务软件的稳定性可以分成任务发布和任务回馈、任务进度或中间结果、任务变更、云计算服务软件监控4个部分。

注意:以下介绍的云计算服务软件的工作原理是基于通用场景介绍的,具体实践可能会有所差异,读者需要根据实际情况斟酌参考。

1.任务发布和任务回馈

由于后端应用程序和云计算服务是多对多的关系,而且云计算服务执行一次任务一般需要较长的时间,即任务发布时可能没有空闲的云计算服务软件(存在任务无法立刻被执行的情况),所以需要在后端应用程序与云计算服务之间添加一个任务池,作为后端应用程序和云计算服务间接通信的枢纽。

任务发布时,后端应用程序生成唯一的任务ID,然后把任务发布到任务池中,并把任务标记为“等待”状态,且将状态记录在数据库中(也可以记录在Redis等非关系型数据库中)。多个空闲的云计算服务软件会在任务池中监听任务,一个任务只会被一个云计算服务软件占有。一个云计算服务软件取得任务后,开始执行任务并通知后端应用程序“任务开始执行”,后端应用程序把任务状态改为“开始”。

任务处理完毕后或发生异常时,云计算服务软件向后端应用程序回馈结果,回馈的结果包括错误码及其描述,以及任务结果参数等。后端应用程序把任务状态改为“结束”,并把错误码及其描述以及任务结果参数记录下来。

任务发布和任务回馈的流程如图5.3所示。其中,云计算服务通知后端应用程序的方式一般是直接调用后端应用程序提供的RESTful API。

网络异常,图片无法展示
|

图5.3 任务发布和任务回馈流程

2.任务进度或中间结果

在任务执行期间,前端往往需要获取任务进度或一些中间结果,以视频转码为例,前端需要获取视频文件的转码进度。而获取任务进度或中间结果的最直接方法,应该是前端向后端应用程序发送请求,后端应用程序从云计算服务获取任务进度或中间结果。

但是,由于后端应用程序和云计算服务是多对多的关系,后端应用程序直接从云计算服务获取任务进度或中间结果的做法实际上是十分烦琐的,所以需要在后端应用程序与云计算服务之间添加一个进度数据池,作为后端应用程序和云计算服务间接通信的枢纽。

任务开始后,云计算服务软件定期向进度数据池更新任务进度或中间结果,后端应用程序根据任务ID从进度数据池中获取对应任务的进度或中间结果,如图5.4所示。

网络异常,图片无法展示
|

图5.4 任务进度或中间结果获取流程

3.任务变更

在执行任务期间,云计算服务还需要处理任务的变更,例如取消任务、暂停任务、设置变更和执行指令等。当发生任务变更时,后端应用程序需要通知正在执行该任务的云计算服务软件。为了实现这样的目的,需要在后端应用程序与云计算服务软件之间增加一个指令池。

每个云计算服务软件在初始化时都需要向指令池注册一个独有的消息队列并监听该消息队列。当开始执行任务时,云计算服务软件在通知后端应用程序“任务开始执行”时需要携带指令池中的消息队列标识,后端应用程序需要把消息队列标识记录到数据库中(也可以记录到Redis等非关系型数据库中)。

当需要执行任务变更时,云计算服务软件根据消息队列标识向指令池发送任务指令,云计算服务软件从指令池中获取任务指令后开始执行任务指令。任务变更流程如图5.5所示。

网络异常,图片无法展示
|

图5.5 任务变更流程

4.云计算服务软件监控

加入了任务池、进度数据池和指令池后,云计算服务软件就可以顺利地执行任务。由于一个云计算服务软件在同一时间只能处理一个任务,因此在一个服务器当中存在多个同时运行的云计算服务软件。这些云计算服务软件是独立运行的,运行的过程中可能会发生意想不到的错误、崩溃和异常退出等情况,当出现这些问题时,云计算服务软件需要被重新启动。

说明:当云计算服务软件出现错误、崩溃和异常退出等情况时,当然是需要被修复的。但是这些问题往往是在正式运营后才会逐渐浮现出来的,而且这些问题往往需要特殊的条件才能触发(一般情况下不会发生)。因此,如果云计算服务软件异常退出后可以重新启动,则大概率能降低该特殊情况造成的影响。因此,在每个运行云计算服务软件的服务器中都需要一个监控软件,其职责为监控和启动云计算服务软件。在服务器开机启动时,监控软件会按配置启动几个云计算服务软件并记录其进程ID。云计算服务软件在运行过程中,需要定时向监控软件汇报当前状态(运行或空闲状态)。

由于云计算服务软件和监控软件是相互独立的,所以在它们之间需要加入一个状态数据池。云计算服务软件向监控软件汇报当前状态时,只需要向状态数据池写入其状态即可。监控软件检查云计算服务软件的状态时,也只需要读取状态数据池中的相关数据即可。

监控软件定时检查各个云计算服务软件的状态,若存在长时间未汇报的云计算服务软件,则判定为该软件已经发生异常。当发现异常的云计算服务软件时,监控软件凭借进程ID将其销毁(存在异常软件已经自动退出的情况),并启动新的云计算服务软件。另外,当所有的云计算服务软件处于运行状态时(执行任务时),监控软件根据具体情况(当前CPU和内存的使用率、配置的最大云计算服务软件个数),决定是否启动新的云计算服务软件。

另外,一个云计算服务软件在执行完几次任务后需要自动退出,不可长时间运行。云计算服务软件自动退出后,由于其不再向状态数据池更新状态,监控软件会认为该软件发生了异常,进而启动一个新的云计算服务软件。

云计算服务软件的自动消亡和重启,可以避免一些由于长时间运行而造成的问题,如内存泄漏等。一般情况下,软件需要经过长年累月的测试与修复,才能达到长时间稳定运行的程度(如Tomcat)。但是,即使是这些稳定的软件,也难免会受到操作系统或某些物理因素的影响而发生异常。而一般的云计算服务软件,其实只需要保证一个或几个任务周期内顺利运行即可,无须保证长时间运行的稳定性。

通过自动消亡和重启云计算服务软件,可以规避一些稳定性的问题,也能节省一些开发成本。

综上,在一个服务器内,监控软件与云计算服务的工作流程如图5.6所示。其中,由于监控软件也可能存在异常退出的情况,所以监控软件也应该被监控。对于监控软件的监控将会在5.6节“监控软件的构造”中详细介绍。

网络异常,图片无法展示
|

图5.6 监控软件与云计算服务的工作流程

本文给大家讲解的内容是大型网站架构的技术细节:云计算服务的工作原理

  1. 下篇文章给大家讲解的内容是大型网站架构的技术细节:云计算服务架构需要解决的问题
  2. 感谢大家的支持
相关文章
|
17天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
15天前
|
存储 分布式计算 关系型数据库
架构/技术框架调研
本文介绍了微服务间事务处理、调用、大数据处理、分库分表、大文本存储及数据缓存的最优解决方案。重点讨论了Seata、Dubbo、Hadoop生态系统、MyCat、ShardingSphere、对象存储服务和Redis等技术,提供了详细的原理、应用场景和优缺点分析。
|
2天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
随着云计算技术的飞速发展,越来越多的企业和个人开始使用云服务。然而,云计算的广泛应用也带来了一系列网络安全问题。本文将从云服务、网络安全、信息安全等方面探讨云计算与网络安全的关系,分析当前面临的挑战,并提出相应的解决方案。
18 3
|
12天前
|
监控 安全 网络安全
云计算与网络安全:探索云服务中的信息安全技术
【10月更文挑战第43天】本文将深入探讨云计算与网络安全的交汇点,重点分析云服务中的信息安全技术和策略。我们将从云计算的基础架构出发,逐步剖析网络安全的重要性,并介绍如何通过实施有效的安全措施来保护数据和应用程序。文章还将提供实用的代码示例,帮助读者更好地理解和应用这些安全技术。
28 4
|
14天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域
【10月更文挑战第40天】随着互联网技术的不断发展,云计算已经成为了现代社会中不可或缺的一部分。然而,云计算的普及也带来了一系列的安全问题。本文将探讨云计算与网络安全之间的关系,包括云服务、网络安全、信息安全等领域。我们将通过代码示例来展示如何保护云计算环境中的敏感信息和数据。最后,我们将总结云计算与网络安全之间的紧密联系,并展望未来的发展趋势。
|
15天前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
67 4
|
16天前
|
云安全 安全 网络安全
云计算与网络安全:技术挑战与解决策略
【10月更文挑战第39天】随着云计算技术的飞速发展,网络安全问题也日益凸显。本文将探讨云计算环境下的网络安全挑战,并提出相应的解决策略。通过分析云服务模型、网络安全威胁以及信息安全技术的应用,我们将揭示如何构建一个安全的云计算环境。
|
17天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用架构中的实践与思考
【10月更文挑战第38天】随着云计算的不断成熟和演进,云原生(Cloud-Native)已成为推动企业数字化转型的重要力量。本文从云原生的基本概念出发,深入探讨了其在现代应用架构中的实际应用,并结合代码示例,展示了云原生技术如何优化资源管理、提升系统弹性和加速开发流程。通过分析云原生的优势与面临的挑战,本文旨在为读者提供一份云原生转型的指南和启示。
31 3
|
17天前
|
云安全 安全 网络安全
云计算与网络安全:技术融合的未来之路
【10月更文挑战第38天】 在数字化浪潮中,云计算和网络安全成为支撑现代企业和个人数据安全的两大基石。本文将深入探讨云计算服务如何与网络安全技术相结合,保障信息安全,并分析面临的挑战及未来发展趋势。我们将通过实际案例,揭示云安全的最佳实践,为读者提供一条清晰的技术融合路径。
|
15天前
|
安全 持续交付 云计算
揭秘云计算中的容器化技术及其优势
揭秘云计算中的容器化技术及其优势
23 1