微软-Azure-解决方案构建备考指南-70-53-全-

微软 Azure 解决方案构建备考指南 70-53(全)

原文:annas-archive.org/md5/1015eaeaa85ca3a27c36ddb9ff0514d9

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

Azure 是一个不断发展的平台,提供适用于不同行业需求的最前沿技术环境。随着新功能和特性的快速推出,保持最新状态变得越来越困难。本书将为您提供 Azure 当前所有功能和能力的完整概述,并且是准备 70-535 考试的完整指南。

本书将涵盖所有考试目标。它将从设计计算基础设施开始,您将学习如何使用虚拟机、Web 应用程序、无服务器和微服务、高性能计算(HPC)以及其他计算密集型应用程序设计解决方案。您将学习如何使用 Azure 虚拟网络设计有效的网络实现,以及如何为混合应用程序设计连接性。您将学习如何使用不同的数据服务、关系数据库存储和 NoSQL 存储设计数据实现。您还将学习如何保持您的解决方案和应用程序的安全性,以及如何在 Azure 中使用不同平台服务,如物联网和人工智能平台与服务。最后,您将了解 Azure 提供的所有监控功能和解决方案。

每一章结束时都会有一个进一步阅读部分,这是本书的一个非常重要的部分,因为它将为您提供通过 70-535 考试所需的额外,有时甚至是至关重要的信息。随着考试问题会随时间稍作调整,本书很快会变得过时,进一步阅读部分将为您提供所有更新。

本书适合谁阅读

本书面向那些希望通过 70-535 考试:架构微软 Azure 解决方案,并从架构角度拓宽其 Azure 知识的有经验的开发人员和架构师。

最大限度地利用本书

本书假设读者已经熟悉网络、安全、数据库、集成、开发和管理应用程序,以及在 Azure 平台上解决方案的基础知识。

下载示例代码文件

您可以从您的账户下载本书的示例代码文件,网址是www.packtpub.com。如果您在其他地方购买了本书,可以访问www.packtpub.com/support并注册,代码文件将直接通过电子邮件发送给您。

您可以通过以下步骤下载代码文件:

  1. 登录或注册:www.packtpub.com

  2. 选择 SUPPORT 选项卡。

  3. 点击代码下载和勘误表。

  4. 在搜索框中输入书名,并按照屏幕上的说明操作。

文件下载后,请确保使用以下最新版本解压或提取文件夹:

  • WinRAR/7-Zip for Windows

  • Zipeg/iZip/UnRarX for Mac

  • 7-Zip/PeaZip for Linux

本书的代码包也托管在 GitHub 上,地址为:github.com/PacktPublishing/Architecting-Microsoft-Azure-Solutions-Exam-Guide-70-535。如果代码有更新,将会更新到现有的 GitHub 仓库。

我们的丰富书籍和视频目录中还有其他代码包可供下载,您可以访问github.com/PacktPublishing/查看!

下载彩色图片

我们还提供了一份 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图片。您可以在此下载:www.packtpub.com/sites/default/files/downloads/ArchitectingMicrosoftAzureSolutionsExamGuide70535_ColorImages.pdf

使用的约定

本书中使用了许多文本约定。

CodeInText:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 用户名。以下是一个例子:“将下载的WebStorm-10*.dmg磁盘映像文件挂载为系统中的另一个磁盘。”

代码块设置如下:

namespace PacktPubToDoAPI.Models
{
    public class TodoItem
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public bool IsComplete { get; set; }
    }
} 

任何命令行输入或输出都按如下格式书写:

Login-AzureRmAccount

粗体:表示一个新术语、重要的单词,或是您在屏幕上看到的单词。例如,菜单或对话框中的单词会以这种方式显示在文本中。以下是一个例子:“点击 New,在右侧选择一个图像(或者您可以输入一个

搜索框中的图像名称)。

警告或重要提示以这种方式呈现。

提示和技巧以这种方式呈现。

联系我们

我们始终欢迎读者的反馈。

一般反馈:请通过电子邮件feedback@packtpub.com联系我们,并在邮件主题中注明书名。如果您对本书的任何方面有疑问,请通过电子邮件questions@packtpub.com与我们联系。

勘误表:尽管我们已经尽力确保内容的准确性,但错误仍然可能发生。如果您发现本书中的错误,我们将非常感谢您向我们报告。请访问 www.packtpub.com/submit-errata,选择您的书籍,点击“勘误提交表格”链接并填写详细信息。

盗版:如果您在互联网上遇到我们作品的任何非法复制版本,我们将非常感谢您提供位置地址或网站名称。请通过copyright@packtpub.com与我们联系,并附上链接。

如果您有兴趣成为作者:如果您在某个主题方面拥有专业知识,并且有兴趣撰写或为书籍做出贡献,请访问 authors.packtpub.com

评价

请留下评论。当您阅读并使用完本书后,为什么不在您购买本书的网站上留下评论呢?潜在读者可以通过您的公正意见做出购买决策,我们在 Packt 也能了解您对我们产品的看法,而我们的作者则能看到您对其书籍的反馈。谢谢!

欲了解更多有关 Packt 的信息,请访问 packtpub.com

第一章:使用 Azure 虚拟机

这是《设计 Azure 解决方案》一书的第一章。本书将涵盖 70-535 考试的所有目标。在相关部分,我们将为您提供额外的信息和指导,帮助您在 Azure 平台上设计和架构强大、未来-proof 和有效的解决方案。

本章介绍了 Microsoft Azure 虚拟机VM)的目标。我们将涵盖虚拟机的系列和规格信息。我们还将讲解如何通过可用性集、故障域和更新域设计虚拟机部署。此外,我们将向您展示如何通过 Azure 门户以及 Azure PowerShell 创建可用性集。最后,我们将介绍如何通过 Azure 门户设计和管理 VM 扩展集。

本章将涵盖以下主题:

  • 为虚拟机设计解决方案

  • 虚拟机系列和规格

  • 可用性集

  • 故障域和更新域

  • 托管磁盘

  • 创建高可用性的虚拟机

  • VM 扩展集

  • 灾难恢复

技术要求

本章示例使用以下工具:

本章的源代码可以在此下载:

为虚拟机设计解决方案

在 Azure 中,您可以运行 Windows 虚拟机和 Linux 虚拟机。虚拟机有各种大小和价格,从具有少量内存和处理能力的一般用途虚拟机,到可用于 GPU 密集型和高性能计算工作负载的大型虚拟机。

要创建虚拟机,您可以选择多个预定义的镜像。操作系统镜像(如 Windows Server 或 Kali Linux)以及预定义的应用程序(如 SQL Server 镜像和完整的 farm,这些 farm 由多个虚拟机组成,可以一次性部署)都可以选择。例如,三层 SharePoint farm 就是一个 farm 示例。

虚拟机可以通过 Azure 门户、PowerShell 或 CLI 创建和管理。如果您计划使用 PowerShell,请注意 Azure PowerShell 有多个版本,而且 Azure PowerShell 和 Azure PowerShell 之间存在显著差异。要安装和配置 Azure PowerShell,请参阅本章的开头部分。

本书中的演示将使用支持 Azure PowerShell 的版本。我强烈建议您在所有新的部署和解决方案中使用此版本的 PowerShell。经典模型仅应用于之前已使用此模型部署的解决方案。

设计最有效的虚拟机解决方案取决于几个因素,例如决定使用哪个尺寸和系列,决定虚拟机是否需要高可用性,以及解决方案是否需要轻松进行横向扩展和纵向扩展。

虚拟机系列和尺寸

Azure 提供了许多不同的虚拟机尺寸可供选择。请注意,从设计角度了解可用选项非常重要,因为选择错误的虚拟机尺寸可能会对虚拟机的性能或安装在虚拟机上的应用程序产生负面影响。在不同选项之间的选择也会对整体成本产生巨大影响。例如,如果您的公司或客户希望通过将数据中心迁移到 Azure 来降低成本,明智地选择虚拟机将决定您的项目是成功还是失败。

Azure 虚拟机按机器系列进行组织,从 A 系列开始,这些虚拟机主要用于通用目的。还有专为计算、内存、存储和 GPU 优化的虚拟机系列,以及高性能计算虚拟机。以下部分将详细解释所有可用的系列和尺寸。

可用的虚拟机系列和尺寸

在编写本书时,以下虚拟机系列可供选择:

尺寸 类型 描述
A0-7, Av2, B, D, DS, Dv2, DSv2, Dv3, Dsv3 通用型 这些虚拟机具有平衡的 CPU 与内存比率,适用于测试和开发场景。它们也适用于小型和中型数据库以及低至中等流量的 Web 服务器。
F, Fs, Fsv2 计算优化型 这些虚拟机具有高 CPU 与内存比率,适用于中等流量的 Web 服务器、应用程序服务器和批处理节点的网络设备。
D, DS, Dv2, DSv2, Ev3, Esv3, G, GS, M 内存优化型 这些虚拟机具有高内存与 CPU 比率,适用于关系型数据库服务器、中到大型缓存和内存分析。
Ls 存储优化型 这些虚拟机具有高磁盘吞吐量和 I/O,适用于大数据、SQL 和 NoSQL 数据库。
NC, NCv2, NCv3, ND, NV GPU 这些虚拟机专为重度图形渲染、视频编辑、深度学习应用和机器学习模型训练而设计。此类虚拟机可以选择单个或多个 GPU。
A8-11, H 高性能计算型 这些是最快的虚拟机,提供最强大的 CPU 和可选的高吞吐量网络接口(RDMA)。

虚拟机系列会不断更新。新的系列、类型和大小会频繁地添加和移除。要了解这些变化,您可以参考以下网站获取 Windows 虚拟机的大小:docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes。对于 Linux 虚拟机大小,您可以参考docs.microsoft.com/en-us/azure/virtual-machines/linux/sizes?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json

可用性集

要构建一个可靠的基础设施,将虚拟机添加到可用性集是关键。有几个场景可能会影响您 Azure 虚拟机的可用性,具体如下:

  • 非计划的硬件维护事件:当硬件即将发生故障时,Azure 会触发一个非计划的硬件维护事件。使用实时迁移技术,预测故障并将虚拟机、网络连接、内存和存储迁移到不同的物理机器上,而不会中断客户端。当虚拟机迁移时,性能会暂时下降,因为虚拟机会暂停 30 秒。网络连接、内存和打开的文件仍然被保留。

  • 意外停机:当发生此事件时,虚拟机会宕机,因为 Azure 需要在同一数据中心内修复您的虚拟机。硬件或物理基础设施故障通常会导致此事件的发生。

  • 计划硬件维护事件:此类事件是 Microsoft 在 Azure 中定期进行的更新,以改进平台。大多数更新不会对虚拟机的正常运行时间产生重大影响,但其中一些可能需要重启或重新启动。

为了在这些事件期间提供冗余,您可以将两个或更多虚拟机分组到一个可用性集中。通过利用可用性集,虚拟机分布在集群中的多个隔离硬件节点上。这样,Azure 可以确保在发生事件或故障时,只有一部分虚拟机会受到影响,您的整体解决方案仍将保持运行并可用。这样可以确保达到 99.95%的 Azure 服务等级协议(SLA)。

要详细了解 SLA 适用的时机和方式,您可以参考以下概述:azure.microsoft.com/en-us/support/legal/sla/virtual-machines/v1_6/

故障域和更新域

当您将虚拟机放入可用性集时,Azure 保证将它们分布在故障域和更新域中。默认情况下,Azure 会为可用性集分配三个故障域和五个更新域(最多可增加到 20 个)。

当将虚拟机分布在故障域时,您的虚拟机会分布在 Azure 数据中心的三个不同机架上。因此,在底层平台发生事件或故障时,只有一个机架会受到影响,其他虚拟机仍然可以访问。

虚拟机分布在三个故障域上

更新域在操作系统或主机更新时非常有用。当您将虚拟机分布到多个更新域时,一个域会被更新并重启,而其他域仍然可以访问。

虚拟机分布在五个更新域和三个故障域上

托管磁盘

Azure 托管磁盘是在 Azure 门户中创建虚拟机时选择的默认磁盘。它们完全处理您的虚拟机存储。以前,您需要手动创建存储帐户来存储虚拟机硬盘,并且当虚拟机需要扩展时,您还需要添加额外的存储帐户,以确保不会超过每个帐户 20,000 IOPS 的限制。

使用托管磁盘时,这些负担现在由 Azure 为您处理。您现在可以在一个订阅中创建 10,000 个虚拟机磁盘,这样就能在一个订阅中部署成千上万个虚拟机,而无需在存储帐户之间复制磁盘。

如果您仍在使用非托管磁盘,强烈建议您切换到托管磁盘。要将磁盘从非托管转换为托管,请参考以下文章:docs.microsoft.com/en-us/azure/virtual-machines/windows/convert-unmanaged-to-managed-disks

灾难恢复

即使您将虚拟机部署到云中,业务连续性和灾难恢复仍然至关重要。Azure 提供了两种不同的服务来处理此问题:Azure 备份服务Azure 站点恢复服务。它们共同在云中原生地解决了灾难恢复需求。

备份与恢复

Azure 使用 Azure 备份服务来备份虚拟机。您可以使用此服务备份 Azure 虚拟机以及本地虚拟机。您还可以将它用于混合配置中的备份解决方案扩展,或完全用 Azure 备份替代本地备份解决方案。该服务可以备份文件、文件夹、虚拟机、应用程序、工作负载、系统状态和卷。

Azure 备份由以下备份组件组成:

  • Azure 备份(MARS)代理:此代理需要安装在运行于 Azure 或您本地基础设施上的 Windows Server 虚拟机上(当前不支持 Linux)。您可以使用它来备份虚拟机、文件、文件夹和系统状态。

  • 保护 System Center 数据保护管理器(DPM)服务器:您可以在混合设置中与 DPM 服务器一起使用 Azure 备份。DPM 服务器可以部署在您的本地数据中心内或 Azure 的虚拟机上。您可以使用它将旧数据存储在 Azure 备份服务保险库中,并使用磁盘存储新数据,例如。

  • Azure 备份服务器:这个组件安装在本地 Windows 服务器或 Azure 的 Windows VM 上。它为 Windows 和 Linux 服务器提供备份支持,并使用 Azure 恢复服务保险库存储备份。

  • Azure IaaS VM backup:这包括一个需要安装在您的 Azure 虚拟机上的代理程序。这些虚拟机可以是 Linux 或 Windows 虚拟机。您不能使用此工具备份您的本地服务器。

使用 Azure 备份服务备份您的 VM 时,大部分工作将在准备虚拟机方面。在备份可以从虚拟机中进行快照之前,您的 VM 必须满足先决条件。首先,您需要在 Azure 中创建一个恢复服务保险库以存储备份。然后,需要在虚拟机上安装 VM 代理程序。此时还需要检查您的网络连接。当所有先决条件都满足时,您可以将 VM 备份到恢复服务保险库中。这些备份可以轻松地通过 Azure 门户、PowerShell 或 CLI 创建。然后,快照将存储在恢复服务保险库中,您也可以从那里恢复快照。在恢复时,您可以选择恢复整个 VM 或仅恢复单个文件或文件夹。

虚拟机备份的先决条件在以下文章中有详细描述:docs.microsoft.com/en-us/azure/backup/backup-azure-arm-vms-prepare

创建高可用性虚拟机

VM 只能通过创建添加到可用性集。当您希望将现有 VM 添加到可用性集时,这将导致重新创建您的 VM。这是设计解决方案时需要注意的事项。

从 Azure 门户创建高可用性虚拟机

按照以下步骤从 Azure 门户创建虚拟机:

  1. 打开 portal.azure.com/ 导航到 Azure 门户。

  2. 点击新建,在右侧选择一个镜像(或者您可以在搜索栏中输入镜像名称)。在这个演示中,我们选择了 Windows Server 2016 VM 镜像:

创建 Azure 虚拟机

  1. 一个新的面板打开,您可以填写虚拟机的基本设置。添加以下详细信息,然后点击确定

填写基本设置

  1. 会打开一个新窗口,在这里你可以选择虚拟机类型和大小。默认情况下,只显示推荐的虚拟机,但你可以通过点击“查看所有”并选择“选择”来显示所有虚拟机,如以下截图所示:

选择虚拟机大小

  1. 会打开一个新窗口,在这里你可以配置其他选项。选择“可用性集”,然后点击“创建新建”:

创建高可用性集

  1. 默认情况下,虚拟机会被分配两个故障域和五个更新域。接受默认设置,并在提示时点击“确定”两次。

  2. 最后一个窗口会打开,提供一个摘要,列出你输入的所有设置。勾选权限框。

  3. 点击“创建”,你的虚拟机现在已创建。你应该可以在“创建”按钮旁边看到一个链接,点击该链接可以下载此虚拟机的 ARM 模板。

  4. 创建第二个虚拟机,并且不是创建一个新的可用性集,而是将第二个虚拟机添加到我们已经使用前面步骤创建的可用性集中。

你可以下载虚拟机配置的 ARM 模板。此模板也可以用于部署第二个虚拟机。GitHub 上有许多由 Microsoft 和社区创建的模板:azure.microsoft.com/en-us/resources/templates/

从 PowerShell 创建高可用虚拟机

虚拟机和可用性集也可以使用 PowerShell 创建。除了传统的 PowerShell,你还可以使用 Azure Cloud Shell 来创建可用性集。通过使用 Azure Cloud Shell,你实际上是在浏览器内使用 PowerShell。在 Azure Cloud Shell 中,Windows 用户可以选择 PowerShell,而 Linux 用户可以选择 Bash。你可以从 Azure 门户打开 Azure Cloud Shell,如以下截图所示:

Azure Cloud Shell

要创建两个虚拟机并将它们添加到可用性集,请将以下 PowerShell 语句添加到 Azure Cloud Shell 或 Windows PowerShell 中(请注意,在使用 Azure Cloud Shell 时,无需登录):

Login-AzureRmAccount

如果需要,选择正确的订阅,如下所示:

Select-AzureRmSubscription -SubscriptionId "********-****-****-****-***********"

创建资源组:

New-AzureRmResourceGroup -Name PacktPubPS -Location WestEurope

现在,创建一个可用性集:

New-AzureRmAvailabilitySet -Location WestEurope -Name AvailabilitySet02 -ResourceGroupName PacktPubPS -Sku Aligned -PlatformFaultDomainCount 2 -PlatformUpdateDomainCount 2

接下来,我们需要创建两个虚拟机并将它们添加到可用性集中。这是通过将 -AvailabilitySetId 参数设置为可用性集的 ID 来完成的。运行此脚本时,系统将提示输入虚拟机的用户名和密码,如以下片段所示:

$availabilitySet = Get-AzureRmAvailabilitySet -ResourceGroupName PacktPubPS -Name AvailabilitySet02

$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name PacktSubnet -AddressPrefix 192.168.1.0/24
$vnet = New-AzureRmVirtualNetwork -ResourceGroupName PacktPubPS -Location WestEurope -Name PacktVnet -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig

$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig -Name PacktNetworkSecurityGroupRuleRDP -Protocol Tcp -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow

$nsg = New-AzureRmNetworkSecurityGroup -Location WestEurope -Name PacktSecurityGroup -ResourceGroupName PacktPubPS -SecurityRules $nsgRuleRDP

# Apply the network security group to a subnet
Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name PacktSubnet -NetworkSecurityGroup $nsg -AddressPrefix 192.168.1.0/24

# Update the virtual network
Set-AzureRmVirtualNetwork -VirtualNetwork $vnet 
for ($i=1; $i -le 2; $i++)
{
 $pip = New-AzureRmPublicIpAddress -ResourceGroupName PacktPubPS -Location WestEurope -Name "$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4

 $nic = New-AzureRmNetworkInterface -Name PacktNic$i -ResourceGroupName PacktPubPS -Location WestEurope -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id

 # Specify the availability set
 $vm = New-AzureRmVMConfig -VMName PacktVM$i -VMSize Standard_D2_v3 -AvailabilitySetId $availabilitySet.Id

 $vm = Set-AzureRmVMOperatingSystem -ComputerName myVM$i -Credential $cred -VM $vm -Windows -EnableAutoUpdate -ProvisionVMAgent
 $vm = Set-AzureRmVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest

 $vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id
 New-AzureRmVM -ResourceGroupName PacktPubPS -Location WestEurope -VM $vm
}

虚拟机规模集

虚拟机规模集用于一次性部署多个虚拟机,无需手动操作或使用脚本。然后,您可以从一个地方管理所有虚拟机。虚拟机规模集通常用于构建大规模基础设施,其中保持所有虚拟机同步是关键。虚拟机的维护,包括同步,它由 Azure 处理。

虚拟机规模集在后台使用可用性集。规模集内的虚拟机会自动由底层平台分布在故障域和更新域中。虚拟机规模集默认使用 Azure 自动扩展。然而,您也可以手动添加或删除实例,而不使用自动扩展。

在创建规模集时,系统会自动为您创建一些资源。除了您指定的虚拟机数量会被添加到规模集中外,还会添加Azure 负载均衡器Azure 自动扩展,以及一个虚拟网络和一个公共 IP:

Azure 虚拟机规模集架构

从 Azure 门户创建虚拟机规模集

  1. 打开portal.azure.com/访问 Azure 门户。

  2. 点击“新建”并在搜索框中输入Scale。选择虚拟机规模集。

  3. 在下一个屏幕中,点击“创建”,并在点击“创建”按钮之前添加以下设置:

创建虚拟机规模集

创建后,您可以通过 Azure 门户、PowerShell 和 CLI 管理虚拟机规模集。

访问您的虚拟机规模集

有多种方法可以访问您的虚拟机规模集,具体方法如下:

  • 使用 RDP 或 SSH 连接虚拟机实例:要使用 RDP 或 SSH 连接虚拟机实例,您可以配置规模集以自动分配公共 IP 地址。默认情况下,此选项是关闭的。虚拟机位于虚拟网络内,因此无法通过 RDP 或 SSH 连接。

  • 使用跳板机连接虚拟机实例:您可以在同一个虚拟网络内创建一个独立的虚拟机,作为跳板机连接到规模集中的其他实例。独立虚拟机将获得一个公共 IP 地址,可以通过 RDP 或 SSH 连接。一旦连接到该虚拟机,您可以使用它通过内部 IP 地址连接到其他实例。

  • 使用 NAT 规则连接虚拟机实例:您还可以使用在负载均衡器内部创建的 NAT 规则连接虚拟机实例。这些 NAT 规则将实例分配到不同的 RDP 端口。

  • 使用负载均衡分配流入流量:流入的流量可以使用轮询方法分配到虚拟机实例。您可以使用 Azure 负载均衡器和 Azure 应用程序网关来实现这一点,前者提供第 4 层负载均衡规则,后者提供第 7 层负载均衡规则。

虚拟机规模集模板

你还可以使用 ARM 模板部署 VM 扩展集。ARM 模板是自动部署解决方案的好方法,你甚至可以在模板中嵌入定制和扩展。例如,你可以在容器内部安装应用程序,并在扩展集部署过程中将其部署到 VM 实例中。

微软和社区还提供了一些已经为不同架构配置好的 ARM 模板,这些模板可以下载并部署,以创建 Azure 扩展集,模板中已包含用于管理扩展集的扩展功能。以下是一些模板示例:

复制

Azure 站点恢复服务通过协调和自动化 Azure VM 的复制,提供了一种来自 Azure 的业务连续性和灾难恢复解决方案。它可以将工作负载和应用程序从主位置复制到次级位置,以确保在灾难发生时,VM 或应用程序依然可以运行。当主位置恢复时,你还可以轻松地恢复到主位置。

Azure 站点恢复服务提供以下功能和能力:

  • Azure VM、本地 VM 和工作负载复制:你可以将 Azure VM 从主区域复制到 Azure 的次级区域进行灾难恢复。你也可以将本地 VM 和物理服务器复制到 Azure 或者复制到次级本地数据中心。你可以复制任何来自本地 Hyper-V 和 VMware VM、Windows/Linux 物理服务器以及 Azure VM 的工作负载。

  • 数据弹性:复制过程中没有应用数据被拦截。数据存储在 Azure 存储中,并且在故障转移时,VM 是使用 Azure 存储中的数据创建的。

  • 定制的恢复计划:你可以创建定制的恢复计划,将 VM 分组在一起,或者添加自定义脚本或任务。

  • BDCR 集成:你还可以将 Azure 恢复服务与其他 BDCR 解决方案集成。

  • 网络集成:Azure 恢复服务与 Azure 中的网络功能集成。你可以预留 IP 地址、配置负载均衡器,并集成 Azure 流量管理器以实现网络切换。

  • 一致性应用程序:你可以在故障恢复过程中通过应用程序一致的快照保持应用程序的一致性。这些快照可以捕捉磁盘数据、内存中的所有数据以及所有正在进行的事务。

要了解 Azure 恢复服务提供的所有功能,您可以参考 docs.microsoft.com/en-us/azure/site-recovery/site-recovery-overview

总结

在本章中,我们介绍了虚拟机的目标。我们讲解了 Azure 提供的不同大小和系列。我们还讨论了可用性集、故障和更新域,以及如何创建它们。我们还讲解了托管磁盘,并向你展示了如何创建高可用性的虚拟机。我们讨论了虚拟机规模集及其使用时机,最后我们讲解了虚拟机的备份与恢复。

下一章将讲解使用 Azure 服务和 Azure 批处理的计算密集型应用程序。

问题

回答以下问题,测试你对本章内容的理解。你可以在本书最后的评估部分找到答案。

  1. 创建新虚拟机时,Azure 托管磁盘是否默认被选中?

    1. 是的

    2. 不是

  2. 如果你希望在底层基础设施发生故障时,虚拟机仍然可用,是否应该使用可用性集?

    1. 是的

    2. 不是

  3. 当你将虚拟机添加到可用性集中时,虚拟机是否默认分布在三个故障域和四个更新域中?

    1. 是的

    2. 不是

进一步阅读

你可以查看以下链接,获取更多关于本章所涉及主题的信息:

第二章:配置计算密集型应用

在上一章中,我们介绍了 Azure 虚拟机(VM)的目标。我们讨论了如何通过分析可用的系列和规格来设计 Azure 虚拟机。我们还讨论了如何利用 Azure 提供的各种功能来设计高可用性和高性能的解决方案。

本章介绍了计算密集型应用的目标。内容将涵盖如何使用 Azure 服务设计高性能计算(HPC)及其他计算密集型应用,如何确定何时使用 Azure 批量处理,以及如何设计无状态组件以适应 Azure 批量处理的规模和容器。

以下主题将被讨论:

  • 高性能计算虚拟机

  • Microsoft HPC Pack

  • Azure 批量处理

高性能计算虚拟机

Azure 提供多个虚拟机系列和规格,专为计算密集型任务设计和优化。这些虚拟机也被称为计算密集型实例。在撰写本书时,Azure 提供了 A8-A11 系列、N 系列和 H 系列,它们都支持 HPC 工作负载。

这些系列和规格由专为计算密集型、图形密集型和网络密集型应用设计和优化的硬件组成。它们最适合用于建模、仿真和高性能计算集群应用:

  • A 系列提供 RDMA 网络,具有超低延迟和高带宽的网络性能。

  • N 系列旨在支持图形密集型和计算密集型应用。它们配备不同型号的 NVIDIA Tesla GPU,非常适合深度学习应用、游戏应用或虚拟化。

  • H 系列提供专门针对高性能优化的虚拟机。它们配备快速的 Intel Xeon 处理器、基于 SSD 的本地存储和 DDR4 内存。这些虚拟机最适合高性能计算(HPC)工作负载,如批处理、建模和仿真。

关于 N 系列虚拟机的硬件规格,可以参考以下文章:docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes-gpu。有关高性能虚拟机的更多信息,请参阅以下文章:docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes-hpc?toc=%2Fazure%2Fvirtual-machines%2Fwindows%2Ftoc.json

Azure 市场提供多种专为 HPC 设计的虚拟机镜像,如用于 Windows 和 Linux 的 Azure 数据科学虚拟机、D3View 等。你可以通过以下 URL 访问市场:azuremarketplace.microsoft.com/en-us/marketplace.

Microsoft HPC Pack

微软提供适用于 Windows Server 2012、2016 和 Linux 机器的 HPC Pack。这是一个免费产品,你可以用它在本地服务器和 Azure 虚拟机上创建 HPC 集群。

你可以在 Windows 或 Linux 服务器上安装 HPC Pack。这些机器将自动成为集群的头节点。然后,你可以向集群添加更多节点,并在其上运行任务。该任务将自动分配到所有可用节点上。

它提供以下额外功能:

  • 混合集群:你可以使用本地服务器和 Azure 虚拟机设置混合集群。

  • HPC 集群管理器:一个用于管理、部署和配置 HPC 集群的工具。

  • PowerShell:你可以使用 HPC PowerShell 来管理、配置、部署、添加并执行集群上的任务。

你可以使用 HPC Pack 来设计有效的云原生 HPC 解决方案和混合 HPC 解决方案。以下部分将详细解释这两者。

云原生 HPC 解决方案

云原生 HPC 解决方案使用 HPC 虚拟机,可以扩展到成千上万的实例和计算核心。它使用一个头节点、若干计算节点和存储。以下 Azure 资源可用于创建云原生 HPC 架构:

  • HPC 头节点:头节点在 Azure 上的 Windows 或 Linux 服务器虚拟机中运行。当你在该机器上安装 Azure HPC Pack 时,它将自动成为头节点。

  • HPC 计算节点:HPC 计算节点是使用 A8 和 A9 实例创建的。这些实例提供 RDMA 网络,可以用于实现节点之间的高带宽和微秒级延迟。

  • 虚拟机规模集:你可以将计算节点放置在 虚拟机规模集 (VMSS) 中,以确保冗余和高可用性。使用 RDMA 进行通信的虚拟机会被放置在同一个可用性集中。

  • 虚拟网络:所有 Azure 资源,如头节点、计算节点和存储层,都被添加到 Azure 虚拟网络中。

  • 存储:所有不同节点使用的磁盘都存储在 Azure Blob 存储中。

  • ARM 模板:你可以使用 ARM 模板将应用程序部署到节点上。

云原生 HPC 架构

混合 HPC 架构

混合 HPC 架构使用部分用于云原生 HPC 架构的构建块,结合了本地部分。以下 Azure 资源将在此场景中使用:

  • HPC 头节点:头节点运行在你的本地环境中。头节点也可以安装在 Azure 中的虚拟机上,支持 Windows 或 Linux 服务器虚拟机,和云原生架构一样,你可以在其上安装 Azure HPC Pack,它将自动成为头节点。

  • HPC 计算节点: 您本地环境中的 HPC 计算节点可以是具有足够计算能力的 Linux 或 Windows 服务器。Azure 中的虚拟机是使用 A8 和 A9 实例创建的,并提供 RDMA 网络支持。

  • 虚拟机规模集 (VMSS): 您可以将 Azure 中的计算节点放置在 VMSS 中,以实现冗余和高可用性。使用 RDMA 进行通信的虚拟机会被放置在同一可用性集中。

  • 虚拟网络: Azure 资源(例如计算节点和存储层)被添加到 Azure 虚拟网络中。

  • ExpressRoute: ExpressRoute 提供了一个安全可靠的连接,将您的本地环境与 Azure 连接。这些连接不经过公共互联网,而是使用私有连接,通常是在 ExpressRoute 经纪人和 Azure 之间设置。

  • VPN Gateway: VPN 网关提供了 Azure 与您的本地网络之间的端点,能够在 HPC 集群中不同节点之间实现安全的连接和通信。此连接使用公共互联网。

  • 存储: 在 Azure 中托管的节点使用的磁盘存储在 Azure Blob 存储中。

混合 HPC 架构

Azure Batch

Azure Batch 是一项帮助开发人员在虚拟机(Windows 或 Linux)或容器上扩展工作负载的服务,无需管理基础设施。通过 Azure Batch,您可以高效地在云中运行大规模的并行和 HPC 应用程序。批处理计算最常用于定期处理、转换或分析大量数据的应用程序。通常,运行在 Azure Batch 上的 HPC 应用程序包括深度学习应用程序、图像渲染应用程序、媒体编码应用程序和蒙特卡洛模拟。Azure 媒体服务也在内部使用 Azure Batch 进行媒体编码。

Azure Batch 服务使用 Azure 计算作为其基础设施,这意味着您可以使用 Windows 或 Linux 虚拟机来托管您的应用程序或工作负载。Azure 内部使用 A8/A9 系列虚拟机和 RDMA 网络为节点提供支持,并且完全负责创建和管理这些虚拟机。Azure 会将节点添加到 Azure Batch 账户中的

在 Azure Batch 账户中,可以创建一个作业,该作业将在池上运行工作负载。你的工作负载然后被添加到 Batch队列中,并被分成若干任务,这样它们可以并行运行。Azure Batch 会自动扩展这些任务,并且它们也可以被安排执行。你的工作负载,称为任务,被添加到 Batch 队列中,分布在托管的虚拟机池中,并且可以自动扩展。大部分任务可以完全独立运行,但对于一些 HPC 工作负载,任务之间可能需要相互通信。在这种情况下,Azure Batch 使用持久化存储来存储输出数据,以便其他任务获取。默认情况下,使用 Azure Blob 存储,但你也可以使用其他存储类型。这些任务通过一个称为消息传递接口MPI)的运行时相互通信,所有这些不同任务的结果可以汇总成一个单一结果:

Azure Batch 架构

为了自动化创建 Azure Batch 进程,Azure Batch 使用一个 JSON 模板(不要与 ARM 模板混淆,这是不同的)。在这个模板中,你可以自动化创建 Batch 池,包括 VM 大小、操作系统和节点数量(VM 的数量)。你也可以使用 Azure CLI 进行自动化操作。

一个 Batch 池由虚拟机组成,这些虚拟机可以使用 Azure Marketplace 中的镜像、云服务(Azure 的标准来宾镜像)、自定义镜像(来自存储账户的自定义 VHD)和特定的图形及渲染镜像来创建。

你可以使用低优先级虚拟机来执行 Azure Batch。这将大大降低虚拟机的成本。此折扣仅适用于 Azure Batch,适用于 Azure Batch 支持的所有虚拟机大小,并且适用于所有区域。关于这些价格的更多信息,可以参考以下网页:azure.microsoft.com/en-us/pricing/details/batch/

创建 Azure Batch 服务

在这个例子中,我们将通过 Azure 门户创建一个 Batch 池。这将为你提供一些关于 Azure Batch 不同设置的额外信息,例如如何在虚拟机池上启动你的应用程序。

要创建一个 Azure Batch 池,可以参考以下步骤:

  1. 第一步是在 Azure 门户中创建一个 Azure Batch 账户。你可以参考以下文章来创建一个:docs.microsoft.com/en-us/azure/batch/batch-account-create-portal。我已经在名为 PacktBatchGroup 的资源组中创建了一个名为 packtpub 的 Azure Batch 账户:

Azure Batch 服务

  1. 接下来,点击左侧菜单中的 Pools,然后点击 Add. 添加以下值:

    • 池 ID:packtpool1

    • 显示名称:PactPool

    • 镜像类型:云服务(仅限 Windows)

    • 节点大小:选择标准 A1

    • 扩展模式:自动扩展

    • 公式:"$TargetDedicated=0"(有关自动扩展公式的更多信息,请参考以下文章:docs.microsoft.com/en-us/azure/batch/batch-automatic-scaling

    • 启动任务:禁用(在这里,您可以提供可执行文件或其他工作负载的启动命令)

保留其余设置的默认值。

对于虚拟网络设置,您可以将 Batch 池运行在 VNet 内。这样,虚拟机可以与 Batch 池之外的其他虚拟机通信,如文件服务器或许可证服务器。

  1. 点击确认:

Azure Batch 池设置

  1. 创建 Batch 池后,您可以从左侧菜单中选择应用程序包,上传您的可执行文件、库或与应用程序相关的其他元数据。要上传包,您必须创建或链接一个 Azure 存储账户。应用程序包以 ZIP 文件形式上传,包含所有必要的文件。这些文件会被 Azure 自动安装到虚拟机上:

Azure Batch 应用程序包

  1. 您还可以从左侧菜单中提供启动任务属性。

这只是创建 Batch 服务的一种方式。您可以使用更多方法,例如使用 Visual Studio、直接调用 Batch API,或使用 CLI 或 PowerShell。

无状态组件

Azure Batch 使用并行操作来处理工作负载。为了充分利用此功能,应用程序需要拆分成单个无状态任务,称为多实例任务。默认情况下,Batch 任务在单个计算节点上执行。通过启用多实例任务,任务将在多个计算节点上执行。

这些多实例任务会提交到 Batch 作业中,然后在 Batch 池内的可用节点上分发。Azure Batch 会根据多实例设置自动创建一个主任务和多个子任务。并行运行的任务随后会使用 Azure 存储保存和检索不同任务使用的数据:

Azure Batch 作业和任务

这些多实例任务可以通过 Batch .NET SDK 或 Python SDK 在代码中创建。

有关使用 Batch .NET SDK 创建 Azure Batch 解决方案的更多信息,请参考以下教程:docs.microsoft.com/en-us/azure/batch/tutorial-parallel-dotnet

Azure Batch 上的容器

Azure Batch 还支持容器部署。您可以使用 Docker 容器或 Singularity。Singularity 与 Docker 类似,但它主要设计用于在本地环境和超级计算安装的共享 HPC 集群上运行。Singularity 执行容器时不需要 root 权限。它允许应用程序在执行用户的权限范围内利用 GPU 和专用网络。这使得 Singularity 适用于权限受限的 HPC 环境。Docker 最初是为运行 Linux 容器设计的,而 Singularity 可以导入 Docker 镜像并运行 Windows 容器。

Singularity 可以在 Azure Cloud Shell 中运行,无需安装,也可以从 Azure Batch Shipyard 版本中安装。这是一个开放系统,用于在 Azure Batch 上启用基于配置的简单容器执行。在这里不需要任何 Azure Batch .NET SDK 的知识;仅使用配置文件。

关于 Batch Shipyard 上的容器的更多信息,请参阅以下 GitHub 页面:github.com/Azure/batch-shipyard

概述

本章中,我们已覆盖了计算密集型应用程序的目标。我们讲解了如何使用 Azure 服务设计 HPC 和其他计算密集型应用程序,如何确定何时使用 Azure Batch,以及如何设计无状态组件以适应 Azure Batch 上的扩展和容器。

在下一章中,我们将讲解 Web 应用程序的目标。

问题

回答以下问题,以测试您对本章内容的了解。您可以在本书结尾的 评估 部分找到答案:

  1. 您想在本地环境中创建 HPC 集群。您是否应该使用 Azure Batch?

  2. 在创建高性能计算虚拟机时,我们是否应该使用 H 系列?

  3. 为了自动化创建 Azure Batch 进程,我们是否应该使用 ARM 模板?

深入阅读

您可以查看以下链接,了解更多有关本章所涉及的主题信息:

第三章:设计 Web 应用程序

在上一章中,我们涵盖了计算密集型应用程序的目标。我们讨论了如何设计高性能计算和其他计算密集型应用程序。

本章介绍了 Web 应用程序的目标。它将涵盖有关 Azure Web 应用、不同可用的应用服务计划以及不同应用服务计划的特征的信息。您将了解如何使用 Azure 容器服务和 Docker 设计 Web 应用程序以用于容器,如何使用 Redis 缓存、自动扩展、应用服务环境等设计具有高可用性、可扩展性和性能的 Web 应用程序,以及如何设计自定义 Web API 及 Azure 在保护自定义 API 方面提供的功能。

将涵盖以下主题:

  • Azure Web 应用

  • 应用服务计划

  • 为容器设计 Web 应用

  • 为高可用性、可扩展性和性能设计 Web 应用

  • 设计和保护自定义 Web API

技术要求

本章示例中使用以下工具:

本章的源代码可以在此处下载:

Azure Web 应用

Azure Web 应用是 Azure 应用服务的一部分,您可以在其中托管您的网站和应用程序。使用 Web 应用,您只需支付您使用的计算资源费用,而不是您的站点或应用程序的实际托管费用。除了网站和应用程序外,您还可以在 Azure Web 应用中托管您的 Web API 和移动后端。

您可以选择任意编程语言开发应用程序。在撰写本文时,Azure Web 应用支持 .NET、.NET Core、Java、Ruby、Node.js、PHP 和 Python。这些应用程序托管在由 Microsoft 完全管理的 Windows 或 Linux 虚拟机上,并可以使用现成的功能轻松进行扩展。除了扩展之外,您还可以利用其他 Azure 功能,例如安全性、负载均衡、洞察和分析。您还可以使用 DevOps 功能,例如从 VSTS、GitHub、Docker Hub 和其他资源进行持续集成和部署、SSL 证书、包管理、暂存环境和自定义域。

应用服务计划

Azure Web 应用托管在应用服务计划中。在应用服务计划中,您可以配置所有必需的设置,例如成本、计算资源以及您希望部署应用程序的区域。Azure 提供不同类型的应用服务计划,从与其他客户共享所有资源的免费计划(最适合开发应用程序)到付费计划,您可以选择在 Windows VM 或 Linux VM 上托管您的应用程序,并可以设置可用的 CPU 等。

Azure 提供以下服务计划 SKU:

  • 免费和共享:您的应用程序与其他应用程序在共享环境中的同一虚拟机上运行。该环境还可能包括来自其他客户的应用程序。每个应用程序都有一个 CPU 配额,且无法进行纵向或横向扩展。这些应用服务计划最适合用于开发和测试应用程序,或者流量较少的应用程序。这两种计划不提供 SLA 支持。共享服务计划提供添加自定义域的能力。

Azure 门户中的免费和共享应用服务计划

  • 基础:基础层级是第一个层级,您可以在不同的定价范围之间进行选择。它提供三个层级,每个层级的可用核心和内存都会翻倍。应用程序运行在专用的 Linux 或 Windows 虚拟机上,计算资源仅在同一应用服务计划内部署的应用程序之间共享。所有位于同一应用服务计划中的应用程序都驻留在一个隔离的环境中,支持 SSL 和自定义域。基础层级支持扩展到三个实例,但需要手动进行。这一层级最适合开发和测试环境以及流量较少的应用程序。

Azure 门户中的基础应用服务计划

  • 标准:标准层级也有三个层级可供选择。它提供自定义域和 SSL 支持,支持自动扩展最多 10 个实例,并提供五个部署插槽,可用于测试、暂存和生产应用程序。它还提供每日备份和 Azure 流量管理器。

Azure 门户中的标准应用服务计划

  • 高级:高级提供两种层级,Premium 和 PremiumV2。它们都提供标准层级的所有功能,但高级层级提供额外的扩展实例和部署插槽。Premium V2 运行在 Dv2 系列虚拟机上,具有更快的处理器和 SSD 驱动器,极大提高了应用程序的性能。

Azure 门户中的高级应用服务计划

  • 隔离:隔离层级通过提供具有专用虚拟机和虚拟网络的私有环境,为您的应用程序提供完全隔离。您还可以扩展到 100 个实例。为了创建私有环境,应用服务使用 应用服务环境ASE),将在下一部分中介绍。所有应用程序都运行在 Dv2 系列虚拟机上,因此提供高性能能力。隔离应用服务计划最适合需要完全隔离的应用程序,例如由于安全需求较高的情况,但又希望利用 Azure Web Apps 提供的所有功能,如自动扩展和部署插槽。

Azure 门户中的隔离应用服务计划

应用服务环境(ASE)

ASE 是 Azure 应用服务的一个功能,它为你的 Web 应用、移动应用、API 应用和 Azure 函数提供了一个完全隔离的环境。ASE 部署在 VNet 的子网内,因此提供完全的隔离和安全的网络访问。ASE 最适合需要高规模工作负载的应用,因为它们可以分布在一个或多个 Azure 区域中。由于网络隔离,ASE 也非常适合有高安全要求的应用。

每个 Azure 订阅只能创建一个 ASE,它最多可以托管 100 个实例;从一个 App Service 计划中的 100 个应用实例,到 100 个 App Service 计划,每个计划中有一个应用实例。

ASE 使用前端和工作者,其中前端适用于自动负载均衡 ASE 内的请求,而工作者则托管实际的 Web 应用。它们由 Azure 自动添加。

在写作时,ASE 有两个不同的版本,v1 和 v2。两个版本的区别在于,v2 会根据应用服务计划的规模自动添加前端和工作者到 ASE 中。而在 v1 中,你必须手动添加这些角色,才能扩展你的应用服务计划。

创建 ASE

你可以通过以下步骤从 Azure 门户创建 Azure ASE:

  1. 通过打开 portal.azure.com/ 进入 Azure 门户。

  2. 点击“新建”,然后在搜索栏中输入 App Service Environment。点击“创建”按钮。

  3. 会打开一个新的面板,在这里你可以填写虚拟机的基本设置。请添加以下内容:

    • 名称:PacktASE

    • 订阅:在此选择一个订阅

    • 资源组:`PacktPubASE`

    • 虚拟网络/位置:Azure 将为你自动创建一个新的虚拟网络。如果你想选择现有的虚拟网络,可以通过点击链接更改设置。

在 Azure 门户中创建 ASE

  1. 点击“创建”。Azure 将为你创建一个 ASE、一个虚拟网络、一个路由表和一个 NSG。

  2. 你现在可以在创建新的 Azure 应用服务计划时选择这个 ASE:

在 Azure 门户中创建 ASE

请注意,创建 ASE 可能会非常昂贵,因此我强烈建议在完成测试后将其删除。

有关 Azure ASE 的更多信息,你可以参考以下微软文档:docs.microsoft.com/en-us/azure/app-service/environment/intro

容器化 Web 应用

容器化 Web 应用是 Azure 上的一个服务,它让你能够轻松地在 Azure 上部署和扩展你自己的 Docker 格式镜像。Docker 基于开放标准,这意味着它可以在所有主流的 Linux 发行版和 Windows Server 2016 上运行。

Docker 容器是轻量级的沙箱,运行在操作系统之上。当你的应用部署在 Docker 容器内时,应用无法看到或访问同一操作系统上运行的其他应用或进程。你可以将其与为托管不同类型工作负载或应用而创建的虚拟机进行比较,但没有虚拟化本身带来的开销。Docker 容器还共享相同的操作系统和基础设施,而虚拟机需要在自己的基础设施中安装独立的操作系统。

使用容器时,你可以共享 Docker 主机的底层资源,并构建一个包含运行应用所需一切的 Docker 镜像。你可以从一个基础镜像开始,然后添加所需的所有内容。

Docker 容器也具有极强的可移植性。你可以将包含所有设置(如配置设置、特定运行时、框架和工具)的 Docker 容器部署到安装了 Docker 的虚拟机上。然后,你可以轻松地将同一个容器移至 Azure Linux 上的 App 服务,应用仍然可以按预期运行。这解决了 它在我的机器上能工作 的问题,这是几乎所有开发人员都会遇到的。这使得 Docker 不仅仅是虚拟化技术,而是一种应用交付技术。

Docker 容器非常适合构建利用微服务架构的应用,其中应用的各个部分松散耦合,并被分为各自独立的服务,它们之间相互协作。每个服务可以部署到单独的容器中,使用自己编写的编程语言和配置设置。例如,一个服务可以是数据库、Web API 或移动后端。你可以轻松地部署同一个应用或数据库的多个副本。唯一需要注意的是,它们共享同一个操作系统。如果你的应用需要在不同的操作系统上运行,你仍然需要使用虚拟机。

有关 Azure Linux 上的 App 服务的更多信息,可以参考以下网站:docs.microsoft.com/en-us/azure/app-service/containers/app-service-linux-intro。Microsoft 发布了一个名为 Developer Finder 的示例项目,可以在 GitHub 上找到。它将为你提供 Docker 容器的可能性概览,是使用 Docker 开发自己应用的一个良好起点。你可以参考以下网站:github.com/azure-app-service/demoapp

开始使用 Web 应用容器

可以从 Azure 门户创建 Web 应用容器。请按照以下步骤创建项目:

在这个示例中,我使用 Docker Hub 作为镜像仓库。你可以通过以下链接创建账户:hub.docker.com/

  1. 通过打开 portal.azure.com/ 访问 Azure 门户。

  2. 点击 New,在搜索框中输入 Web App for Containers。点击 Create 按钮,如下图所示:

在 Azure 门户中创建 Web 应用容器项目

  1. 会打开一个新的面板,添加以下值:

    • 应用名称:PacktContainers

    • 订阅:在这里选择一个订阅。

    • 资源组:输入应用名称时,资源组会自动填充。保持默认即可。

    • 应用服务计划/位置:会自动创建一个新的应用服务计划。如果你想选择现有的,或者更改默认设置,可以点击它。

在 Azure 门户中为容器配置 Web 应用设置

    • 配置容器:这将带你进入实际的 Docker 设置。在这里,选择 Docker Hub 作为镜像源。

    • 镜像和可选标签:mysql

在 Azure 门户中配置容器

设计 Web 应用的高可用性、可扩展性与性能

性能是设计 Web 应用时需要牢记的重要问题。那些反应迟钝或者性能差的 Web 应用最终会失去所有访客,他们会直接跳转到其他网站。Azure 提供了多种选项来使你的 Web 应用高可用和可扩展,从而提高性能,保持访客的留存。

除了 Azure 提供的设计高可用性、扩展性和性能的功能外,在设计 Web 应用时,你还可以考虑一些架构模式。你可以参考 Azure 架构中心的以下文章来获取这些模式:docs.microsoft.com/en-us/azure/architecture/patterns/category/performance-scalability

高可用性与性能

Azure 提供了几种方法来提升 Web 应用的性能并实现高可用性。你可以使用 内容分发网络CDN)、缓存,或者将 Web 应用复制到多个区域。

使用 CDN

你可以使用 CDN 实现全球网站的扩展。通过使用 CDN,你的静态内容,如 HTML 页面、样式表、客户端脚本、图片、文档和文件,将会在不同区域进行缓存。这样,下载内容的时间会更短,因为静态内容离用户物理上更近,这提升了 Web 应用的性能。

Azure CDN 允许你使用自定义域名访问你的内容。可以在 Azure 门户内进行配置。你可以参考以下文章来添加自定义域名:docs.microsoft.com/en-us/azure/cdn/cdn-map-content-to-custom-domain。你还可以为你的 CDN 启用 HTTPS:docs.microsoft.com/en-us/azure/cdn/cdn-custom-ssl

使用 Redis 缓存

Redis 缓存在 Azure 上基于流行的开源实现 Redis Cache。它提供一个安全的缓存,数据可以从中访问,且运行在 Azure 数据中心。它可以被不同类型的应用程序使用,包括 Web 应用、虚拟机内的应用程序或其他云服务。缓存可以被所有拥有适当访问密钥的应用程序共享。

Azure Redis 缓存有以下几种层级:

  • 基础:这是单节点缓存,适用于开发、测试环境和非关键工作负载。此层级没有 SLA 服务水平协议。

  • 标准:提供复制缓存。数据在两个节点之间自动复制。此层级提供 SLA 服务水平协议。

  • 高级:高级层具有所有标准功能,此外还提供更大的工作负载、更好的性能、灾难恢复和增强的安全性。它还提供 Redis 持久性,将存储在缓存中的数据进行持久化。可以在发生故障时创建和恢复快照和备份。它还提供 Redis 集群,自动将数据分配到多个 Redis 节点上,因此可以创建更大内存(超过 53 GB)的工作负载并获得更好的性能。它还支持 Azure 虚拟网络,允许使用子网、访问控制策略等功能来隔离缓存。你可以通过 Azure 门户使用 ARM 模板来配置 Azure Redis 缓存。

从 Azure 门户配置 Redis 缓存

你可以参考以下文章下载一些示例 ARM 模板,用于部署具有不同配置设置的 Azure Redis 缓存:docs.microsoft.com/en-us/azure/redis-cache/cache-redis-cache-arm-provision

使用 Azure Traffic Manager

另一种设计高可用性和可扩展性的方法是将你的 Web 应用程序复制到多个地区或数据中心。Azure 使用 Azure Traffic Manager 来分配工作负载。你可以通过一个单一的 URL 访问你的 Web 应用程序,Azure Traffic Manager 会在 DNS 层面处理负载并找到最接近的地理位置或最合适的区域。

Azure Traffic Manager

在从 Azure 门户创建 Azure Traffic Manager 配置文件时,你可以选择四种不同的路由方法:

  • 性能:当您的终端位于不同的地理位置,且您希望终端用户使用网络延迟最低的最近端点时,请选择此方法。

  • 加权:当您希望您的应用程序按某些权重(由您定义)均匀或有条件地分配时,此方法最为适用。

  • 优先级:当您希望某个端点作为所有流量的主端点,并在主端点或备用端点不可用时提供备份时,请使用此方法。

  • 地理位置:此方法最适用于需要根据用户的地理区域进行路由的场景。例如,内容的本地化可能是选择此方法的原因。然后,用户将根据其 DNS 查询的来源地理位置被引导到特定的端点。

Azure 流量管理器也在第五章,强大的网络实现中进行了讨论。有关更多信息,您可以参考该章节。

可扩展性

Azure 提供了扩展 Web 应用的能力。扩展的一个可能性是扩展出,您可以在全球范围内扩展 Web 应用。扩展出意味着向 Web 应用添加或移除节点。这样,当从不同位置访问 Web 应用时,加载时间会减少。另一个选项是扩展上。扩展上意味着向 Web 应用添加或移除资源,例如 CPU 或内存。扩展上时,您会在应用服务计划内切换到另一个定价层,或选择不同的应用服务计划。

关于 Azure 应用服务计划的更多信息,您可以参考本章开头部分。

扩展

有多种方法可以扩展您的 Web 应用。您可以手动扩展或使用 Azure 自动扩展 自动扩展。要使用自动扩展,请按照以下步骤操作:

  1. 在“设置”下,点击“扩展(应用服务计划)”。

  2. 在屏幕的右侧,您可以增加或减少实例数量。最大实例数量取决于应用服务计划:

Azure 应用服务计划扩展

  1. 在这里,您还可以启用自动扩展(仅适用于标准、预备和隔离的应用服务计划)。您需要命名自动扩展集,并至少添加一个扩展条件。您可以选择基于某个度量或特定实例数量进行扩展。当使用基于度量进行扩展时,您需要添加一个扩展规则:

Azure 应用服务计划自动扩展

Azure Autoscale 允许你配置许多超出本书范围的设置。你可以参考以下网址,了解有关 Azure Autoscale 和可用设置的更多信息:docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-understanding-autoscale-settings.

扩展

你可以选择不同的定价层或应用服务计划来扩展你的网站。你也可以通过 Azure 门户中的应用服务计划设置来实现这一点,例如扩展你的 Web 应用。

在 Azure 门户中导航到 Azure 应用服务设置,并在设置下点击扩展(应用服务计划)。然后你可以选择一个不同的应用服务计划,如下图所示:

Azure 应用服务计划扩展

设计并保护自定义 Web API

可以使用 Visual Studio Code 或 Visual Studio 2017 创建自定义 Web API。创建 Web API 时,可以使用以下编程语言:

  • ASP.NET

  • ASP.NET Core

  • Angular

  • React.js

设计你的 Web API

本示例将使用 .NET Core 2.0 框架和 Visual Studio 2017 创建。首先,打开 Visual Studio 2017:

  1. 点击文件 | 新建 | 项目,在新建项目窗口中选择 ASP.NET Core Web 应用。命名项目并点击确定:

  2. 弹出窗口将打开,你可以选择 Web API 模板,选择 ASP.NET Core 2.0,然后点击确定:

从 Visual Studio 2017 创建自定义 Web API

  1. 在解决方案资源管理器中添加一个 Models 文件夹。右键点击你的项目名称并选择添加 | 新建文件夹。右键点击 Models 文件夹,选择添加 | 类,添加一个 TodoItem 类。

  2. 使用以下代码更新 TodoItem 类:

namespace PacktPubToDoAPI.Models
{
    public class TodoItem
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public bool IsComplete { get; set; }
    }
}
  1. 下一步是添加数据库上下文类,该类协调实体框架功能。将一个 TodoContext 类添加到 Models 文件夹,并用以下代码替换:
using Microsoft.EntityFrameworkCore;
using PacktPubToDoAPI.Models;

namespace PacktPubToDoAPI.Models
{
    public class TodoContext : DbContext
    {
        public TodoContext(DbContextOptions<TodoContext> options)
            : base(options)
        {
        }

        public DbSet<TodoItem> TodoItems { get; set; }

    }
}
  1. 下一步是将数据库上下文与依赖注入容器进行注册。你可以通过将StartUp.cs中的代码替换为以下内容来实现:
using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using PacktPubToDoAPI.Models;

namespace PacktPubToDoAPI
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<TodoContext>(opt => opt.UseInMemoryDatabase("TodoList"));
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseMvc();
        }
    }
}
  1. 在解决方案资源管理器中,右键点击 Controllers 文件夹并添加一个名为 TodoController 的控制器。用以下代码替换控制器:
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using PacktPubToDoAPI.Models;
using System.Linq;

namespace PacktPubToDoAPI.Controllers
{
    [Route("api/[controller]")]
    public class TodoController : Controller
    {
        private readonly TodoContext _context;

        public TodoController(TodoContext context)
        {
            _context = context;

            if (_context.TodoItems.Count() == 0)
            {
                _context.TodoItems.Add(new TodoItem { Name = "Item1" });
                _context.SaveChanges();
            }
        }
    }
}
  1. 这段代码在构造函数中使用依赖注入,将TodoContext注入到控制器内部。该上下文用于对数据进行创建读取更新删除CRUD)操作。如果内存数据库为空,构造函数会添加一项数据。

  2. 下一步是实现 CRUD 方法。将以下代码添加到构造函数中,处理 Get 请求:

[HttpGet]
public IEnumerable<TodoItem> GetAll()
{
    return _context.TodoItems.ToList();
}

[HttpGet("{id}", Name = "GetTodo")]
public IActionResult GetById(long id)
{
    var item = _context.TodoItems.FirstOrDefault(t => t.Id == id);
    if (item == null)
    {
       return NotFound();
     }
       return new ObjectResult(item);
 }
  1. Post 请求下方添加以下内容:
[HttpPost]
public IActionResult Create([FromBody] TodoItem item)
{
   if (item == null)
   {
        return BadRequest();
   }

    _context.TodoItems.Add(item);
    _context.SaveChanges();

    return CreatedAtRoute("GetTodo", new { id = item.Id }, item);
   }
  [HttpPut("{id}")]
  public IActionResult Update(long id, [FromBody] TodoItem item)
  {
      if (item == null || item.Id != id)
      {
          return BadRequest();
      }

      var todo = _context.TodoItems.FirstOrDefault(t => t.Id == id);
      if (todo == null)
      {
          return NotFound();
      }

      todo.IsComplete = item.IsComplete;
      todo.Name = item.Name;

       _context.TodoItems.Update(todo);
       _context.SaveChanges();
       return new NoContentResult();
  }       
  1. 最后,在 Post 请求下方添加 Delete 请求:
[HttpDelete("{id}")]
     public IActionResult Delete(long id)
     {
        var todo = _context.TodoItems.FirstOrDefault(t => t.Id == id);
         if (todo == null)
         {
              return NotFound();
          }

          _context.TodoItems.Remove(todo);
          _context.SaveChanges();
          return new NoContentResult();
      }
  1. 现在,您可以使用 Visual Studio 2017 中的 发布 功能将此 Web API 部署到 Azure。右键点击解决方案资源管理器,并点击 发布。发布向导将会打开。在其中,选择 Microsoft Azure App Service,选择 选择现有,点击 发布:

从 Visual Studio 2017 发布 Web API 到 Azure

  1. 在下一个屏幕中,从本章前面的部分中选择已存在的 Azure Web App,然后点击 OK 按钮:

从 Visual Studio 2017 选择 Azure 订阅

  1. Web API 现已发布到 Azure。

该示例应用程序基于 Microsoft 网站上的一个示例。当您需要关于示例应用程序的更多说明或信息时,请参考以下 Microsoft 网站:docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api

保护您的 Web API

为了保护您的 Web API,您可以使用多种选项。您可以使用 Azure 提供的选项,也可以使用您自己的身份验证提供程序。然而,最佳实践是使用 Azure App Services 中提供的标准身份验证选项。

您可以使用 Azure 中的以下服务来保护您的 Web API:

  • Azure Active Directory (Azure AD):Azure AD 提供传统的用户名和密码身份管理、角色和权限管理等功能。除此之外,它还提供更多企业解决方案,如多因素身份验证、应用程序监控、解决方案监控和告警。

  • Azure Active Directory 商业对消费者:Azure Active Directory 商业对消费者(B2C)是一个面向移动和 Web 应用程序的云身份管理解决方案。它提供了现成的身份验证提供程序,您可以在您的应用程序和自定义 API 中使用这些提供程序。现成的身份验证提供程序示例包括 Facebook 和 Google。

  • Active Directory 联合服务:您可以使用 Active Directory 联合服务(ADFS)来使用您组织中的本地身份保护 Web API。ADFS 可以与 Azure AD 在混合模式下配置。然后,您可以使用相同的 API,例如 Microsoft Graph,在仅使用 Azure AD 时连接到您的本地身份。

  • API 管理:您也可以使用 API 管理来保护您的 Web API。您可以使用高级安全策略、API 密钥、流量限制来防止 DDoS 攻击等,为您的 Web API 增加一层额外的安全性。

在第九章的设计、安全性与身份识别部分,保护您的资源,我们将更详细地介绍可用的身份验证提供程序。本节简要概述了在您的 Web API 中使用的提供程序。

API 管理在 第四章中有更详细的介绍,实施无服务器和微服务

总结

在本章中,我们已经介绍了设计 Web 应用程序的目标。我们讨论了 Azure Web 应用程序、App Service 计划、如何为容器设计 Web 应用程序、如何为高可用性、可扩展性和性能设计 Web 应用程序,以及如何设计和保护自定义 Web API。

在下一章中,我们将继续进行无服务器和微服务目标的学习。

问题

请回答以下问题以测试你对本章内容的掌握情况。你可以在本书最后的评估部分找到答案:

  1. Redis Cache 是一种内存键值数据存储吗?

  2. Redis Cache 的基础层是否适合生产环境?

  3. 你能将 Azure B2B 用作应用程序的身份验证提供者吗?

进一步阅读

你可以查看以下链接,获取更多关于本章所涵盖主题的信息:

第四章:实现无服务器和微服务

在上一章中,我们介绍了 Web 应用程序的目标。您了解了 Web 应用程序、App Service 计划、容器、Web API 等内容。现在,您应该知道何时使用这些不同的功能。

本章介绍了无服务器和微服务。它将涵盖无服务器计算及 Azure 在创建无服务器应用程序方面的提供,如 Azure Functions 和 Azure Logic Apps。您将了解如何使用 Azure 容器和 API 管理设计无服务器计算。最后,还将讨论基于微服务的解决方案。您将了解微服务容器及其可用的不同平台。

以下主题将涵盖:

  • 使用 Azure Functions 的事件驱动操作

  • 使用 Azure Functions 和 Logic Apps 设计应用程序

  • 使用 Azure 容器实例设计无服务器计算

  • 容器编排及不同的容器编排平台

  • Azure Service Fabric

  • API 管理

  • 云原生部署与资产迁移

技术要求

本章使用以下工具进行示例演示:

本章的源代码可以从这里下载:

使用 Azure Functions 的事件驱动操作

Azure Functions 是一个无服务器计算服务,使您能够创建事件驱动的操作和触发器,而无需配置或管理自己的基础设施。在 Azure Functions 中,您可以运行响应 Azure、第三方服务或本地系统事件的脚本或自定义代码。您可以构建基于 HTTP 的 API 端点(称为 HTTP 触发器),这些端点可以被各种应用程序、移动设备和物联网设备访问。您还可以创建 定时触发器,根据计划运行。使用 Azure Functions,您只需为实际消耗的资源付费。

Functions 使用 Azure 存储账户来存储代码和配置绑定。它使用标准的 Azure Storage,提供 Blob、表格和队列存储,用于存储文件和触发器。您可以为函数使用与 Web 应用程序和 API 相同的 App Service 计划。Azure Functions 还可以部署在 应用服务环境ASEs)中。

有关 Azure Functions 及其支持的事件和触发器的更多信息,您可以参考以下网站:docs.microsoft.com/en-us/azure/azure-functions/functions-overview

有关不同应用服务计划和 ASE 的更多信息,请参阅第三章,设计 Web 应用程序

Azure Functions 可以从 Azure 门户和 Visual Studio 2017 创建,并可以使用多种编程语言创建,例如 C#、F#、Node.js、Java、PHP、Batch、PowerShell、JavaScript、Python 和 TypeScript。它们还可以使用 ARM 模板创建。它们可以部署在 Windows 或 Linux 上,并且可以使用持续部署。在编写本书时,它支持 Bitbucket、Dropbox、外部存储库(Git 或 Mercurial)、本地 Git 存储库、GitHub、OneDrive 和 Visual Studio Team Services 作为部署源。可以从 Azure 门户配置持续部署。

Azure Functions 的持续部署

Visual Studio 中的 Azure Functions 工具自 15.3 版本发布以来已包含在内。如果要使用 Visual Studio 2017 创建它们,请将 Visual Studio 更新至至少 15.3 版本或更高版本。

消耗应用服务计划

对于 Azure Functions,Microsoft 引入了一种新的托管计划,其中您与其他客户的函数共享一组实例。此计划称为消耗计划。与其他可用的应用服务计划相比,此计划更具成本效益,因为它会根据工作负载自动缩减和扩展。当您的函数未运行时,您不需要支付任何费用;当函数运行时,实例会根据传入事件的数量动态添加和删除。在消耗计划上托管的函数最长可以运行 10 分钟(默认超时为 5 分钟,但可以增加到 10 分钟)。Azure Function 代码和绑定配置存储在单独的存储帐户 Azure File Storage 上。

当你需要让你的函数持续运行,或者让它与其他函数在同一个应用服务计划中运行,或者需要更多的 CPU 功率,或者你想在 Linux 上托管你的函数时,最好为你的函数使用专用的应用服务计划。所有其他可用的应用服务计划也可以用于 Azure Functions。

使用 Azure Functions 设计应用程序解决方案

在此演示中,我们将从 Azure 门户创建一个 Azure Function。此函数将监听 HTTP 触发器,然后将消息添加到队列中:

  1. 打开portal.azure.com/导航到 Azure 门户。

  2. 单击“New”,在搜索栏中键入Function App,然后单击“Create”按钮。

  3. 会打开一个新的面板,你可以在其中填写函数的基本设置。对于托管计划,我们使用队列来存储消息。使用消费计划时,队列存储不是存储帐户的一部分,因为它仅使用 Azure 文件存储来存储函数文件。对于应用服务计划,你可以创建一个新的应用服务计划,或者选择一个现有的计划。你也可以选择一个 ASE。对于存储,默认情况下,会创建一个新的存储帐户。如果你想使用现有存储帐户,也可以选择它。填写以下详细信息并点击创建:

从 Azure 门户创建 Azure 函数

  1. 创建后,从 Azure 门户打开函数,在左侧菜单中,选择函数应用下的函数 | 新建函数

从 Azure 门户的 Azure Functions 向导

  1. 在下一个屏幕上,选择 HTTP 触发器:

选择 HTTP 触发器

  1. 下一步是 HTTP 触发器设置。填写以下值。对于授权级别,目前可以选择匿名。然而,这仅用于演示目的;对于生产环境的函数不应该选择该选项。点击创建,触发器将被创建:

HTTP 触发器设置

  1. 配置队列设置,点击集成 | 新输出,然后选择Azure 队列存储。点击选择:

配置队列

  1. Azure 队列存储输出中,保持默认设置并点击保存:

配置队列

  1. 在左侧菜单中,选择你的函数。代码编辑器将打开。用以下代码替换现有代码:
using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, ICollector<string> outputQueueItem, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    // parse query parameter
    string name = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
        .Value;

    // Get request body
    dynamic data = await req.Content.ReadAsAsync<object>();

    // Set name to query string or body data
    name = name ?? data?.name;

    outputQueueItem.Add("Name passed to the function: " + name); 

    return name == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}
  1. 上述代码会向队列中添加一条消息,接着你需要点击保存:

  2. 要测试代码,点击屏幕右侧的测试标签。你可以在 JSON 调用中提供一条消息,并点击保存并运行:

测试函数

  1. 默认代码会生成一个输出消息,并显示在输出窗口中。要查看添加到队列的内容,打开 Azure Storage Explorer 并使用凭证连接到你的 Azure 帐户。在左侧树视图中,导航到函数存储帐户并点击队列。可以在那里找到已添加的消息:

在 Azure Storage Explorer 中的队列消息

Azure Storage Explorer 是 Visual Studio 的一部分 Azure 工具。你可以查看来自存储帐户的 Blob、队列和表数据。你还可以通过此直接链接下载 Azure Storage Explorer:go.microsoft.com/fwlink/?LinkId=708343&clcid=0x409

持久化函数

在编写本书时,Durable Functions 仍处于预览阶段。Durable Functions 是 Azure Functions 和 Azure WebJobs 的扩展,它提供了创建具有状态管理功能、检查点和重启机制的有状态函数的能力。

它引入了一种新的协调器功能,具有一些优势,具体如下:

  • 工作流可以通过代码创建;不需要 JSON 架构。

  • 它可以同步和异步地调用其他函数。输出可以存储在本地变量中。

  • 它保存函数的状态,当虚拟机等待或重启时。

使用 Logic Apps 的工作流驱动应用程序

Logic Apps 是 Azure 提供的无服务器服务之一,它与 Azure Functions 有很多重叠。两者都可以用于集成应用程序或服务。两者之间的主要区别在于,Azure Functions 是事件驱动的,而 Logic Apps 更侧重于工作流驱动。你可以使用 Logic Apps 通过 Azure 门户中的可视化设计器来自动化业务流程(开发人员也可以在 Visual Studio 中创建它们),而 Azure Functions 完全由代码编写。然而,你仍然可以在 Logic App 中调用 Azure Functions。

使用 Logic Apps,你可以构建集成多个云服务和本地应用程序的应用程序。这些可以是 Azure 服务、第三方云服务、不同的数据存储和数据库以及 LOB 应用程序。Azure Logic Apps 提供了许多内置的连接器,你可以在工作流中利用这些连接器。此外,你还可以使用 Visual Studio 创建自己的连接器。每个连接器都提供一个 API,可以在 Logic App 中调用。此连接器也添加了身份验证。

你可以参考以下文章,了解所有可用的 Azure Logic Apps 连接器概述:docs.microsoft.com/en-us/azure/connectors/apis-list

除了使用可视化编辑器外,你还可以手动创建和调整工作流定义语言(WDL)架构。此架构使用 JSON 创建,可以在 Visual Studio 中从头开始创建,或者在 Azure 门户中调整。它们都使用代码视图编辑器(Visual Studio 使用与 Azure 门户相同的编辑器)。

一些功能只能直接添加到架构中,不能通过可视化编辑器创建。例如,日期和时间格式化以及字符串连接。Logic App 定义文件可以添加到 ARM 模板中,并通过 PowerShell、CLI 或 REST API 部署。

这是 JSON 后台代码文件的一个示例:

{
  "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "order": {
      "defaultValue": {
        "quantity": 10,
        "id": "mycustomer-id"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "Request": {
      "type": "request",
      "kind": "http"
    }
  },
  "actions": {
    "order": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "http://www.packt.com/?id=@{parameters('customer').id}"
      }
    },
    "ifTimingWarning": {
      "type": "If",
      "expression": "@less(actions('customer').startTime,addseconds(utcNow(),-1))",
      "actions": {
        "timingWarning": {
          "type": "Http",
          "inputs": {
            "method": "GET",
            "uri": "http://www.packt.com/?recordLongOrderTime=@{parameters('customer').id}&currentTime=@{utcNow('r')}"
          }
        }
      },
      "runAfter": {
        "order": [
          "Succeeded"
        ]
      }
    }
  },
  "outputs": {}
}

使用 Logic Apps 设计应用程序解决方案

在这个演示中,我们创建了与之前的 Azure Function 演示相同的功能。我们将消息添加到队列中。通过这种方式,你可以看到事件驱动方法和工作流驱动方法之间的区别。步骤如下:

  1. 通过打开portal.azure.com/导航到 Azure 门户。

  2. 点击新建,并在搜索框中输入Logic App。点击创建按钮。

  3. 一个新的窗格将打开,你可以在其中填写逻辑应用程序的基本设置。添加以下内容并点击创建

Azure 逻辑应用程序设置

  1. 当你在 Azure 门户中导航到逻辑应用程序时,设计器将被打开。点击HTTP 请求触发器

Azure 逻辑应用程序设计器

  1. 工作流画布将打开。点击顶部动作,当接收到 HTTP 请求时,并向其中添加以下 JSON 架构:
{
    "type": "object",
    "properties": {
        "name": {
            "type": "string"
        }
    }
}

Azure 逻辑应用程序设计器

  1. 点击新建步骤以添加一个动作。点击添加动作,在搜索框中输入Azure Queue。选择Azure 队列 - 将消息放入队列

在 Azure 逻辑应用程序设计器中添加动作

  1. 给你的连接命名,比如PacktQueueConnection。然后,你可以从 Azure 订阅中的不同存储帐户中选择一个。选择同样用于 Azure 函数的存储帐户。点击创建

  2. 选择outqueue并添加以下消息:传递给逻辑应用程序的名称:。然后在冒号后添加名称参数,点击保存

配置消息

  1. 转到逻辑应用程序的概览设置页面并将回调 URL 复制到剪贴板:

检索 API 请求 URL

  1. 现在打开 Postman,或其他 API 测试工具,并粘贴请求 URL。将与我们在 Azure 函数示例中使用的相同消息添加到 Body 中,然后按回车键:

在 Postman 中创建 POST 请求

  1. 再次打开 Azure 存储资源管理器工具,你将在其中看到由逻辑应用程序创建的队列消息:

由逻辑应用程序创建的队列消息

Postman 可以从以下网址下载:www.getpostman.com/

使用 Azure 容器实例设计无服务器计算

容器是一种广泛接受的开放标准,并且显著改变了应用程序的开发和部署方式。容器是一种应用程序打包和部署机制,它简化了我们开发和部署软件的方式。通过使用容器,我们可以将所有使应用程序运行的不同工件(如配置文件、数据库和 Web API)放入一个隔离的包中,并将其部署到任何地方。这消除了在将软件部署到不同环境(如开发、测试或生产环境)时通常出现的意外故障。而且,不再需要了解这些不同环境的任何信息,例如它使用的操作系统是什么。如果你的应用程序在开发环境中运行,它将在所有环境中运行。由于隔离,容器还解决了运行不同版本的运行时或应用程序之间可能相互干扰的问题。

Azure 提供了Azure 容器实例ACI),它提供了一个托管的环境,可以在 Azure 中运行容器,而无需管理虚拟机和底层基础设施。一个 ACI 是一个单独的 Docker 容器,你只需为所消耗的资源付费(每个运行实例按秒计费)。它提供了基于角色的访问控制RBAC)来管理实例,你可以在单个容器级别追踪资源使用情况。容器可以部署在 Windows 和 Linux 上。

容器可以通过 PowerShell、CLI 或 Azure 门户来创建。

创建容器

容器可以很容易地创建。在这个示例中,容器是通过 CLI 创建的,仅需要几个参数。要创建容器,请从 Azure 门户打开 Azure Cloud Shell,选择Bash选项卡,并添加以下代码:

这一步是可选的。如果你想检查并更改默认选择的 Azure 订阅,可以使用此步骤:

az account show
az account set -s "Your-Subscription-Name"

接下来,创建资源组和容器:

az group create --name packtcontainergroup --location "West Europe"
az container create -g packtcontainergroup --name packtcontainer --image library/nginx --ip-address public

你也可以使用以下 URL 在 Windows 设备上安装 CLI 2.0:azure.microsoft.com/nl-nl/blog/azure-cli-2-0-new-commands-features-available-now-in-azure-cloud-shell/

容器编排

一组容器由容器编排进行管理。编排提供了一个统一的实体,供你管理调度、扩展、健康监控、故障转移、网络和应用程序升级等任务。此外,持续集成和持续部署也在编排级别处理。

ACI 提供了一种分层方法来编排容器。ACI 为您提供了管理单个容器的功能。它可以管理简单应用程序、任务自动化以及孤立容器的构建任务。对于更高级的场景,当您需要完整的容器编排,包括跨多个容器的服务发现、自动扩展和协调的应用升级时,您需要使用编排平台。

编排平台处理管理容器集群的任务。编排平台仅负责多容器架构,不需要担心底层基础设施,因为这些都由 Azure 处理(使用 ACI)。

容器编排提供以下功能和能力:

  • 扩展:编排者可以添加或删除容器实例。此操作可以手动完成,也可以自动完成。

  • 服务发现:该功能允许容器相互定位,即使 IP 地址发生变化,或者容器在物理主机之间移动时。

  • 网络:该功能提供一个网络,供底层容器在多个主机机器之间进行通信。

  • 调度:调度器将使用容器镜像和资源请求来定位适合运行容器的虚拟机。

  • 健康监控:该功能监控容器的健康状态,并能自动提供重新调度。

  • 应用升级:该功能提供协调的容器升级和回滚。

  • 故障切换:该功能检查机器的当前状态,并将容器从不健康的机器重新调度到健康的机器上。

  • 亲和性/反亲和性:该功能决定一组容器应该靠近运行,以提高应用性能,或者远离运行,以提高应用的可用性。

Azure 提供对不同编排平台的支持。Azure 支持的平台包括 Azure 容器服务(AKS)、Kubernetes、DC/OS(由 Apache Mesos 提供支持)、Docker Swarm 和 Azure Service Fabric。

Azure Service Fabric

Azure Service Fabric 是 Microsoft 提供的一个编排平台,用于部署、管理和打包微服务与容器。它类似于 Docker Cloud 和 Kubernetes,而 Service Fabric 完全集成在 Azure 平台中。

三者之间的区别在于,Service Fabric 是唯一一个完全绑定 Azure 平台的编排平台。与 Azure 平台的紧密集成的例子包括 Azure Service Fabric 可以直接使用 API 管理、事件中心(Event Hub)和物联网中心(IoT Hub)作为无状态网关。使用其他提供商时,无状态网关通常是手动构建的。您也可以在 Azure Fabric 中导入 Docker 镜像,但 Docker 容器的编排将完全由 Azure Service Fabric 处理。

Azure Service Fabric 提供了一个轻量级的运行时,用于构建分布式、可扩展、无状态和有状态的微服务,这些微服务可以运行在容器内。使用 Service Fabric,你可以将微服务和容器部署到一组机器的集群中。此外,它还提供了全面的应用管理功能,用于在容器中部署、配置、升级、打补丁、删除和监控应用程序和服务。Service Fabric 量身定制用于创建完整的云原生应用程序,这些应用程序可以从小规模起步,并随着时间的推移扩展到数千台机器。

Service Fabric 也可以在你自己的数据中心内部署,运行在 Windows Server 机器上。在 Azure 上,Service Fabric 可以部署在 Windows、Linux 和 Azure Stack 上。有许多基于 Service Fabric 运行的 Azure PaaS 解决方案或资源,例如 Azure SQL 数据库、Cosmos DB、Intune、IoT Hub、Event Hubs、Skype、Cortana、Power BI 和 Microsoft Dynamics。

Azure Service Fabric 概述

应用程序使用 Service Fabric 编程模型来创建和管理你的服务。有 Service Fabric API 可用于自定义应用程序,以充分利用平台的功能和应用框架。你可以部署不使用 Service Fabric API 的来宾可执行文件,它们可以利用底层平台的能力。来宾可执行文件被视为无状态服务,并在集群中的不同节点之间进行部署。它们可以从亲和性、反亲和性和故障转移、应用生命周期管理、发现能力等方面获益。

Service Fabric 支持两种不同的编程模型,可以用于在 Visual Studio 2017 中构建可扩展和有状态的服务。它们分别是称为可靠服务(Reliable Services)和可靠演员(Reliable Actor)编程模型。通过在代码中利用这些模型,Azure 可以保证服务在 Azure Service Fabric 内是一致的、可扩展的、可靠的并且可用的。Service Fabric 还与 ASP.NET Core 集成,因此你可以编写无状态和有状态的 ASP.NET Core 应用程序,利用这些可靠的集合和 Service Fabric 的编排能力。

关于 Azure Service Fabric 可用的编程模型的更多信息,可以参考 Microsoft 文档:docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-introduction。关于可靠演员编程模型的更多信息,可以参考:docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-introduction

生命周期管理

使用 Azure Service Fabric,您可以管理微服务应用程序的整个生命周期。它支持从开发微服务到部署、管理和维护的所有不同任务。为了实现这一目标,Azure Service Fabric 提供了可以独立操作的不同角色。这些不同的角色如下:

  • 服务开发者:开发可以在不同应用程序中使用的通用微服务。开发者使用可靠服务和可靠 Actor 编程模型来创建微服务。

  • 应用程序开发者:使用服务开发者开发的各种服务创建应用程序。应用程序开发者创建应用程序清单。

  • 应用程序管理员:创建应用程序配置文件并创建部署包。管理员使用 PowerShell 创建应用程序包。

  • 运维人员:部署应用程序,在部署后监控应用程序的健康状态和性能,并维护物理基础设施。运维人员使用 PowerShell、CLI 或 REST API 部署应用程序。

有关 Service Fabric 应用程序生命周期功能的更多信息,请参阅以下文章:docs.microsoft.com/en-us/azure/service-fabric/service-fabric-application-lifecycle

API 管理

API 管理是一个 Azure 服务,可以用来将不同类型的应用程序作为 API 暴露到外部。您可以导入自定义 API 或无服务器应用程序,如 Azure Functions、Web API、Logic Apps 或 Service Fabric 应用程序。

您还可以将 API 管理用于您的内部组织,并将其作为所有开发人员可以用来组合他们的应用程序或服务的服务库。

API 管理提供 API 网关、管理门户和开发者门户,以下部分将详细介绍这些内容。

API 网关

API 网关充当您的应用程序与外部世界之间的桥梁。这个应用程序可以是自定义 API,也可以是任何其他后端应用程序。API 网关接受 API 调用并将其路由到后端。它提供额外的功能,如通过添加策略和身份验证方法增强安全性。它可以验证 API 密钥、JWT 令牌、证书等。您可以在不使用代码修改的情况下创建转换,并强制执行使用配额和速率限制。它还支持缓存和限流,并可以记录调用元数据以供分析使用。

API 管理门户

API 管理门户是你定义和导入自定义 API 的地方。你也可以在这里将你的 API 打包成 产品。在 API 管理中,API 被作为产品向开发者公开,可以配置标题、描述和使用条款。产品可以是 开放的受保护的。对于受保护的 API,开发者需要订阅。开放 API 可以在没有订阅的情况下使用。

API 管理使用 来管理产品在开发者中的可见性。有三种不同类型的组:

  • 管理员:管理员可以创建 API、操作和产品,供开发者使用,并管理 API 管理服务实例。

  • 开发者:开发者是使用你的 API 构建应用程序的用户。开发者门户的用户属于这一群体。他们可以获得访问开发者门户的权限,并在他们的自定义应用中使用这些 API。

  • 访客:访客用户仅被授予对开发者门户的只读访问权限。他们可能是未来的客户或开发者,或者仅需查看不同产品的用户。

在 API 管理门户中,你可以设置策略,如访问限制策略和转换策略。你可以通过分析获取洞察,并创建 API 的不同版本。

开发者门户

API 管理还提供开发者门户,开发者可以从中访问你的 API 并阅读 API 文档。它提供一个控制台,开发者可以在其中测试 API。开发者还可以从那里订阅不同的产品。未来的客户可以访问门户,查看包含操作的产品,并注册订阅。开发者也可以从中获取关于他们使用情况的洞察。

开发者门户的外观和风格可以自定义。你可以向门户添加自定义内容、样式以及公司的品牌标识。

云原生部署与资产迁移

大多数组织迁移到云端是为了降低成本并加速应用程序的开发过程。将应用程序迁移到 Azure,你可以使用几种策略。选择哪种策略取决于应用程序的类型以及组织的优先事项和需求。

组织正在迁移到云端,以降低成本并加速应用程序的开发过程。你可以使用几种策略将应用程序迁移到云端。使用哪种策略取决于应用程序的类型以及组织的需求和优先级。并非所有应用程序都值得投入资金迁移到 PaaS 模式或开发云原生应用。对于现代应用,你可以选择迁移到云优化或云原生应用,但对于现有或遗留资产应用,关键是要尽量节省时间和成本(无需重新架构或修改代码),同时将它们迁移到云端,以实现其中的显著利益。

有三个不同的迁移级别可以选择:

  • 云基础设施准备就绪:在这种方法中,你只需将当前的应用程序迁移并将其托管在 Azure 虚拟机中。此方法无需对代码进行更改。

  • 云 DevOps 准备就绪:使用这种方法,你将使用容器来开发和部署应用程序。这将应用程序与基础设施层解耦,从而减少由应用程序依赖性引起的故障。你还可以在编排层面上利用持续开发和集成,这使得部署过程更加快速。

  • 云优化:此迁移方法旨在现代化你的关键业务应用程序。这种现代化通常需要你为云环境重新架构应用程序。需要编写新的代码,你可以创建云原生应用程序并利用微服务架构。

总结

本章内容涵盖了无服务器和微服务。我们讲解了 Azure Function、Azure Logic Apps 以及它们之间的主要区别。我们还介绍了 Azure 容器服务和容器编排。我们解释了什么是 Azure Service Fabric 以及什么是 API 管理。接下来,我们讨论了何时选择将资产迁移到云端,何时选择云原生部署模型。

本章结束了设计计算基础设施目标,下一章将开始设计网络实施目标,从强大的网络实施开始。

问题

请回答以下问题,以测试你对本章信息的理解。你可以在本书末尾的评估部分找到答案。

  1. 你能否将 API 管理用作托管在 Azure Service Fabric 上的微服务的无状态网关?

  2. 你能否将 Kubernetes 容器部署到 Azure 容器实例中?

  3. Azure Service Fabric 是否适合 DevOps 环境?

进一步阅读

你可以查看以下链接,获取更多关于本章中涉及的主题的信息:

第五章:强大的网络实施

在上一章中,我们介绍了无服务器和微服务的目标。我们讨论了如何设计无服务器计算以及 Azure 提供的创建这些服务的功能。我们还介绍了基于微服务的解决方案,以及不同的 Azure 功能之间的差异及其适用场景。

本章介绍了网络目标。它从如何设计 Azure 虚拟网络开始,包括使用 Azure 网络服务设计的解决方案,例如使用 Azure 负载均衡器和 Azure 流量管理器的负载均衡设计,定义 DNS、DHCP 和 IP 策略,确定何时使用 Azure 应用程序网关,以及何时使用多节点应用程序网关、流量管理器和负载均衡器。

接下来,本章介绍如何为 Azure 虚拟网络设计外部连接。你将学习如何确定何时使用 Azure VPN、ExpressRoute、虚拟网络对等架构,何时使用用户定义路由UDRs),以及何时使用 VPN 网关站点对站点故障切换功能来支持 ExpressRoute。

最后,本章介绍如何通过确定何时使用网络虚拟设备、如何设计边界网络(DMZ)以及确定何时使用Web 应用程序防火墙WAF)、网络安全组NSG)和虚拟网络服务隧道来设计安全策略。

本章将涵盖以下主题:

  • 设计 Azure 虚拟网络

  • 何时使用 Azure 应用程序网关

  • 何时使用多节点应用程序网关、Azure 流量管理器和负载均衡器

  • 设计 Azure 虚拟网络的外部连接

  • 设计安全策略

技术要求

本章使用以下工具进行示例:

本章的源代码可以在此下载:

Azure 虚拟网络

Azure 虚拟网络VNet)是传统网络的虚拟化表示,托管在云中。它完全基于软件,与传统网络使用电缆、路由器等设备不同。虚拟网络提供安全的隔离环境,并将 Azure 资源相互连接。默认情况下,不同的资源不能从虚拟网络外部访问。然而,你可以将多个虚拟网络互连,或将虚拟网络连接到本地网络。所有连接在同一虚拟网络中的 Azure 资源必须位于同一区域和订阅下。

当你创建虚拟网络时,一个子网会自动创建。你可以在同一个虚拟网络内创建多个子网(每个虚拟网络最多允许 1000 个子网)。将多个虚拟网络连接在一起称为 虚拟网络对等连接。每个 Azure 订阅最多允许 10 个对等连接。

在 Azure 中,最小的子网是 /29 子网,包含 8 个地址,最大的子网是 /8,包含 1600 万个地址。

如需了解更多关于子网划分的信息,你可以参考子网掩码备忘单:www.aelius.com/njh/subnet_sheet.html

IP 地址

Azure 中的虚拟网络可以拥有私有和公共 IP 地址。私有 IP 地址只能在虚拟网络内访问,而公共 IP 地址可以从互联网访问。你可以通过 VPN 网关或 ExpressRoute 连接访问私有 IP 地址。私有和公共 IP 地址都可以是静态或动态的,但当你创建新的虚拟网络时,IP 地址默认是静态的。你可以通过 Azure 门户、PowerShell 和 CLI 将 IP 地址更改为静态。

Azure 门户中的动态和静态 IP 地址配置

  • 动态:动态 IP 地址由 Azure 自动分配,并从虚拟网络中配置的子网地址范围内选择。IP 地址在 Azure 资源创建或启动时分配给该资源。当资源停止并释放时(例如你从 Azure 门户停止虚拟机时,虚拟机会自动释放),该 IP 地址将被 Azure 添加回子网的可用地址池中。

  • 静态:静态 IP 地址(包括私有和公共)是预先分配的,并且在你删除分配之前会保持不变。你可以手动选择静态私有 IP 地址。它们只能分配给非互联网连接,比如内部负载均衡器。你还可以将私有 IP 地址分配给与你本地网络的连接或 ExpressRoute 电路。公共静态 IP 地址由 Azure 自动创建,并可以分配给面向互联网的连接,例如外部负载均衡器。

公共 IP 地址

公共 IP 地址可以用于 Azure 服务之间的内部通信以及通过互联网进行的外部通信。你可以使用 IPv4 和 IPv6 作为公共 IP 地址,但对 IPv6 的支持有限。写作时,你只能将 IPv6 地址分配给外部负载均衡器。

Azure 在 Azure 资源启动或创建时,会将公共 IP 地址分配给网络接口。当发起外部连接时,Azure 会将私有 IP 地址映射到公共 IP 地址(SNAT)。返回流量也会被允许进入资源。

公共 IP 地址通常用于虚拟机、面向互联网的负载均衡器、VPN 网关和应用程序网关。每个订阅最多可以有 60 个动态公共 IP 地址和 20 个静态公共 IP 地址。前五个静态 IP 地址是免费的,其余的需要付费。

以下文档超出了本书的范围,但绝对值得一读——理解 Azure 中的出站连接docs.microsoft.com/en-us/azure/load-balancer/load-balancer-outbound-connections?toc=%2fazure%2fvirtual-network%2ftoc.json

私有 IP 地址

私有 IP 地址支持 IPv4 和 IPv6,但对 IPv6 的支持也有限。它们只能动态分配,并且 IPv6 地址在 VNet 内部无法相互通信。唯一使用 IPv6 地址的方法是将其分配给面向互联网的负载均衡器,其中前端 IP 地址是 IPv4 地址,后端是 IPv6 地址。

私有 IP 地址通常用于虚拟机、内部负载均衡器和应用程序网关。VPN 无法拥有私有 IP 地址,因为它总是面向互联网。每个 VNet 最多可以拥有 4096 个私有 IP 地址。然而,你可以创建多个 VNet(每个订阅最多 50 个)。

这些限制基于以下页面的默认限制:docs.microsoft.com/en-us/azure/azure-subscription-service-limits?toc=%2fazure%2fvirtual-network%2ftoc.json#networking-limits。你可以提交支持请求来提高这些限制。根据限制表的描述,限制不能超过最大限制。

创建公共 IP 地址

在以下示例中,我们将使用 PowerShell 创建一个静态公共 IP 地址:

  1. 通过打开 portal.azure.com/ 进入 Azure 门户。

  2. 打开 Azure Cloud Shell,并确保选择了 PowerShell。

  3. 添加以下命令:

如果需要,选择正确的订阅:

Select-AzureRmSubscription -SubscriptionId "********-****-****-****-***********"

创建 IP 地址:

New-AzureRmPublicIpAddress -Name PublicPacktIP -ResourceGroupName PacktPub -AllocationMethod Static -Location "West Europe"
  1. 这是创建静态 IP 地址的最简单方法。然而,你仍然需要将它分配给一个 Azure 资源。此时它只是刚刚创建。为了本示例,我使用了一个现有的资源组。如果你没有资源组,需要在创建 IP 地址之前先创建一个资源组。

DNS

除了 IP 地址,虚拟机还可以通过使用主机名或 完全限定域名FQDN)来访问。你可以为此在公共 IP 地址上配置 DNS 标签。对于所有托管在同一 VNet 内的 Azure 服务,可以使用 Azure 内部 DNS 进行名称解析。如果你想在多个 VNet 中使用 DNS,则必须设置自己的 DNS 服务器。例如,如果你添加 DNS 标签 packtuniquedns,FQDN 将变为 packtuniquedns.westeurope.cloudapp.azure.com。此 FQDN 将映射到 Azure 资源的公共 IP 地址。

内置 DNS 名称解析

你也可以通过添加 CNAME 记录将 DNS 指向 Azure 资源。因此,你可以使用 Azure DNS 为资源分配自定义主机名,而不是使用默认的 DNS 后缀。如果你希望通过主机名访问 Azure 资源且没有 www 前缀,你需要添加 A 记录。CNAME 仅适用于带有 www 前缀的情况。

有关此方面的更多信息,你可以参考以下文章——在 Azure 门户为 Linux 虚拟机创建完全限定的域名docs.microsoft.com/en-us/azure/virtual-machines/linux/portal-create-fqdn使用 Azure DNS 为 Azure 服务提供自定义域名设置docs.microsoft.com/en-us/azure/dns/dns-custom-domain?toc=%2fazure%2fvirtual-network%2ftoc.json#public-ip-address

创建带有两个子网的 VNet

在本示例中,我们将从 Azure 门户创建一个带有两个子网的 VNet。你也可以使用 PowerShell、CLI 或 ARM 模板。我们将根据以下示意图创建 VNet 和子网:

带有两个子网的 VNet

按照以下步骤创建 VNet:

  1. 通过打开 portal.azure.com/ 访问 Azure 门户。

  2. 点击“新建”,在搜索框中输入virtual network以创建一个新的虚拟网络:

创建新的虚拟网络

  1. 将打开一个新的面板,你可以在其中填写设置。添加以下值:

VNet 和子网设置

  1. 点击“创建”。在从 Azure 门户创建 VNet 时,你只能创建一个子网。因此,第二个子网需要在创建 VNet 后添加。

  2. 进入 VNet 设置,从左侧菜单选择“子网”,然后点击顶部菜单中的“+ 子网”,如下图所示:

添加第二个子网

  1. 将打开一个新的面板。输入以下值并点击“确定”:

第二个子网设置

Azure 负载均衡器

Azure 负载均衡器是一种可以用于虚拟机、容器和应用的负载均衡器。它在传输层(OSI 网络参考模型中的第四层)工作,通过在同一 Azure 数据中心内分发网络流量。它提供外部负载均衡器和内部负载均衡器。

外部负载均衡器提供一个带有公共 IP 地址的单一端点,所有客户端应用和服务都会调用此端点,然后将传入流量分发到多个健康的虚拟机、容器或应用上,以提供扩展、高可用性和性能。内部负载均衡器与外部负载均衡器具有相同的功能,但它使用私有 IP 地址。

外部和内部负载均衡器

Azure 负载均衡器有两个版本:

  • 基本版:基本版负载均衡器是免费的。它可以配置为面向互联网的负载均衡器、内部负载均衡器,并可以将流量转发到特定的虚拟机。对于面向互联网的负载均衡器,公共 IP 地址通过负载均衡器映射到私有 IP 地址。当流量进入时,Azure 使用内部 IP 地址将流量分配到 Azure 资源。

    它提供基于哈希的分发、端口转发、在扩展或缩减时的自动重新配置、服务监控和源 NAT。

  • 标准版:在撰写本文时,标准版负载均衡器仍处于预览阶段。除了基本负载均衡器提供的所有功能外,标准版还提供了企业级扩展。您可以使用独立虚拟机或最多 1000 个虚拟机实例来使用标准版负载均衡器。它还提供了公共和内部负载均衡器配置的诊断信息,通过使用 HA 端口提供高可靠性,并为每个端口提供规则。您可以使用 NSG(稍后将在本章中讨论)和可用性区域。

欲了解有关标准版负载均衡器的更多信息,您可以参考以下文章:docs.microsoft.com/en-us/azure/load-balancer/load-balancer-standard-overview

探针

Azure 负载均衡器使用探针来定义利用负载均衡器的服务器和服务的健康状况。探针有两种不同的类型:HTTP 探针和 TCP 探针。

对于云服务(如虚拟机、Web 应用、API 等),它使用来宾代理探针。在这种情况下,您的虚拟机上安装了一个来宾代理,该代理会返回一个 HTTP 200 OK 响应。负载均衡器每 15 秒向云服务发送一条消息,来宾代理会做出响应。您还可以创建一个自定义的 HTTP 探针,使用您自己的逻辑覆盖默认来宾代理的逻辑。TCP 探针通过三次握手建立连接。

启用健康日志记录后,数据会存储在 Azure 存储帐户中。您可以通过使用不同的 Azure 工具(如 PowerShell 或 CLI、REST API 或 Azure 门户)来查看这些日志数据。您还可以使用 Power BI 来可视化和分析数据,通过 Azure 审计日志内容包 for Power BI 提供的预定义仪表板。

如需更多信息并下载 Power BI 的 Azure 审计日志内容包,您可以参考 docs.microsoft.com/en-us/power-bi/service-connect-to-azure-audit-logs

Azure Traffic Manager

Azure Traffic Manager 将工作负载分散到全球多个地区和数据中心。它将处理负载并在 DNS 层面定位最接近的地理区域或最合适的区域。客户端发出 DNS 请求,Azure Traffic Manager 会根据 DNS 的位置确定最近的 Azure 区域,并通过 DNS 响应将该位置返回给客户端。然后,客户端直接调用该位置,Azure Traffic Manager 不再干预。Traffic Manager 还会监控端点,因此,如果某个地区发生故障,Traffic Manager 会返回另一个健康区域的端点。

这与 Azure 负载均衡器不同,后者客户端调用负载均衡器的 IP 地址,负载均衡器将流量分发到多个云服务上,如虚拟机、容器或 Web 应用。此外,Azure 负载均衡器将流量分发到同一地区和数据中心中的多个实例,而 Traffic Manager 可以跨多个地区和数据中心进行流量分发。

您可以在高可用且高性能的架构中同时使用 Azure 负载均衡器和 Azure Traffic Manager,如下图所示:

Azure Traffic Manager

Azure Traffic Manager 也在 第三章,设计 Web 应用程序 中的关于 Web 应用的高可用性和性能的部分进行了讨论。那里还描述了 Azure Traffic Manager 提供的不同路由方法。

Azure 应用程序网关

Azure 应用程序网关提供 应用交付控制器 (ADC),该控制器在应用层(OSI 网络参考模型中的第七层)上运行。

它提供了 web 负载均衡,因此它在第七层提供负载均衡,仅适用于 HTTP(S)。它还提供了一个 web 应用程序防火墙,可以用于保护您的应用免受常见的基于 web 的攻击,如跨站脚本、SQL 注入和会话劫持(在本章的 网络安全策略 部分中有更详细的描述)。它可以解密 HTTPS 流量,因此您可以将 SSL 证书安装在应用程序网关上,而不是安装在不同的 web 服务器上。这样,web 服务器就不必处理这些问题,管理也会更容易,因为所有内容都集中在一个地方。然后,应用程序网关将在响应发送回客户端之前对其进行加密。它还可以提供基于 URL 的内容路由,因此流量可以路由到特定的后端。例如,可以直接调用托管在专用后端上的 CDN,这样可以减少不必要的路由。它还提供健康监控和高级诊断功能。

Azure 应用程序网关

有关 Azure 应用程序网关及其不同功能的更多信息,请参阅 docs.microsoft.com/en-us/azure/traffic-manager/traffic-manager-overview。此页面还概述了 Azure 负载均衡器、Azure 流量管理器和 Azure 应用程序网关之间的所有差异。

Azure 虚拟网络的外部连接

云计算的普及程度日益增加,但在接下来的几年里,大多数组织仍将拥有并维护本地基础设施。事实上,一些组织由于业务需求或某些仍在使用的遗留系统,可能永远不会完全迁移到云端。安全性要求也可能是将部分数据保留在本地的原因。因此,混合环境的需求将永远存在。从网络的角度来看,Azure 提供了多种功能,可以建立从本地基础设施到 Azure 以及反向连接的无缝连接。

Azure VPN

Azure VPN 提供一个安全的网关,可以用来将您的本地基础设施与 Azure 连接,并通过将加密消息从一个位置发送到另一个位置来连接多个虚拟网络(VNet)。大多数组织使用 VPN 连接来让远程工作人员连接到他们的私有网络。

Azure VPN 提供多种方式来建立安全连接,例如站点到站点 VPN、点对站点 VPN 和 ExpressRoute。它们在以下章节中进行了描述。当为这些连接类型之一设置 Azure 网络网关时,您必须在 Azure 提供的不同 SKU 之间进行选择。Azure VPN 提供以下 SKU:

  • 基础版: 提供最多 10 个站点到站点 / VNet 到 VNet 隧道,最多支持 128 个点对站点连接。平均带宽为 100 Mbps。

  • VpnGw1: 提供最多 30 个站点到站点 / VNet 到 VNet 隧道,最多支持 128 个点对站点连接。平均带宽为 650 Mbps。

  • VpnGw2: 提供最多 30 个站点到站点 / VNet 到 VNet 隧道,最多支持 128 个点对站点连接。平均带宽为 1 Gbps。

  • VpnGw3: 提供最多 30 个站点到站点 / VNet 到 VNet 隧道,最多支持 128 个点对站点连接。平均带宽为 1.25 Gbps。

您可以设置基于路由或基于策略的 VPN 类型。使用哪种类型取决于您的 VPN 设备的兼容性以及您希望使用的 VPN 连接类型。

基于策略意味着您必须编写自己的路由表条目。这可能适用于小型组织,但大多数组织会选择动态配置。基于策略的路由也有一些限制;您只能使用 IKEv1 设置一个站点到站点 VPN 隧道,且不能设置点对站点隧道。

基于路由意味着路由表条目是动态添加的,您可以使用所有 VPN 连接类型和 IKEv2。

站点到站点 VPN

站点到站点 (S2S) VPN 旨在通过互联网在某个位置(例如办公室)与 Azure 之间创建安全连接。然后,您可以使用相同的 VPN 连接从该位置的每台服务器或计算机进行连接。它需要一个兼容的 VPN 设备或 路由和远程访问服务 (RRAS),并且您的 VPN 设备需要一个公共 IP 地址。可以通过启用远程访问服务器角色在 Windows 服务器上部署 RRAS。

S2S VPN 网关通过 IPsec/IKE(IKEv1 或 IKEv2)VPN 隧道创建连接。互联网协议安全 (IPSec) 是一个用于通过互联网安全连接的开放标准,互联网密钥交换 (IKE) 是与 IPSec 一起使用的密钥管理协议标准。这是一种用于交换加密和身份验证密钥的方法。

站点到站点 VPN 连接

有关兼容的 VPN 设备和支持的 VPN 类型的列表,请参考以下概述:docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-about-vpn-devices

VNet 到 VNet VPN

VNet 到 VNet 是一种可以设置的连接类型。在这种情况下,您正在创建多个 Azure VNet 之间的连接。设置这种连接的典型原因可能是为了地理冗余。这种连接类型与 S2S 连接类型相同。

点对站点 VPN

点对站P2S)VPN 是设计用于通过 IKEv2 或 SSTP 在客户端计算机之间建立安全连接的。连接是通过从客户端计算机启动并使用脚本进行建立的。这些连接适用于远程工作者,他们从不同位置登录私有网络,或者在需要少量客户端连接到 VPN 时使用。

安全套接字隧道协议SSTP)是一种通过 SSL/TLS 通道建立连接的 VPN 隧道。通过在端口443上使用 SSL/TLS,连接可以通过所有防火墙和代理服务器。

P2S 连接不需要 VPN 设备或客户端计算机的公共 IP 地址。它们可以与 S2S 连接一起使用,或者通过相同的 VPN 网关使用,只要两个连接的要求相同。

点对站 VPN 连接

ExpressRoute

ExpressRoute 是最先进的 VPN 连接类型。它通过您的内部 WAN 提供从本地基础设施到 Azure 的快速连接,而与 S2S 连接通过互联网不同。通过使用您的 WAN,ExpressRoute 可以提供比 S2S 连接更快的速度、更低的延迟和更高的安全性。每个 ExpressRoute 电路可以提供的最大带宽为 10 GBps。通过 ExpressRoute,您还可以与 Office 365 和 Dynamics 365 设置混合连接。ExpressRoute 还保证连接的正常运行时间 SLA,而 S2S 连接则没有。

ExpressRoute 提供以下连接模型:

  • 任意对任意(IPVPN):通过这种类型的连接,您可以使用 IPVPN 提供商将您的 WAN 与 Azure 集成。提供商负责在本地网络和 Azure 之间建立安全连接。WAN 提供商通常提供第三层连接。

  • 点对点以太网:通过这种类型的连接,您可以通过点对点以太网链路进行连接。点对点提供商通常提供第二层连接。

  • 位于云交换中心:通过这种类型的连接,您可以通过提供商的以太网交换机订购连接。这些提供商通常提供第二层交叉连接和管理的第三层交叉连接。

ExpressRoute VPN 连接

网络安全策略

由于如今的黑客攻击事件频发,强大的网络安全策略至关重要。仅创建一个公共 IP 地址并将您的 Azure 资源暴露在互联网上并不安全,这会让您容易受到攻击。设计您的网络时应考虑安全性,并减少暴露于互联网的内容。您可以使用 Azure 提供的功能来保护您的网络。Azure 提供对不同安全策略的支持,接下来的部分将进行描述。

DMZ

非军事区DMZ)或外围网络是组织内部网络和外部网络之间的物理或逻辑边界。外部网络可以是互联网。其目的是为内部网络增加一层额外的安全保护。你不从内部网络打开任何端口到互联网,而是仅仅开放端口到 DMZ。Azure 提供了多个功能,你可以用来创建 DMZ,例如 网络安全组NSG)、防火墙和 用户定义路由UDR)。

下图显示了使用前端 VNet 创建的物理 DMZ 示例,VNet 中有两个虚拟机。只有这个 VNet 与互联网连接。

简单的 DMZ 示例

网络安全组

NSG 是 Azure 内的一个访问控制列表,你可以在其中添加入站和出站规则。当虚拟机、虚拟网络或其他云服务之间建立连接时,会检查此列表,看看连接是否被允许或拒绝。

NSG 可以应用于一个或多个子网或单个网络接口NIC)。这意味着所有与此子网或 NIC 关联的资源将自动应用所有规则。

NSG 规则按优先级顺序处理,较低的数字优先于较高的数字,它们可以应用于入站或出站流量。

创建 NSG

按照以下步骤创建 NSG:

  1. 通过打开portal.azure.com/来导航到 Azure 门户。

  2. 点击“新建”,在搜索栏中输入Network Security Group,然后创建一个新的 NSG:

新的 NSG

  1. 打开一个新的面板。添加以下设置并点击“创建”:

新的 NSG 设置

  1. 一个 NSG 会创建一些默认的入站和出站安全规则。它们是低优先级规则,因为它们的编号较高,因此有很大的空间来添加自定义规则。要添加自定义规则,请点击左侧菜单中的“入站安全规则”:

NSG 默认入站和出站规则

  1. 点击“添加”按钮,并添加以下值以创建允许来自端口80的流量的规则:

新规则

  1. 现在,你可以通过点击左侧菜单中的“网络接口”或“子网”来将此 NSG 与 NIC 或子网关联:

将 NSG 与 NIC 或子网关联

用户定义路由(UDR)

当你创建子网时,Azure 会创建系统路由,使子网中的所有资源能够相互通信。你可以通过创建用户定义路由(UDR)来覆盖这些系统路由。通过这种方式,你可以强制流量遵循特定的路由。

例如,假设你有一个由两个子网组成的网络,并且你希望添加一个虚拟机(VM)作为 DMZ,并在其上安装防火墙。你希望流量只能通过防火墙,而不是在这两个子网之间传输。

要创建 UDR 并启用 IP 转发,必须在 Azure 中创建路由表。当此表创建并包含自定义路由时,Azure 会优先选择自定义路由,而不是默认的系统路由。

创建用户定义路由

创建 UDR 的步骤如下:

  1. 通过打开 portal.azure.com/ 进入 Azure 门户。

  2. 点击 New,在搜索栏中输入 Routing Table,然后创建一个新的路由表。

创建一个新的路由表

  1. 添加以下值:

路由表设置

  1. 创建了一个新的空路由表。要添加自定义路由,点击左侧菜单中的 Routes

空路由表

  1. 点击顶部菜单中的 Add 按钮,并添加以下值以创建自定义路由。在这个示例中,我们希望所有互联网流量都通过防火墙。因此,添加 0.0.0.0/0 作为 Address prefix。接下来,选择 Next hop typeVirtual appliance,即防火墙。最后,设置 Next hop address 为防火墙的内部 IP 地址:

添加自定义路由

了解如何创建 UDP 和虚拟设备的详细说明,请参考以下教程:docs.microsoft.com/en-us/azure/virtual-network/create-user-defined-route-portal

虚拟网络服务隧道

虚拟网络服务隧道会强制所有外部流量通过站点到站点的 VPN 隧道。如果没有这个功能,外部流量将直接从 Azure 传输到互联网。这给你提供了审计流量的机会。

强制隧道使用 UDR 定义路由。你现在选择虚拟网络网关,而不是虚拟设备:

虚拟网络服务隧道

了解有关虚拟网络服务隧道的更多信息以及如何使用 PowerShell 创建它的示例,可以参考以下教程:docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-forced-tunneling-rm

Web 应用防火墙

WAF 是应用程序网关的一部分,它提供防火墙来保护你的 Web 应用免受黑客攻击。它基于 OWASP 核心规则集 3.0。它最多可以保护 20 个应用程序,并通过 Azure Monitor 对你的应用进行监控(未来,监控功能也会添加到 Azure 安全中心)。

OWASP 是一个开放的应用安全标准。如需了解规则集的更多信息,可以参考 OWASP 网站:www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project

默认情况下,它保护你的应用免受以下攻击:

  • 来自 SQL 注入攻击

  • 来自跨站脚本攻击

  • 来自命令注入、HTTP 请求走私、HTTP 响应拆分和远程文件包含攻击

  • 针对 HTTP 协议违规和异常

  • 针对机器人、爬虫和扫描器

  • 它能够检测常见的应用配置错误

你还可以添加或自定义规则和规则组,以适应你应用的需求。你可以参考以下教程来自定义规则:docs.microsoft.com/en-us/azure/application-gateway/application-gateway-customize-waf-rules-portal

总结

本章内容涵盖了网络目标。我们讨论了如何设计 Azure 虚拟网络,介绍了 IP 地址和 Azure DNS。同时,我们还讨论了何时使用 Azure 应用程序网关、Azure 流量管理器和 Azure 负载均衡器。接着,我们探讨了如何使用不同的 VPN 连接设计 Azure VNet 的外部连接,最后,我们讨论了设计不同的安全策略。

在下一章中,我们将讨论混合应用。

问题

回答以下问题以测试你对本章信息的理解。你可以在本书末尾的评估部分找到答案:

  1. 当你在 Azure 中创建新的路由表时,系统路由表会被删除吗?

    1. 是的

    2. 不是的

  2. NSG 规则是否按照优先级从高到低进行处理?

    1. 是的

    2. 不是的

  3. DMZ 是否包括防火墙?

    1. 是的

    2. 不是的

进一步阅读

你可以查看以下链接以获取有关本章所涵盖主题的更多信息:

第六章:连接混合应用程序

在上一章中,我们介绍了网络目标。我们讲解了如何设计 Azure 中的虚拟网络,以及如何设计使用虚拟网络的解决方案。我们还讲解了 Azure VNet 的外部连接性,以及如何设计网络解决方案的安全策略。

本章介绍了为混合应用程序目标设计连接性。它首先讲解了如何使用 Azure 提供的不同服务设计从 Azure 应用程序到本地数据的连接。

以下主题将被覆盖:

  • Azure Relay 服务

  • Azure 数据管理网关用于数据工厂

  • Azure 本地数据网关

  • Azure 应用服务混合连接

  • Azure 应用服务虚拟网络集成

  • Azure AD 应用程序代理

  • 将虚拟机加入域

Azure Relay 服务

使用 Azure Relay 服务,你可以将本地应用程序与 Azure 中的网关连接,而无需打开防火墙连接或对本地网络进行其他重大调整。

你可以在 Azure 门户中创建一个 Azure Relay 服务。在 Azure Relay 服务内部,通过使用出站端口和与本地应用程序的双向连接来创建一个安全连接。此连接专门为一个客户端提供,并使用传输层安全性TLS)进行加密。本地应用程序导入 Azure Relay 命名空间,并使用访问密钥进行身份验证,调用 Azure 门户中的 Azure Relay 服务:

Azure Relay 服务

Azure Relay 服务支持点对点流量、单向流量、请求/响应流量、发布/订阅场景和双向套接字通信,以提高点对点效率。

使用 Azure Relay 服务而不是 VPN 创建混合连接的区别在于,Azure Relay 服务可以限定为单台机器上的一个应用程序,而不是为所有类型的连接使用一个连接。

Azure Relay 服务提供两种功能,混合连接和 WCF 中继,它们是不同的实现方式,但都共享相同的网关。

混合连接

使用混合连接时,在云中建立了一个会合点。应用程序可以使用 HTTP 和 Web 套接字连接到此点。你可以使用所有支持 Web 套接字的编程语言,如 .NET Core、JavaScript 和 NodeJS,以及多种远程过程模型。

有关 Azure Relay 混合连接协议的更多信息,请参考以下网站:docs.microsoft.com/en-us/azure/service-bus-relay/relay-hybrid-connections-protocol

如需了解如何开始使用中继混合连接,您可以参考以下教程:docs.microsoft.com/en-us/azure/service-bus-relay/relay-hybrid-connections-dotnet-get-started

WCF 中继

WCF 中继(前身为服务总线中继)使用 .NET 框架和 WCF 建立连接并发送消息。内部应用程序使用 WCF 中继绑定,创建与 Azure 服务总线集成的 WCF 通道。

如需了解如何使用 Azure Relay WCF 中继与 .NET,您可以参考以下文章:docs.microsoft.com/en-us/azure/service-bus-relay/relay-wcf-dotnet-get-started

Azure 数据管理网关用于数据工厂

Azure 数据工厂提供了一项数据集成服务,您可以使用它创建自动化的数据迁移和转换工作流。通过数据工厂,您可以创建聚合来自不同数据存储的数据、使用 Azure 服务(如 Azure 机器学习、Azure HDInsight Hadoop 和 Azure 数据湖分析)转换和处理数据,并将输出数据存储到不同的数据存储中。

Azure 数据管理网关用于数据工厂充当连接本地环境与云的桥梁。它由一个客户端代理组成,安装在本地系统上,然后连接到 Azure 数据工厂。此代理将您的数据复制到云中。通过在多个本地环境中安装代理并增加可以同时运行的节点数据迁移任务,可以扩展网关。数据通过作业并行处理。

您无需打开防火墙端口即可复制数据。它通过 HTTP 使用证书安全地传输数据。它还提供了从 Azure 数据工厂在 Azure 门户中进行监控和管理的功能。

Azure 数据管理网关用于数据工厂支持多种数据源,具体数据源列表请见:docs.microsoft.com/en-us/azure/data-factory/v1/data-factory-data-movement-activities#supported-data-stores-and-formats

Azure 本地数据网关

Azure 本地数据网关充当您的本地数据源与 Azure 之间的桥梁。它可以连接多个 Azure 服务,例如 Azure 分析服务、Azure 逻辑应用、Microsoft Flow、Power Apps 和 Power BI。在本地端,有多个产品可以连接到网关,如 SQL Server、SQL 分析服务、SharePoint 等。

关于支持 Azure 本地数据网关的本地数据源的概述,你可以参考以下网站:docs.microsoft.com/en-us/azure/analysis-services/analysis-services-datasource

要使用 Azure 本地数据网关,必须在本地环境中安装客户端。该客户端由一个 Windows 服务组成,负责与 Azure 建立连接。在 Azure 中,需要创建一个网关云服务。客户端然后使用 Azure Service Bus 与网关云服务通信。

当某个 Azure 服务创建数据请求时,云网关服务创建一个查询并加密本地凭据。然后,这个查询和凭据被发送到网关中的队列。接着,网关将查询发送到 Azure Service Bus。

本地客户端定期轮询 Azure Service Bus,当 Service Bus 中有消息等待时,它解密本地数据源的凭据,然后运行查询以检索数据。

数据通过再次使用 Azure Service Bus 返回到网关云服务。网关云服务负责在不同的 Azure 服务之间路由数据。

Azure 本地数据网关架构

Azure App Service 混合连接

Azure App Service 混合连接既是 Azure App Service 的一部分,又是 Azure 中的独立功能。它使用 Azure Relay 服务在 Azure 上托管的应用程序和托管在本地环境中的应用程序之间建立连接。它在云中创建一个应用程序端点,供你的应用程序连接。然后,Azure Relay 服务负责建立连接。

混合连接管理器连接到 Azure Relay 服务,应用程序本身也连接到 Azure Relay 服务。然后,Azure Relay 服务负责建立一个 TCP 隧道,通过该隧道它们可以安全地通信。通过使用 TCP 连接,你不需要在本地服务器上打开防火墙端口。

在 Azure App Service 中,创建一个混合连接以访问本地环境中的应用程序资源。你可以通过 Azure Relay 服务创建混合连接,但最好通过 Azure 中的应用设置来创建连接:

Azure App Service 混合连接设置

Azure App Service 虚拟网络集成

你可以使用 Azure App Service 虚拟网络集成将应用程序部署到 VNet 内。这样可以使你的应用程序访问部署在同一 VNet 内的其他服务、虚拟机或数据库。

为了从您的应用程序建立到 VNet 的连接,Azure 应用服务 VNet 集成使用带有动态路由网关的点对站点 VPN。通过使用点对站点类型的 VPN 连接,只有一个连接会为托管您的应用程序的虚拟机创建。其他部署在同一应用服务计划中的资源不会连接。当您想要为这些资源也设置连接时,必须为每个驻留在应用服务计划中的资源设置单独的点对站点 VPN 连接。

此点对站点 VPN 连接到 Azure VPN 网关,该网关连接到 VNet。当一个 VNet 通过 Azure VPN 网关和站点对站点 VPN 连接到您的本地网络时,您可以使用该连接将资源与驻留在本地网络中的资源连接。

Azure 应用服务 VNet 集成。

应用 VNet 集成支持通过 UDP 和 TCP 进行通信。您可以使用应用程序的私有 IP 地址进行连接。无需为您的应用程序创建公共 IP 地址。所有部署在同一 VNet 内的服务都可以通过它们的私有 IP 地址访问。

VNet 集成可以用于使用基本版、标准版或隔离版应用服务计划的应用程序。在应用服务计划内,您最多可以创建五个 VNet。但每次只能将您的应用程序分配给一个 VNet。

VNet 集成可以通过 Azure 门户中的“应用设置”下的“网络”选项进行设置:

Azure 应用服务 VNet 集成(通过 Azure 门户)

另一种为您的应用程序提供 VNet 集成的方法是使用应用服务环境ASE),该内容在第三章,设计 Web 应用程序中有详细描述。ASE 同样部署在 VNet 内部。

使用 VNet 集成时,对于应用程序有一些限制。VNet 集成无法为您的应用程序启用私有站点访问。私有站点访问使得您的应用程序只能从同一虚拟网络内部的资源访问。私有站点访问只能通过配置了内部负载均衡器ILB)的应用服务环境来实现。

有关如何创建带有 ILB 的 ASE 的更多信息,您可以参考以下文章:docs.microsoft.com/en-us/azure/app-service/environment/create-ilb-ase

Azure AD 应用程序代理

使用 Azure Active Directory 应用程序代理,您可以从云端访问本地 Web 应用程序。它提供 单一登录SSO)和安全的远程访问功能。应用程序与 Azure Active Directory 集成,并通过 Azure 门户发布。您无需对本地网络进行任何调整,也无需使用 VPN 连接来为您的应用程序使用 Azure AD 应用程序代理。

可以与 Azure AD 应用程序代理一起使用的应用程序类型包括:Web API、使用集成 Windows 身份验证的 Web 应用程序、使用基于表单或基于头部的访问、与 Active Directory 身份验证库ADAL)集成的应用程序,以及托管在远程桌面网关后面的应用程序。

Azure AD 应用程序代理使用两个需要配置的组件:

  • 连接器:连接器是需要安装在本地网络中的 Windows 服务器上的轻量级代理。它促进了本地应用程序与 Azure 中的应用程序代理服务之间的网络连接。它仅使用出站连接,因此您无需将其安装在 DMZ 中或打开任何入站端口。

  • 外部端点:外部端点是用户访问 Web 应用程序的方式。可以是直接的 URL,也可以通过 MyApps 门户访问。用户通过 Azure AD 进行身份验证后,会通过连接器将他们引导到本地应用程序。

MyApps 门户可以通过以下 URL 访问:myapps.microsoft.com。它提供了一个 Web 门户,所有拥有 Azure AD 账户的用户都可以查看和启动他们被授予访问权限的应用程序。

将虚拟机加入域

创建混合应用程序的最后一种方式是通过将 Azure 虚拟机加入到本地域。您可以使用 Azure AD 域服务将已部署应用程序的 Azure 虚拟机与本地域连接。要设置此连接,您无需在 Azure 中安装和管理域控制器。

Azure AD 域服务是可以在您的 Azure 订阅中启用的功能。它创建一个完全与 Azure AD 租户集成的托管域,并在 Azure VNet 内部可用。然后,本地虚拟机和 Azure 虚拟机可以加入此托管域,并使用 Azure AD 的用户名、密码和组成员资格进行登录或身份验证。部署在这些虚拟机中的应用程序也能从中受益。

Azure AD 域服务提供与 Windows Server Active Directory 兼容的组策略、LDAP 和 Kerberos/NTLM 身份验证功能。您可以将此功能用于仅云的 Azure AD 租户和混合型 Azure AD 租户,在这种情况下,本地身份与 Azure 使用 Azure AD Connect 同步。

启用 Azure AD 域服务

要在你的 Azure 租户中启用 Azure AD 域服务,可以按照以下步骤操作:

  1. 通过打开 portal.azure.com/ 进入 Azure 门户。

  2. 点击“新建”,在搜索框中输入 Azure AD 域服务

  3. Azure AD 域服务会自动映射到你的 Azure AD 租户,因此在下一个面板中你只需指定资源组和位置,并点击确定:

启用 Azure AD 域服务

  1. 在下一个面板中,你可以创建一个新的虚拟网络(VNet)或将 Azure AD 域服务与一个 VNet 关联。请注意,建议为此创建一个单独的子网,然后点击确定:

设置 VNet

  1. 系统会自动创建一个名为 AAD DC 管理员的组。你可以在这里将用户添加到该组:

添加管理员

  1. 最后一个面板提供了设置的总结。点击确定以创建服务:

总结

将虚拟机添加到托管域

接下来是将虚拟机添加到在上一步骤中创建的托管域:

  1. 打开早先创建的虚拟机,或者创建一个新的虚拟机。确保虚拟机部署在与 Azure AD 域服务相同的虚拟网络(VNet)中,但在不同的子网中。

  2. 启动虚拟机,连接到虚拟机并使用创建虚拟机时提供的凭据登录。

  3. 打开服务器管理器 | 本地服务器,并点击 WORKGROUP,如下图所示:

本地服务器设置

  1. 添加 Azure AD 域服务的托管域名,并将虚拟机添加到其中。

总结

在本章中,我们覆盖了为混合应用程序设计连接的目标。我们介绍了 Azure 提供的不同服务,帮助连接本地应用程序、数据和服务与 Azure。你现在应该知道,在你的解决方案和架构中何时使用这些不同的功能。

下一章将重点介绍 Azure 提供的不同存储解决方案。

问题

请回答以下问题,测试你对本章内容的理解。你可以在本书末尾的 评估 部分找到答案。

  1. 你希望使用 Azure 应用程序 VNet 集成来保护你的应用程序免受外部访问。这能行得通吗?

  2. 你希望将本地域与 Azure Active Directory 连接尽可能简单。我们能否在不使用 Azure AD Connect 的情况下使用 Azure AD 域服务?

  3. 我们能否将部署在 Azure 应用服务中的应用程序添加到 VNet?

进一步阅读

你可以查看以下链接,了解本章涵盖的相关主题:

第七章:使用存储解决方案

在上一章中,我们介绍了混合应用程序连接设计的目标。我们讨论了如何设计混合应用程序。我们还讲解了 Azure 虚拟网络的外部连接以及如何设计网络解决方案的安全策略。

本章通过从存储解决方案开始,介绍了数据实现设计的目标。本章涵盖了 Azure 中可用的不同存储解决方案,如 Azure Blob 存储和 Azure 文件存储。它还将帮助你确定何时使用这些存储解决方案中的一种。它还涵盖了为 NoSQL 存储设计的内容以及何时使用 Azure 中的不同 NoSQL 服务,如 Azure 表存储和 Cosmos DB。最后,它介绍了如何使用 Azure 搜索对数据进行检索。

阅读完本章后,你应该知道在你的解决方案中何时使用哪种存储选项。

以下主题将被涵盖:

  • Azure 存储类型与复制类型

  • Azure Blob 存储

  • Azure 表存储

  • Azure 队列存储

  • Azure 文件存储

  • Azure 磁盘存储

  • StorSimple

  • Cosmos DB 存储

  • Azure 搜索

技术要求

本章示例使用了以下工具:

本章的源代码可以通过以下链接下载:

Azure 存储和复制类型

每个应用程序都需要某种存储解决方案。Azure 提供了几种不同类型的存储,从存储文件和文档到存储数据集。第一步是创建存储账户。当你创建存储账户时,你需要决定是否希望数据可以在本地或全球访问。另一个需要考虑的因素是选择哪种账户类型。

存储账户类型

Azure Blob 存储提供三种不同的账户类型,可用于 Blob、表、文件和队列存储。Azure 提供以下存储类型。

通用型 v1 (GPv1)

通用型存储 (V1) 账户是最早的存储账户类型。它提供对页面 blob、块 blob、文件、队列和表的存储,但它不是最具成本效益的存储账户类型。它是唯一可以用于经典部署模型的存储账户类型。不支持最新的功能,如访问层。

Blob 存储

Blob 存储账户提供 StorageV2 账户的所有功能,唯一的区别是它仅支持块 Blob(和追加 Blob)。不支持页面 Blob。它提供访问层,包括热存储、冷存储和归档存储,后续章节会详细介绍。

通用型 v2(GPv2)

StorageV2 是最新的存储账户类型,它将 V1 存储与 Blob 存储结合在一起。它提供了所有最新功能,如 Blob 存储的访问层,并降低了成本。Microsoft 推荐使用此账户类型,优于 V1 和 Blob 存储账户类型。

V1 存储账户可以升级为 V2。

有关这些不同账户类型的定价和计费的更多信息,请参阅以下定价页面:azure.microsoft.com/en-us/pricing/details/storage/

存储复制类型

存储在 Azure 中的数据始终会进行复制,以确保持久性和高可用性。这样,它就能在计划外和计划内的事件(如网络或电力中断、自然灾害和恐怖袭击)中得到保护。它还确保在这些事件发生期间,你的存储账户仍能满足 SLA 要求。

数据可以在同一数据中心内进行复制,也可以在同一区域内的区域数据中心之间复制,甚至跨区域进行复制。这些复制类型分别称为 本地冗余存储LRS)、区域冗余存储ZRS)和 地理冗余存储GRS),并将在后续章节中详细介绍。

创建新存储账户时,你需要选择一种复制类型。存储账户可以在 Azure 门户中创建,也可以通过 PowerShell 或 CLI 创建。

本地冗余存储

LRS 是最便宜的选项,它将在同一数据中心内将数据复制三次。当你对存储账户发出写请求时,该请求将会同步写入所有三个副本。当数据完全复制时,请求才会提交。使用 LRS 时,数据将在一个存储规模单元内跨多个更新域和故障域进行复制。

区域冗余存储

ZRS 当前处于预览阶段,仅在美国东部 2 区和美国中部可用。它在两个或三个数据中心之间复制三份数据。数据会同步写入所有三个副本,这些副本位于一个或两个区域。它还像 LRS 一样,在数据所在的同一数据中心内复制三份数据。

地理冗余存储

GRS 在同一地区内将数据复制三次(类似于 ZRS),同时还会异步复制三份数据到其他地区。

Azure Blob 存储

Azure Blob 存储提供云中的非结构化数据存储。它可以存储各种数据,如文档、VHD、图像和音频文件。

你可以创建两种类型的 blob。页面 blob用于存储磁盘。因此,当你需要存储 VHD 并将其附加到虚拟机时,你将创建一个页面 blob。页面 blob 的最大大小为 1 TB。另一种是 块 blob,它基本上包含了你可以在 Azure 中存储的所有其他类型的数据,如文件和文档。块 blob 的最大大小为 200 GB。然而,还有一种名为追加 blob 的第三种类型,但它仅由 Azure 内部使用,不能用来存储实际文件。

有几种方法可以将 blob 复制到你的 blob 存储账户。你可以使用 Azure 门户(一次只能操作一个),或使用 Azure 存储资源管理器,或者通过 .NET、PowerShell 或 CLI 编程方式,或者调用 REST API 来复制文件。

访问层

Blob 存储账户使用访问层来确定数据的访问频率。根据此访问层,你将会收到相应的计费。Azure 提供三种存储访问层:Hot、Cool 和 Archive。

Hot

Hot 访问层最适合存储频繁访问的数据和正在使用的数据。例如,你会将网站的图片和样式表存储在 Hot 访问层中。与其他访问层相比,这个层级的存储成本较高,但访问文件的费用较低。

Hot 访问层专为存储频繁访问的数据而优化。它的存储成本比 Cool 和 Archive 存储层更高,但访问文件的费用较低。这个访问层最适合存储正在使用的数据。

Cool

Cool 访问层最适合存储不常访问的数据(30 天内访问不到一次)。与 Hot 访问层相比,Cool 访问层的存储成本较低,但访问文件的费用更高。这个层级最适合存储备份和不常查看的旧内容。

存档

存档存储层是在 blob 级别设置的,而不是在存储级别设置的。与 Hot 和 Cool 访问层相比,它的存储成本最低,但访问数据的成本最高。这个层级适合存储至少需要存档 180 天的数据,且访问时需要几小时的延迟。这个层级最适合长期备份或合规性和存档数据。

存储在 Archive 访问层中的 blob 是离线状态,无法读取(元数据除外)、复制、覆盖或修改。

Azure 表格存储

Azure 表存储是一个 NoSQL 数据存储,适用于大量半结构化的非关系数据。与关系数据库相比,它更具成本效益,因为它将数据存储在更便宜的服务器上,这些服务器提供水平扩展和高性能。NoSQL 使用无模式设计,数据是基于键/属性值进行存储的。您可以在其中存储灵活的数据集,并且它可以在一个表中存储任意数量的实体,最多可达存储帐户的最大容量(500 TB)。

Azure 表存储最适合处理不需要复杂联接、存储过程和外键的数据集。您可以通过 OData 协议和 LINQ 查询访问数据。

创建存储帐户

在上传任何数据或文件到 Azure 存储之前,需要创建一个存储帐户。可以使用 Azure 门户、PowerShell、CLI 或 Visual Studio 来完成此操作。

在本示例中,我们将使用 PowerShell 创建一个存储帐户:

Login-AzureRmAccount

如有必要,选择正确的订阅:

Select-AzureRmSubscription -SubscriptionId "********-****-****-****-***********"

创建一个资源组:

New-AzureRmResourceGroup -Name PacktPubStorage -Location WestEurope

创建存储帐户:

New-AzureRmStorageAccount -ResourceGroupName PacktPubStorage -AccountName packtpubstorage -Location WestEurope -SkuName "Standard_GRS"

向 Azure 表存储上传数据

在本示例中,我们将使用 Visual Studio 2017 向之前步骤中创建的存储帐户中的 Azure 表上传数据。

  1. 点击文件 | 新建 | 项目,在新建项目窗口中选择 Windows Classic Desktop | 控制台应用程序。命名项目并点击确定:

创建一个新项目

  1. 接下来是导入 NuGet 包。有两个需要安装的包:

    • Windows Azure 存储:该库提供对 Azure 存储帐户及其数据的访问。它可以用于处理 blobs、文件、表格和队列。

    • Microsoft Windows Azure 配置管理器:该库提供了一个统一的 API 来加载配置设置,无论应用程序托管在哪里。

  2. 将以下 XML 代码添加到 App.config 文件中。实际的 ConnectionString 值可以从 Azure 门户中的访问密钥设置中获取:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <appSettings>
    <add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=packtpubstorage;AccountKey=account-key" />
  </appSettings>
</configuration>
  1. 向项目中添加一个新类,并命名为 Contact.cs。然后用以下代码替换它:
using Microsoft.WindowsAzure.Storage.Table;

namespace PacktPubUploadToTableStorage
{
    class Contact : TableEntity
    {
        public Contact(string lastName, string firstName)
        {
            this.PartitionKey = lastName;
            this.RowKey = firstName;
        }

        public Contact() { }

        public string Email { get; set; }
    }
}
  1. 将以下代码添加到 Program.csMain() 方法中:
using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;

namespace PacktPubUploadToTableStorage
{
    class Program
    {
        static void Main(string[] args)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
            // Create the table client.

            // Create the table client.
            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

            // Retrieve a reference to the table.
            CloudTable table = tableClient.GetTableReference("packtpubContact");

            // Create the table if it doesn't exist.
            table.CreateIfNotExists();

            // Create a new contact entity.
            Contact contact1 = new Contact("Zaal", "Sjoukje");
            contact1.Email = "sjoukje@packtpub.com";

            // Create the TableOperation object that inserts the contact.
            TableOperation insertOperation = TableOperation.Insert(contact1);

            // Execute the insert operation.
            table.Execute(insertOperation);
        }
    }
}
  1. 运行项目。然后,你可以打开 Azure Storage Explorer,导航到存储帐户和容器。你将看到已添加的数据行:

已添加的数据行

若要了解如何使用 .NET 操作 Azure 表存储,您可以参考以下教程:docs.microsoft.com/en-us/azure/cosmos-db/table-storage-how-to-use-dotnet

Azure 队列存储

Azure 队列存储提供了一个可以供应用程序使用的消息队列。消息队列提供了一种异步通信机制,发送方将消息添加到队列中,接收方可以在稍后的时间接收这些消息。应用程序可以从中受益,因为它们可以解耦组件,组件可以独立扩展。

你可以使用 Azure 存储客户端库和 REST API 从队列存储发送和接收消息。

Azure 队列存储在第十三章,实现消息传递解决方案中有更详细的介绍。

Azure 文件存储

使用 Azure 文件存储,你可以在云中创建文件共享。你可以使用服务器消息块(SMB)协议访问文件,这是一种行业标准,可以在 Linux、Windows 和 macOS 设备上使用。Azure 文件还可以像本地驱动器一样在这些设备上挂载,并且可以通过 Azure 文件同步(预览版)在 Windows 服务器上缓存,以实现快速访问。

文件共享可以跨多个机器使用,这使其适合存储多个机器访问的文件或数据,例如开发机器的工具、配置文件或日志数据。Azure 文件共享是 Azure 存储客户端库的一部分,并提供 Azure 存储 REST API,开发人员可以在其解决方案中利用该 API。

Azure 磁盘存储

用于虚拟机的磁盘存储在 Azure Blob 存储中作为页面 Blob。Azure 为每个虚拟机存储两个磁盘,一个是虚拟机的实际操作系统(VHD),另一个是用于短期存储的临时磁盘。当虚拟机关闭或重新启动时,这些数据会被擦除。

Azure 提供了两种不同的性能层次:标准磁盘存储和高级磁盘存储。

标准磁盘存储

标准磁盘存储提供用于存储数据的 HDD 驱动器,是你可以选择的最具性价比的存储层。它仅支持 LRS 或 GRS 来保证数据和应用程序的高可用性。

标准磁盘存储提供 HDD,并且具有更高的性价比。标准磁盘存储仅支持 LRS 或 GRS。

高级磁盘存储

使用高级磁盘存储时,数据存储在 SSD 上。并非所有 Azure 虚拟机系列都可以使用这种类型的存储。它只能与 DS、DSv2、GS、LS 或 FS 系列 Azure 虚拟机一起使用。它提供高性能和低延迟的磁盘支持。

非托管磁盘与托管磁盘

托管磁盘在第一章中有所介绍,与 Azure 虚拟机一起使用,它为您处理存储帐户的创建。与传统的非托管磁盘不同,后者用于虚拟机时,您需要手动创建存储帐户,然后在创建虚拟机时选择该帐户。使用托管磁盘时,Azure 为您处理这一负担。您只需选择磁盘类型和性能层(标准或高级),托管磁盘即会自动创建,并且会自动处理扩展。

微软推荐使用托管磁盘而非非托管磁盘。

StorSimple

StorSimple是一个集成的存储解决方案,跨越本地环境和云存储。它通过提供一个混合解决方案,解决了许多存储问题,如数据增长、容量管理、备份、归档和灾难恢复,该解决方案由一个集成的云存储系统和 Azure 云存储组成。

使用 StorSimple,您可以将活动数据存储在本地存储系统中,提供更低的延迟和更高的吞吐量。例如,数据库文件是活动数据的一部分。较少活跃的数据,如文档、SharePoint 文件、归档数据和虚拟机存储,更适合存储在云中。通过使用 StorSimple,您可以将这些数据存储在 Azure 云存储中。

StorSimple 支持 iSCSI 和 SMB 连接到您的数据,与更经济的云存储相比,它消除了冗余数据并对其进行压缩以减少成本。您可以结合使用 Azure Premium 存储和 StorSimple,以获得更高的性能和更低的延迟。

为实现这一目标,StorSimple 提供以下存储区域网络(SAN)解决方案:StorSimple 虚拟阵列和 StorSimple 8000 系列。

StorSimple 虚拟阵列

StorSimple 虚拟阵列运行在您现有的本地虚拟化平台基础设施上,管理本地环境和 Azure 云存储之间的存储。它还提供云备份、快速恢复、灾难恢复功能和项目级恢复。它支持 Hyper-V 2008 R2 及更高版本,以及 VMWare 5.5 及更高版本。

StorSimple 虚拟阵列是最具性价比的 StorSimple 解决方案,因为它提供了一个可以安装在 Hyper-V 或 VMWare 虚拟机上的下载版,部署在您的数据中心或办公室中。然后,它可以被配置为 iSCSI 服务器(SAN)或文件服务器(NAS)。可以通过 Azure 门户中的 StorSimple Manager 服务进行管理:

StorSimple 虚拟阵列

若想了解更多关于 StorSimple 虚拟阵列的信息,请参考docs.microsoft.com/zh-cn/azure/storsimple/storsimple-ova-overview

StorSimple 8000 系列

使用 StorSimple 8000 系列,微软提供了一种可以租赁并安装在本地环境中的物理设备。它为最活跃的数据使用 SSD 硬盘,为使用频率较低的数据使用 HDD 硬盘,并将归档数据存储在 Azure 云存储中。它还提供冗余控制器来管理存储分层和自动故障切换。

StorSimple 存储阵列安装在本地环境中,并提供 iSCSI 访问。它可以与网络中的其他 SAN 存储设备连接(最多支持六个网络端口)。它使用虚拟设备管理器将数据复制到 Azure 云存储。虚拟设备管理器安装在 Azure 虚拟机中,也可以为 Azure 中的虚拟机提供 iSCSI 接口。StorSimple 管理器帮助你通过 Azure 门户管理数据,它还可以管理存储在本地的快照。快照管理器是 Microsoft 管理控制台 (MMC) 的一个插件,运行在基于 Windows Server 的主机上:

StorSimple 8000 系列

StorSimple 8000 系列提供了用于 StorSimple 的 Windows PowerShell 和 SharePoint 的 StorSimple 适配器。

若想了解更多关于 StorSimple 8000 系列的信息,可以参考 docs.microsoft.com/en-us/azure/storsimple/storsimple-overview

Cosmos DB 存储

Cosmos DB(前身为 DocumentDB)存储是 Azure 表存储的高级服务。它是一个多模型、全球分布的数据库服务,旨在水平扩展并将数据复制到任何数量的 Azure 区域。通过复制和扩展数据,Cosmos DB 可以确保全球任何地方的低延迟、高可用性和高性能。你可以通过在 Azure 门户中选择地图上的可用区域,轻松地复制或扩展数据。

在 Azure 门户中扩展和复制数据

这种高可用性和低延迟使得 Cosmos DB 最适合用于移动应用、游戏以及需要全球分布的应用程序。Azure 门户也使用 Cosmos DB 进行数据存储。

Cosmos DB 完全无模式,你可以使用多种现有的 API 和可用的 SDK 与其进行通信。因此,如果你正在使用特定的 API 来处理你的数据,并且希望将数据迁移到 Cosmos DB,只需在应用程序中更改连接字符串,数据便会自动存储在 Cosmos DB 中。Cosmos DB 支持以下 API 来存储和与数据交互:

  • SQL API:通过 SQL API,您可以使用 SQL 查询作为针对 Cosmos DB 内数据集的 JSON 查询语言。由于 Cosmos DB 无模式,它提供 JSON 文档的自动索引。数据存储在 SSD 驱动器上,以确保低延迟,并且它是无锁的,因此您可以为数据创建实时查询。Cosmos DB 还支持使用 JavaScript 编写存储过程、触发器和用户定义函数(UDF),并且在集合内支持 ACID 事务。

  • MongoDB API:MongoDB 是一个开源文档数据库,默认提供高性能、高可用性和自动扩展。在 Cosmos DB 内使用它时,提供自动分片、索引、复制和数据加密。MongoDB 还提供一个聚合管道,可用于在多个阶段过滤和转换数据。它还支持创建全文索引,并且可以轻松与 Azure Search 和其他 Azure 服务集成。

  • Gremlin(图形)API:Gremlin API 是 Apache TinkerPop 项目的一部分,这是一个开源图计算框架。图形是一种基于关系存储对象(节点)的方法。每个对象可以与其他对象有多个关系。您可以使用 JavaScript 与数据进行交互。

  • Table API:Azure Table API 可用于针对 Azure Table Storage 编写的应用程序,但需要一些高级功能,如全球分布、自动索引、低延迟和高吞吐量。

  • Cassandra API:Cassandra API 可用于针对 Apache Cassandra 编写的应用程序。Apache Cassandra 是一个开源分布式 NoSQL 数据库,提供可扩展性和高可用性。Cosmos DB 在此基础上提供了无操作管理、SLA 和自动索引功能。

未来,Cosmos DB 还将新增新的 API。

Cosmos DB 可用的多模型 API

如果您想开始使用这些多模型 API 开发应用程序,可以参考 docs.microsoft.com/en-us/azure/cosmos-db/。那里有多个编程语言的示例。

Azure 搜索

Azure Search 是一个 Azure 服务,提供对存储在 Azure SQL 数据库、Azure Cosmos DB 和 Azure Blob 存储中的内容进行丰富搜索的体验。对于 Azure Blob 存储,它支持对多种文件格式进行索引,例如 CSV、JSON、纯文本文件、RTF、EML、ZIP、XML、HTML、各种 Microsoft Office 格式和 PDF。

它提供全文搜索和文本分析,支持 56 种语言的分析器进行语言学分析,地理搜索,用户体验功能,如搜索建议、分页、排序、命中高亮显示,以及监控和报告功能。

Azure Search 使用分区来存储搜索索引并提供读/写操作的 I/O。Azure Search 提供不同的服务层级,可以在一个租户内进行组合。这些不同的服务层级提供不同的存储容量和可扩展性。对于更昂贵的服务层级,可以创建多个搜索服务实例,这些实例被称为副本。

Azure Search 提供以下服务层级:

  • 免费版:该服务与 Azure 中的其他租户共享。它提供 50 MB 的存储空间,每个服务最多可以有 3 个索引,每个索引最多包含 10,000 个文档,并且无法进行扩展。

  • 基础版:该服务提供 2 GB 的存储空间,并且每个服务最多可有 5 个索引。您可以将每个服务的搜索单元扩展至最多 3 个(1 个分区和 3 个副本)。

  • 标准 S1:此层提供 25 GB 的存储空间,并且每个服务最多可有 50 个索引。您可以将每个服务的搜索单元扩展至最多 36 个(12 个分区和 12 个副本)。

  • 标准 S2:此层提供与标准 S1 相同的功能,但存储空间为 100 GB,并且每个服务最多可以有 200 个索引。

  • 标准 S3:此层提供 200 GB 的存储空间,并包含所有标准 S2 功能。

  • 标准 HD:这是一个可以为标准 S3 定价层启用的选项。在标准 S3 提供的所有功能的基础上,您可以每个服务最多有 1,000 个索引。

建议您每个订阅都始终配置一个免费的搜索服务层级,这样它可以用于测试或轻量级搜索。然后,您可以在其旁边创建其他搜索服务以处理生产工作负载。

欲了解更多关于 Azure Search 可用 SKU 的信息,您可以参考docs.microsoft.com/en-us/azure/search/search-sku-tier

总结

本章我们讨论了数据实现设计的目标。我们介绍了 Azure 中可用的不同存储解决方案以及何时使用它们。我们还讲解了 NoSQL 存储的设计,以及何时使用不同的 Azure 服务,例如 Azure 表存储和 Cosmos DB。最后,我们简要介绍了 Azure Search。

下一章将介绍可扩展的数据实现。

问题

请回答以下问题,以测试您对本章内容的理解。您可以在本书最后的评估部分找到答案。

  1. Cosmos DB 是否比 Azure 表存储更适合用于游戏应用?

    1. 是的

    2. 不是

  2. 您能否将 Azure Search 与 Azure Data Factory 一起使用来搜索数据?

    1. 是的

    2. 不是

  3. 您想在 Cosmos DB 中创建图形数据库。MongoDB API 是否适合在您的自定义应用程序中使用?

    1. 是的

    2. 不是

进一步阅读

您可以通过以下链接查看更多关于本章涵盖主题的信息:

第八章:可扩展的数据实现

在上一章中,我们介绍了存储解决方案目标。我们涵盖了 Azure 提供的不同存储特性,以及何时和如何使用它们。我们还讲解了如何为 NoSQL 存储进行设计,并讨论了何时使用可用的解决方案。

这是领域设计数据实现目标的第二章,内容涵盖了针对 Azure 数据服务的设计,包括对 Azure 提供的服务和解决方案的高层次概述。还涉及 Azure 中的关系型数据库,包括 Azure SQL 数据库,以及如何为性能、可用性进行设计,并介绍了两种开源关系型数据库,如 Azure 上的 MySQL 和 PostgreSQL。

到本章结束时,你应该了解在何时使用哪种数据服务或关系型数据库来解决你的问题。

以下主题将被涵盖:

  • Azure 数据目录

  • Azure 数据工厂

  • Azure SQL 数据仓库

  • Azure 数据湖

  • Azure 分析服务

  • Azure SQL 数据库

  • Azure 数据库 for MySQL

  • Azure 数据库 for PostgreSQL

技术要求

本章的源代码可以从 github.com/SjoukjeZaal/AzureArchitectureBook/tree/master/Chapter%208 下载。

Azure 数据目录

Azure 数据目录提供了一个中央存储库,你可以在其中找到组织内部使用的所有数据源。大多数组织内的员工不知道企业数据的位置或谁负责这些数据。通过 Azure 数据目录,任何用户(例如开发人员或分析师)都可以从一个中央位置发现并使用数据源。

Azure 数据目录为每个 Azure AD 租户提供一个数据目录,即使你有多个与该租户关联的订阅。数据源的元数据副本以及数据源的位置会被添加到目录中。数据本身仍然保留在原始位置。Azure 数据目录还提供搜索功能,便于轻松发现数据。

你可以使用 Microsoft 提供的工具将数据源导入到 Azure 数据目录中。Azure 数据目录支持多种可以使用导入工具发布的数据源,例如 Azure Blob 存储、Azure 数据湖、SQL Server,以及第三方数据源如 Oracle、MySQL 等。当数据源添加到目录时,可以丰富其元数据,为用户提供额外的信息。

Azure 数据目录有两个版本——免费标准

  • 免费:提供无限用户和 5,000 个注册数据资产;这些数据资产对所有用户可见

  • 标准:提供无限用户、100,000 个注册数据资产,并且具备资产级别授权,限制可见性

Azure 数据目录还可以通过调用 Data Catalog REST API 进行编程使用。它提供了注册和删除数据的接口,以及处理注释的功能。

若要全面了解 Azure 数据目录支持的数据源,您可以参考这篇文章:docs.microsoft.com/en-us/azure/data-catalog/data-catalog-dsr。关于 Data Catalog REST API 的更多信息,您可以参考这篇文章:docs.microsoft.com/en-us/rest/api/datacatalog/#search-syntax-reference

Azure 数据工厂

Azure 数据工厂是一个用于大数据处理和分析的云服务。它利用来自各种数据源的原始数据,为企业决策者、分析师和数据科学家提供有价值的见解。以下功能用于处理和组成数据驱动的工作流:

  • 数据管道:表示一组执行单元工作的活动。

  • 活动:一个活动代表管道中的一个步骤。例如,你可以创建一个复制活动,将数据从 Azure Blob 存储帐户复制到 HDInsight 集群。Azure 数据工厂支持三种类型的活动:数据移动活动、数据转换活动和数据控制活动。

  • 数据集:这些表示来自数据存储的数据,用于输入和输出。

  • 链接服务:Azure 数据工厂使用链接服务连接到数据源。你可以将其与连接字符串进行类比。链接服务有两种类型——一种用于连接到数据存储,另一种用于连接到计算资源。

  • 触发器:触发器启动数据管道的执行。数据工厂支持计划触发器和滚动窗口触发器,它们按周期性间隔运行。没有触发器可以从自定义代码启动管道。如果你想从应用程序内部启动它,最佳方法是通过代码更改计划触发器的开始时间为你希望启动操作的时间。

  • 管道运行:这是数据管道执行的一个实例。

  • 参数:你可以将参数作为参数传递到管道内,它们是键值对。

  • 控制流:这表示活动的 orchestration(协调)。你可以按顺序处理活动,创建 for-each 迭代器等。

你可以通过 Azure 门户使用 Azure Data Lake UI(仅限 Edge 或 Chrome 浏览器)、.NET、Python、PowerShell、ARM 或调用 REST API 来创建 Data Factory 服务和数据管道。

在编写本书时,Azure 提供了两个版本的 Azure Data Factory:V1 和 V2。V2 目前处于预览阶段。有关两个版本之间差异的详细概述,您可以参考docs.microsoft.com/en-us/azure/data-factory/compare-versions

Azure Data Factory 只能在美国东部、美国东部 2 和西欧地区创建。但是,它们可以访问其他 Azure 区域的数据库存储和计算服务,用于在数据存储之间移动数据或使用计算服务处理数据。

Azure SQL 数据仓库

Azure SQL 数据仓库在云中提供企业级数据仓库。它结合大规模并行处理MPP)和 Azure 存储,提供高性能和可扩展性。为了从存储在数据仓库中的数据中创建有价值的洞察,Azure 使用 Hadoop/Spark 和机器学习技术。

数据存储在具有列式存储的关系型表中。使用列式存储时,数据是按列写入和读取的,而不是传统行式数据库中的按行存储。因此,当您查询数据时,列式存储会通过立即跳转到适当的列来跳过所有无关数据。这将使查询运行得更快。例如,当您想查找所有客户的平均年龄时,列式存储会直接跳转到年龄列,而不是查看每一行的年龄列。这还提供了更好的数据压缩,从而降低了存储成本。

通过使用 MPP,Azure SQL 数据仓库将存储层与计算层解耦,这使得扩展变得更加容易。MPP 使用多个计算节点来处理数据。客户端应用程序或存储解决方案使用 PolyBase T-SQL 命令将数据添加到控制节点。控制节点运行 MPP 引擎,该引擎使用数据移动服务DMS)在节点之间移动数据。它还负责优化并行处理的查询。当优化后,MPP 引擎会将查询传递给可用的计算节点,以并行执行。计算节点将负责将数据存储在 Azure 存储中:

MPP 架构

将存储层与计算层解耦也是一种更具成本效益的方式。您可以独立扩展存储层的计算节点,或者暂停计算能力,这样您只需要为存储付费。

Azure Data Lake

Azure Data Lake 是一个大数据存储和分析服务,能够存储大量的结构化、半结构化或非结构化数据。它基于 Hadoop 的资源管理平台 YARN,能够在 Azure SQL Server 实例或 Azure SQL 数据仓库实例之间动态扩展。

想了解更多关于 Hadoop YARN 的信息,可以参考 Hadoop 官网:hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html

Hadoop YARN 提供三种解决方案:

  • Azure 数据湖存储

  • Azure 数据湖分析

  • Azure HDInsight

Azure 数据湖存储

Azure 数据湖存储是一个大数据工作负载的存储库,在这里你可以存储原始数据。数据湖是一个容器,你可以在其中存储各种类型的数据,如结构化、半结构化和非结构化数据。数据添加到数据湖时仍然是未处理的,这与数据仓库不同,后者存储的是结构化和已处理的数据。

Azure 数据湖存储是为 Hadoop 构建的,可以从 Azure 的 HDInsight 集群中访问。它使用 Hadoop 文件系统来存储数据。应用程序调用与 WebHDFS 兼容的 REST API 将数据添加到文件系统中。它提供无限的存储空间,数据可以使用如 MapReduce 或 Hive 等 Hadoop 分析框架进行分析。Azure HDInsight 集群还可以通过开箱即用的连接来配置,直接访问存储在 Azure 数据湖存储中的数据。你可以在机器学习模型中使用 Azure 数据湖存储的数据,也可以创建批量查询或将数据存储在数据仓库中:

Azure 数据湖存储

Azure 数据湖分析

Azure 数据湖分析是 Azure 数据湖的一个功能,可以用来分析你的数据。你的数据可以来自不同的数据源,分析后的数据也可以写入不同的数据源。它与 Azure 数据湖存储、Azure Blob 存储和 Azure SQL 数据库兼容。

Azure 数据湖分析采用无服务器方式;你无需管理集群,只需为实际的数据分析付费。它可以动态扩展,并且与 Azure AD 集成用于身份验证。

它提供两种定价套餐:

  • 按需付费:在这种模式下,你只需按分钟为使用的时间付费,没有额外的承诺。

  • 每月承诺:这个定价套餐有几种不同的选择,你可以提前支付一定小时数的费用——例如 100 小时、500 小时或 1000 小时等。

想了解更多关于不同定价套餐的信息,可以参考:azure.microsoft.com/en-us/pricing/details/data-lake-analytics/

Azure 数据分析使用 U-SQL 来分析数据。U-SQL 是大数据查询语言,可以与 C#、R、Python 和认知服务结合使用。你可以通过 Azure 门户创建脚本,并创建作业在数据上执行它们。你还可以使用 Visual Studio、Visual Studio Code、PowerShell 和 CLI 提交 U-SQL 脚本。

使用数据湖分析分析你的数据

在本演示中,我们将创建一个 Data Lake Analytics 账户并分析一些数据,然后将其存储在 Azure 数据湖存储中。Data Lake Analytics 必须拥有一个 Azure 数据湖存储账户,因此我们也会创建该账户:

  1. 打开 portal.azure.com/ 以导航到 Azure 门户。

  2. 点击 新建 并在搜索框中输入 Data Lake Analytics。

  3. 一个新的面板打开了。在写这本书时,Data Lake Analytics 只能在中部美国(Central US)、东部美国 2(East US 2)和北欧(North Europe)地区创建。添加以下设置:

创建 Azure 数据湖分析账户

  1. 点击 Data Lake Store 来创建存储您数据的账户:

创建一个 Azure 数据湖存储

  1. 点击 OK 两次,创建 Data Lake Store 和 Data Lake Analytics 账户。

  2. 现在,您可以导航到 Data Lake Analytics 账户。接下来,将示例文件 SearchLogs.tsv 上传到 Azure 数据湖存储。点击左侧菜单中的 数据浏览器

数据浏览器

  1. 创建一个新文件夹,并命名为 input。将 SearchLogs.tsv 上传到该文件夹:

创建一个新的输入文件夹

  1. 接下来,点击“新建作业”:

Azure 数据湖概述

  1. 为作业命名,并将以下代码添加到其中。该代码从 SearchLog 文件中提取原始数据,并创建一个带有标题的新文件,然后将其存储在 Azure 数据湖存储中的 output 文件夹中:
@searchlog =
    EXTRACT UserId int,
            Start DateTime,
            Region string,
            Query string,
            Duration int?,
            Urls string,
            ClickedUrls string
    FROM "/input/SearchLog.tsv"
    USING Extractors.Tsv();

OUTPUT @searchlog 
    TO "/output/SearchLog-first-u-sql.csv"
    USING Outputters.Csv();
  1. 运行作业。将显示以下输出:

Azure 数据湖输出

  1. 现在,您可以在数据浏览器中查看结果。会有一个名为 output 的新文件夹,文件存储在该文件夹中。

Azure HDInsight

Azure HDInsight 是一个服务,它在云中以集群的形式部署 Hadoop 组件。Apache Hadoop 是一个非常流行的开源框架,用于处理和分析大数据。Azure 上的 Hadoop 组件使得数据处理变得非常容易,因为 Azure 处理集群的创建。

HDInsight 提供以下集群类型:

  • Apache Hadoop:Hadoop 可以使用 MapReduce 并行处理数据,MapReduce 是一种能够高效处理数据的编程语言。

  • Apache Spark:Spark 也可以通过使用内存计算来并行处理数据,以提高性能。您可以将其与 SQL、流数据和机器学习解决方案一起使用。

  • Apache HBase:这提供了一个在 Hadoop 上的 NoSQL 数据库,可作为 MapReduce 作业的输入或输出。

  • Microsoft R Server:提供用于托管和管理 R 脚本的服务器。R 主要由数据科学家使用,并提供可扩展的方法来分析数据。

  • Apache Storm:提供非常快速的数据流处理。您可以使用它来分析实时传感器数据,例如。

  • Apache 交互式查询(预览):Hive 查询现在可以通过内存缓存机制更快地运行。

  • Apache Kafka:为数据管道、消息队列和应用程序提供流处理。

Azure HDInsight 使用 Azure Blob 存储和 Azure Data Lake 存储作为存储解决方案。你可以通过使用 HDInsight .NET SDK 等在 Azure HDInsight 上构建应用程序,支持 Java、Python 和 .NET 等语言。

Azure 分析服务

Azure 分析服务采用与 SQL Server 分析相同的架构,并提供企业级的数据建模功能。

你可以通过将 Azure 分析服务与本地 SQL 分析服务器连接,轻松创建混合环境。然后,可以轻松将来自各种来源的数据(如 SQL Server 分析、SQL Server、Azure SQL Server 等)进行整合。在 Azure 分析服务中,与本地环境相比,模型的处理速度要快得多。这样,像 Power BI、Excel、报告服务以及其他第三方应用程序等客户端应用程序,可以更快速地查询数据并交付仪表盘:

Azure 分析服务

Azure SQL 数据库

Azure SQL 数据库提供云中的关系数据库。它使用本地 SQL Server 的代码基础,但通过使用 Azure SQL 数据库,而不是本地 SQL Server,你无需管理底层平台、操作系统或购买任何许可证。此外,微软首先发布 Azure SQL 数据库的更新,然后才发布 SQL Server 的更新。

Azure SQL 数据库提供了可扩展性,且不会导致数据库停机。它提供了列式索引,使得查询执行速度更快。还为你的数据库提供了内建监控,并具备自动提高数据库性能的智能功能,同时通过自动备份和时间点恢复提供高可用性。你还可以使用主动地理复制,支持全球应用。

Azure SQL 数据库为你的数据库提供以下层级:

  • 弹性数据库池:弹性池是一项帮助管理和扩展具有不可预测使用需求的数据库的功能。所有在弹性池中的数据库都部署在同一数据库服务器上,并共享相同的资源。通过管理数据库池而非单个数据库,它们可以共享性能和扩展。此层的性能通过弹性数据库事务单位eDTU)来表示。

  • 独立数据库:如果你有一个性能可预测的数据库,这是一种不错的选择。扩展是为每个数据库单独进行的。此层的性能通过数据库事务单位DTU)来表示。

若要了解有关数据库事务单元(DTU)和弹性数据库事务单元(eDTU)的更多信息,请参阅docs.microsoft.com/en-us/azure/sql-database/sql-database-what-is-a-dtu 文章。

Azure SQL 数据库提供了多种不同的服务计划和定价层次。由于这些定期变化,您可以访问azure.microsoft.com/en-us/pricing/details/sql-database/定价页面了解概况。然而,强烈建议您查看适用于 70-535 考试的不同计划。

SQL Server 扩展数据库

SQL 服务扩展数据库(SQL Service Stretch Database)在 SQL Server 2016 中引入,是一项可以将冷数据从本地 SQL Server 移动或归档到 Azure SQL 数据库的功能。这可以提高本地服务器的性能,同时扩展的数据存储在云端,其他应用程序可以轻松访问。

在 SQL Server 中,您可以将表标记为扩展候选项,SQL Server 会透明地将数据移动到 Azure SQL 数据库。包含大量历史数据的大型事务表可以从启用扩展功能中受益。这些通常是包含数百或数百万行的大型表,不需要频繁查询。

高可用性

即使您的数据库托管在 Azure 中,仍然有可能发生故障和停机。在发生停机(例如,完全区域性故障,可能由自然灾害、恐怖袭击、战争、政府行为或外部设备或网络故障等引起)时,您的数据仍然需要能够访问。

若要在 Azure 上创建高可用性的 SQL Server 数据库,您可以使用故障转移组和主动地理复制,这些内容将在接下来的章节中详细介绍。

备份和恢复

Azure 会自动为每个服务层创建地理冗余备份。这些备份随后会复制到只读访问地理冗余存储RA-GRS)。Azure SQL 数据库每周创建一次完整数据库备份,每小时创建一次差异备份。差异备份会备份自上次完整备份以来发生变化的数据。Azure SQL 数据库还会每 5 到 10 分钟创建一次事务日志备份。

这些备份的保留期限因服务层而异:

  • 基础:保留期为 7 天

  • 标准:保留期为 35 天

  • 高级:保留期为 35 天

这些保留期可以通过创建长期备份保留策略进行延长。使用 LTR 策略时,保留期最多可延长至 10 年。备份会被复制到 Azure 恢复服务库,并且数据在静态时进行加密。Azure 恢复服务库管理所有备份,并会自动删除已过期的备份。LTR 策略可以通过 Azure 门户或 PowerShell 创建。

你可以将备份用于以下恢复场景:

  • 时间点恢复:数据库可以在相同逻辑服务器上的保留策略范围内恢复到任何时间点。将创建一个新的完全可访问的数据库。你可以在每个服务层级以及针对单个数据库和部署在弹性池中的数据库使用时间点恢复。时间点恢复可以通过 Azure 门户、PowerShell 或 REST API 恢复。

  • 已删除数据库恢复:已删除的数据库可以在删除时恢复到相同的逻辑服务器。你也可以将已删除的数据库恢复到更早的时间点。已删除数据库恢复可以通过 Azure 门户、PowerShell 和 REST API 执行。

  • 地理恢复:使用地理恢复,你可以将数据库备份恢复到任何区域的任何服务器。只能对地理冗余备份使用地理恢复。手动创建的备份不受支持。此类型的恢复可以通过 Azure 门户、PowerShell 和 REST API 完成。

  • Azure 恢复服务库恢复:你可以使用此类型的恢复将数据库恢复到可用保留策略中的某个时间点。通过这种方式,你可以恢复数据库的旧版本,例如用于某个应用程序。此类型的恢复也可以通过 Azure 门户、PowerShell 和 REST API 完成。

主动地理复制

地理复制是一项业务连续性功能,允许你在相同或不同的 Azure 区域中复制主数据库,以及最多四个只读的辅助数据库。你可以使用辅助数据库查询数据,或在数据中心发生故障时进行故障切换。主动地理复制必须由用户或应用程序手动设置。

故障切换组

故障切换组是一项自动管理故障切换的功能。它自动管理数据库之间的地理复制关系、大规模故障切换以及连接性。要使用故障切换组,主数据库和辅助数据库需要在同一个 Azure 订阅内创建。

自动故障切换支持将同一故障切换组中创建的所有数据库复制到位于不同区域的单个辅助数据库服务器。这与使用主动地理复制不同,后者最多可以复制四个辅助数据库。

你可以通过 Azure 门户、PowerShell、Transact SQL 和 REST API 设置和管理地理复制。

配置主动地理复制和故障转移组

在此示例中,我们将为单个数据库设置主动地理复制和故障转移组。请注意,这也可以为弹性池执行:

  1. 通过打开 portal.azure.com/ 进入 Azure 门户。

  2. 首先,创建 SQL 数据库。点击“新建”,然后在搜索框中输入 SQL 数据库

  3. 在下一屏幕中,添加创建刀片中的以下设置并点击 创建,如下图所示:

创建 SQL 数据库

  1. 点击创建新服务器,添加以下设置,然后点击选择:

创建 SQL 服务器

  1. 点击定价层;在此刀片中,你可以选择定价层以及要为数据库配置的 DTU 和 eDTU。现在,你可以保持默认设置并点击应用:

选择定价层

  1. 点击创建以创建数据库。

  2. 进入数据库,在左侧菜单中点击地理复制。在此,你可以配置希望将数据库复制到哪些区域。你可以选择所有区域,但建议选择配对区域。你还可以点击顶部横幅,为数据库创建故障转移组:

地理复制设置

  1. 选择区域后,新的刀片将会弹出。在此处,你需要在新的服务器上创建第二个数据库。创建新服务器的步骤与首次服务器的步骤相同。添加以下设置,然后点击确认:

创建辅助服务器

  1. 要自动复制数据库,你需要将其添加到故障转移组中。点击横幅并添加以下设置。选择在上一步中创建的辅助数据库作为辅助服务器,然后点击创建:

自动故障转移

Azure MySQL 数据库

Azure MySQL 数据库是云中开源关系型数据库 MySQL 的实现。Azure 提供的服务具有与 MySQL 社区版相同的功能和能力。

MySQL 数据库被 PHP 开发人员广泛使用,许多 PHP 应用程序,如开源 CMS WordPress 等,也使用它。MySQL 提供以下特性和功能:

  • 开源:MySQL 是开源的,但由 Oracle 拥有。它也提供商业版本。

  • ACID 合规性:它提供原子性、一致性、隔离性、持久性(ACID)事务。这确保在发生故障时不会丢失数据。MySQL 在使用 InnoDB 和 NDB 集群存储引擎时提供 ACID 合规性。从 5.6 版本开始,InnoDB 已成为 MySQL 的默认存储引擎。

  • 复制:MySQL 提供主备复制,包括单个主节点到一个备份节点和多个备份节点、循环复制(A 到 B 到 C,然后返回到 A)和主主复制。

  • 性能:MySQL 在高负载时可能表现不佳,尤其是在需要执行复杂查询时。它最适合需要简单、直接数据事务的基于 Web 的项目。

  • 安全性:MySQL 提供基于 访问控制列表ACLs)的安全性,适用于所有连接、查询和其他操作。它支持 MySQL 客户端与服务器之间的 SSL 加密连接。

  • NoSQL 特性:MySQL 仅提供 JSON 数据类型支持,但不支持 JSON 索引。

  • 可扩展性:MySQL 不支持可扩展性。

  • 并发性:MySQL 仅在 InnoDB 中支持多版本并发控制(MVCC)。

  • 编程语言:只能使用 MySQL 编程语言与数据库中的数据进行通信。

通过在 Azure 上运行 MySQL 数据库,除了 MySQL 提供的所有功能和能力外,微软还提供自动扩展、高可用性、静态数据加密、最多 35 天的自动备份和时间点恢复、企业安全性和合规性等。

Azure 上的 MySQL 提供以下定价层:

  • 基础:提供最多 1 TB 的存储空间,四个逻辑 CPU 和本地冗余备份。

  • 通用性:提供最多 1 TB 的存储空间,四个逻辑 CPU,可扩展的 I/O 吞吐量,以及本地冗余和地理冗余备份。

  • 内存优化:提供最多 1 TB 的存储空间,五个逻辑 CPU,可扩展的 I/O 吞吐量,以及本地冗余和地理冗余备份。

有关 MySQL Community Edition 提供的功能和能力的更多信息,您可以参考 www.mysql.com/products/community/

Azure PostgreSQL 数据库

Azure PostgreSQL 数据库是云中开源关系数据库 PostgreSQL 的一种实现。它也基于开源 PostgreSQL 数据库引擎的社区版本。PostgreSQL 提供了类似 MySQL 的功能,但也有一些差异。

它提供以下功能和能力:

  • 开源:PostgreSQL 完全开源。

  • ACID 合规性:提供 ACID 事务。

  • 复制:PostgreSQL 提供主备复制,包括单个主节点到一个备份节点和多个备份节点、热备/流复制、双向复制、逻辑日志流复制和级联复制。

  • 性能:支持各种性能优化,最适合需要执行复杂查询、读写速度至关重要的系统。PostgreSQL 在 OLTP/OLAP 系统和商业智能应用中表现良好。

  • 安全性:PostgreSQL 提供基于角色的安全性和继承的基于角色的安全性。它为客户端/服务器通信提供本地 SSL 支持,并提供行级安全性。

  • 并发性:PostgreSQL 拥有完全的多版本并发控制(MVCC)支持,并且在高流量环境中反应极其迅速。

  • NoSQL 特性:PostgreSQL 支持 JSON 和其他 NoSQL 特性,如原生 XML 支持、JSON 索引和 HSTORE 中的键值对。

  • 可扩展性:PostgreSQL 支持可扩展性,例如添加新的函数、类型、新的索引类型等。

  • 编程语言:提供 JavaScript、.Net、R、C/C++、Java、Perl、Python、Ruby、Tcl 等编程语言扩展。

除了 PostgreSQL 提供的所有功能外,Azure 数据库中的 PostgreSQL 还提供自动扩展、高可用性、静态数据加密、自动备份和时间点恢复等功能。

Azure 上的 PostgreSQL 提供与 Azure 上的 MySQL 相同的定价层:

  • 基础:提供最多 1 TB 的存储,四个逻辑 CPU,以及本地冗余备份。

  • 通用用途:提供最多 1 TB 的存储,四个逻辑 CPU,可扩展的 I/O 吞吐量,以及本地冗余和地理冗余备份。

  • 内存优化:提供最多 1 TB 的存储,五个逻辑 CPU,可扩展的 I/O 吞吐量,以及本地冗余和地理冗余备份。

有关 PostgreSQL 数据库提供的功能和能力的更多信息,您可以参考 www.postgresql.org/

总结

在本章中,我们已经完成了设计数据实现的目标。我们覆盖了 Azure 提供的各种数据实现解决方案,如各种 Azure 数据服务和 Azure 提供的各种关系型数据库。你现在应该知道在不同的场景中应该使用哪种数据库,如何管理备份和恢复,以及如何设计高可用性和性能。

接下来,我们将开始设计安全性和身份验证解决方案,首先是保护 Azure 资源。

问题

回答以下问题,测试你对本章内容的理解。你可以在本书末尾的评估部分找到答案:

  1. 你可以恢复 Azure 中已删除的数据库吗?

    1. 是的

    2. 不是

  2. 你可以使用 SQL Server Stretch Database 将本地数据存储扩展到 Azure 吗?

    1. 是的

    2. 不是

  3. 你可以使用 T-SQL 来分析 Azure Data Analytics 中的数据吗?

    1. 是的

    2. 不是

进一步阅读

你可以查看以下链接,了解本章涵盖的主题的更多信息:

第九章:保护您的资源

在上一章中,我们介绍了设计 Azure 数据服务目标的内容。我们涵盖了一些不同的 Azure 数据服务以及 Azure 中的关系数据库。我们还介绍了备份和安全策略以及高可用性和性能设计。

在本章中,您将了解设计安全性和身份解决方案领域的目标,包括如何保护您的资源,例如使用 Azure AD Connect、多因素身份验证(MFA)等。还将介绍如何为您的 Azure 解决方案使用不同的身份提供者。

以下主题将被涵盖:

  • Azure Active Directory(Azure AD)

  • Azure AD Connect

  • Active Directory 联合身份认证服务(ADFS)

  • 多因素身份验证

  • Azure Active Directory 企业对企业(Azure AD B2B)

  • Azure Active Directory 企业对消费者(Azure AD B2C)

技术要求

本章使用以下工具进行示例:

本章的源代码可以通过以下链接下载:

Azure Active Directory

Azure Active Directory(Azure AD)提供来自云端的目录和身份管理。它提供传统的用户名和密码身份管理、角色和权限管理。除此之外,还提供更多企业级解决方案,如 MFA、应用监控、解决方案监控和警报。Azure AD 可以轻松与您的本地 Active Directory 集成,以创建混合基础设施。

Azure AD 提供以下定价计划:

  • Free:提供最基本的功能,如支持最多 500,000 个对象、SSO、支持 Azure AD Connect 同步和标准安全报告

  • Basic:不限制对象数量,提供 99.9% SLA、组功能、自助密码重置和对应用代理的支持

  • Premium P1:提供高级报告、MFA、MDM 自动注册、云应用发现和 Azure AD Connect 健康监控

  • Premium P2:身份保护和特权身份管理

若要详细了解不同定价计划及每个计划提供的所有功能,您可以参考以下定价页面:azure.microsoft.com/en-us/pricing/details/active-directory/

请注意,Azure AD Premium 是企业移动性 + 安全套件的一部分。

您还可以在自定义应用和 API 中利用 Azure AD 来授权用户并保护您的资源。它支持行业标准协议,如 OAuth2.0 和 OpenID Connect,并支持单租户和多租户应用的身份验证,以及业务线(LOB)应用。

它提供了两个不同的端点,可以在你的自定义应用程序中使用:

  • V1 端点:此端点仅支持 Microsoft 工作或学校账户,并使用 Azure Portal 在 Azure AD 中注册应用。它使用 Azure Active Directory 库ADAL)SDK 来认证应用程序中的用户。

  • V2 端点:此端点同时支持 Microsoft 工作或学校账户和个人账户(如 Outlook.com)。它还提供一个新的注册门户,位于 apps.dev.microsoft.com,使得在 Azure AD 中注册应用程序变得更加容易。它使用 Microsoft 身份验证库MSAL)来认证应用程序中的用户。使用此端点,你可以为多平台应用创建一个单一的 App ID。如果你的应用程序由独立的 Web、Android 和 iOS 应用组成,它们可以使用相同的 App ID。你可以使用动态授权,在应用程序本身需要权限时再进行授权,而不是在 Azure AD 中注册应用时预先授权。

Microsoft Graph

Microsoft Graph 是一组 API,它将多个 Azure 服务连接在一起,并为开发者提供一个单一的端点,用于在自定义应用程序中使用。

Microsoft Graph 由各种 Azure 服务之间的关系构成。通过调用特定用户的端点(该用户已添加到 Azure AD 中),你可以检索用户正在处理的文档,找到他的/她的经理,获取用户的会议列表,列出设备等。

Azure AD 也集成在 Microsoft Graph 中,但它不仅仅可以用于 Azure AD 的功能。事实上,几乎所有 Azure 的 SaaS 产品都使用 Azure AD,例如 Office 365、Intune、Dynamic 365 和 Azure SQL。所有这些 Azure 服务都集成在 Microsoft Graph 中,可以在你的应用和 API 中使用。

Microsoft Graph 提供了两个不同的端点,一个是 V1.0 端点,它包含了所有正式发布的 API;另一个是 beta 端点,后者提供的 API 可能会随着时间的推移发生变化。

要开始使用 Graph API 并在 Azure AD 中注册你的应用程序,可以参考:developer.microsoft.com/en-us/graph。这是一个很好的起点,你还可以下载适用于多种编程语言的安全示例应用程序。

有关所有集成在 Microsoft Graph 中的 Azure 服务的概述,你也可以参考这个网站。

Azure AD Connect

Azure AD Connect 是一个服务,允许你将本地 Active Directory 身份与 Azure 同步。这样,你可以在本地环境和云环境及其他 SaaS 应用中使用相同的身份进行身份验证。

Azure AD Connect 同步服务由两个部分组成:Azure AD Connect 同步组件,这是一个安装在您本地环境中单独服务器上的工具,以及 Azure AD Connect 同步服务,这是 Azure AD 的一部分。同步组件可以将数据从 Active Directory 和 SQL Server 同步到 Azure。还有一个名为 Active Directory 联合身份验证服务(ADFS)组件的第三个组件,可以在涉及 ADFS 的场景中使用。要监控本地身份基础设施和不同的 Azure AD 组件,您可以使用一个名为 Azure AD Connect Health 的工具。

Azure AD Connect 架构

有关如何安装 Azure AD Connect 并同步用户帐户和密码的更多信息,请参考 docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-select-installation。有关监控健康状况的更多信息,请参考:docs.microsoft.com/en-us/azure/active-directory/connect-health/active-directory-aadconnect-health

Azure AD Connect 提供支持,允许用户使用相同的密码登录本地和云资源。为此提供了三种不同的身份验证方法:密码哈希同步方法、直通身份验证方法和联合单点登录方法(与 Active Directory 联合身份验证服务配合使用)。

这三种不同的身份验证方法将在接下来的部分中详细介绍。

Azure Active Directory 密码哈希同步

大多数组织只需要启用用户登录到 Office 365、SaaS 应用程序和其他基于 Azure AD 的资源。密码哈希同步方法非常适合这种场景。

使用此方法,用户的密码哈希在本地 Active Directory 和 Azure Active Directory 之间同步。当用户密码发生变化时,密码会立即同步,因此用户可以始终使用相同的凭证在本地和 Azure 中登录。

此认证方法还提供 Azure AD 无缝单点登录(SSO)。这样,用户在公司网络上使用域加入设备时,系统会自动登录。使用无缝 SSO 时,用户只需输入用户名。为了使用无缝 SSO,您无需在本地网络上安装额外的软件或组件。您可以通过组策略将此功能推送给用户。

Azure Active Directory 直通认证

Azure Active Directory 直通认证提供相同的功能,例如 Azure AD 密码哈希同步。用户可以使用相同的凭据登录到其 Azure 资源以及本地资源。不同之处在于,使用直通认证时,密码不会与 Azure AD 同步。密码是在本地 Active Directory 中验证的,完全不会存储在 Azure Active Directory 中。

这种方法适用于那些有安全性和合规性限制的组织,这些组织不允许将用户名和密码发送到本地网络之外。

直通认证需要在本地网络内安装一个代理在域加入的 Windows Server 上。该代理会监听密码验证请求,并仅从您的网络内发起外部连接。它还支持 MFA 和 Azure AD 条件访问策略。

Azure AD 直通认证还提供 Azure AD 无缝 SSO。

Active Directory 联邦服务

Active Directory 联邦服务(ADFS)是一项基于标准的服务,是 Windows Server 的一项功能,您可以在 Windows Server 机器上启用它。它为外部用户提供一个身份验证提供者,使其能够通过互联网登录到本地环境。

ADFS 提供以下功能:

  • Web SSO:当联合用户访问安装在本地数据中心的应用程序时,提供 SSO。

  • Web 服务(WS)- 互操作性:不使用 Windows 身份模型但兼容 WS-Federation 规范的应用程序或用户,仍然可以通过 ADFS 服务器对其进行身份验证,并访问本地应用程序。

  • 无外部用户帐户管理:外部用户可以使用其所属组织或个人凭证进行身份验证。在 ADFS 中,使用外部身份验证提供者和 ADFS 建立信任。然后,用户可以通过安全声明标记语言(SAML)声明进行联合身份验证。

联合 SSO 认证方法使用 Azure AD Connect 与 ADFS 结合,为用户提供联合单点登录。您可以将 ADFS 部署在本地数据中心或使用 Azure 虚拟机。您可以使用相同的 Azure AD API,如 Microsoft Graph,连接到本地身份。Azure Active Directory 负责通过 ADFS 连接到您的本地环境,并处理认证过程。

你还可以使用 ADFS 扩展 Azure AD 的功能。你可以实现自定义声明或条件策略,这些功能在 Azure AD 中不存在,或者使用你的组织登录屏幕,添加额外的通知或信息,或者使用自定义 MFA 提供商。你还可以使用 ADFS 在不同的环境之间创建信任。

多因素身份验证

在今天的世界中,保护数据和系统至关重要。MFA 为用户登录增加了第二层安全性,并且现在已成为保护数据的最佳实践。它启用两步验证,你首先使用你所知道的信息登录,然后使用你所拥有的信息进行验证。

Azure MFA 使用以下验证方法:

  • 你知道的东西:这类似于传统密码。

  • 你拥有的东西:这类似于手机,通过发送短信、使用验证应用程序或接听电话来进行验证。Azure MFA 还支持第三方 OAUTH 令牌。

  • 你是谁:这类似于生物识别技术,通过指纹或面部识别进行验证。

Azure MFA 是 Office 365 和 Azure 服务的一部分。它易于设置,你可以选择要为用户使用的验证方法。当你需要将 MFA 添加到未通过 Azure 应用程序代理发布到云中的本地应用程序时,你也可以选择部署本地 MFA 服务器。

如果你想了解更多有关本地 MFA 服务器的信息及其提供的功能,你可以参考:docs.microsoft.com/en-us/azure/multi-factor-authentication/multi-factor-authentication-get-started-server.

Azure MFA 包含在 Azure Active Directory Premium 计划和企业移动性与安全套件中。你也可以将其作为独立产品购买。

你还可以在自定义应用程序中使用 MFA SDK 来实现 MFA。用户可以使用现有的凭证登录应用程序。该应用程序向 Azure MFA 服务发送请求,Azure MFA 服务将向电话或其他设备发送请求。用户通过身份验证后,Azure MFA 服务将响应返回给应用程序,从而完成用户登录。MFA SDK 支持多种编程语言,如 C#、PHP、Ruby 和 Java。

在 Azure 门户中启用 MFA

要在 Azure 门户中启用 MFA,请按照以下步骤操作:

  1. 通过打开 portal.azure.com/ 导航到 Azure 门户。

  2. 在左侧菜单中点击 Azure Active Directory。

  3. 在下一个窗格中,点击用户。然后在顶部菜单中点击 多因素身份验证

启用 MFA - Azure 门户

  1. 将打开 MFA 门户,你可以为每个用户启用 MFA。

在 Office 365 中启用 MFA

要在 Office 365 管理中心启用 MFA,请按照以下步骤操作:

  1. 通过打开portal.office.com/adminportal/home 进入 Office 365 管理中心。

  2. 进入“用户 | 活跃用户”。点击“更多 | 设置 Azure 多重身份验证”,如下面的截图所示:

启用 MFA - Office 365 管理中心

  1. Office 365 的 MFA 门户已打开,外观与 Azure MFA 门户基本相同。

Azure Active Directory Business to Business

Azure Active Directory Business to Business (B2B) 是 Azure Active Directory 的一项功能,使组织能够安全地与外部用户合作。要加入 Azure B2B,外部用户不需要拥有 Microsoft 工作或个人账户,并将其添加到现有的 Azure AD 租户中。各种账户都可以加入 Azure B2B。你无需在 Azure 门户中进行任何配置即可使用 B2B;此功能默认对所有 Azure AD 租户启用。

Azure B2B 与 Office 365 集成,支持外部共享。它还提供可以在自定义应用程序中使用的 API,让内部和外部用户都能进行身份验证。

Azure AD 免费功能对外部用户开放且无需收费。然而,如果你希望外部用户使用 Azure AD Premium 功能,如多重身份验证(MFA)和条件访问,你需要有足够的 Azure AD Premium 许可证,比例为 5:1。这意味着每购买一个 Azure AD Premium 许可证,你可以添加五个外部用户。因此,举例来说,如果你的组织想要添加 50 个外部用户到 Azure B2B,你需要购买 10 个 Azure AD Premium 许可证。

Azure AD B2B 提供以下功能:

  • 管理门户:为外部组织提供的单独门户,管理员可以在其中添加、管理和删除用户。

  • :你可以为外部用户创建组。你也可以使用动态组。管理员可以设置规则,根据用户属性自动填充组。

  • 条件访问:通过条件访问,你可以为用户设置某些条件。你可以强制外部用户使用 MFA,或只允许他们访问某些应用程序,或仅允许从特定位置访问。

  • 共享策略:不仅管理员可以邀请外部用户。你可以使用策略将这些权限委派给其他外部用户。你可以将“访客邀请者”角色分配给用户,这样该用户就可以发送邀请。

  • 审计和报告:与普通用户一样,也有审计和报告功能。你可以查看邀请历史和接受详情。

Azure Active Directory Business to Consumer

Azure Active Directory Business to Consumer (B2C) 是一种用于移动和 Web 应用程序的云身份管理解决方案。它提供开箱即用的身份验证提供程序,可以通过 MSAL 在你的应用程序和自定义 API 中使用,这也是其他 Azure AD 应用程序所使用的(使用 V2 端点)。

这意味着开发人员无需手动添加额外的 SDK;所有这一切都由 Microsoft 处理。接下来,除了 Microsoft 提供的身份验证提供程序外,它还提供了添加您自己身份验证提供程序的能力。

Azure AD B2C 提供以下身份验证提供程序:

  • 社交帐户:它们是 Facebook、Google、LinkedIn 等

  • 企业帐户:它们使用开放标准协议,如 OpenID Connect 或 SAML

  • 本地帐户:它们是使用电子邮件地址/用户名和密码的帐户。

您的应用程序需要在 Azure B2C 租户内注册。注册后,可以为该应用配置内置策略,您可以启用不同的身份验证方法、设置声明、启用 MFA 或创建密码重置策略,供应用使用。

然后,您将所需的配置设置添加到您注册在 Azure B2C 租户中的应用程序的代码中,并且所有前面提到的设置都可以在没有进一步配置的情况下使用。

您可以参考以下网站获取更多有关 Azure AD B2C 的信息:docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-overview

在您的应用程序中利用 Azure AD B2C

在此演示中,我们创建一个利用 Azure AD B2C 功能进行身份验证的应用程序。此过程分为两个步骤,首先是在 Azure 门户中创建一个 Azure AD B2C 租户,然后是创建该应用程序。

在 Azure 门户中创建 Azure AD B2C 租户,请按照以下步骤操作:

  1. 通过打开 portal.azure.com/ 访问 Azure 门户。

  2. 点击新建,在搜索框中输入 Azure Active Directory B2C。创建一个新的租户:

创建 Azure B2C 租户

  1. 选择创建新的 Azure AD B2C 租户,添加以下设置,然后点击创建:

添加设置

  1. 您可以通过打开 Azure 门户右上角的菜单来选择租户:

选择 Azure B2C 租户

  1. 创建后,您可以导航到门户中的 Azure B2C 页面。

现在,您可以在 B2C 租户中设置不同的身份验证提供程序。在此演示中,我添加了一个 Google 身份提供程序。要添加此提供程序,您可以参考教程:docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-setup-goog-app

  1. 接下来要做的是注册应用程序。在左侧菜单中点击“应用程序”,然后点击“添加”按钮:

在 Azure B2C 中注册应用程序

  1. 我们将创建一个 Web 应用程序来进行 Azure B2C 身份验证。我们使用 OpenID Connect 进行登录,因此你需要启用“允许隐式流”(Allow implicit flow)。你还需要添加回复 URL。添加以下设置并点击“创建”:

添加应用程序设置

  1. 当应用程序创建完成后,点击该应用程序。将应用程序 ID 复制到记事本中。还需要复制应用程序密钥。在左侧菜单中点击“密钥”(Keys),然后点击生成密钥(Generate key):

生成密钥

  1. 立即点击保存并将密钥复制到记事本中。

  2. 接下来要做的是创建一个 Google 身份提供者。打开左侧菜单中的身份提供者(Identity providers),然后点击“添加”按钮:

添加 Google 身份提供者

  1. 在下一个面板中,选择以下设置:

选择 Google

  1. 打开一个新的浏览器标签页并访问:console.developers.google.com。创建一个新项目并命名为PacktB2C。返回 API 主页并在左侧菜单中点击凭据(Credentials):

获取应用程序凭据

  1. 点击顶部菜单中的 OAuth 同意屏幕设置,添加以下内容,然后点击保存:

OAuth 同意设置

  1. 点击顶部菜单中的凭据同意设置(Credentials consent settings),然后添加以下设置:

创建 OAuth 凭据

  1. 添加以下设置以创建应用程序:

注册应用程序

  1. 一个弹出窗口会显示客户端 ID 和客户端密钥。将其复制到记事本中。

  2. 返回 Azure 门户,将客户端 ID 和客户端密钥添加到我们注册身份提供者的面板中,然后点击“确定”:

添加客户端 ID 和客户端密钥

  1. 接下来,你需要添加登录策略。在左侧菜单中点击此项,然后点击“添加”(Add)。添加以下设置:

添加策略

  1. 选择以下应用程序声明并点击“确定”,然后点击“创建”:

选择 Google 声明

  1. 示例应用程序可以从 GitHub 下载。打开应用程序的Web.config文件,并用之前复制到记事本中的值更新设置。它应该如下所示:
<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    <add key="ida:Tenant" value="packtb2c.onmicrosoft.com" />
    <add key="ida:ClientId" value="0c321f85-2f11-402a-84d7-0e3823947038" />
    <add key="ida:ClientSecret" value="3Tc\(J3.A7w1emrm.v4r|Dxj" />
    <!--<add key="ida:AadInstance" value="https://login.microsoftonline.com/tfp/{0}/{1}/v2.0/.well-known/openid-configuration" />-->
    <add key="ida:AadInstance" value="https://login.microsoftonline.com/{0}/v2.0/.well-known/openid-configuration?p={1}" />
    <add key="ida:RedirectUri" value="https://localhost:44316/" />
    <add key="ida:SignInPolicyId" value="B2C_1_PacktSigninGoogle" />
  </appSettings>
  1. 运行应用程序并点击登录按钮。确保应用程序在你已在 Azure 门户配置为回复 URL 的 IP 地址上运行:

登录应用程序

  1. 现在,你可以使用你的 Google 账户进行登录。

总结

本章中,我们介绍了如何利用 Azure 提供的不同功能来保护你的资源。我们讲解了 Azure Active Directory,以及如何使用 Azure AD Connect 设计混合环境。我们还讨论了 ADFS、Azure B2B 和 Azure B2C。

下一章将讲解如何保护你的数据。

问题

回答以下问题,以测试你对本章内容的理解。你可以在本书最后的评估部分找到答案:

  1. 你正在创建一个利用 Office 365 数据的会议应用程序。用户应该能够使用他们的 Azure Active Directory 凭据登录。你可以使用 Microsoft Graph 来实现吗?

  2. 你想创建一个混合环境,并为本地应用程序和云应用程序都使用单一登录。你应该使用 Azure AD Connect 来实现吗?

  3. Azure AD B2B 是否是启用 SharePoint Online 环境中的外部共享的合适解决方案?

深入阅读

你可以查看以下链接,获取有关本章涵盖主题的更多信息:

第十章:保护您的数据

在上一章中,我们介绍了如何保护您的资源。我们讲解了如何使用 Azure Active Directory、Azure B2B 等服务设计解决方案,并讨论了何时使用这些不同的 Azure 服务。

本章将介绍如何为 Azure 服务设计数据安全解决方案,例如使用 Azure 存储加密、Azure 磁盘加密和 Azure 密钥保管库。

本章结束时,您将了解如何使用 Azure 中的不同安全功能来保护您的数据。

以下主题将被涵盖:

  • Azure 密钥保管库

  • Azure 存储加密

  • Azure 磁盘加密

  • Azure SQL 数据库安全

  • Azure AD 托管服务标识

技术要求

本章使用以下工具作为示例:

本章的源代码可以从以下链接下载:

Azure 密钥保管库

您可以将加密密钥和机密存储在 Azure 密钥保管库中,这些密钥可以被各种 Azure 服务和自定义应用程序使用。Azure 使用它来存储 Azure 存储服务加密和 Azure 磁盘加密的密钥,这些将在本章后续介绍。然而,您也可以将应用程序客户端 ID 和密钥存储在其中,并在自定义应用程序中检索它们。这样,您就不再需要将这些 ID 和密钥存储在 web.config 中,而是可以从一个位置进行管理,确保它们安全且受到保护,且该位置位于 Azure 门户中。您还可以存储证书和其他身份验证密钥,并为密钥的使用提供监控解决方案。Azure 密钥保管库与 Azure AD 集成,您可以设置访问策略,控制不同用户和组对存储在其中的密钥的访问权限。

Azure 密钥保管库有两种服务层级:

  • 标准:提供地理扩展和可用性。

  • 高级:提供地理可用性和对硬件安全模块(HSM)的支持,通过为 HSM 密钥提供备份。HSM 是专门用于加密操作的计算机。将操作处理交由硬件本身可以提供更好的性能和安全性。密钥和机密在 Azure 密钥保管库中被加密,并且添加了一些额外的属性,确保只能由特定的 HSM 使用。

在 Azure 门户中创建 Azure 密钥保管库

在 Azure 门户中创建 Azure 密钥保管库服务并向其中添加密钥、机密和证书,请按以下步骤操作:

  1. 通过打开 portal.azure.com/ 访问 Azure 门户。

  2. 点击“新建”并在搜索栏中输入 Key Vault。创建一个新的密钥保管库:

创建新的 Azure 密钥保管库

  1. 添加以下设置并点击创建:

添加 Azure 密钥保管库设置

  1. 一旦密钥保管库(Key Vault)创建完成,你可以从左侧菜单中添加密钥和密钥:

密钥保管库设置

  1. 点击密钥(Keys),然后点击生成/导入。在这里,你可以设置多个选项,如密钥类型和密钥大小。添加以下设置并点击创建:

添加密钥

  1. 如果点击密钥并进入其属性,你会看到你可以使用此密钥执行多种操作;你可以加密、解密、签名和验证数据,或者使用封装密钥(Wrap Key)和解封装密钥(Unwrap Key)操作来保护其他密钥:

密钥属性

  1. 要创建密钥,请点击左侧菜单中的密钥(Secret),然后点击生成/导入。例如,你可以添加应用程序密钥和应用程序密钥。添加以下设置并点击创建:

添加密钥

  1. 要创建或上传证书,请点击左侧菜单中的证书,然后点击生成/导入。在这里,你还可以添加证书颁发机构并让它们颁发证书。我们现在为此示例创建一个自签名证书:

创建证书

  1. 点击创建。证书创建可能需要一些时间。

在 ARM 模板中使用 Azure 密钥保管库的密钥

除了在自定义应用程序中使用 Azure 密钥保管库,你还可以在 ARM 模板中使用密钥。你可以将密钥添加到参数 JSON 文件中。参见以下示例,看看你的参数应该是什么样子:

"packtPassword": {
"reference": {
"keyVault": {
    "id": "/subscriptions/<subscription id>/resourceGroups/examplegroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
             },
         "secretName": "packtsecret"
   }
},

这应该能给你一个关于如何在 ARM 模板中嵌入密钥的印象。关于如何创建 ARM 模板的完整教程,你可以参考以下文章:docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-keyvault-parameter

Azure 存储服务加密

Azure 存储默认提供数据静态加密(SSE)。当数据在应用程序和 Azure 之间传输时,使用 HTTPS 进行加密;并且当数据写入存储帐户时,使用 256 位 AES 加密进行加密。你还可以使用 SMB 3.0 或 VPN 连接安全地将数据传输到 Azure。一旦数据再次被访问,它会被解密,并通过 HTTPS 发送回去。Azure 自动管理存储加密密钥,保存在 Azure 密钥保管库中。SSE 用于表、文件、队列和 Blob 存储,适用于标准和高级定价计划,支持所有冗余级别和所有地区。

你可以在 Azure 门户、PowerShell、CLI、REST API 和 Azure 存储 SDK 中设置存储帐户的加密。默认情况下已启用,因此你不必在 PowerShell 脚本中手动设置此项:

Azure 存储服务加密设置

你还可以在自定义代码中使用客户端加密。Azure 存储客户端库(.NET)支持此功能。这也与 Azure 密钥保管库配合使用。SDK 创建一个内容加密密钥(CEK),用于在数据发送到存储帐户之前对数据进行加密。加密密钥默认存储在 Azure 密钥保管库中,但你也可以使用自定义提供程序。使用客户端加密将会在数据发送到 Azure 之前以及存储在存储帐户内的瞬间对数据进行加密。

SSE 有一个限制,那就是只有在启用加密时创建的数据才会被加密。因此,如果你曾在某个时间点禁用了存储帐户的加密,存储帐户中的数据将不再被加密。当你决定重新启用加密时,之前存储的数据不会自动加密,因为数据只有在存储时才会被加密。你必须删除并重新上传这些数据才能进行加密。

Azure 磁盘加密

Azure 磁盘加密可以加密 Windows 和 Linux 虚拟机磁盘。对于 Windows 磁盘,使用 Bitlocker;对于 Linux,使用 dm-crypt,这两者都是行业标准。Azure 密钥保管库用于管理加密密钥,类似于 Azure 存储加密。

对于所有虚拟机类型,Azure 磁盘加密在所有 Azure 区域都可用,并可以通过 PowerShell 设置。你可以使用以下命令来设置加密:

Login-AzureRmAccount

如有必要,选择正确的订阅:

Select-AzureRmSubscription -SubscriptionId "********-****-****-****-***********"

我们正在使用 Azure 密钥保管库来存储我们之前创建的加密密钥。我们也在这里使用了第一章中创建的虚拟机(确保虚拟机正在运行,否则脚本会报错)。这两者都创建在同一个资源组中。因此,填写密钥保管库的名称、密钥保管库的资源组以及虚拟机,并对虚拟机进行加密。它使用 Azure AD 中的一个应用程序,该应用程序用于将机密写入密钥保管库。你需要先创建这个应用,并在脚本中替换应用程序 ID 和密钥。完全加密可能需要一些时间:

$RGName = "PacktPub"
$VMName = "W16PacktServer"
$AADClientID = "PacktADApp"
$AADClientSecret = "PacktSecret"
$VaultName= "PacktKeyVault"

$KeyVault = Get-AzureRmKeyVault -VaultName $VaultName -ResourceGroupName $RGName
$DiskEncryptionKeyVaultUrl = $KeyVault.VaultUri
$KeyVaultResourceId = $KeyVault.ResourceId

Set-AzureRmVMDiskEncryptionExtension -ResourceGroupName $RGName -VMName $VMName -AadClientID $AADClientID -AadClientSecret $AADClientSecret -DiskEncryptionKeyVaultUrl $DiskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId

Azure SQL 数据库安全性

Azure SQL 数据库还提供了多种数据安全功能。它为传输中的数据、静态数据和使用中的数据提供安全性。为此,它使用了以下功能:

  • HTTPS:此协议为传输中的数据提供安全性。数据通过 HTTPS 的安全连接传输。

  • 透明数据加密:这为静态数据提供安全性。它实时加密和解密数据库、备份文件和日志。它也用于 Azure 数据仓库。它使用一个数据库加密密钥,该密钥默认由 Azure 存储,但也可以存储在 Azure Key Vault 中。新创建的数据库默认是加密的。您可以在 Azure 门户、PowerShell 和 REST API 中的设置内禁用或启用加密:

Azure 门户中的透明数据加密

  • 始终加密:这为正在使用中的数据提供安全性。它为数据库中的机密数据提供加密。例如,社会保障号码或信用卡号码在数据库中以加密形式存储,并在应用程序内为有权限访问的人解密。您可以使用 SQL Server Management Studio 或 PowerShell 启用始终加密功能来加密数据库中的列。为了从应用程序加密敏感数据,您可以使用 .NET Framework 数据提供程序来进行 SQL Server 加密。

Azure Active Directory 托管服务身份

到本书写作时,Azure Active Directory 托管服务身份仍处于预览阶段。它为所有使用 Azure Active Directory 的 Azure 资源提供托管身份。

当您在 Azure 资源上启用 MSI(例如 Azure 虚拟机、Azure 函数或应用程序)时,Azure 会创建一个服务主体,并将该服务主体的凭据存储到 Azure 资源本身。当需要进行身份验证时,调用 MSI 端点,传递您当前的 Azure AD 凭据和特定资源的引用。MSI 然后从 Azure 资源中检索存储的凭据,传递给 Azure AD,并获取可以用于身份验证 Azure 资源或服务的访问令牌。

您应该注意,服务主体仅在其存储的特定 Azure 资源的边界内可见。如果它还需要对其他资源授予权限,您应该使用 基于角色的访问控制 (RBAC) 在 Azure AD 中分配适当的角色。

您可以在 Azure 门户、PowerShell、CLI 和 ARM 模板中启用 Azure 资源的 MSI:

应用服务的托管服务身份设置

从自定义代码中,您还可以调用 MSI 端点获取访问令牌以进行 Azure 资源的身份验证。对于 .NET 应用程序,您可以使用 Microsoft.Azure.Services.AppAuthentication 库来完成此操作。您也可以通过调用 REST API 来实现,但这样您需要手动创建请求。

您可以参考以下 GitHub 页面 github.com/Azure-Samples/app-service-msi-keyvault-dotnet,了解一个使用 MSI 的应用程序示例。

总结

本章介绍了如何使用 Azure 提供的不同服务来保护数据安全。我们讨论了 Azure 密钥保管库、Azure 存储服务加密、Azure 磁盘加密等内容。现在,你应该知道何时以及如何在解决方案中使用这些技术。

下一章将是本目标的最后一章,治理与政策

问题

请回答以下问题,测试你对本章内容的理解。你可以在本书末尾的评估部分找到答案。

  1. 你希望为应用程序增加额外的安全层。信用卡号需要加密存储在 Azure SQL 数据库中。你应该使用数据掩码吗?

  2. 你正在开发一个自定义应用程序,并且不想将应用 ID 和应用密钥添加到 web.config 中。你可以将这些凭据存储在 Azure 密钥保管库中,并在应用程序执行时动态检索吗?

  3. Azure 磁盘加密是否加密静态数据和传输中的数据?

深入阅读

你可以查看以下链接,了解更多本章讨论的主题:

第十一章:治理与政策

在上一章中,我们讨论了如何使用 Azure 提供的各种技术来保护您的数据,并介绍了何时使用这些技术。我们讨论了 Azure 密钥保管库、Azure 存储服务加密、Azure 磁盘加密等内容。

在本章中,我们将涵盖治理与政策,诸如 Azure 中的标准和自定义角色、何时使用 Azure 基于角色的访问控制、Azure 资源政策等内容。

本章结束时,您将了解如何设计治理机制和政策,并管理安全风险。

以下主题将被涵盖:

  • Azure 基于角色的访问控制

  • Azure 资源政策

  • Azure AD 特权身份管理

  • Azure AD 身份保护

  • Azure 安全中心

  • 操作管理套件 - 安全与合规

技术要求

本章的示例使用以下工具:

本章的源代码可以通过以下链接下载:

Azure 基于角色的访问控制

在 Azure 中使用基于角色的访问控制(RBAC),您可以实施最小权限原则,并为用户提供完成工作所需的精确权限。用户、组和应用程序会被添加到 Azure 中的角色中,这些角色具有某些权限。您可以使用 Azure 提供的内置角色,或者可以在 RBAC 中创建自定义角色。

Azure 中的角色可以添加到特定的范围。范围可以是一个 Azure 订阅、一个 Azure 资源组,或例如 Web 应用。然后,Azure 使用访问继承。添加到父资源的角色会自动赋予对子资源的访问权限。例如,添加到 Azure 订阅的组会获得该订阅下所有资源组及其底层资源的访问权限。添加到虚拟机的用户仅能访问该特定虚拟机:

基于角色的访问控制继承

在每个 Azure 订阅中,您可以授予最多 2,000 个角色分配,这些分配可以通过 Azure 门户、PowerShell、CLI 和 REST API 设置。

内置角色

Azure 提供了多种内置角色,您可以使用它们来为用户、组和应用分配权限。RBAC 提供以下三种标准角色,您可以将它们分配给每个 Azure 资源:

  • 所有者:该角色中的用户可以管理一切,并可以创建新资源。

  • 贡献者:该角色中的用户可以像所有者角色中的用户一样管理一切,但不能将访问权限分配给其他人。

  • 读者:该角色中的用户可以读取所有内容,但不允许进行任何更改。

除了标准角色外,每个 Azure 资源还拥有作用于特定资源的角色。例如,你可以将用户、组或应用分配给 SQL 安全管理员角色,在该角色中他们可以管理所有与 Azure SQL 服务器相关的安全策略,或者你可以将他们分配给虚拟机贡献者角色,在该角色中他们可以管理虚拟机,但不能管理与虚拟机连接的虚拟网络或存储账户。

要查看 Azure 提供的所有内置角色概览,你可以参考 docs.microsoft.com/en-us/azure/active-directory/role-based-access-built-in-roles

自定义角色

当没有内置角色符合你的需求时,你还可以在 RBAC 中创建自定义角色。自定义角色可以被分配到与内置角色相同的资源,只能通过 PowerShell、CLI 和 REST API 创建。你不能在 Azure 门户中创建它们。在每个 Azure 租户中,最多可以创建 2,000 个角色。

自定义角色是通过 JSON 定义的,部署后它们会存储在 Azure AD 租户中。通过将它们存储在 Azure AD 租户中,它们可以在连接到该 Azure AD 租户的所有不同 Azure 订阅中使用。

创建自定义角色

在下一个示例中,我们正在创建一个只能在 Azure 中重启虚拟机的自定义角色。我们还将在 JSON 文件中将该角色分配给我的用户账户:

  1. 你可以使用以下 JSON 代码定义自定义角色。你应该将 Id 设置为 null,因为自定义角色在创建时会自动分配 ID。我们将把自定义角色添加到两个 Azure 订阅中:
{
  "Name": "Packt Custom Role",
  "Id": null,
  "IsCustom": true,
  "Description": "Allows for read access to Azure Storage, Network and Compute resources and access to support",
  "Actions": [
    "Microsoft.Compute/*/read",
    "Microsoft.Storage/*/read",
  "Microsoft.Network/*/read",
  "Microsoft.Resources/subscriptions/resourceGroups/read",
    "Microsoft.Support/*"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/********-****-****-****-***********",
    "/subscriptions/********-****-****-****-***********"
  ]
}
  1. 将 JSON 文件保存在电脑 C: 盘的 CustomRoles 文件夹中。然后,运行以下 PowerShell 脚本来创建角色。首先,登录到你的 Azure 账户:
Login-AzureRmAccount
  1. 然后,通过在 PowerShell 中导入 JSON 文件来创建 Azure 中的自定义角色:
New-AzureRmRoleDefinition -InputFile "C:\CustomRoles\PacktCustomRole.json"
  1. 通过打开以下网址,导航到 Azure 门户:portal.azure.com/

  2. 进入 订阅,选择 JSON 文件中已添加角色的订阅之一。然后,点击 访问控制(IAM)| 添加。

  3. 在下一个页面中选择角色。自定义角色将出现在列表中:

Azure 门户中的自定义角色

Azure 资源策略

在 Azure 中,你可以创建策略,在这些策略中定义并强制执行 Azure 资源的规则和操作。Azure 策略与 RBAC 不同,因为它关注的不是需要访问权限的用户、组或应用,而是关于应用你组织的治理策略。Azure 可以扫描你的资源,确保它们符合公司规则和 SLA。例如,你可以创建一个策略,评估所有使用托管磁盘的虚拟机。

创建策略时,用户必须在 RBAC 中被授予所有者角色,或者需要创建自定义角色并将以下权限添加到 JSON 文件中:

  • 定义策略Microsoft.Authorization/policydefinitions/write

  • 分配策略Microsoft.Authorization/policyassignments/write

可以通过 Azure 门户、PowerShell 和 CLI 创建策略。

要通过 Azure 门户创建策略,您可以参考以下教程:docs.microsoft.com/en-us/azure/azure-policy/assign-policy-definition

Azure AD 特权身份管理

Azure AD 特权身份管理(PIM)是 Azure AD Premium P2 或 Enterprise Mobility + Security E5 功能的一部分。通过 PIM,您可以管理和控制 Azure AD 租户内的所有访问权限,例如访问 Azure 资源、Office 365、Intune 和 Azure AD。

在 RBAC 中,您可以授予永久角色访问权限。通过 PIM,您可以将可用角色访问权限授予用户。那些不需要永久访问资源的用户可以在需要特定类型权限时请求访问,且访问时间为预定的时间段。例如,用户可以请求临时的 SharePoint 管理员权限。该请求可以由委派批准人批准,权限在用户完成后会被停用。

PIM 使用以下流程:

  • 用户请求:用户使用在线表单请求特定权限的访问,并指定预定的时间。

  • 请求审核:请求会在 PIM 门户内由管理员进行审核。

  • 审批:请求可以被批准,用户将被添加到所需角色中。

  • 通知:用户会通过电子邮件收到通知。

  • 用户执行操作:用户使用多重身份验证(MFA)登录 Azure 资源,并且 Azure AD 特权身份管理(PIM)在特定的时间范围内提升他们的权限。

  • 监控:监控团队可以跟踪 PIM 门户中的所有权限提升。

Azure AD 特权身份管理概述

Azure AD 身份保护

Azure AD 身份保护是一个包含在 Azure AD Premium P2 许可证中的功能。它通过检测基于身份的安全问题,为您的 Azure 身份提供高级保护。它帮助发现被破坏的身份,提供条件访问策略,修复安全事件,并支持调查安全事件。Azure 使用机器学习算法进行检测,并生成报告和警报以解决威胁。

Azure AD 身份保护提供以下策略:

  • MFA 注册:在此,您可以分配 MFA 策略,并强制要求用户使用 MFA 登录。

  • 用户风险策略:此策略允许您阻止用户登录,或强制要求他们更改密码为更安全的密码。

  • 登录风险策略:当用户从不熟悉的位置登录时,此策略提供保护。您可以强制要求他们在该位置登录时使用多因素身份验证(MFA)。

Azure AD 身份保护概览

Azure 安全中心

Azure 安全中心为所有 Azure 资源提供高级威胁防护和安全管理,这些资源位于 Azure AD 租户内以及混合环境中的本地资源。它集成在 Azure 门户中,提供以下功能:

  • 集中式策略管理:您可以从一个中心位置管理混合环境中资源的所有安全策略。Azure 资源策略与 Azure 安全中心集成。

  • 持续安全评估:此功能为所有虚拟机、应用程序、虚拟网络和存储帐户提供安全监控解决方案。

  • 可操作建议:此功能提供建议,以修复来自 Azure 门户的漏洞和潜在威胁。

  • 高级云防御:此功能提供端口的 JIT 访问,并对白名单中的虚拟机上部署的应用程序进行管理。

  • 优先级警报和事件:此功能提供优先级警报,首先关注最大风险和威胁。

  • 集成安全解决方案:您可以将 Azure 安全中心与第三方解决方案集成,从各种资源收集数据。

Azure 安全中心概览

Azure 安全中心提供两种不同的定价层:

  • 免费:所有 Azure 订阅都默认获得免费访问层。它提供安全策略、持续的安全评估和可操作的安全建议。

  • 标准:此计划提供免费计划中的所有功能,但现在适用于混合环境。它还提供高级威胁检测,本章稍后将详细讲解,并提供高级云防御。

有关如何创建安全策略的完整教程,您可以参考docs.microsoft.com/en-us/azure/security-center/security-center-azure-policy。请注意,编写本书时,Azure 策略仍处于预览阶段。

高级威胁检测

高级威胁检测监控所有 Azure 资源的安全信息,包括 Azure 订阅内的资源、混合环境和连接的第三方解决方案。它分析数据以检测潜在威胁,当检测到威胁时,会创建一个安全警报。此安全警报提供有关威胁的详细信息,并提供解决威胁的建议。

Azure 使用机器学习算法来帮助检测威胁。这些算法被应用于整个 Azure 云架构中,并可用于所有类型的帐户,如企业帐户、较小组织的帐户以及个人帐户。它们都可以从微软过去十年分析的所有数据中受益。

Azure 安全中心提供三种类型的威胁报告,这些报告是使用高级威胁检测生成的。根据攻击情况,这些报告的内容可能会有所不同:

  • 活动组报告:这提供了关于攻击者的信息,例如身份或关联、攻击目标,以及攻击者的战术、工具和程序。

  • 攻击活动报告:这提供了当前和历史攻击活动的信息。

  • 威胁概述报告:这将合并所有先前提到的报告中的信息。

Azure 端点保护

Azure 端点保护是一项功能,能够为你的 Azure 虚拟机和连接到 Azure 安全中心的本地虚拟机提供防恶意软件保护。在 Azure 安全中心中,你可以监控虚拟机的防恶意软件保护状态。

要为你的虚拟机启用端点保护,你必须通过 Azure 安全中心来进行操作。

按照以下步骤从 Azure 门户创建虚拟机:

  1. 打开以下链接进入 Azure 门户:portal.azure.com/

  2. 点击左侧菜单中的安全中心(Security Center)。确保打开的是概述页面。在“防护”(Prevention)标签下,点击计算(Compute):

Azure 安全中心中的端点保护

  1. 当你的虚拟机未安装端点保护时,你将在报告工具中看到一个推荐。点击推荐(RECOMMENDATIONS):

Azure 安全中心中的端点保护建议

  1. 在下一个面板中,点击 Azure 虚拟机上未安装端点保护:

端点保护设置

  1. 你现在可以选择要安装端点保护的虚拟机,并选择安装 Microsoft Antimalware 解决方案:

在虚拟机上安装端点保护

  1. 点击创建(Create),然后你可以设置一些附加设置,如排除文件和位置、文件和扩展名,以及进程。保持默认设置并点击“确定”(OK),然后点击“创建”(Create)以安装端点保护到虚拟机上:

在虚拟机上安装端点保护

操作管理套件 - 安全与合规

操作管理套件(Operations Management Suite,OMS) 是微软的一款混合云和数据管理工具,托管在 Azure 中,旨在从一个地方管理本地和 Azure 基础设施。通过 OMS,你可以轻松管理大型混合环境。除了 Azure,OMS 还可以管理和保护 AWS、Windows Server、Linux、VMware 和 OpenStack 环境及机器。OMS 提供不同的管理解决方案,其中之一是安全性与合规性解决方案。

为了管理和保护虚拟机(VM)和服务器,需要安装一个代理程序,该代理程序会收集所有用于 OMS 的数据。为了从 Azure 收集数据,你需要创建一个日志分析工作区(Log Analytics Workspace)。当你将 Azure 订阅与 OMS 关联时,工作区会自动创建。

你可以从以下网址将 OMS 与 Azure 订阅关联:www.microsoft.com/en-us/cloud-platform/operations-management-suite

你也可以从 Azure 门户创建日志分析工作区。有关如何创建此工作区的更多信息,请参考:docs.microsoft.com/en-us/azure/log-analytics/

要安装代理并将 Azure 虚拟机连接到 OMS,你可以从 Azure 门户打开日志分析工作区,点击左侧菜单中的虚拟机,并将虚拟机连接到该工作区:

将虚拟机连接到 OMS

数据现在将在 OMS 门户中显示。OMS 提供一个安全性和审计(Security and Audit)仪表板,展示以下信息:

  • 安全领域(Security Domains):这将提供关于安全记录的信息,如恶意软件评估、网络安全、身份和访问信息

  • 显著问题:这将提供当前威胁和问题的信息

  • 检测(预览):通过可视化警报来帮助识别攻击模式

  • 威胁情报(Threat Intelligence):这可视化了具有不同威胁的服务器总数,并显示来自哪些 IP 地址的威胁

OMS 安全性和审计仪表板

总结

本章我们讨论了如何设计治理机制和政策以管理 Azure 资源,并如何使用适当的安全解决方案来管理安全风险。

本章内容结束后,我们将进入下一章,探讨使用平台服务设计解决方案的目标。第一章将讨论人工智能、物联网和 Azure 媒体服务。

问题

请回答以下问题,测试你对本章信息的理解。你可以在本书末尾的评估(Assessments)部分找到答案。

  1. 你能否通过 Azure AD 特权身份管理为用户授予符合条件的角色访问权限?

    1. 是的

  2. 您可以使用操作管理套件管理本地和 Azure 基础设施吗?

    1. 是的

    2. 不是

  3. 您希望检查您的 Azure 订阅中的所有虚拟机是否都使用托管磁盘。您可以使用 Azure 资源策略来实现这一点吗?

    1. 是的

    2. 不能

深入阅读

您可以查看以下链接,了解本章中涵盖的主题的更多信息:

第十二章:人工智能、物联网和媒体服务

在上一章中,我们讨论了治理和策略,例如 Azure 中的标准和自定义角色、何时使用 Azure 基于角色的访问安全,以及 Azure 资源策略。

在本章中,你将学习 Azure 为人工智能、物联网以及流媒体内容提供的各种功能和能力。通过本章的学习,你将掌握如何使用 Azure 认知服务、Azure Bot 服务、IoT Hub、Azure 媒体服务等设计最先进的解决方案。

本章将涵盖以下主题:

  • Azure 认知服务

  • Azure Bot 服务

  • Azure 机器学习

  • IoT Hub、事件中心和 IoT Edge

  • Azure 流分析

  • Azure 时间序列洞察

  • Azure 媒体服务

技术要求

本章使用以下工具作为示例:

本章的源代码可以从以下链接下载:

Azure 认知服务

借助 Azure 认知服务,你可以创建现代化和智能的应用程序。它提供各种人工智能和机器学习 API 和 SDK,可在应用程序中使用,使其更加智能,例如语音和面部识别、语音和语言理解等。

认知服务是 Azure 人工智能产品的一部分。它提供可直接使用的 API 以及需要训练的 API,这些 API 可以用于创建自定义的人工智能解决方案。

这些 API 被分为多个类别,如视觉、语音、语言、知识和搜索 API。这些类别以及可用的 API 在接下来的章节中将进行更详细的介绍。

认知服务还提供一组仍处于实验阶段的 API 和 SDK。这些服务被归类为实验室服务。在写作本书时,实验室部分提供手势、事件跟踪、学术知识、本地洞察、知识探索服务和实体链接服务。

可用的服务和 API

Azure 认知服务提供以下 API 和服务:

  • 视觉

    • 计算机视觉 API:此 API 提供图像处理和识别。你可以使用此 API 对图像进行分类、根据内容标记图像、识别手写文本、标记成人内容、裁剪图像、检测人脸等。

    • 内容审核员:内容审核员提供自动审核功能,例如检测视频中的潜在成人或不雅内容。它提供了审核工具,自动审核可以与人工参与结合使用。

    • 自定义视觉服务:此 API 提供一个工具,用于构建自定义图像分类器。它可以用于识别图像,例如某些花朵或狗等。此 API 需要通过上传图像来进行训练。

    • 面部 API:此 API 可以检测图像中的人脸。它可以从图像中提取信息,如姿势、面部毛发、眼镜、性别、年龄和头部姿势。您可以使用此 API 进行人脸验证、人脸分组、人脸识别以及查找相似的人脸。

    • 情感 API:此 API 是面部 API 的一部分,也可以作为独立 API 使用。您可以使用它检测图像中人们的情感。

    • 视频索引器:此 API 可以使用各种人工智能技术从您的视频中提取见解。此 API 也用于 Azure 媒体服务,稍后在本章中将更详细地介绍。

  • 语音

    • 微软语音 API:此 API 提供语音功能,如语音命令控制和语音转录与听写。它提供语音转文本功能,将人类语音转换为文本,可用于通过语音控制应用程序;以及文本转语音功能,将文本转换为音频流,可在应用程序中播放。

    • 自定义语音服务:此服务使您能够创建定制的语言模型和声学模型,旨在特定用户群体或特定环境中的应用程序。您可以训练 API 学习产品名称或行话。

    • 语音识别 API:此 API 提供语音验证功能,可以通过语音命令进行身份验证。它还提供语音识别功能,可以通过声音在一组人群中识别某个人。

    • 翻译语音 API:此 API 提供将对话语音从一种语言翻译成另一种语言文本的服务。

  • 语言

    • 语言理解(LUIS):LUIS 可以从文本中提取含义。它使用机器学习训练 API。

    • 必应拼写检查 API:提供拼写检查和上下文语法工具。它基于必应的所有网页搜索,并使用机器学习动态训练 API。

    • 语言分析 API:此 API 提供三种自然语言处理工具,例如句子分割与标记化、词性标注和句法分析。

    • 文本分析 API:此 API 提供对原始文本的自然语言处理,并包括此处提到的功能。其中一个功能是语言检测,支持最多 120 种语言。它返回一个语言代码以及一个表示分析强度的得分。它还提供关键词提取功能,通过提取关键短语来识别句子的要点,同时提供情感分析,可以用来分析人们对某些事物的看法。

    • 翻译文本 API:此 API 可用于提供超过 60 种不同语言的文本翻译。

    • Web 语言模型 API:此 API 提供多种标准自然语言处理任务。模型是使用 Bing 数据在 Web 规模上训练的。

  • 知识

    • 自定义决策服务:你可以使用此 API 为用户创建个性化体验。它可以个性化网站或门户上的内容或视频。你可以用它来进行广告投放和商店中的商品排名。

    • QnA Maker:它提供了一个 Web API,可以训练 AI 模型以更自然、对话的方式回答用户的问题。可以通过常见问题、URL/文档等进行训练。

  • 搜索:

    • Bing 搜索 API:此 API 包含多个 API 和功能。它包括所有 Bing 搜索 API,例如 Bing 网页搜索 API、Bing 图像搜索 API、Bing 视频搜索 API 和 Bing 新闻搜索 API。

    • Bing 自动建议 API:此 API 在你输入一个单词的前几个字符时提供建议。你可以用它来填充搜索框下拉列表。

    • Bing 自定义搜索 API:此 API 提供量身定制的搜索体验。你可以根据兴趣定制结果。因此,不需要让用户通过页面来搜索相关内容,你可以在提供给用户之前先过滤掉不相关的内容。

    • Bing 实体搜索 API:此 API 提供的搜索结果包括可以用于旅游景点等实体和地点。

要查看所有认知服务 API 的完整概述,请参考:docs.microsoft.com/en-us/azure/#pivot=products&panel=ai。想要开始使用认知服务?你可以参考以下页面获取不同 API 的免费试用密钥:azure.microsoft.com/en-us/try/cognitive-services/。这些试用计划有速率限制。Azure 门户有付费服务,你也可以在其中创建认知服务 API。

使用计算机视觉 API

在本示例中,我们将创建一个使用计算机视觉 API 分析图片的应用程序。

首先,你需要从 docs.microsoft.com/en-us/azure/cognitive-services/Computer-vision/Vision-API-How-to-Topics/HowToSubscribe 获取一个 API 订阅密钥。

接下来,你需要打开 Visual Studio 2017。

  1. 点击 文件 | 新建 | 项目,在新建项目窗口中,选择 控制台应用程序。为项目命名并点击 确定:

创建控制台应用程序

  1. 创建一个新的类,命名为 Extensions.cs,并将代码替换为以下内容:
using System;
using System.Collections.Generic;

namespace PacktCustomerVisionAPI
{
    static class Extensions
    {
        public static void ForEach<T>(this IEnumerable<T> ie, Action<T> action)
        {
            foreach (var i in ie)
            {
                action(i);
            }
        }
    }
}
  1. 将以下命名空间添加到 Main.cs 中:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
  1. Main.cs 添加以下变量。将 subscriptionKey 的值替换为有效的订阅密钥:
// Fill in the subscription Key
    const string subscriptionKey = "7c98f3e0aa3a4a729f69b20583a0bc18";

    //API Url in West Central US Region
    const string uriBase = "https://westcentralus.api.cognitive.microsoft.com/vision/v1.0/models/celebrities/analyze";
  1. 使用以下代码替换 Main 方法:
static void Main(string[] args)
   {
      Console.Write("Enter the path to an celebrity image: ");
      string imageFilePath = Console.ReadLine();

       MakeAnalysisRequest(imageFilePath);

       Console.WriteLine("\nPlease wait a moment for the results to appear. Then, press Enter to exit ...\n");
        Console.ReadLine();
    }
  1. 添加以下方法以创建请求,并将其发送到该类的客服 API:
static async void MakeAnalysisRequest(string imageFilePath)
{
   HttpClient client = new HttpClient();

   client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
        string requestParameters = "model=celebrities";
        string uri = uriBase + "?" + requestParameters;
        HttpResponseMessage response;
        byte[] byteData = GetImageAsByteArray(imageFilePath);
        using (ByteArrayContent content = new ByteArrayContent(byteData))
         {
             content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
             response = await client.PostAsync(uri, content);
             string contentString = await response.Content.ReadAsStringAsync();
               Console.WriteLine("\nResponse:\n");
               Console.WriteLine(JsonPrettyPrint(contentString));
          }
}
  1. 在之前的方法下方添加以下方法以导入名人图像:
static byte[] GetImageAsByteArray(string imageFilePath)
{
    FileStream fileStream = new FileStream(imageFilePath, FileMode.Open, FileAccess.Read);
    BinaryReader binaryReader = new BinaryReader(fileStream);
    return binaryReader.ReadBytes((int)fileStream.Length);
}
  1. 添加最后一个方法,以便在之前的方法下方显示 JSON 结果:
 static string JsonPrettyPrint(string json)
        {
            if (string.IsNullOrEmpty(json))
                return string.Empty;

            json = json.Replace(Environment.NewLine, "").Replace("\t", "");

            string INDENT_STRING = " ";
            var indent = 0;
            var quoted = false;
            var sb = new StringBuilder();
            for (var i = 0; i < json.Length; i++)
            {
                var ch = json[i];
                switch (ch)
                {
                    case '{':
                    case '[':
                        sb.Append(ch);
                        if (!quoted)
                        {
                            sb.AppendLine();
                            Enumerable.Range(0, ++indent).ForEach(item => sb.Append(INDENT_STRING));
                        }
                        break;
                    case '}':
                    case ']':
                        if (!quoted)
                        {
                            sb.AppendLine();
                            Enumerable.Range(0, --indent).ForEach(item => sb.Append(INDENT_STRING));
                        }
                        sb.Append(ch);
                        break;
                    case '"':
                        sb.Append(ch);
                        bool escaped = false;
                        var index = i;
                        while (index > 0 && json[--index] == '\\')
                            escaped = !escaped;
                        if (!escaped)
                            quoted = !quoted;
                        break;
                    case ',':
                        sb.Append(ch);
                        if (!quoted)
                        {
                            sb.AppendLine();
                            Enumerable.Range(0, indent).ForEach(item => sb.Append(INDENT_STRING));
                        }
                        break;
                    case ':':
                        sb.Append(ch);
                        if (!quoted)
                            sb.Append(" ");
                        break;
                    default:
                        sb.Append(ch);
                        break;
                }
            }
            return sb.ToString();
        }
  1. 现在,下载一个名人图像,运行应用程序,并提供完整的图像路径。

如需详细了解计算机视觉 API 的所有功能,可以参考:docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/home#Categorizing

Azure Bot 服务

Azure Bot 服务提供了一个完整的环境来构建和部署 Bots。Bot 是一种可以与用户进行对话互动的应用程序。它可以通过语音、文本和卡片与用户进行沟通。你可以创建能够通过自由形式的方式与用户沟通的 Bots,例如用户在聊天框中提问,Bot 给出回答,或者你也可以使用更为引导的方式,在这种方式下,你向用户提供选择项,并根据他们做出的选择采取相应的行动。

你可以在各种类型的应用程序中集成 Bots,例如自定义 Web 应用程序和 Azure Functions。你还可以创建集成到 Azure SaaS 应用程序中的 Bots。Azure Bot 服务提供多种渠道,可以将你的 Bot 连接到 Skype、Facebook、Teams、Slack、SMS 等。Bots 可以通过 .NET 或 Node.js 创建,并且提供了五种不同的模板来帮助你快速入门开发。你可以选择基本 Bot、收集用户输入的表单 Bot、利用 LUIS 的语言理解 Bot、用于常见问题的 Bot,以及能够提醒用户事件的 Bot。

Azure Bot 服务提供以下两种不同的定价方案:

  • 免费:此方案提供标准通道的无限消息数量,以及每月 10,000 条消息在高级通道上(例如 Microsoft Teams 和 Skype)。

  • 标准 S1:此方案提供标准通道的无限消息数量,并且你为每次发送 1,000 条消息的高级通道付费。此定价方案还提供 SLA。

你可以通过 Azure 门户或 Visual Studio 2017 使用 Bots。Microsoft 提供了一个完整的构建和部署 Bots 的解决方案,这个解决方案包含在 .NET 的 Bot Builder SDK 中。你需要下载可以安装在 Visual Studio Template 文件夹中的模板。该模板将成为开发 Bots 的起点。

从 Azure 门户创建一个 Bot

在本示例中,我们将创建一个可以从 Azure 门户部署到 Web 应用中的 Bot:

  1. 通过打开以下链接进入 Azure 门户:portal.azure.com/

  2. 点击“新建”,并在搜索栏中键入 Web App Bot

  3. 输入以下设置:

Web 应用程序 Bot 设置

  1. 点击“Bot 模板”,选择“表单模板”,然后点击“选择”:

选择 Bot 模板

  1. 创建后,你可以在 Azure 门户中导航到 Bot。当你点击左侧菜单中的“构建”时,你可以在在线代码编辑器中对代码进行更改。在线编辑器中集成了一些工具,如 Git、Kudu 等。你也可以下载 ZIP 文件,在 Visual Studio 中进行更改,并配置持续部署:

机器人构建设置

  1. 要测试机器人,请在左侧菜单中点击“Web Chat 中的测试”。这个机器人提供了一个三明治点单服务示例,采用引导式方法。所以,如果你在消息框中输入任何内容,你将看到一组可以选择的三明治选项。选择一个后,你可以选择三明治的长度:

机器人示例

  1. 要进行渠道注册,可以点击左侧菜单中的“渠道”。在这里,你可以注册你希望你的 Bot 连接的不同渠道:

不同的机器人渠道

如需了解如何使用 Visual Studio 2017 创建机器人的更多信息,可以参考docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-quickstart

Azure 机器学习

如今我们每个人都在产生大量数据。过去产生的数据可以为我们提供未来的宝贵洞察。

机器学习提供了一套算法,可以自动将复杂的数学计算应用于大数据,并最终从这些数据中进行学习。这是一种数据科学技术,可以通过预测结果和趋势来预测未来。使用该技术的应用程序可以从数据和经验中学习,而无需显式编程。机器学习模型可以利用大量历史数据进行训练,应用程序可以基于这些数据采取行动。

欺诈检测、自动驾驶汽车和网站上的个人推荐都是使用机器学习的应用实例。人工智能和机器学习的可能性是无限的,并且在不久的将来将对我们的日常生活产生巨大影响。

Azure 机器学习为数据科学家和开发人员提供了一套工具和能力,帮助他们在应用程序中利用机器学习。提供以下工具和功能:

  • 机器学习工作室:机器学习工作室是一个拖放工具,你可以用它来创建预测模型。你还可以用它来部署和测试你的解决方案。你可以创建实验,并将数据集和数据分析活动(称为模块)拖放到其中。你可以用数据集中的部分数据来训练实验,当模型训练好后,你可以将其转化为预测性实验,并将其发布为 Web 服务。

  • Azure 机器学习工作台:在写本书时,这个工具仍处于预览阶段。它为数据科学家提供了一个集成的端到端数据科学解决方案,帮助数据科学家准备数据、开发体验并将模型部署到 Azure 上。

  • Azure AI 画廊:AI 画廊提供了各种社区驱动的解决方案,这些解决方案利用了 Azure 的不同 AI 功能。你可以将这些解决方案用于学习目的,或作为开发自定义解决方案的资源。

  • 机器学习模块:你可以在实验中使用现成的机器学习模型来分析数据。包括机器学习算法、数据输入输出模块、数据转换模块、文本分析模块以及微软特有的模块,后者包含来自 Bing 和 Xbox 的算法。

  • 数据科学虚拟机:Azure 提供了配置用于数据科学工作负载的虚拟机。有 Windows 和 Linux 数据科学虚拟机以及深度学习虚拟机。你还可以为数据科学工作负载部署容器:

机器学习工作室

数据科学是一项专业技能;然而,微软提供了一系列视频,可以帮助你对数据科学有一些基本的了解。对于这些视频系列,你可以参考:docs.microsoft.com/en-us/azure/machine-learning/studio/data-science-for-beginners-the-5-questions-data-science-answers#other-videos-in-this-series

Azure IoT 中心

在物联网(IoT)解决方案中,设备将大量数据发送到 Azure 进行进一步处理。IoT 中心用于安全连接这些设备,并将来自设备的消息路由到 Azure 中的不同资源,以便进一步处理。

IoT 中心提供以下功能:

  • 双向通信:它提供设备与 Azure 之间的双向通信功能,如单向消息传递、文件传输和请求-回复消息传递。设备可以将数据发送到 Azure IoT 中心,反之,IoT 中心也可以将数据发送到设备。它支持多种通信协议,如 HTTPS、AMQP 和 MQTT,并提供内置的声明性消息路由功能,将消息路由到其他 Azure 服务。

  • 安全连接:设备与 IoT Hub 之间的通信可以通过每个设备的安全密钥或 X.509 证书进行加密。Azure IoT Hub 不会主动开启任何连接,所有连接均由已连接的设备发起。IoT Hub 会将消息存储在每个设备的队列中 2 天,等待设备连接。它使用 Azure AD 进行用户身份验证和授权。

  • 扩展性:IoT Hub 提供了巨大的扩展性,因为它可以扩展到数百万个同时连接的设备和每秒数百万个事件。

  • 监控:它在 Azure 中提供监控解决方案。IoT Hub 与 Azure Monitor 集成,为你提供关于设备管理操作和连接事件的详细信息。

Azure IoT Hub 提供 Azure IoT SDK,其中包括设备 SDK,可用于创建在 IoT 设备上运行并向 IoT Hub 发送数据的应用程序。该 SDK 还提供了服务 SDK,可用于管理 IoT Hub,并提供 Azure IoT Edge,后者将在本章稍后详细讨论。

IoT Hub 提供以下定价层级:

  • 免费:此方案每天提供最多 8000 条消息。此层级最适合测试场景。

  • 标准 S1:此方案每天提供最多 40 万条消息,适用于生成少量数据的场景。

  • 标准 S2:此方案每天提供最多 600 万条消息,适用于大数据量的场景。

  • 标准 S3:此方案每天提供最多 3 亿条消息,适用于大数据量的场景。

除了 IoT Hub,Azure 还提供了 Azure Event Hub。Azure Event Hub 提供类似 Azure IoT Hub 的功能,不同之处在于 IoT Hub 提供了更多的高级功能。如果你的架构需要云到设备的通信或按设备的安全性和性能管理,IoT Hub 是最佳解决方案。

Event Hub 在下一节中将详细介绍。Azure 还提供了 IoT Edge,提供额外的功能,并将在下一节中讨论:

IoT 架构概览

Azure Event Hub

Azure Event Hub 旨在处理由设备和服务生成的数据流的高吞吐量数据输入。它提供了一个遥测数据摄取服务,能够收集、转换并存储数百万个事件。

它提供了类似 IoT Hub 的功能,但也存在差异。选择使用哪种解决方案取决于具体场景。如果你的解决方案只要求高吞吐量的数据输入,Azure Event Hub 比 IoT Hub 更具成本效益。但是,如果你的解决方案需要双向通信,例如从云端向设备发送数据,IoT Hub 是更好的选择。

为了在 IoT 架构中做出正确的决策,你可以查看以下差异:

  • 设备协议支持:Azure Event Hub 支持 HTTPS、AMQP 和 AMQP,而 IoT Hub 支持 MQTT、通过 WebSockets 的 MQTT、AMQP、通过 WebSockets 的 AMQP 和 HTTPS,IoT Hub 还支持文件上传。

  • 通信模式:Event Hub 仅支持事件流入,而 IoT Hub 不仅支持设备到云的通信,还支持云到设备的通信。

  • 安全性:Event Hub 支持共享访问策略,而 IoT Hub 支持每个设备身份和可撤销的访问控制。

  • 监控:IoT Hub 提供完整的监控功能,而 Event Hub 仅提供汇总指标。

  • 规模:IoT Hub 可以扩展到支持数百万个同时连接的设备和每秒数百万个事件,而 Event Hub 只能扩展到每命名空间 5,000 个 AMQP 连接。

  • SDK:Event Hubs 支持 .NET 和 C,而 IoT Hub 支持 .NET、C、Node.js、Java 和 Python。

关于 Event Hub 和 IoT Hub 之间差异的完整概述,可以参考:docs.microsoft.com/en-us/azure/iot-hub/iot-hub-compare-event-hubs

Azure Event Hub 提供以下三种不同的定价层:

  • 基础:提供最多 20 个吞吐量单元,每个单元支持 1 MB/s 的流入和 2 MB/s 的流出。最大消息大小为 256 KB。消息保留期为 1 天,1 个消费者组和 100 个代理连接。

  • 标准:在基本功能的基础上,标准计划提供更低的吞吐量单元和消息费用。它提供 20 个消费者组和 1,000 个代理连接。

  • 专用:为客户提供专用环境。提供最大消息大小 1 MB 和 50 个吞吐量单元,保留期为 7 天,支持 25,000 个代理连接。

Azure IoT Edge

Azure IoT Edge 是 Azure IoT Hub 的附加功能,安装在本地网络的边缘、DMZ 或公司网络内。消息可以发送到 Azure IoT Edge,而不是 Azure,因为它不需要通过本地网络以外的区域,因此发送时间更短。数据也可以在设备上存储和分析。

你可以在 Azure 门户的 IoT Hub 设置页面中注册 IoT Edge。然后可以在 IoT Edge 设备上安装 IoT Edge 运行时。设备可以是 Windows 或 Linux 机器、容器,或者是 Raspberry Pi 等。这个 IoT Edge 设备可以连接到 Azure IoT Hub,从设备收集数据,并将其发送到 IoT Hub。

Azure 流分析

Azure Stream Analytics 是 Azure IoT 套件的一部分,提供一个用于事件处理和实时分析的管道,适用于来自各种来源的数据流。您可以将其用于需要实时分析的数据场景,例如股票分析、欺诈检测,或者分析来自大量传感器的数据。

数据可以来自各种来源,例如自定义应用程序、传感器、Azure IoT Hub 和 Azure Event Hubs,也可以来自 Blob 存储。Stream Analytics 可以处理每秒高达 1 GB 的数据摄取。您可以创建一个 Stream Analytics 作业,在其中配置数据源。您还可以创建一个 转换,使用类似 SQL 的语言查询数据中的模式或关系。

您可以对数据源中的数据进行过滤、排序或聚合。最后,数据会被发送到输出源,可以是 Azure Data Lake、Power BI(用于创建仪表板)、使用机器学习,或者将其存储在 SQL 数据仓库中:

Azure Stream Analytics

Azure 时间序列洞察

Time Series Insights 提供一个门户,可以用于从您的物联网数据中获取有价值的洞察。它为从 IoT Hub 和 Event Hubs 发送的大量数据提供数据库存储。它可以轻松地结合不同类型的数据,如元数据和遥测数据,并对这些数据进行可视化。

Time Series Insights 提供以下功能:

  • 集成:它提供与 Azure IoT Hub 和 Event Hub 的开箱即用集成。

  • 数据存储:Time Series Insights 将数据存储在 SSD 和内存中,最长可保存 400 天。

  • 可视化:提供一个专门的门户,使用 TSI Explorer 可视化您的数据。

  • 查询服务:Time Series Insights 在 TSI Explorer 内提供查询服务,并提供可以从自定义应用程序调用的 API。通过将 Time Series Insights 集成到您的应用程序中,您可以将其作为后端来索引、存储和聚合数据。然后,您可以在其基础上构建自定义可视化工具。

Azure 时间序列洞察 TSI Explorer

Azure Media Services

Azure Media Services 提供安全且高质量的服务,以便将内容流式传输到各种设备。它可以流式传输视频或音频文件,并提供 REST API 来上传、存储和编码包内容。音频和视频可以通过按需流媒体或直播流传输到客户端,如电视、计算机和移动设备。

Azure Media Services 支持以下流程:

  • 上传:您可以通过 Azure 门户、.NET SDK、REST API 上传视频,也可以从 Blob 存储中复制文件。

  • 编码:AMS 提供两种不同的编码服务级别,如媒体编码器标准版和媒体编码器高级工作流版。前者提供编码服务,用于编码视频和音频文件,适用于多种设备播放,如智能手机和个人电脑。后者则为需要更复杂工作流的视频和音频文件提供编码服务。它还提供了一个工作流设计器工具,可以用于合并多个输入文件,或使用动态值和参数创建基于决策的工作流。它还支持广播和电影所需的格式。

  • 安全:您可以使用动态加密(如高级加密标准(AES-128)或其他主要数字版权管理(DRM)系统)来保护您的媒体。它还为授权客户端提供 AES 密钥和 DRM 许可证。您可以使用 IP 限制保护您的媒体服务频道,确保用户只能从允许的 IP 地址上传媒体内容,并且您可以使用 Azure AD 身份验证访问 Azure Media Services API。AMS 仍然支持使用令牌的 Azure 访问控制服务身份验证模型,但该模型将在不久的将来被弃用,因此 Azure AD 身份验证现在是首选的身份验证方法。

  • 分析:AMS 提供媒体分析服务,以从媒体内容中提取洞察力。它提供了一系列来自 Azure Cognitive Services 的语音和计算机视觉 API。以下部分将更详细地描述这些内容。

Azure Media Analytics

Azure Media Analytics 使用各种认知服务 API 来分析媒体内容。它提供以下功能:

  • 索引器:通过使用索引器,您可以创建闭幕字幕轨道,并使媒体文件可搜索。撰写本文时,索引器提供了两种不同版本的服务,其中 Azure Media Indexer 2(仍在预览中)具有更快的索引速度和更广泛的语言支持。

  • 延时摄影:该功能提供延时摄影能力,并能够从第一人称或运动摄像机内容中创建稳定的视频。

  • 运动检测器:该功能提供运动检测,可以用于静态摄像头录像,识别视频中发生运动的部分。它生成一个元数据文件,包含运动发生的时间戳。此功能对于安全摄像头录像非常有用。

  • 视频总结:该功能可以通过生成来自视频不同部分的片段来为视频创建摘要。这些片段可以作为视频不同部分的概述。

  • 光学字符识别:Azure Media 光学字符识别(OCR)可以将视频中的文本内容转换为可编辑和可搜索的数字文本。例如,您可以使用此功能使 PowerPoint 演示文稿视频内容在搜索引擎中可搜索。

  • 可扩展的人脸遮挡:您可以使用可扩展的人脸遮挡功能,自动模糊视频内容中的人物面孔。

  • 内容审核:Azure 内容审核提供自动审核功能,例如检测视频中的可能成人内容和敏感内容。它提供了审核工具,自动审核可以与人工参与结合使用。

使用 Azure 媒体分析索引器

在以下示例中,我们将使用 Azure 媒体分析媒体索引器为视频创建字幕文件。微软建议使用 Azure 媒体分析,而不是使用认知服务的视频 API,因此我们将在此处使用 Azure 媒体分析。我们将使用 Azure 媒体索引器 2 预览版媒体处理器(MP)的语音转文本功能,从控制台应用程序为视频创建字幕。

对于本示例,你需要在 Azure 门户中创建一个媒体服务账户。有关如何创建账户的完整教程,请参阅:docs.microsoft.com/en-us/azure/media-services/media-services-portal-create-account

创建 Azure 媒体服务账户后,可以将 PacktIndexer 文件夹从 GitHub 复制到 C: 驱动器。你可以从以下网址下载视频并将其与 JSON 文件一起放入 InputFiles 文件夹中:peach.blender.org/download/。这些文件将用于示例。还需要在 PacktIndexer 文件夹中创建一个名为 OutputFiles 的新文件夹。

接下来,打开 Visual Studio 2017 并创建一个新项目。

  1. 点击 文件 | 新建 | 项目,在新建项目窗口中选择 控制台应用程序。为项目命名并点击 确定

创建一个新的控制台应用程序

  1. 安装 windowsazure.mediaservices.extensionswindowsazure.mediaservices NuGet 包。

  2. 第一步是将 Azure AD 认证添加到项目中。对于本演示,我们使用 服务主体认证。你可以在 Azure 门户的 Azure 媒体服务账户设置的访问页面轻松完成此操作:

创建一个应用服务主体

  1. 从 Azure 门户复制 Azure AD 租户名称、API URL、客户端 ID 和客户端密钥,并将它们添加到以下代码中:
var tokenCredentials = new AzureAdTokenCredentials("{YOUR Azure AD TENANT DOMAIN HERE}", new AzureAdClientSymmetricKey("{YOUR CLIENT ID HERE}", "{YOUR CLIENT SECRET}"), AzureEnvironments.AzureCloudEnvironment);

            var tokenProvider = new AzureAdTokenProvider(tokenCredentials);
  1. 在认证代码下方的 Main 方法中添加以下代码:
_context = new CloudMediaContext(new Uri("https://packtmediaservices.restv2.westeurope.media.azure.net/api/"), tokenProvider);

            var video = @"C:\PacktIndexer\InputFiles\BigBuckBunny.mp4";
            var config = @"C:\PacktIndexer\InputFiles\config.json";
            var asset = RunIndexingJob(video, config);

            DownloadAsset(asset, @"C:\PacktIndexer\OutputFiles");
  1. 添加以下方法以创建和运行 Index Job
static IAsset RunIndexingJob(string inputMediaFilePath, string configurationFile)
        {
            IAsset asset = CreateAssetAndUploadSingleFile(inputMediaFilePath,
                "Packt Indexing Input Asset",
                AssetCreationOptions.None);

            IJob job = _context.Jobs.Create("Packt Indexing Job");

            string MediaProcessorName = "Azure Media Indexer 2 Preview";

            var processor = GetLatestMediaProcessorByName(MediaProcessorName);
            string configuration = File.ReadAllText(configurationFile);

            ITask task = job.Tasks.AddNew("Packt Indexing Task",
                processor,
                configuration,
                TaskOptions.None);

            task.InputAssets.Add(asset);
            task.OutputAssets.AddNew("Packt Indexing Output Asset", AssetCreationOptions.None);

            job.StateChanged += new EventHandler<JobStateChangedEventArgs>(StateChanged);
            job.Submit();

            Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);

            progressJobTask.Wait();

            if (job.State == JobState.Error)
            {
                ErrorDetail error = job.Tasks.First().ErrorDetails.First();
                Console.WriteLine(string.Format("Error: {0}. {1}",
                                                error.Code,
                                                error.Message));
                return null;
            }

            return job.OutputMediaAssets[0];
        }
  1. 添加以下方法以创建 Asset
static IAsset CreateAssetAndUploadSingleFile(string filePath, string assetName, AssetCreationOptions options)
        {
            IAsset asset = _context.Assets.Create(assetName, options);

            var assetFile = asset.AssetFiles.Create(Path.GetFileName(filePath));
            assetFile.Upload(filePath);

            return asset;
        }
  1. 添加以下方法以在索引后下载 Asset
static void DownloadAsset(IAsset asset, string outputDirectory)
   {
     foreach (IAssetFile file in asset.AssetFiles)
      {
        file.Download(Path.Combine(outputDirectory, file.Name));
       }
    }
  1. 添加以下代码以获取处理视频的 MediaProcessor
static IMediaProcessor GetLatestMediaProcessorByName(string mediaProcessorName)
        {
           var processor = _context.MediaProcessors
              .Where(p => p.Name == mediaProcessorName)
              .ToList()
              .OrderBy(p => new Version(p.Version))
              .LastOrDefault();
            if (processor == null)
            throw new ArgumentException(string.Format("Unknown media processor",                                               mediaProcessorName));
            return processor;
        }
  1. 最后,添加以下代码以在控制台中显示进度:
 static private void StateChanged(object sender, JobStateChangedEventArgs e)
    {
         Console.WriteLine("Job state changed event:");
         Console.WriteLine(" Previous state: " + e.PreviousState);
         Console.WriteLine(" Current state: " + e.CurrentState);
           switch (e.CurrentState)
           {
               case JobState.Finished:                       
Console.WriteLine();
               Console.WriteLine("Job is finished.");
               Console.WriteLine();
               break;
                case JobState.Canceling:
                case JobState.Queued:
                case JobState.Scheduled:
                case JobState.Processing:
                   Console.WriteLine("Please wait...\n");
                   break;
               case JobState.Canceled:
               case JobState.Error:
                   IJob job = (IJob)sender;
                   break;
               default:
                   break;
           }
       }
  1. 运行应用程序,索引完成后,你应该会在 output 文件夹中根据 JSON 输入文件的值找到 WebVttttml 文件。

在这个例子中,我们创建了闭字幕文件。你也可以调用其他方法来为视频创建索引。以下网站为你提供了更多关于前面描述的其他功能的示例:azuremedialabs.azurewebsites.net/demos/Analytics.html

小结

本章我们讲解了如何利用 Azure 提供的各种 AI 服务来设计解决方案。我们涵盖了 Azure 机器学习、物联网功能和 Azure 媒体服务。

在下一章中,我们将介绍 Azure 提供的不同消息传递功能以及如何设计有效的消息传递架构。

问题

回答以下问题,测试你对本章内容的理解。你可以在本书末尾的评估部分找到答案。

  1. 你正在使用 IoT Hub 设计一个需要处理每天 500 万个事件的 IoT 解决方案。标准 S1 级别是否符合你的需求?

  2. Azure 媒体服务是否在底层使用了各种 Azure 认知服务 API?

  3. 在需要 Azure 与设备之间进行双向通信的场景中,是否应该使用 Azure 事件中心?

进一步阅读

你可以通过以下链接了解更多关于本章所涉及主题的信息:

第十三章:实现消息传递解决方案

在上一章中,我们讨论了如何使用 Azure 提供的各种人工智能服务设计解决方案。我们涵盖了 Azure 机器学习、物联网功能和 Azure 媒体服务。

在本章中,您将学习如何使用 Azure 服务总线、Azure 队列、通知中心、Azure 事件网格以及前几章中介绍的服务(如 Logic Apps 和 Event Hubs)来设计有效的消息传递架构。

以下主题将被涵盖:

  • Azure 存储队列

  • Azure 服务总线

  • Azure 事件网格

  • 通知中心

  • 设计有效的消息传递架构

技术要求

本章示例使用以下工具:

本章的源代码可以通过以下链接下载:

Azure 队列存储

我们在第七章的使用存储解决方案部分简要介绍了 Azure 队列存储。队列存储提供异步消息处理。它提供了一个可靠和持久的消息传递机制,并提供支持 GET/PUT/PEEK 操作的 REST API。消息队列可用于解耦应用程序,从而实现不同应用组件之间的独立扩展。

Azure 队列存储提供以下功能:

  • 单个队列的消息最大可达 64 KB。消息在队列中的最大存留时间为 7 天。

  • 当请求队列中的消息时,消息可能对其他读取者变得不可见。在此期间,消息会被锁定,其他应用程序无法处理。默认情况下,这种状态会持续 30 秒。

  • 消息处理完毕后,应从队列中删除。如果消息没有从请求消息的应用程序中删除,经过 30 秒的不可见时间后,它将再次变得可见。

Azure 服务总线

Azure 服务总线是一个高可靠性、经代理的消息传递系统,适用于集成场景和物联网解决方案。它面向企业应用,提供了中间件技术,如消息队列和发布/订阅消息传递。它解耦了应用程序和服务之间的通信。

Azure 服务总线提供以下主要功能:

  • 队列:此功能提供异步、解耦的消息通信,支持应用程序和服务之间的消息传递。它提供先入先出(FIFO)消息投递,每条消息只会被一个消费者接收。消息存储在队列中,因此发送方和消费者无需同时连接到队列。服务总线队列还提供会话,可以使用会话 ID 对消息进行分组。这样,消息可以被隔离并由专门的客户端处理。

  • 主题和订阅:此功能与队列相同,不同之处在于可以有多个消费者。它使用发布/订阅模式,消息被发送到主题。应用程序不会直接连接到该主题,而是连接到订阅。然后,订阅连接到主题。订阅可以有过滤器,只订阅一部分消息,称为过滤表达式

  • WCF 中继:WCF 中继提供了一个网关,使您可以将本地 WCF 服务连接到 Azure,而无需在您的网络上打开防火墙连接。Azure 中继服务已经在第六章《连接混合应用程序》中详细介绍,连接混合应用程序

有关 Azure Service Bus 功能示例的概览,您可以参考以下 GitHub 页面:github.com/Azure/azure-service-bus/tree/master/samples

在不同的关键功能中,Azure Service Bus 提供事务能力。它允许所有针对消息的操作要么成功,要么失败。

Azure Service Bus 提供以下几种层级:

  • 基础:此层提供队列和定时消息功能。消息大小最大可达 256 KB。

  • 标准:在基础层之上,标准层提供主题和订阅;事务、会话和去重功能也包含在内。

  • 高级:在标准层之上,高级层提供最大消息大小为 1 MB。

Azure Event Grid

Azure Event Grid 是 Azure 中的一项服务,支持跨不同 Azure 资源的事件管理。与其在应用程序中创建轮询机制以检查更改,不如在事件发生时,应用程序能够自动收到通知。

Azure Event Grid 提供每秒数百万个事件的吞吐量,并具备 24 小时重试机制。您可以根据发布路径过滤事件,从而仅接收与您的应用程序或资源相关的事件。事件可以通过 Azure 门户配置,无需使用代码即可创建,并被称为内置事件。您还可以创建自定义事件,这些事件可以在您的自定义应用程序、PowerShell 或 CLI 中创建。

Azure 事件网格目前提供以下内置发布者:Azure 订阅、事件中心、自定义主题、IoT Hub、Azure 资源组、Blob 存储、Service Bus 和 V2 存储帐户。对于事件处理程序,事件网格目前提供 Webhook、Azure 自动化、Azure 函数、逻辑应用、事件中心和 Microsoft Flow:

Azure 事件网格

Azure 事件网格会快速添加新的发布者和事件处理程序,因此请关注 docs.microsoft.com/en-us/azure/event-grid/overview

使用 Azure 事件网格路由事件

在此示例中,我们将事件从事件网格路由到 Azure 函数。

首先,我们需要在 Azure 中创建一个新的事件网格主题。要创建此主题,请按以下步骤操作:

  1. 打开 portal.azure.com/,导航至 Azure 门户。

  2. 单击新建,在搜索栏中输入事件网格主题。创建一个新的事件网格主题。

  3. 输入以下设置,然后单击确定

创建事件网格主题

  1. 接下来,使用以下配置创建一个新的 Azure 函数:

创建 Azure 函数

  1. 创建 Azure 函数后,导航到设置,然后单击函数文件:

选择 Azure 函数文件

  1. 单击 + 按钮并选择自定义函数

创建自定义函数

  1. 在下一个选项卡中,向下滚动并选择事件网格触发器

选择事件网格触发器模板

  1. 添加以下设置,然后单击创建

创建触发器

  1. 创建触发器后,默认会打开 run.csx 文件。单击顶部菜单中的添加事件网格订阅链接:

选择事件网格订阅

  1. 命名事件订阅,并选择我们之前创建的事件网格:

创建事件订阅

  1. 点击创建;这将创建一个订阅事件网格主题的新事件订阅。

  2. 打开 PowerShell 并从您的桌面运行以下脚本。这将创建一个自定义事件。您可以查看 Azure 函数日志以获取结果:

Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId "********-****-****-****-***********"

$endpoint = (Get-AzureRmEventGridTopic -ResourceGroupName PacktEventGrid -Name PacktEventGridTopic).Endpoint
$keys = Get-AzureRmEventGridTopicKey -ResourceGroupName PacktEventGrid -Name PacktEventGridTopic

$eventID = Get-Random 99999

#Date format should be SortableDateTimePattern (ISO 8601)
$eventDate = Get-Date -Format s

#Construct body using Hashtable
$htbody = @{
 id= $eventID
 eventType="recordInserted"
 subject="myapp/packtpub/books"
 eventTime= $eventDate 
 data= @{
 title="Architecting Microsoft Solutions"
 eventtype="Ebook"
 }
 dataVersion="1.0"
}

#Use ConvertTo-Json to convert event body from Hashtable to JSON Object
#Append square brackets to the converted JSON payload since they are expected in the event's JSON payload syntax
$body = "["+(ConvertTo-Json $htbody)+"]"

Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}

通知中心

Azure 中的通知中心提供了一种推送通知服务,用于将后端的通知发送到移动设备上。移动设备上的推送通知通常以弹出窗口或对话框的形式显示给用户。用户可以决定是否查看或关闭消息。您可以将推送通知用于各种场景,例如发送 MFA 的代码、从社交媒体发送通知以及发送新闻。

Notification Hubs 提供跨平台通知,提供适用于 iOS、Android 和 Windows 设备的一套 SDK 和 API。通常,应用程序会使用平台通知系统(PNS),这些是专用的基础设施平台。例如,Apple 提供 Apple 推送通知服务,Windows 提供 Windows 通知服务。Notification Hubs 通过提供单一的 API,消除了在应用程序中手动调用不同 PNS 的复杂性,它通过平台独立性、巨大的扩展性、多种传递模式、丰富的遥测等功能简化了这一过程。

Notification Hubs 提供以下层级:

  • Free:此层级每月提供最多 100 万条推送消息,支持 100 个命名空间,每个命名空间有 500 个活动设备,总计支持 100 个中心。

  • Basic:除了免费层外,Basic 层每月提供最多 1000 万条推送消息,支持 100 个命名空间,每个命名空间有 20 万个活动设备。此计划涵盖 SLA,并且还提供有限的遥测功能。

  • Standard:除了 Basic 层,Standard 层每月提供最多 1000 万条推送消息,支持无限个命名空间,每个命名空间有 1000 万个活动设备。它还提供丰富的遥测、定时推送功能、大规模导入和多租户功能。

设计有效的消息传递架构

Azure 提供了多种功能和能力,用于设计和实现消息传递解决方案。为了在 Azure 平台上创建成功的应用程序和解决方案架构,一个有效的消息传递架构至关重要。这将带来强大的解决方案和应用程序,能够充分利用 Azure 平台的扩展能力。同时,它还将为你的应用程序提供高性能,并且实现应用程序之间的解耦。

本书中描述了多个 Azure 资源,你现在应该知道每个资源的功能。接下来的部分将从消息传递和集成的角度再次讲解其中的一些资源。这将为你提供概览,并帮助你在 Azure 平台上设计消息传递和物联网解决方案时做出正确的决策:

  • Azure Functions 与 Logic Apps:你可以将 Logic Apps 想象成由事件触发的工作流,将 Azure Functions 想象成由事件触发的代码。因此,当你的解决方案需要自定义代码或自定义转换时,选择 Azure Functions。当你的解决方案需要连接其他 SaaS 解决方案,如 Office 365、Azure 存储和 SalesForce 时,选择 Logic Apps。它提供了大量的连接器,可以通过 HTTPS 轻松连接。此外,当需要图形化编辑器时,选择 Logic Apps。

  • Azure IoT Hub 与 Azure 事件中心的比较: Azure IoT Hub 提供设备到 Azure 和 Azure 到设备的双向通信。它可以处理每秒数百万事件,并支持多种设备协议,如 MQTT、MQTT over WebSockets、AMQP、AMQP over WebSockets 和 HTTPS,MQTT、MQTT over WebSockets、AMQP、AMQP over WebSockets 和文件上传。因此,如果您的解决方案需要大规模事件处理和双向通信,请选择 Azure IoT Hub。事件中心仅允许设备到 Azure 的单向通信。因此,当您的解决方案仅需要数据摄取时,事件中心可能是更合适和具有成本效益的解决方案。

  • Azure 服务总线与 Azure 存储队列的比较: Azure 服务总线是一个面向企业规模的经纪消息解决方案。它提供了更多的企业消息能力,如事务和会话支持。它还支持更大的消息。Azure 服务总线在高级版中支持最大 1 MB 的消息。Azure 队列存储支持最大 64 KB 的消息。

摘要

在本章中,我们介绍了 Azure 为各种类型的应用程序和解决方案提供的不同消息传递解决方案。您还学习了如何在应用程序中使用正确的消息传递解决方案。这结束了设计平台服务目标的最后一章。

接下来,我们将看一下设计运维目标,这将是本书的最后一个目标。它将从不同的应用程序监控和警报策略开始。

问题

回答以下问题,测试您对本章信息的了解。您可以在本书结尾的评估部分找到答案。

  1. 您正在为组织设计一个全球移动应用程序,需要每月处理约 1000 万推送消息。您的管理员有监控要求。基本层是否适合您的应用程序?

    1. 是的

  2. 您正在为组织设计一个无服务器解决方案,并且需要在解决方案中调用外部 SDK 进行图像处理。Azure 逻辑应用是否是适当的解决方案?

    1. 是的

  3. 您正在为组织设计一个消息传递解决方案,并且需要大约 1 MB 大小的消息。您应该使用 Azure 存储队列来解决这个问题吗?

    1. 是的

进一步阅读

您可以查看以下链接,获取本章涵盖的主题的更多信息:

第十四章:应用程序监控和告警策略

在上一章中,我们介绍了如何设计有效的消息传递解决方案,通过涵盖 Azure 服务总线和 Azure 队列存储并结合不同的 Azure 资源,构建有效的消息传递架构。

在本章中,我们介绍了面向运营的设计目标,通过概述 Azure 提供的可用解决方案,涵盖了应用程序和平台监控及告警策略。通过本章的学习,您应该能够在 Azure 平台及您的自定义解决方案和配置中出现问题时,知道何时使用不同类型的解决方案。

以下主题将涵盖:

  • Azure 日志分析

  • Azure 监视器

  • 应用程序洞察

  • Azure 服务健康

  • Azure 顾问

  • Azure 网络观察器

Azure 日志分析

Azure 日志分析是一项服务,可以收集并分析来自各种 Azure 资源和本地资源的日志文件。它可以将所有数据收集到一个工作区,并提供查询语言来查询数据。

你可以通过在 Windows 和 Linux 虚拟机上安装代理,将虚拟机中的数据集成到日志分析中,或者也可以连接到 System Center 操作管理器,从现有代理收集遥测数据。大多数 Azure 资源已在日志分析中集成。你只需从 Azure 门户创建一个工作区,即可收集这些资源的数据。然后,你可以使用查询语言直接从工作区查询数据,或者使用可以分析数据的分析工具。分析工具的一些示例包括操作管理套件、Azure 安全中心和应用程序洞察。你还可以将数据导入 Power BI,以创建数据可视化。

数据收集后,将按数据类型组织成数据表。它可以从以下资源收集数据:

  • 来自 Azure 监视器的数据可以在日志分析中收集,并使用查询语言进行搜索

  • 代理可以安装在 Windows 和 Linux 机器上,将数据发送到日志分析

  • 可以将 System Center 操作管理器管理组连接到日志分析,以收集代理的数据

  • 应用程序洞察和 Azure 安全中心默认使用日志分析存储数据

  • 日志分析提供了可以从 PowerShell 使用的 cmdlet,并且可以在 Azure 自动化 Runbook 中使用

  • 它提供了一个 HTTP 数据收集器 API,可以在自定义应用程序中使用,将日志数据发送到日志分析

创建日志分析工作区

创建日志分析工作区的步骤如下:

  1. 通过打开:portal.azure.com/ 进入 Azure 门户。

  2. 点击“新建”并在搜索框中输入 Log Analytics,然后创建一个新的工作区。

  3. 输入以下设置并点击“确定”:

创建日志分析工作区

  1. 工作区现在已经创建。

  2. 现在,你可以将 Azure 资源连接到工作区。例如,选择在第一章中创建的 PacktPub 资源组,并在 Azure 门户中打开设置。点击左侧菜单中的 Activity log

Azure 资源组概览面板

  1. 点击顶部菜单中的 Log Analytics,点击 Add 按钮,选择在前面步骤中创建的工作区并点击 OK

选择工作区

  1. 该资源组的日志现在已发送到 Log Analytics 工作区。

  2. 当你返回到 Log Analytics 概览面板并点击 View Designer 时,会打开一个面板,你可以在其中创建数据视图:

Log Analytics 设计器

  1. 你还可以点击顶部菜单中的 Analytics 按钮,这将打开 Log Analytics 门户。在这里,你可以使用预定义查询或创建自定义查询。在那里,你可以打开一个新标签页并创建一个新查询。你可以添加以下查询来创建一个按严重性划分、按天(过去 7 天)的警报计数的条形图:
Alert 
| where TimeGenerated > ago(7d)
| summarize count() by AlertSeverity, bin(TimeGenerated, 1d)
| render barchart kind=unstacked

Log Analytics 门户中的查询结果

  1. 当你返回 Azure 门户中的 Log Analytics Overview 面板并点击 OMS Portal 时,Microsoft 操作管理套件应该会打开,在那里你可以查看所有日志和其他活动:

Microsoft 操作管理套件

Azure Monitor

Azure Monitor 是 Azure 门户中的一种监控解决方案,提供 Microsoft Azure 中几乎所有服务的基础设施度量和日志。在编写本书时,并非所有 Azure 资源都已添加到 Azure Monitor,但未来会有更多资源被添加。

Azure Monitor 提供以下功能:

  • Activity Log:活动日志提供关于 Azure 订阅内所有类型事件的信息。这些活动可能包括停止或启动虚拟机、维护活动等。它提供不同的事件类别,如管理、安保、服务健康、自动缩放、警报、建议、政策和资源健康事件。事件会被保存 90 天的保留期。查询可以保存并固定到 Azure 仪表板,也可以导出到存储帐户中,以便长期存储。它们还可以导出到事件中心进行实时流式传输,或发送到 Log Analytics。

  • 诊断设置: 这提供了关于在 Azure 订阅中某个特定资源内部发生的事件的信息,例如从 Azure Key Vault 检索机密的事件。默认情况下,这些事件不会被收集;需要在 Azure 门户中手动为资源启用,或者在创建资源时通过 ARM 模板、PowerShell 或调用 REST API 来启用。这些事件也可以存储在存储帐户或事件中心,或发送到 Log Analytics,就像活动日志中的事件一样。

  • 指标:指标提供了基于时间的度量点,就像 Windows Server 中的性能计数器一样。默认情况下,指标是可用的,并且具有 93 天的保留期。你可以检查 Azure 资源的性能并跟踪已用和可用的积分。例如,它们可以发送到事件中心、Azure 流分析,并且你可以使用 REST API 和 PowerShell 检索和查询数据。

  • 警报:警报部分提供了一个地方来查看和管理所有 Azure 警报。它显示来自活动日志、指标、Application Insights 和 Log Analytics 的警报。你可以创建警报规则,这些规则可以发送电子邮件或短信、Webhook、将数据发送到第三方 IT 服务管理应用程序,或调用自动化运行书。

Azure 监控指标

Application Insights

Application Insights 为在 Azure 中托管的跨平台应用程序和本地应用程序提供了监控解决方案。它面向开发人员,可用于监控性能和检测问题,帮助提高应用程序的可用性。它可以集成到 DevOps 流程和开发工具中,例如 Visual Studio。

开发人员可以在 Azure 中设置一个 Application Insights 资源,并在他们的应用程序中安装一个包。这可以是一个 Azure 应用程序,也可以是本地应用程序,它们都可以连接到 Azure 中的资源。这个包负责将遥测数据发送到 Azure。你也可以添加性能计数器、Docker 日志和诊断日志。

它收集以下类型的应用程序事件:

  • 速率数据:可以将不同类型的速率数据发送到 Application Insights,例如请求和依赖项速率、响应时间和用户会话计数。

  • 异常:应用程序内部发生的异常可以发送到 Application Insights。

  • 页面浏览量和性能:它可以提供有关应用程序页面浏览量和加载性能的信息。

  • 诊断日志: 这会将 Docker 主机诊断信息发送到 Application Insights,并从应用程序发送追踪日志。

  • AJAX 调用:这是 AJAX 调用的性能、失败请求和响应时间。

  • 自定义事件:你也可以在应用程序中创建自定义事件。

  • 集成:它可以与 Visual Studio 应用中心和 HockeyApp 集成,以分析来自移动应用程序的遥测数据。

一旦数据发送到 Azure,它可以在 Azure 门户中查看。Azure 门户提供了不同的功能来展示和分析数据。它提供了应用程序映射刀片、实时指标流、指标资源管理器刀片、性能刀片等:

Azure 门户中的应用洞察

Azure 服务健康

Azure 服务健康在 Azure 门户中提供了一个仪表板,展示了与不同 Azure 资源相关的问题。这可以帮助你了解维护计划,维护计划是可能影响 Azure 资源可用性的平台问题。

它提供以下视图来自 Azure 门户:

  • 服务问题:这提供了当前所有 Azure 区域内发生的全球问题概览。它还提供了健康历史记录,你可以在此查看或下载历史事件的总结。

  • 计划维护:这提供了所有已安排的维护事件的概览。

  • 资源健康:概述了 Azure 订阅中不同资源的当前和历史健康状况。当遇到问题时,你也可以在此运行故障排除工具。

  • 健康警报:你也可以在这里创建健康警报,以便在安排维护活动或发生服务问题时接收到通知。

Azure 门户中的 Azure 服务健康

Azure 顾问

Azure 顾问是一个帮助你遵循 Azure 部署最佳实践的工具。它分析所有 Azure 资源的当前配置,并基于此提供建议。对于大多数建议,你可以直接在 Azure 顾问门户内进行处理。

它提供以下类别:

  • 高可用性:这提供了若干建议,帮助提高应用程序和其他 Azure 资源的持续性,比如启用备份和创建可用性集。

  • 安全性:它提供了提高 Azure 资源安全性的建议,并与 Azure 安全中心集成。

  • 性能:这提供了针对不同 Azure 资源的整体性能建议,如数据库性能和应用服务性能。

  • 成本:本部分提供了提高成本效益的建议,比如调整虚拟机的大小或关闭虚拟机,或通过消除未配置的 ExpressRoute 电路来降低成本。

来自 Azure 顾问的地址建议

若要直接处理 Azure 顾问的建议,请按以下步骤操作:

  1. 通过打开以下链接访问 Azure 门户:portal.azure.com/

  2. 从左侧菜单中选择 Azure 顾问。

  3. 你将获得所有不同推荐的概览,这些推荐被分类为四个部分:

Azure 顾问概览

  1. 这些推荐是基于我们为本书创建的所有不同服务。因此,如果你跟随了教程,你的推荐内容将与此相同。对于这个示例,我们选择安全性部分,然后选择“跟随安全中心推荐”。挑选一个高严重性的推荐:

安全推荐

  1. 打开一个新窗格,你可以选择数据库。在这里,你可以直接为选定的数据库启用审计与威胁检测

审计与威胁检测设置

Azure 网络监视器

Azure 网络监视器为所有网络通信提供了一个网络监控解决方案,覆盖 Azure 资源层级。包括虚拟网络(VNets)、ExpressRoute 电路、应用网关流量、负载均衡器等。可以通过 Azure 门户访问,并提供监控工具、诊断工具和来自网络层级的日志。

它提供以下功能:

  • 拓扑:这通过提供一个图形视图,展示了虚拟网络(VNet)中所有网络资源的概览。通过 Azure 门户,它提供了所有网络部分的子集。要查看完整的资源列表,可以使用 PowerShell 或 REST API。

  • IP 流量验证:这提供了虚拟机网络接口允许或拒绝的数据包概览。它帮助管理员快速解决连接性问题。

  • 下一跳:这提供了数据包目标路由的概览。它有助于确定连接性问题,并检查数据包是否到达目标,例如本地虚拟机。

  • 安全组视图:这提供了一个概览,展示了所有配置的网络安全组(NSG)和与其相关的规则,从两个不同的层次进行展示,分别是网络接口层和子网层。

  • VPN 诊断:这提供了一个 VPN 网关和连接的故障排除解决方案。可以通过 Azure 门户、PowerShell、Azure CLI 或 REST API 调用连接和网关,并返回结果。

  • 数据包捕获:你可以捕获网络流量数据包以诊断网络异常。它需要安装在虚拟机上的扩展来捕获数据包。数据包可以存储在虚拟机本地或 Azure Blob 存储中,以便进一步分析。

  • 连接故障排除:这提供了一个故障排除解决方案,用于检查虚拟机到虚拟机、IPv4 地址、URI 以及完全限定域名(FQDN)的 TCP 连接。通过收集所有配置,它帮助检测连接性问题。它使用与数据包捕获功能相同的扩展,并且可以通过 PowerShell、CLI 和 REST API 检查连接性。

网络监视器概览

总结

本章中,我们介绍了 Azure 从平台和应用程序的角度提供的不同监控解决方案,如 Application Insights、Network Watcher 和 Azure Log Analytics。

下一章将是本目标的最后一章,也是本书的最终章,第十五章,探索操作自动化策略

问题

回答以下问题以测试您对本章信息的理解。您可以在本书末尾的评估部分找到答案:

  1. 您正在设计一个 IoT 解决方案,并希望为管理员提供实时监控工具。您应该使用 Azure Log Analytics 吗?

    1. 是的

    2. 不是

  2. Azure Network Watcher 是一个需要在您的计算机上安装的独立应用程序吗?

    1. 是的

    2. 不是

  3. 您希望了解 Azure 平台上所有已安排的维护事件概况。您可以从 Azure 服务健康中获取此信息吗?

    1. 是的

    2. 不是

进一步阅读

您可以查看以下链接以获取更多有关本章所涵盖主题的信息:

第十五章:探索运营自动化策略

在上一章中,我们通过介绍应用程序和平台监控及警报策略,讲解了“运营设计”目标。

本章介绍了如何使用 Azure 自动化、Chef、Puppet、PowerShell、期望状态配置 (DSC)、事件网格、Azure 逻辑应用程序设计运营自动化策略,并如何定义自动扩展策略。

将涵盖以下主题:

  • 设计运营自动化策略

  • 设计自动扩展策略

设计运营自动化策略

在 Azure 中实现自动化步骤是确保部署一致性和节省时间的一个好方法。它减少了在开发、测试、验收和生产 (DTAP) 架构中需要在不同环境之间部署应用程序时出现的错误。对于需要重复部署的资源(例如,为开发团队配置多个开发虚拟机),它也节省了大量时间。

Azure 提供了不同的解决方案和方法来设计成功的自动化策略,以下章节将详细描述这些方法。

Azure PowerShell

Azure PowerShell 可用于创建 Azure 资源、管理和配置资源,以及实现自动化。

本书中使用 Azure PowerShell 的多个示例来自动化不同的任务,例如创建虚拟机和创建网络接口。它可以在本地计算机上使用,也可以在 Azure Cloud Shell 中使用。你可以使用 PowerShell 完成 Azure 门户中几乎所有的任务,甚至对于一些 Azure 资源,PowerShell 提供了更多的功能,而这些功能在 Azure 门户中无法配置。

期望状态配置

DSC 是强制在系统上应用配置的过程。它使用由 PowerShell 脚本组成的配置文件。这些脚本负责对系统进行所需的配置,并确保系统保持同步。例如,当你创建一个 DSC 文件来配置 Windows Server 上的 IIS,并且管理员将其删除时,DSC 文件会重新安装并再次配置 IIS。

DSC 使用三项关键功能来配置机器:

  • 配置:一组配置资源的 PowerShell 脚本。这些脚本还确保系统保持在期望状态。它使用 节点 来定义正在配置的资源。

  • 资源:这些是需要在机器上配置的不同构建块。例如,这可以是 WindowsFeature 资源或 Environment 资源。

  • 本地配置管理器 (LCM):这是将脚本部署到机器上的引擎。LCM 会定期轮询不同的机器,以确保机器的期望状态得以保持。如果系统不同步,LCM 会运行脚本,重新安装并根据脚本中的资源配置系统。

请查看以下 DSC 文件示例:

Configuration PacktDscConfiguration {
    param(
        [string[]]$ComputerName="PacktMachine"
    )
    Node $ComputerName {
        WindowsFeature PacktFeatureInstance {
            Ensure = "Present"
            Name = "RSAT"
        }
        WindowsFeature PacktFeatureInstance2 {
            Ensure = "Present"
            Name = "Bitlocker"
        }
    }
}
PacktDscConfiguration -ComputerName $ComputerName

Azure 自动化

Azure 自动化是 Azure 中的一项服务,提供对本地和 Azure 环境中部署与管理操作的完全控制。它支持 Windows 和 Linux 机器,并提供一个社区画廊,内含预定义的配置和自动化运行书,可以作为起点使用。

要管理这些类型的工作负载,Azure 自动化提供了以下功能和能力:

  • 流程自动化:你可以使用流程自动化来自动化 Azure 和本地环境中的管理任务以及可重复的配置任务。自动化过程中可以集成各种 Azure 服务和资源。它使用 自动化运行书,自动化不同的步骤。Azure 提供了一个图形编辑器,可以通过 Azure 门户创建运行书,或者你可以通过 PowerShell 创建它们。你可以创建不同类型的运行书,如图形化运行书、图形化 PowerShell 工作流、PowerShell、PowerShell 工作流和 Python 运行书。这些工作流可以从自动化帐户导出,并导入到其他自动化帐户。然而,Azure 中的自动化运行书默认无法访问本地基础设施和其他云环境。你需要安装 Azure 自动化的混合运行书工作器功能,以便在这些环境中运行运行书。

  • 配置管理:对于配置管理,Azure 自动化提供了一个用于 PowerShell DSC 脚本的 DSC 服务器。该服务器可以用来编写、管理和编译 PowerShell DSC。它提供了一个所需状态配置拉取服务,能够自动将配置发送到节点。你还可以获取已安装应用程序和其他配置项的相关信息。

  • 更新管理:这项功能提供有关更新合规性的详细信息和可视化展示,适用于你的 Azure、本地和其他云环境。它提供了协调和安排更新部署的能力。

  • 共享功能:Azure 自动化提供了各种共享资源,可以用来自动化和配置你的环境,例如基于角色的访问控制。你可以存储凭据和证书以保证安全,创建连接字符串、计划任务、源代码控制集成以及 PowerShell 模块。

有关 Windows PowerShell 所需状态配置的更多信息,请参考 docs.microsoft.com/en-us/powershell/dsc/overview。有关所需状态配置拉取服务的更多信息,请参考 docs.microsoft.com/en-us/powershell/dsc/pullserver

创建 Azure 自动化运行书

在这个示例中,我们将创建一个包含 DSC 配置的 Azure Runbook。在创建 Azure 自动化 Runbook 之前,首先需要创建一个自动化账户。

要创建 Azure 自动化账户,请按照以下步骤操作:

  1. 通过打开portal.azure.com/导航到 Azure 门户。

  2. 在搜索栏中输入Automation并创建一个新账户。添加以下属性并点击创建:

创建 Azure 自动化账户

  1. 创建后,导航到自动化账户。从那里你可以打开图形编辑器创建一个自动化 Runbook。此示例使用了一个预配置的图形 Runbook,可以导入。此 Runbook 可以从本书的源代码下载,源代码位于 GitHub 页面上。

  2. 要导入 Runbook 文件,请从左侧菜单中选择 Runbooks 并添加一个 Runbook:

新建 Runbook

  1. 选择“导入”,选择 Runbook 文件,以下属性会自动添加:

导入 runbook

  1. 点击“创建”。你现在可以选择新添加的 Runbook 并对其进行修改。选择它并点击顶部菜单中的“编辑”。这将打开图形编辑器,你可以在其中查看工作流中的不同步骤并进行更改。你可以选择不同的步骤并配置参数、配置重试行为等。

图形化 Runbook 编辑器

  1. 当你根据自己的环境完成设置更改后,可以发布并安排 Runbook 的执行。

Chef

Chef 是一个第三方解决方案,提供一个用于 Linux、Windows 和 Mac 设备的 DevOps 自动化平台。它可以用于虚拟和物理服务器配置。它需要在虚拟机或服务器上安装代理,该代理连接到 Chef 服务器,检查是否有可用的更新和其他配置。你还可以使用 Chef Automate 平台来打包和部署应用程序。

要将 Azure 虚拟机与 Chef 服务器连接,需要从 Azure 下载发布设置文件,并将其导入 Chef 服务器,并且需要在连接的设备上安装代理以与 Chef 通信。然后,你可以在服务器上创建 Chef Cookbook,其中包含用于管理设备和自动化部署的脚本和指令。

Puppet

Puppet 也是一个第三方解决方案,具有与 Chef 类似的功能。你可以在 Azure 门户中创建虚拟机时自动启用对 Puppet 的支持。创建新虚拟机时,可以将其作为扩展添加。它将安装 Puppet 代理,连接到 Puppet 主服务器。

你需要提供 Puppet 主服务器的名称,虚拟机将在创建时集成该服务器:

安装 Puppet 代理

Azure 事件网格

Azure 事件网格也支持自动化任务。Azure 事件网格提供一个 Azure 自动化订阅者,能够响应发送到 Azure 事件网格的不同事件。因此,当创建 Azure 资源时,可以调用自动化运行书自动执行一系列步骤。例如,在 Azure 中创建虚拟机时,可以通过事件网格调用自动化运行书,以在特定时间创建启动和停止虚拟机的计划。

要获取有关将 Azure 自动化与 Azure 事件网格及 Microsoft Teams 集成的完整步骤,请参考 docs.microsoft.com/en-us/azure/event-grid/ensure-tags-exists-on-new-virtual-machines

Azure 逻辑应用

Azure 逻辑应用还支持调用自动化运行书。它提供操作,可以从您的逻辑应用中调用,以创建自动化任务、收集输出或获取运行书的状态。这可以用于从各种工作流中创建自动化,并可以与各种 Azure 资源集成。

Azure 逻辑应用自动化操作

Visual Studio 团队服务

Visual Studio 团队服务提供针对自定义应用程序的持续集成和交付(CI/CD)解决方案。它由一组 DevOps 服务组成,可以从 Azure 使用,也可以通过安装 Team Foundation Server (TFS) 安装在本地服务器上。

VSTS 提供以下功能和能力:

  • 版本控制:持续集成、交付和测试的起点是版本控制服务器。VSTS 提供两种不同的版本控制形式,Git 和团队基金版本控制。它支持多种版本控制仓库,如 Subversion、Bitbucket 和 GitHub。

  • 持续集成:当在 VSTS 中配置 CI 时,任何提交的代码更改都会自动构建和验证。要配置 CI,您需要创建一个新的构建定义,其中包含构建和测试源代码的任务。它支持构建 .NET、Java、Node、Android、Xcode 和 C++ 应用程序。您可以使用持续测试功能在 VSTS 中自动验证已提交的代码。它支持多种测试框架,如单元测试和 Selenium。您还可以在自动化中运行 PowerShell、CLI 和命令行脚本。

  • 持续部署:下一步是创建一个发布定义。你可以用它自动将应用程序部署到一个或多个环境中。发布定义还包括一组任务。VSTS 和 TFS 都支持将应用程序部署到 PaaS 服务上,例如 Web 应用和 Azure 函数。你还可以将代码部署到虚拟机、容器、本地环境和其他云平台,并将移动应用发布到商店。

设计自动扩展策略

自动扩展为 Azure 资源和应用程序提供了一种解决方案,以满足性能要求并遵守 SLA。它可以增加额外的资源,如增加虚拟机和虚拟机的 CPU,以及其他 Azure 资源,当这些资源不再需要时,可以移除以最小化成本。这个过程由 Azure 处理。

自动扩展是云技术的关键优势之一,因为你可以轻松甚至自动地添加和移除额外的资源,而无需管理这些资源。自动扩展可以通过以下两种不同方式进行:

  • 垂直扩展:这也叫做扩展上下。你可以将应用程序移动到不同的虚拟机(VM)大小。通过更改虚拟机的大小,应用程序会在短时间内不可用,因此这种类型的扩展通常不会自动执行。

  • 水平扩展:这也叫做扩展进出。当你添加额外资源时,比如向 Azure 容器服务中添加或移除容器时,就会进行水平扩展。由于这种扩展不要求资源变得不可用,因此大多数时候是自动进行的。

为了设计一个有效的自动扩展策略,你可以使用以下方法和服务:

  • 监控和警报:使用 Azure 中不同监控解决方案提供的监控和警报功能。这些解决方案在前一章中有更详细的介绍。除了监控解决方案,Azure 中的不同资源也提供自动扩展功能,例如虚拟机、Azure 服务结构、Azure 函数、Azure 应用服务和其他云服务。这些资源可以通过 Azure 门户中的设置页面进行配置。

  • 决策逻辑:利用决策逻辑来帮助决定是否需要扩展资源。这可以通过 Azure Logic Apps 动态完成,通过调用自动化运行簿或在系统负载较高时使用预定义的计划。

  • Azure 监控扩展:这是 Azure Monitor 中集成的服务,提供虚拟机、VM 扩展集、Azure 应用服务和 Azure 云服务的自动扩展。你可以用它来安排实例,在满足某个 CPU 使用率或某个队列中的消息数量时进行扩展。

  • 应用架构: 根据需求架构自定义应用程序,以便它们可以横向扩展。这适用于 Azure Service Fabric 应用、运行在容器中的应用或批量应用程序。为此,可以使用限制模式和竞争消费者模式。

总结

在本章的最后,我们讨论了如何利用 Azure 提供的不同解决方案和工具设计操作自动化策略,以及如何设计自动扩展策略。

通过本章所获得的知识,你应该能够通过 70-535 考试。别忘了查看进一步阅读部分,因为其中有很多额外的信息,可能也会在考试中出现。

希望你像我写这本书一样享受阅读它,祝你考试好运!

问题

请回答以下问题,以测试你对本章内容的理解。你可以在本书末尾的评估部分找到答案。

  1. 你的公司使用 Windows、Linux 和 Mac 设备。Azure 自动化是你自动化策略的最佳解决方案吗?

    1. 是的

    2. 不是

  2. 你正在为虚拟机设计一个标准化的部署解决方案。你还有一个要求,在部署后配置并保持虚拟机的同步。你是否应该使用 Azure PowerShell 所需状态配置 (DSC) 来实现这一点?

    1. 是的

    2. 不是

  3. 你能使用 Azure Event Grid 来执行自动化任务吗?

    1. 是的

    2. 不是

进一步阅读

你可以查看以下链接,获取更多关于本章所涵盖主题的信息:

附录 A – 评估

第一章,与 Azure 虚拟机一起工作

问题的答案如下:

  1. 正确答案:是的:托管磁盘是默认的磁盘类型。

  2. 正确答案:是的:它们应该被添加到可用性集。

  3. 正确答案:不是:默认情况下,它们被添加到两个故障域和五个更新域中。

第二章,配置计算密集型应用程序

问题的答案如下:

  1. 正确答案:不是:你应该使用 HPC Pack 来实现这一点。

  2. 正确答案:是的:它们旨在提供高性能。

  3. 正确答案:不是:Azure Batch 有自己的 JSON 模板,看起来像 ARM 模板。

第三章,设计 Web 应用程序

问题的答案如下:

  1. 正确答案:是的:Redis 缓存是一个内存中的键值数据存储。

  2. 正确答案:2:Basic 层最适合用于开发环境,而非生产环境。

  3. 正确答案:2:Azure B2C 是你可以在自定义应用程序中使用的,而不是 Azure B2B。

第四章,实施无服务器架构和微服务

问题的答案如下:

  1. 正确答案:是的:你可以使用 API 管理作为微服务的无状态网关。

  2. 正确答案:是的:你可以在 Azure 容器实例上部署 Kubernetes。

  3. 正确答案:是的:Azure Service Fabric 提供完整的 DevOps 环境,用于构建微服务。

第五章,稳健的网络实现

问题的答案如下:

  1. 正确答案:不是:当创建自定义路由表时,Azure 会优先使用自定义路由表而不是系统路由表。它不会被删除。

  2. 正确答案:不是:NSG 规则是从低到高处理的。

  3. 正确答案:是的:防火墙是一个广为人知的安全解决方案,适合在 DMZ 中托管。

第六章,连接混合应用程序

问题的答案如下:

  1. 正确答案:2:这是其中的一个限制。为了保护你的应用免受外部访问,你必须创建一个带有内部负载均衡器的应用服务环境。

  2. 正确答案:不是:你需要 Azure AD Connect 来同步本地帐户和 Azure Active Directory。

  3. 正确答案:是的:你可以使用 Azure 应用服务虚拟网络集成来实现这一点。

第七章,使用存储解决方案

问题的答案如下:

  1. 正确答案:是的:CosmosDB 默认是全球分布式的,因此它提供低延迟,非常适合游戏应用程序。

  2. 正确答案:不是:Azure Search 只能与 Azure SQL 数据库、Azure CosmosDB 和 Azure Blob 存储一起使用。

  3. 正确答案:不是:MongoDB API 不支持图形;为此,你应该使用 Gremlin API。

第八章,可扩展数据实现

问题的答案如下:

  1. 正确答案:是的:你可以进行已删除数据库恢复,用于恢复已删除的数据库。

  2. 正确答案:是的:你可以使用 SQL Server Stretch 数据库来标记表,将来自本地 SQL Server 的数据归档到 Azure SQL 数据库中。

  3. 正确答案:不是:Azure 数据分析使用 U-SQL。

第九章,保护你的资源

问题的答案是:

  1. 正确答案:是:Microsoft Graph 提供了一套 API,连接多个 Azure 服务,如 Office 365 和 Azure AD,并为开发者提供一个单一端点,以便在自定义应用程序中使用。

  2. 正确答案:不:为了实现本地与云应用程序之间的单一登录体验,你应该使用 ADFS。

  3. 正确答案:是:你可以使用 Azure B2B 来控制对外部用户的访问。

第十章,保护你的数据

问题的答案是:

  1. 正确答案:不:你应该使用 Always Encrypt。它允许将加密数据存储在数据库中,且加密与解密操作由客户端处理。数据掩码功能可以为某些角色隐藏敏感信息。

  2. 正确答案:是:这是 Azure Key Vault 的一个功能。你可以使用它来存储应用程序 ID 和应用程序密钥,并在运行时动态地检索这些值。

  3. 正确答案:不:Azure 存储服务加密对静态数据和传输中的数据进行加密,而 Azure 磁盘加密则不做此操作。

第十一章,治理与策略

问题的答案是:

  1. 正确答案:是:通过 Azure AD 特权身份管理,你可以授予符合条件的角色访问权限。

  2. 正确答案:是:你可以使用 Operations Management Suite 来管理你的本地和 Azure 基础设施。

  3. 正确答案:是:你可以使用 Azure 资源策略来评估你的 Azure 资源是否符合特定标准,例如是否所有虚拟机都使用托管磁盘。

第十二章,人工智能、物联网与媒体服务

问题的答案是:

  1. 正确答案:2:你应该使用 Standard S2 服务层来处理每天 500 万事件。

  2. 正确答案:1:是:媒体服务在底层使用了各种认知服务 API。

  3. 正确答案:2:不:对于 Azure 与设备之间的双向通信,你应当使用 IoT Hub。对于数据流入场景,Event Hub 是更合适且具成本效益的解决方案。

第十三章,实现消息解决方案

问题的答案是:

  1. 正确答案:2:不:你应该使用 Standard 服务层;Basic 和 Standard 服务层都提供每月 1000 万次推送消息,但 Standard 服务层在 Basic 层的基础上提供了丰富的遥测功能。

  2. 正确答案:2:不,Azure Logic Apps 不提供调用外部 SDK 的解决方案。Azure Functions 可以,因此这是最佳解决方案。

  3. 正确答案:2:不,Azure 存储队列只能处理最大为 64 KB 的消息。你应该使用 Azure Service Bus 队列。

第十四章,应用监控与告警策略

问题的答案是:

  1. 正确答案:1:是,Azure Log Analytics 为你的 IoT 解决方案提供实时监控。

  2. 正确答案:2:不,你可以从 Azure 门户打开 Azure 网络观察器。

  3. 正确答案:1:是的, Azure 服务健康是你获取有关 Azure 平台的计划维护事件信息的地方。

第十五章,探索操作自动化策略

问题的答案是:

  1. 正确答案:2:不,Chef 是最佳解决方案,因为它可以在 Windows、Linux 和 Mac 设备上使用。

  2. 正确答案:1:是的,通过 Azure PowerShell 所需状态配置(DSC),你可以在部署后部署和配置虚拟机。

  3. 正确答案:1:是的,Azure Event Grid 提供了一个 Azure 自动化订阅者,可以用于自动化任务。

附录 B – 模拟测试问题

回答以下问题,以测试您对本章信息的理解。您可以在本书末尾的模拟测试答案部分找到答案。

第一章,与 Azure 虚拟机一起工作

  1. 您需要为开发环境推荐合适的策略。您会选择哪个虚拟机系列?

    1. F 系列

    2. B 系列

    3. L 系列

    4. N 系列

  2. 您有一组部署在虚拟机上的应用程序。您需要确保在虚拟机更新时应用程序仍然可以访问。您应该怎么办?

    1. 为每个应用程序创建一个可用性集

    2. 实现自动扩展

    3. 创建资源组

    4. 创建一个具有两个或更多虚拟机的可用性集

  3. 当将虚拟机放入可用性集时,Azure 提供多少故障域?

    1. 2

    2. 4

    3. 5

    4. 7

  4. 当在 Azure 中配置 Azure 虚拟机时,它是使用托管磁盘创建的吗?

  5. 如何部署虚拟机规模集?

    1. 使用 Azure 门户

    2. 使用 CLI

    3. 使用 PowerShell

    4. 使用 ARM 模板

  6. 部署后,您是否可以通过公共 IP 地址直接使用 SSH 或 RDP 访问虚拟机规模集中的虚拟机?

  7. 您将 Azure 虚拟机部署到东美国区域。您需要设计一个解决方案,以便在数据中心故障时尽可能快速地恢复。您将虚拟机部署到哪个区域?

    1. 东美国 2

    2. 西欧洲

    3. 西美国

    4. 西美国 2

第二章,配置计算密集型应用程序

  1. 您正在设计一个图形密集型应用程序。您会选择哪个虚拟机系列?

    1. B 系列

    2. N 系列

    3. A 系列

    4. G 系列

  2. 您的组织希望每年只运行一次密集型科学计算。最便宜的解决方案是什么?

    1. Azure 批量处理

    2. HPC Pack

    3. Azure 虚拟机

    4. Azure HDInsight

  3. 您的公司需要运行大规模计算工作负载。实施的核心要求是从一个中心点(例如管理环境)添加和删除计算节点。您建议选择什么方案?

    1. 使用 Azure 批量处理

    2. 使用 Azure 虚拟机

    3. 使用 Azure VM H 系列

    4. 使用 HPC Pack

第三章,设计 Web 应用程序

  1. CDN 的好处是什么?

    1. 减少响应时间

    2. 减少流量到原始服务

    3. 启用更快的升级

    4. 提高安全性

  2. 以下哪些编程语言是 Azure Web 应用支持的?

    1. .NET Core

    2. Java

    3. Node.js

    4. Python

  3. Azure 流量管理器的可用路由方法有哪些?

    1. 地理位置

    2. 扩展

    3. 缓存

    4. 优先级

  4. 您正在创建一个使用 Redis Cache 的应用程序。您应该推荐哪个定价层?您会推荐哪个?

    1. 基础

    2. 标准

    3. 高级

    4. 免费

  5. 您正在创建一个自定义应用程序,要求用户通过 Facebook 帐户登录。您会选择哪种解决方案?

    1. Azure AD B2C

    2. Microsoft Graph

    3. Azure Active Directory Connect

    4. Azure AD B2B

第四章,实现无服务器和微服务

  1. 您正在设计一个需要触发 BizTalk 服务器电子数据交换(EDI)服务的应用程序。哪种技术实现最适合该功能?

    1. Azure API 管理

    2. Azure 逻辑应用

    3. Azure Functions

    4. Azure 容器实例

  2. Azure Service Fabric 为你的微服务应用提供完整的生命周期支持。Azure Service Fabric 提供哪些角色?

    1. 服务开发者

    2. 应用开发者

    3. 操作员

    4. 贡献者

  3. 什么是 API 管理?

    1. Visual Studio 2017 的一个附加组件,允许你将 API 部署到 Azure

    2. 用于自定义 API 的 API 网关

    3. 用于管理 Azure 逻辑应用的工具

    4. 用于容器的编排工具

第五章,强大的网络实现

  1. Azure 支持哪些 VPN 类型?

    1. VNet 对 VNet

    2. 站点到站点

    3. 点对站点

    4. OpenVPN

  2. ExpressRoute 最多能提供多少带宽?

    1. 100 Mbps

    2. 1 Gbps

    3. 10 GBps

    4. 2 Gbps

  3. 你正在设计一个需要面向全球成千上万用户的应用。对于位于远程地区的用户,你有性能和响应时间的担忧。你应该怎么做?

    1. 设置 VPN 网关

    2. 在多个区域部署应用

    3. 部署流量管理器

    4. 部署负载均衡器

  4. 你有两台虚拟机,VM1 和 VM2。所有外部流量必须通过 VM1 路由。你应该使用什么解决方案?

    1. DNS

    2. 系统路由

    3. 用户定义路由

    4. 网络安全组

第六章,连接混合应用

  1. 你想将本地应用连接到云,但不允许打开防火墙端口。你应该使用哪个 Azure 服务?

    1. Azure Active Directory 域服务

    2. Azure 数据工厂

    3. Azure 数据管理网关

    4. Azure Relay 服务

  2. 你的应用部署在一个本地虚拟机上,你希望在应用中使用 Azure AD 凭证。实现这一目标的最简单方法是什么?

    1. 设置混合环境并使用 Azure AD Connect 将用户账户和凭证与云同步

    2. 配置 Azure AD 域服务

    3. 使用 Azure 本地数据网关

    4. 使用 Azure VNet 集成

第七章,使用存储解决方案

  1. 你正在开发一个应用,需要存储 Microsoft Word 和 Excel 文档。你选择哪种存储类型?

    1. Blob 存储

    2. StorageV2

    3. 存储

    4. 表存储

  2. 你正在为一个跨国公司开发应用,需要存储数据集。你选择哪种复制类型?

    1. 地理冗余

    2. 区域冗余

    3. 本地冗余

  3. 你的组织使用一个本地的 SharePoint 2013 农场,存储了大量归档数据,这些数据存储在 SAN 存储上,并且达到了当前设备的存储限制。他们需要一个更具成本效益的存储选项来存储未来的归档数据。你会推荐什么?

    1. 在本地数据中心添加新的 SAN 存储设备

    2. 使用 StorSimple 虚拟阵列

    3. 使用 Office 365 和 SharePoint Online 存储云中的数据

    4. 使用 StorSimple 8000 系列

  4. 你想为一个金融应用使用 CosmosDB。哪个 API 最适合?

    1. 图形 API

    2. SQL API

    3. Cassandra API

    4. DocumentDB API

  5. 您计划在组织内部署 Azure 搜索,搜索公司网站、移动应用程序和其他应用程序中的内容。您有以下需求:存储最多 1 亿个文档,支持多租户场景,并支持超过 1,000 个索引。您选择哪个服务层级?

    1. 标准 S1

    2. 标准 S2

    3. 标准 S3

    4. 标准 HD

第八章,可扩展的数据实现

  1. 您有一个本地 SQL Server 2012 数据库,并希望尽快进行迁移。您需要推荐一个迁移解决方案。您选择什么?

    1. Stretch Database

    2. Azure MySQL 数据库

    3. Mongo DB

    4. Azure SQL 数据库

  2. 您想为 Azure SQL 数据库实施地理复制。您可以在哪里配置此项?

    1. PowerShell

    2. Transact SQL

    3. REST API

    4. Azure 门户

  3. Azure SQL 数据库备份有哪些恢复场景类型?

    1. 时间点恢复

    2. 标准恢复

    3. 已删除数据库恢复

    4. 地理恢复

  4. 您有五个使用标准服务层级的 Azure SQL 数据库。您正在为这些数据库设计备份策略,备份必须保存至少 5 年,以符合法律要求。数据库必须能够恢复到特定时间点。您应该怎么做?

    1. 将服务层级从标准更改为高级

    2. 配置 Azure 恢复服务并添加长期备份保留策略

    3. 配置地理恢复

    4. 导出自动化备份并将其存储为 Blob

  5. 您正在将本地 SQL Server 数据库迁移到 Azure SQL 数据库,数据库大约有 100 GB 的数据。您有以下需求:99.99% 的正常运行时间保证,支持多个并发查询,并尽量减少成本。您应该选择哪个服务层级和级别?

    1. 标准 S1

    2. 标准 S2

    3. 高级 P1

    4. 高级 P2

第九章,保护您的资源

  1. 您正在创建一个托管在 Azure 上的移动应用程序,外部用户可以使用他们的 LinkedIn 凭据登录。您使用哪个 Azure 服务?

    1. Microsoft Graph

    2. Azure B2B

    3. Azure AD REST API

    4. Azure B2C

  2. 如何在您的移动应用程序中实现这一点?

    1. 通过添加第三方认证 SDK

    2. 通过将内置策略添加到 web.config

    3. 通过在 Azure Active Directory 中注册应用程序

    4. 通过在 Visual Studio 2017 中创建新解决方案

  3. 您为一家希望将本地 AD 与 Azure AD 集成的组织工作。一个要求是他们可以继续使用当前的登录页面,该页面具有自定义通知和帮助台信息。您建议使用什么解决方案?

    1. 部署 Azure AD Connect

    2. 使用 Azure AD 密码同步

    3. 部署 ADFS

    4. 将当前的活动目录迁移到 Azure 虚拟机

  4. 您的组织希望在 Office 365 中向外部用户提供受控访问,并希望让外部管理员管理这些用户。最佳解决方案是什么?

    1. 在 Office 365 中启用外部共享,让用户决定与谁共享文档

    2. 部署 ADFS

    3. 使用 Azure B2B

    4. 使用 Azure B2C

第十章,保护您的数据

  1. 你想在存储帐户上启用 Azure 存储服务加密。哪个存储类型将自动加密?

    1. Blob

    2. 文件

    3. 队列

    4. 表格

  2. 你想加密虚拟机的数据磁盘。你会使用哪项技术?

    1. Azure 存储服务加密

    2. 始终加密

    3. Azure 密钥保管库

    4. Azure 磁盘加密

  3. 什么是始终加密?

    1. 存储证书的位置

    2. 数据传输中的数据库设置

    3. 数据使用中的数据库设置

    4. 加密和解密数据的密钥

  4. 你正在设计一个新应用程序,出于安全原因,你不希望在代码和 web.config 文件中存储任何凭据。你会选择哪项技术?

    1. Azure Active Directory 托管服务身份

    2. Azure 密钥保管库

    3. 透明数据加密

    4. 应用服务主体

第十一章,治理和政策

  1. 你需要授予一组管理员有限的访问权限。其中两个人需要管理 Azure 订阅的权限。你会将管理员添加到哪个角色?

    1. 贡献者

    2. 管理员

    3. 阅读者

    4. 拥有者

  2. 你正在 Azure 安全中心监控你的计算资源。显示了一个安装端点保护的建议。这个保护提供了什么类型的防护?

    1. 针对 API 端点的反恶意软件保护

    2. 针对虚拟机的反恶意软件保护

    3. 针对 API 端点的身份保护

    4. 针对虚拟机的身份保护

  3. 你组织中有几个用户需要临时访问 Exchange Online 的管理员资源。然而,从安全角度考虑,你不希望他们被添加到 Exchange 管理员角色中。那么你建议使用什么解决方案?

    1. Azure Active Directory 托管服务身份

    2. 将他们添加到 RBAC 中的贡献者角色

    3. 使用 Azure AD 特权身份管理

    4. 将他们添加到拥有者角色,并在用户完成后手动移除他们

  4. 你在一家全球性公司工作,该公司正在结合来自不同云提供商的解决方案,并拥有多个本地数据中心。你需要从一个解决方案中监控和保护所有这些环境。你建议使用哪种解决方案?

    1. Azure 安全中心

    2. 操作管理套件 安全与合规性

    3. Azure AD 身份保护

    4. 高级威胁防护

  5. 你需要授予一组管理员有限的访问权限。其中一个管理员只需要重新启动虚拟机的权限。你会将该管理员添加到哪个角色?

    1. 创建自定义角色

    2. 阅读者

    3. 拥有者

    4. 贡献者

第十二章,人工智能、物联网和媒体服务

  1. 你正在创建一个网站,用户可以上传文化地标的照片。这些图片需要根据图像自动分类。你会使用哪个认知服务 API?

    1. 面部 API

    2. 计算机视觉 API

    3. AMS 媒体分析

    4. LUIS API

  2. 你正在设计一个用于收集传感器设备生成的大量数据的解决方案。数据需要在本地网络内进行处理。你会选择哪种解决方案?

    1. Azure 时间序列分析

    2. Azure IoT Hub

    3. Azure Event Hubs

    4. Azure IoT Edge

  3. 你正在设计一个解决方案,用于处理由各种 IoT 设备生成的每秒数百万个事件。你会选择哪种解决方案?

    1. Azure Time Series Analytics

    2. Azure IoT Hub

    3. Azure Event Hubs

    4. Azure IoT Edge

  4. 你正在设计一个使用 Azure IoT Hub 的解决方案,每天处理超过 1 亿个事件。你会选择哪个定价层?

    1. Standard S1

    2. Standard S2

    3. Standard S3

    4. Standard S4

  5. 你正在设计一个解决方案,需要将数据从 IoT 设备传输到 Azure。你需要选择最具成本效益的解决方案。你会选择哪种解决方案?

    1. Azure IoT Hub

    2. Azure IoT Edge

    3. Azure Functions

    4. Azure Event Hubs

第十三章,实现消息传递解决方案

  1. 你正在设计一个应用程序,具有以下要求:用户界面层需要与多个处理层解耦。消息大小约为 1 MB。这是一个具有未来扩展要求的应用程序,其中一些处理层只会接收消息的子集。你会选择哪种解决方案?

    1. Azure Service Bus Queues

    2. Azure Service Bus Topics

    3. Azure Queue Storage

    4. Azure Functions

  2. 你正在设计一个解决方案,可以监控并响应设备事件。你希望能够将设备事件广播到多个端点,并创建自定义主题和 Azure Functions。你会选择哪种解决方案?

    1. Azure Event Grid

    2. Azure IoT Hub

    3. Azure Event Hubs

    4. Azure IoT Edge

  3. 你正在设计一个应用程序,具有以下要求:用户界面层需要与处理层解耦。消息大小不超过 50 KB。这是一个小型应用程序,只有一个处理层,且未来无需升级。你会选择哪种解决方案?

    1. Azure Service Bus Queues

    2. Azure Service Bus Topics

    3. Azure Queue Storage

    4. Azure Functions

第十四章,应用监控和告警策略

  1. 你正在创建一个监控和告警解决方案,监控你的 Azure 资源。你有以下要求:当虚拟机被删除时发送告警,并将事件写入 Event Hubs 和 Log Analytics。你会使用哪种解决方案?

    1. Azure Security Center

    2. Azure Health

    3. Azure Activity Log

    4. Azure Application Insights

  2. 你正在创建一个监控和告警解决方案,管理员希望查询 Azure 订阅中的所有可用日志。你会使用哪种解决方案?

    1. Azure Security Center

    2. Azure Log Analytics

    3. Azure Health

    4. Azure Network Watcher

  3. 你正在创建一个 Web 应用程序,可以托管在本地或 Azure 的 Docker 容器中。你希望获得更多关于页面查看和 API 调用的洞察。你会使用哪种监控解决方案?

    1. Azure Application Insights

    2. Azure Service Health

    3. Azure Activity Log

    4. Azure Network Watcher

  4. 你想了解微软在 Azure 资源上进行维护活动的时间。哪种监控解决方案能提供此类信息?

    1. Azure Application Insights

    2. Azure Service Health

    3. Azure Activity Log

    4. Azure Network Watcher

第十五章,探索运维自动化策略

  1. 你正在设计标准化的虚拟机部署和配置。你需要发布一个配置库,用于自动设置新虚拟机上的角色和功能安装。你应该选择哪种解决方案作为自动化策略?

    1. Chef

    2. Puppet

    3. 图形化运行簿

    4. Azure PowerShell Desired State Configuration (DSC)

  2. 你需要设计一个策略,在晚上 7 点关闭所有虚拟机,并在早上 8 点重新启动它们。解决方案应完全在 Azure 中运行。你会选择哪种解决方案?

    1. Chef

    2. Azure Automation

    3. Puppet

    4. 作为虚拟机上计划任务配置的 PowerShell 脚本。

  3. 你的公司使用 Windows、Linux 和 Mac 设备。你正在设计一种自动化策略。你会选择哪种解决方案?

    1. PowerShell

    2. Azure Automation

    3. Chef

    4. Puppet

附录 C – 模拟测试答案

你可以按以下方式找到问题的答案:

第一章,与 Azure 虚拟机一起工作

  1. 正确答案:2

    1. 错误:F 系列通常用于计算优化型虚拟机。它们用于游戏服务器、Web 服务器和批处理,而不是开发。

    2. 正确:B 系列适用于测试和开发、小到中型数据库以及低到中等流量的 Web 服务器。

    3. 错误:L 系列通常用于像大数据这样的存储场景。

    4. 错误:N 系列是专为图形渲染和视频编辑等重型任务设计的虚拟机。

  2. 正确答案:4

    1. 错误:不存在为部署在虚拟机上的应用程序创建可用性集的情况。

    2. 错误:自动伸缩是为了应用程序和虚拟机的性能,而不是为了高可用性。

    3. 错误:资源组在这里没有帮助。

    4. 正确:通过创建至少两台虚拟机并将它们放入可用性集,如果一台虚拟机失败或需要更新,应用程序仍然可以访问。

  3. 正确答案:3

  4. 正确答案:1

  5. 正确答案:1,2,3,4

    1. 正确:你可以使用 Azure 门户部署 VM 规模集。

    2. 正确:你可以使用 CLI 部署 VM 规模集。

    3. 正确:你可以使用 PowerShell 部署 VM 规模集。

    4. 正确:你可以使用 ARM 模板部署 VM 规模集。

  6. 正确答案:1

  7. 正确答案:1:西美国地区与东美国地区配对。这意味着在发生故障时,优先恢复每对区域中的至少一个。

第二章,配置计算密集型应用程序

  1. 正确答案:2

    1. 错误:B 系列适用于测试和开发、小到中型数据库以及低到中等流量的 Web 服务器。

    2. 正确:N 系列是专为图形渲染和视频编辑等重型任务设计的虚拟机。

    3. 错误:A 系列中的某些虚拟机设计用于 HPC 计算,但 N 系列主要用于图像渲染。

    4. 错误:X 系列不存在。

  2. 正确答案:1:Azure Batch 可以轻松扩展到数百个核心,你只需为实际使用的计算能力付费。剩余的时间你不需要支付任何费用。这是通过虚拟机或 HPC Pack 无法实现的,HPC Pack 是安装在虚拟机或本地服务器上的。

  3. 正确答案:4:只有 Microsoft HPC Pack 提供用于添加和移除附加节点的管理工具。Azure Batch 不提供此功能。

第三章,设计 Web 应用程序

  1. 正确答案:1,2

    1. 正确:CDN 减少了响应时间。内容存储在来自其他位置的不同服务器上。

    2. 正确:通过从其他服务器获取静态内容,原始服务器的流量得以减少。

    3. 错误:CDN 与更新无关。

    4. 错误:CDN 与安全性无关。

  2. 正确答案:1,2,3,4

  3. 正确答案:1,4

    1. 正确:地理路由是 Azure 流量管理器的一种路由方法。路由基于用户的地理位置。

    2. 错误:这不是一种路由方法。

    3. 错误:这不是一种路由方法。

    4. 正确:优先级是 Azure 流量管理器的路由方法。使用此方法,路由使用一个端点作为所有流量的主端点,并提供备份,以防主端点或备份端点不可用。

  4. 正确答案:2. Standard 层最适合生产应用,并且是最具成本效益的。

  5. 正确答案:1. Azure B2C 是当您希望用户使用其 Facebook 凭据登录时,在自定义应用程序中可以利用的选项。

第四章,实现无服务器架构和微服务

  1. 正确答案:2

    1. 错误:API 管理作为自定义 API 的网关使用。单独使用它无法调用本地 BizTalk 服务。

    2. 正确:Azure 逻辑应用由现成的连接器组成,您可以利用这些连接器轻松调用 BizTalk 服务。它还处理身份验证。

    3. 错误:您可以为此使用一个函数,并编写代码来访问服务。然而,这并不是推荐的方法。

    4. 错误:容器是应用程序的打包和部署机制。

  2. 正确答案:1、2、3:Azure 服务结构提供了服务开发者角色、应用开发者角色和操作员角色。

  3. 正确答案:2

第五章,强健的网络实现

  1. 正确答案:1、2、3:只有 OpenVPN 不被 Azure 支持。

  2. 正确答案:3:10 Gbps 是最大带宽。

  3. 正确答案:3:您应该部署流量管理器,并将其配置为使用性能方法路由。这将根据延迟将流量路由到全球各地。

  4. 正确答案:3:您应该使用 UDR 强制所有流量通过 VM1。

第六章,连接混合应用

  1. 正确答案:4:您应该使用 Azure Relay 服务。

  2. 正确答案:2:使用 Azure AD 域服务,您可以轻松地将虚拟机连接到 Azure,而无需安装域控制器或将用户帐户与云同步。

第七章,使用存储解决方案

  1. 正确答案:2:StorageV2 是微软推荐的存储账户。

  2. 正确答案:1:地理冗余。跨国公司使用全球分布的数据来实现高性能和高可用性。

  3. 正确答案:4:StorSimple 8000 系列提供了一种物理设备,可以存储冷数据,比如轻松地将数据归档到 Azure 存储中。与购买本地存储设备相比,这将是更具成本效益的解决方案。

  4. 正确答案:2:SQL API 提供 ACID 事务,最适合金融应用。

  5. 正确答案:4:Standard HD 是唯一可以存储最多 1,000 个索引的定价层。

第八章,可扩展的数据实现

  1. 正确答案:4:Azure SQL 数据库是这里的正确解决方案。由于你已经有一个 SQL Server 2012 数据库,它是一个关系型数据库,并且已经托管在 Microsoft 技术上,这将是最快的解决方案。

  2. 正确答案:1, 2, 3, 4:这里所有答案都是正确的。

  3. 正确答案:1, 3, 5:你可以使用时间点恢复、删除的数据库恢复和地理恢复来恢复备份。

  4. 正确答案:2:Azure 恢复服务与长期备份保留策略。使用 LTR 策略,备份可以存储长达 10 年,并通过时间点恢复来恢复数据库。

  5. 正确答案:2:你应该选择 Standard S2。使用此层级和服务级别,你可以存储最大 250 GB 的数据库,并且可以管理 1,200 个并发连接。你也可以使用 Premium 层级,因为它可以存储大于 250 GB 的数据库并管理 2,400 个并发连接,但这比 Standard 服务层级更贵。

第九章,保护你的资源

  1. 正确答案:4:Azure 商业对消费者是你可以用来验证 LinkedIn 的服务。它提供了多个外部身份验证提供者,你可以在自定义应用程序中利用它们。

  2. 正确答案:2:Azure B2C 使用内置策略,这些策略需要被添加到代码中的 web.config 中。通过添加这些策略,你可以用它们进行登录、注册、读取个人资料数据等。这些策略与 Azure B2C 中的各种身份提供者关联。

  3. 正确答案:3:使用 ADFS,用户登录后,请求会返回到本地环境并与本地 Active Directory 进行验证。它使用本地登录页面,可以完全根据组织需求进行定制。

  4. 正确答案:3:这是 Azure 提供的一项功能,你可以用它来进行受控的外部共享。管理员可以通过专用门户管理外部用户,并为他们创建组和策略。

第十章,保护你的数据

  1. 正确答案:1, 2, 3, 4:Azure 存储服务加密将自动加密所有四种存储类型。

  2. 正确答案:4. 你使用 Azure 磁盘加密来加密虚拟机磁盘。

  3. 正确答案:3. 用于数据使用中的数据库设置。你可以为 Azure SQL 数据库启用此功能,它用于存储加密数据。

  4. 正确答案:1. 使用 Azure Active Directory 托管服务身份,你可以调用一个端点,使用 Azure AD 凭证获取访问令牌。无需再提供凭证。

第十一章,治理与策略

  1. 正确答案:4:管理员需要被添加到所有者角色中,以便能够管理所有内容。

  2. 正确答案:2:端点保护为你的虚拟机提供反恶意软件保护。只能从 Azure 安全中心启用它。

  3. 正确答案:1:仅需重新启动虚拟机时,你需要创建一个自定义角色。内置角色不适合此操作。

  4. 正确答案:3:Operations Management Suite 安全与合规是可以监控大型混合环境的解决方案,包括来自不同云提供商的服务器和解决方案。

  5. 正确答案:3:你可以使用 Azure AD 特权身份管理为用户授予合格角色访问权限。

第十二章,人工智能、物联网与媒体服务

  1. 正确答案:2:你应该使用计算机视觉 API。它可以根据图像的内容自动分类文化地标。

  2. 正确答案:4:Azure IoT Edge 可以安装在本地网络的边缘,并可以在本地存储和处理数据。

  3. 正确答案:2:IoT Hub 是唯一能够处理每秒数百万事件的解决方案。

  4. 正确答案:2:标准 S2 提供对每天最多 600 万条消息的支持,因此这是最佳解决方案。

  5. 正确答案:4:Azure 事件中心是这个场景中最具成本效益的解决方案,因为它只需要设备到 Azure 的单向通信。

第十三章,实现消息传递解决方案

  1. 正确答案:2:对于这个规模的应用,考虑到消息大小和需要过滤功能的多个订阅者,Azure 服务总线主题是合适的解决方案。

  2. 正确答案:1:Azure 事件网格是这里的正确解决方案。它可以将事件推送到多个 Azure 资源,如 Azure 函数。

  3. 正确答案:3:对于一个只有一个处理层且最大消息大小为 50 KB 的小型应用,Azure 队列存储是正确的解决方案。

第十四章,应用监控与告警策略

  1. 正确答案:3:你应该使用 Azure 活动日志,它已集成在 Azure 监控中。

  2. 正确答案:2:在 Azure 日志分析中,管理员可以创建查询来查询数据。

  3. 正确答案:1:Application Insights 是定制应用的合适监控解决方案。它们可以托管在 Azure 上,也可以托管在本地。

  4. 正确答案:2:Azure 平台维护活动和计划通过 Azure 服务健康提供。

第十五章,探索运营自动化策略

  1. 正确答案:4:你应该使用 Azure PowerShell 所需状态配置(DSC)。它提供对虚拟机初始启动时的机器配置和应用程序部署的支持。

  2. 正确答案:2:你应该使用 Azure 自动化来处理此问题。该解决方案完全在 Azure 中运行,你可以创建一个运行手册,安排每天停止和启动虚拟机。

  3. 正确答案:3:Chef 支持 Windows、Linux 和 Mac 设备。

posted @ 2025-06-29 10:40  绝不原创的飞龙  阅读(28)  评论(0)    收藏  举报