Azure架构设计之选择合适的计算服务
计算资源,网络资源,存储资源三大要素构成了我们所熟知的IT世界。传统本地自建业务系统的时候,用户只需要购买对应的硬件即可,例如CPU、内存、硬盘。但是在当今的”云时代”,三大资源的使用并不是直接采购而获得,需要租用云端计算服务实现。今天主要就Azure云端计算资源做一个介绍。
IaaS、PaaS、SaaS是云端平台的三大服务模型,所以我们今天谈到的计算资源指的是Infrastructure-as-a-Service(IaaS)。
目前Microsoft Azure平台提供了一系列计算资源供用户选择:
- 虚拟机,允许在虚拟网络 (VNet) 内部署和管理VM,构建类似本地业务系统架构的服务器。
- 应用服务是托管型PaaS产品/服务,用于托管Web应用、移动应用后端、RESTful API或自动化业务流程。
- Service Fabric是可在多个环境(包括 Azure 或本地环境)中运行的分布式系统平台。Service Fabric是跨计算机群集的微服务业务流程协调程序。
- Azure容器服务使用户可以创建、配置和管理预配为运行容器化应用程序的VM 群集。
- Azure容器实例提供了在Azure中运行容器的最简捷方式,既无需预配任何虚拟机,也不必采用更高级的服务。
- Azure Functions是托管FaaS服务。借助功能即服务(Functions-as-a-Service,简称 FaaS),用户更不需要担心运行在何总计算环境。只需部署代码,服务便会自动运行它,而无需创建计算实例并向其部署代码。无需管理计算资源。这些服务使用无服务器体系结构,并且无缝地纵向扩展或减少到处理流量所需的级别。
- Azure Batch是一个托管服务,适用于运行大规模并行和高性能计算 (HPC) 应用程序。
- 云服务是用于运行云应用程序的托管服务。 它使用PaaS承载模型。
因此,我们要考虑:
- 业务系统承载模型。服务承载方式是什么?此承载环境具有哪些要求和限制?
- DevOps。是否存在用于应用程序升级的内置支持?部署模型是什么?
- 可伸缩性。服务如何处理实例的添加或删除?是否能基于业务负载和其他指标自动缩放?
- 可用性。选择的计算资源SLA是多少?
- 成本。除了服务本身的成本,还要考虑管理在该服务上构建的解决方案的操作成本。例如,IaaS VM解决方案的操作成本可能更高。
- 每项服务的总体限制有哪些?
- 哪类业务系统架构适用于此服务?
如下流程图是一个很好的范例,该流程图能够帮助我们选择合适的计算服务。
以下是整理好的,用于帮助大家快速查询的选择Azure计算服务的条件
托管实例模型
条件 |
虚拟机 |
应用服务 |
Service Fabric |
Azure Functions |
Azure Kubernetes Service |
容器实例 |
Azure Batch |
应用程序组合 |
不可知 |
应用程序、容器 |
服务、来宾可执行文件、容器 |
函数 |
容器 |
容器 |
计划的作业 |
密度 |
不可知 |
每个实例多个应用(遵循应用服务计划) |
每个 VM 多个服务 |
无服务器 (如果使用消耗计划。如果使用应用服务计划,Functions 在为应用服务计划分配的 VM 上运行) |
一个节点多个容器 |
无专用实例 |
每个VM多个应用 |
最小节点数 |
1(具有两个或多个实例的更高版本SLA。) |
1 |
5(建议用于生产环境) |
无服务器 (如果使用消耗计划。如果使用应用服务计划,Functions 在为应用服务计划分配的 VM 上运行) |
3(建议用于生产环境) |
无专节点 |
1(作业完成后可以缩小至零。) |
状态管理 |
无状态或有状态 |
无状态 |
无状态或有状态 |
无状态 |
无状态或有状态 |
无状态 |
无状态 |
Web托管 |
不可知 |
内置 |
不可知 |
不适用 |
不可知 |
不可知 |
否 |
是否可部署到专用 VNet? |
支持 |
支持(需要应用服务环境 (ASE)) |
支持 |
受支持(需要应用服务环境 (ASE)) |
支持 |
不支持 |
支持 |
混合云连接 |
支持 |
受支持(使用Azure应用服务混合连接) |
支持 |
受支持(需要应用服务计划) |
支持 |
不支持 |
支持 |
DevOps
条件 |
虚拟机 |
应用服务 |
Service Fabric |
Azure Functions |
Azure Kubernetes Service |
容器实例 |
Azure Batch |
本地调试 |
不可知 |
IIS Express for ASP.NET 或 node.js (iisnode);PHP web 服务器;Azure Toolkit for IntelliJ,Azure Toolkit for Eclipse |
本地节点群集 |
Visual Studio或Azure Functions CLI |
Minikube、其他 |
本地容器运行时 |
不支持 |
编程模型 |
不可知 |
Web和API应用程序、后台任务的WebJobs |
来宾可执行文件、服务模型、参与者模型、容器 |
具有触发器的Functions |
不可知 |
不可知 |
命令行应用程序 |
应用程序更新 |
没有内置支持 |
部署槽 |
滚动升级(每个服务) |
部署槽 |
滚动更新 |
不适用 |
N/A |
可伸缩性
条件 |
虚拟机 |
应用服务 |
Service Fabric |
Azure Functions |
Azure Kubernetes Service |
容器实例 |
Azure Batch |
自动缩放 |
VM规模集 |
内置服务 |
VM规模集 |
内置服务 |
不支持 |
不支持 |
不适用 |
负载均衡 |
Azure负载均衡器 |
内置并集成 |
Azure负载均衡器 |
内置并集成 |
内置并集成 |
没有内置支持 |
Azure负载均衡器 |
缩放限制 |
平台映像:每个VMSS1000个节点,自定义映像:每个VMSS100个节点 |
20个实例,应用服务环境为100个 |
每个VMSS100个节点 |
每个Function App200个实例 |
每个群集100个节点(默认限制) |
每个订阅20个容器组(默认限制)。 |
20Core限制(默认限制)。 |
可用性
条件 |
虚拟机 |
应用服务 |
Service Fabric |
Azure Functions |
Azure Kubernetes Service |
容器实例 |
Azure Batch |
SLA |
VM规模集 |
内置服务 |
VM规模集 |
内置服务 |
不支持 |
不支持 |
不适用 |
多区域故障转移 |
其他
条件 |
虚拟机 |
应用服务 |
Service Fabric |
Azure Functions |
Azure Kubernetes Service |
容器实例 |
Azure Batch |
SSL |
已在VM中配置 |
支持 |
支持 |
支持 |
入口控制器 |
使用挎斗容器 |
支持 |
成本 |
|||||||
架构 |
微服务、任务自动化、批处理作业 |