此解决方案在 Azure 上运行 SAS 分析工作负载。 此指南涵盖各种部署方案。 例如,其中包括多个版本的 SAS。 你可以在自我管理的虚拟机 (VM) 上运行 SAS 软件。 还可以使用 Azure Kubernetes 服务 (AKS) 部署基于容器的版本。
体系结构
该图包含一个带有“Azure 虚拟网络”标签的大矩形。 其中,另一个大矩形具有“邻近放置组”标签。 两个矩形位于其中。 它们垂直堆叠,每个都有“网络安全组”标签。 每个安全组矩形都包含多个按行排列的计算机图标。 在上方的矩形中,上行左侧的计算机图标具有“中层”标签。 右侧的图标具有“元数据层”标签。 下行的图标具有“计算层”标签。 在下方的矩形中,上行的计算机图标具有 MGS 和 MDS 服务器的标签。 下行具有 OST 和 OSS 服务器标签。
下载此体系结构的 Visio 文件。
工作流
SAS Azure 部署通常包含三个层:
API 或可视化层。 在此层中:
- 元数据层使客户端应用可以访问有关数据源、资源、服务器和用户的元数据。
- Web 应用提供对中间层智能数据的访问。
计算平台,其中 SAS 服务器处理数据。
由 SAS 用于永久存储的存储层。 Azure 上的常用选项包括:
- Lustre
- IBM Spectrum Scale
- 网络文件系统 (NFS)
Azure 虚拟网络在云中隔离该系统。 在该网络中:
- 邻近放置组可降低 VM 之间的延迟。
- 网络安全组保护 SAS 资源,使其免于接收不需要的流量。
先决条件
在部署 SAS 工作负载之前,请确保以下组件已就位:
- 来自 SAS 大小调整团队的大小调整建议
- SAS 许可证文件
- 对用于部署资源的资源组的访问权限
- 一个已考虑到大小调整文档和 VM 选择的虚拟中心处理单元 (vCPU) 订阅配额
- 对安全轻型目录访问协议 (LDAP) 服务器的访问权限
方案详细信息
除了讨论不同的实现之外,本指南还与 Microsoft Azure 架构良好的框架原则保持一致,以实现成本、DevOps、复原能力、可伸缩性和安全性方面的卓越。 但是,除了使用本指南之外,还请咨询 SAS 团队,以进一步验证你的特定用例。
作为合作伙伴,Microsoft 和 SAS 正在努力为在云中进行创新的组织制定路线图。 两家公司都致力于确保 Azure 上 SAS 产品和解决方案的高质量部署。
SAS 简介
SAS 分析软件提供一套服务和工具,用于从数据中提取见解并做出智能决策。 SAS 平台完全支持其数据管理、欺诈检测、风险分析和可视化等领域的解决方案。 SAS 提供以下主要平台,这些平台已经过 Microsoft 验证:
- SAS Grid 9.4
- SAS Viya
以下体系结构已经过测试:
- Linux 上的 SAS Grid 9.4
- SAS 9 Foundation
- Linux 上的 SAS Viya 3.5,带有对称多重处理 (SMP) 和大规模并行处理 ( MPP) 体系结构
- AKS 上的 SAS Viya 2020 及更高版本,带有 MPP 体系结构
本指南提供有关在 Azure 上运行 SAS 的常规信息,而不是特定于平台的信息。 这些指南假定你在自己的租户中托管自己的 Azure 上 SAS 解决方案。 SAS 不会为你在 Azure 上托管解决方案。 有关 SAS 提供的 Azure 托管和管理服务的详细信息,请参阅 SAS 托管应用程序服务。
建议
设计你的实现时,请考虑以下部分中所述的要点。
SAS 文档提供每个核心(指的是每个物理 CPU 核心)的要求。 但 Azure 提供的是 vCPU 列表。 在建议用于 SAS 的 VM 上,每个物理核心都有两个 vCPU。 因此,若要计算 vCPU 要求的值,请使用核心要求值的一半。 例如,一个物理核心要求 150 MBps 将会转换为每个 vCPU 75 MBps。 有关 Azure 计算性能的详细信息,请参阅 Azure 计算单位 (ACU)。
注意
如果要纵向扩展和保留单节点 SAS 部署中的数据(而不是保留到外部化文件系统),SAS 文档建议使用至少 150 MB/s 的带宽。 若要实现此带宽,需要对多个 P30 Premium(或更大的)磁盘进行条带化。
操作系统
Linux 最适合运行 SAS 工作负载。 SAS 支持以下操作系统的 64 位版本:
- Red Hat 7 或更高版本
- SUSE Linux Enterprise Server (SLES) 12.2
- Oracle Linux 6 或更高版本
有关特定 SAS 版本的详细信息,请参阅 SAS 操作系统支持矩阵。 在使用多台计算机的环境中,最好在所有计算机上运行同一版本的 Linux。 Azure 不支持 Linux 32 位部署。
若要优化与 Azure 的兼容性和集成,请从 Azure 市场中的操作系统映像开始。 使用不带额外配置的自定义映像可能会降低 SAS 性能。
内核问题
选择操作系统时,请注意影响整个 Red Hat 7.x 系列的软锁定问题。 它发生在以下内核中:
- Linux 3.x 内核
- 低于 4.4 的版本
Linux 和 Hyper-V 的内存和 I/O 管理方面的问题会导致该问题。 出现该问题时,系统日志将包含类似以下内容的条目,其中提到了不可屏蔽的中断 (NMI):
Message from syslogd@ronieuwe-sas-e48-2 at Sep 13 08:26:08
kernel:NMI watchdog: BUG: soft lockup - CPU#12 stuck for 22s! [swapper/12:0]
另一个问题会影响旧版 Red Hat。 具体而言,它可能发生在满足以下条件的版本中:
- 拥有低于 3.10.0-957.27.2 版的 Linux 内核
- 使用非易失性快速存储器 (NVMe) 驱动器
当系统遇到高内存压力时,通用 Linux NVMe 驱动程序可能无法为写入操作分配足够的内存。 因此,系统会报告一个软锁定,该锁定源于实际的死锁。
升级内核以避免这两个问题。 或者,请尝试以下可能的解决方法:
- 将
/sys/block/nvme0n1/queue/max_sectors_kb
设置为128
,而不是使用默认值512
。 - 每次 VM 启动时在 VM 中的每个 NVMe 设备上更改此设置。
运行以下命令以调整该设置:
# cat /sys/block/nvme0n1/queue/max_sectors_kb
512
# echo 128 >/sys/block/nvme0n1/queue/max_sectors_kb
# cat /sys/block/nvme0n1/queue/max_sectors_kb
128
VM 大小调整建议
SAS 部署通常使用以下 VM SKU:
Edsv5 系列
Edsv5 系列中的 VM 是 Viya 和 Grid 的默认 SAS 计算机。 它们提供以下功能:
- 受约束的核心。 使用此系列中的许多计算机,可以约束 VM vCPU 计数。
- 良好的 CPU 与内存之比。
- 具有高吞吐量的本地附加磁盘。 I/O 速度对 SAS 用于临时文件的
SASWORK
等文件夹和云分析服务 (CAS) 缓存CAS_CACHE
很重要。
如果 Edsv5 系列 VM 不可用,建议使用上一代。 Edsv4 系列 VM 已经过测试,在 SAS 工作负载上性能良好。
Ebsv5 系列
在某些情况下,本地附加的磁盘没有足够的存储空间用于 SASWORK
或 CAS_CACHE
。 若要获取更大的工作目录,请使用具有高级附加磁盘的 Ebsv5 系列 VM。 这些 VM 提供以下功能:
- 与 Edsv5 和 Esv5 VM 相同的规范
- 针对远程附加磁盘的高吞吐量(最高 4 GB/秒),根据 SAS 的 I/O 需求提供尽可能大的
SASWORK
或CAS_CACHE
。
如果 Edsv5 系列 VM 提供足够的存储空间,则最好使用它们,因为它们更具成本效益。
M 系列
许多工作负载使用 M 系列 VM,包括:
- SAS 编程运行时环境 (SPRE) 实现,这些实现将 Viya 方法用于软件体系结构。
- 某些 SAS Grid 工作负载。
M 系列 VM 提供以下功能:
- 受约束的核心
- 高达 3.8 TiB 的内存,适合于使用大量内存的工作负载
- 远程磁盘的高吞吐量,这非常适用于
SASWORK
文件夹(当本地可用磁盘不足时)
Ls 系列
某些 I/O 密集型环境应使用 Lsv2 系列或 Lsv3 系列 VM。 具体而言,需要快速、低延迟 I/O 速度和大量内存的实现受益于这种类型的计算机。 示例包括大量使用 SASWORK
文件夹或 CAS_CACHE
的系统。
注意
SAS 优化了要与 Intel 数学内核库 (MKL) 一起使用的服务。
- 对于数学计算密集型工作负载,请避免使用未使用 Intel 处理器的 VM:Lsv2 和 Lasv3。
- 选择 AMD CPU 时,请验证 MKL 在其上的执行情况。
警告
如果可能,请避免使用 Lsv2 VM。 请转而使用带 Intel 芯片集的 Lsv3 VM。
借助 Azure,可按需缩放 SAS Viya 系统以满足截止时间:
- 通过增加节点池的计算容量。
- 通过使用 AKS 群集自动缩放程序来添加节点并水平缩放。
- 通过临时纵向扩展基础结构以加快 SAS 工作负载的速度。
注意
缩放计算组件时,还要考虑纵向扩展存储,以避免存储 I/O 瓶颈。
对于 Viya 3.5 和 Grid 工作负荷,Azure 目前不支持水平或垂直缩放。 Viya 2022 支持水平缩放。
网络和 VM 放置注意事项
SAS 工作负载通常会频繁通信。 因此,它们可以传输大量数据。 在所有 SAS 平台中,请遵循以下建议来减少频繁通信的影响:
- 在同一虚拟网络上部署 SAS 和存储平台。 此方法还可避免产生对等互连成本。
- 将 SAS 计算机置于邻近放置组中,以减少节点之间的延迟。
- 如果可能,请在同一邻近放置组中部署 SAS 计算机和基于 VM 的数据存储平台。
- 在同一可用性区域中部署 SAS 和存储设备,以避免跨区域延迟。 如果无法确认解决方案组件是否部署在同一区域中,请联系 Azure 支持。
对于 VM,SAS 有特定的完全限定域名 (FQDN) 要求。 请正确设置计算机 FQDN,并确保域名系统 (DNS) 服务正常工作。 可以使用 Azure DNS 设置这些名称。 还可以编辑 hosts
配置文件夹中的 etc
文件。
注意
请在 SAS 部署中的所有节点上启用加速网络。 关闭此功能时,性能会显著下降。
若要在 VM 上启用加速网络,请执行以下步骤:
在 Azure CLI 中运行以下命令以将该 VM 解除分配:
az vm deallocate --resource-group <resource_group_name> --name <VM_name>
关闭该 VM。
在 CLI 中运行以下命令:
az network nic update -n <network_interface_name> -g <resource_group_name> --accelerated-networking true
在 Azure 中迁移数据或与 SAS 交互时,建议使用以下解决方案之一将本地资源连接到 Azure:
对于 Azure 中的生产 SAS 工作负载,ExpressRoute 提供私密、专用且可靠的连接,与站点到站点 VPN 相比,这种连接有以下优势:
- 速度更高
- 降低延迟
- 安全性更严格
请注意 SAP 与非 SAP 应用程序之间对延迟敏感的接口。 请考虑将数据源和接收器移动到靠近 SAS 的位置。
身份管理
SAS 平台可以使用本地用户帐户。 它们还可以使用安全 LDAP 服务器来验证用户。 建议在 Azure 中运行域控制器。 然后使用域加入功能正确管理安全访问。 如果尚未设置域控制器,请考虑部署 Microsoft Entra 域服务。 使用域加入功能时,请确保计算机名称不超过 15 个字符的限制。
注意
在某些环境中,本地与 Azure 托管的 SAS 环境之间需要本地连接或共享数据集。 在这些情况下,强烈建议在 Azure 中部署域控制器。
Microsoft Entra 域服务林创建的用户可针对 Microsoft Entra 设备进行身份验证但不能针对本地资源进行身份验证,反之亦然。
数据源
SAS 解决方案通常从多个系统访问数据。 这些数据源分为两类:
- SAS 数据集,SAS 将其存储在
SASDATA
文件夹中 - 数据库,SAS 通常会将大量负载置于其上
为获得最佳性能:
- 将数据源放置在尽可能靠近 SAS 基础结构的位置。
- 限制数据源与 SAS 基础结构之间的网络跃点数和设备数。
注意
如果无法将数据源移动到靠近 SAS 基础结构的位置,请避免对其运行分析。 相反,请先运行提取、转换、加载 (ETL) 过程,然后再进行分析。 对处于压力下的数据源采取相同的方法。
SAS 数据的永久远程存储
SAS 和 Microsoft 测试了可用于托管 SAS 数据集的一系列数据平台。 SAS 博客详细记录了结果,包括性能特征。 测试包括以下平台:
- Sycomp Storage Fueled by IBM Spectrum Scale,它使用通用并行文件系统 (GPFS)
- Azure 托管 Lustre,它提供 Lustre 并行文件系统
- Azure NetApp 文件,它支持 NFS 文件存储协议
- Azure 文件存储高级版,它是支持 NFS 协议的文件共享服务
SAS 为 Viya 和 Grid 体系结构提供性能测试脚本。 SAS 论坛提供有关在这些平台上使用脚本进行测试的文档。
Sycomp Storage Fueled by IBM Spectrum Scale (GPFS)
有关 Sycomp Storage Fueled by IBM Spectrum Scale (GPFS) 如何满足性能预期的信息,请参阅 SAS 对用于 SAS Grid 的 Sycomp 的评估。
对于大小调整,Sycomp 提出以下建议:
- 为每 8 个核心提供一个 GPFS 缩放节点,采用每个核心 150 MBps 的配置。
- 每个实例至少使用 5 个 P30 驱动器。
Azure Managed Lustre
Azure 托管 Lustre 是一种为高性能计算 (HPC) 和 AI 工作负荷而创建的托管文件系统。 托管 Lustre 可以并行运行 SAS 9 和 Viya 工作负荷。 若要优化文件系统的性能,请遵循以下建议:
部署托管 Lustre 时,对所有客户端节点执行优化,以提高 Lustre 客户端读取,并优化 SAS I/O 模式的并发性。 运行以下命令,以执行这种优化:
lctl set_param mdc.*.max_rpcs_in_flight=128 osc.*.max_pages_per_rpc=16M osc.*.max_rpcs_in_flight=16 osc.*.max_dirty_mb=1024 llite.*.max_read_ahead_mb=2048 osc.*.checksums=0 llite.*.max_read_ahead_per_file_mb=256
在所有 SAS VM 上启用加速网络。
若要降低网络延迟,请将 SAS VM 放置在部署托管 Lustre 的同一可用性区域中。
Azure 文件存储高级层
Azure 文件存储高级层是一种支持 NFS 4.1 协议的托管服务。 它提供一个经济高效、弹性、高性能且符合 POSIX 的文件系统。 NFS 共享的 IOPS 和吞吐量随预配的容量进行扩展。 SAS 对 Azure 文件存储的高级层进行了广泛的测试,发现性能足以为 SAS 安装提供动力。
你可以使用 nconnect
改进性能。 此装载选项将 IO 请求分散到多个通道上。 有关详细信息,请参阅 NFS 性能。
在Azure 文件存储中使用 NFS Azure 文件共享时,请考虑以下几点:
- 调整预配容量以满足性能要求。 NFS 共享的 IOPS 和吞吐量随预配的容量进行扩展。 有关详细信息,请参阅 NFS 性能。
- 在装载中使用 nConnect,并设置为
nconnect=4
,以获得最佳性能的并行通道使用。 - 将预读设置优化为
rsize
和wsize
的 15 倍。 对于大多数工作负荷,建议将rsize
和wsize
设置为 1 MB,将read-ahead
设置为 15 MB。 有关详细信息,请参阅增加预读大小。
Azure NetApp 文件 (ANF)
SAS 测试已针对 SAS Grid 验证了 NetApp 性能。 具体而言,测试表明,Azure NetApp 文件是适用于跨多台计算机的多达 32 个物理核心的 SAS Grid 群集的可行主存储选项。 使用 NetApp 提供的优化和 Linux 功能时,Azure NetApp 文件可以是跨多台计算机的多达 48 个物理核心的群集的主要选项。
使用此服务时,请注意以下几点:
- Azure NetApp 文件非常适合 Viya 部署。 请勿将 Azure NetApp 文件用于 Viya 中的 CAS 缓存,因为写入吞吐量不足。 如果可能,请改用 VM 的本地临时磁盘。
- 在具有 Grid 9.4 的 SAS 9 Foundation 上,与用于
SASDATA
文件的 SAS 配合使用的 Azure NetApp 文件的性能对于多达 32 个物理核心的群集来说非常好。 这在应用优化后最多可以增加到 48 个核心。 - 为了确保性能良好,请在部署 Azure NetApp 文件时至少选择“高级”或“超级”存储层服务级别。 可以为非常大的卷选择标准服务级别。 请考虑从“高级”级别开始,并在以后切换到“超级”或“标准”。 服务级别更改可以联机完成,而不会发生服务中断或数据迁移。
- Azure NetApp 文件的读取性能和写入性能不同。 SAS 的写入吞吐量上限为 1600 MiB/秒左右,而读取吞吐量上限超出该值,达到大约 4500 MiB/秒。 如果需要持续的高写入吞吐量,Azure NetApp 文件可能不适合。
NFS 预读优化
为了提高 SAS 工作负荷的性能,必须优化 read-ahead
内核设置,这会影响 NFS 共享的装载方式。 启用预读后,Linux 内核可以在应用程序进行任何实际 I/O 之前请求块。 结果改进了顺序读取吞吐量。 大多数 SAS 工作负荷读取许多大型文件以供进一步处理,因此 SAS 从大型预读缓冲区中获益匪浅。
使用 Linux 内核 5.4 或更高版本时,默认预读从 15 MB 更改为 128 KB。 新的默认值降低了 SAS 的读取性能。 为了最大限度地提高性能,请增加 SAS Linux VM 上的预读设置。 SAS 和 Microsoft 建议将预读设置为 rsize
和 wsize
的 15 倍 。 理想情况下,rsize
和 wsize
两者均为 1 MB,read-ahead
为 15 MB。
在虚拟机上设置预读非常简单。 需要添加 udev 规则。
对于 Kubernetes 来说,这个过程更为复杂,因为它需要在主机上完成,而不是在 Pod 上完成。 SAS 在 AKS 上为 Viya 提供脚本,自动设置公告的预读值。 有关详细信息,请参阅在 Kubernetes 上适用于 SAS Viya 的 Azure 文件中使用 NFS 高级共享。
其他数据源
SAS 平台支持各种数据源:
- 使用分层命名空间的 Azure Data Lake Storage 帐户
- Azure Synapse Analytics
- Azure HDInsight 上的 Apache Hadoop 和 Hive
- SQL Server
- 使用 Open Database Connectivity (ODBC) 的 SQL Server
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负荷质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
安全性
安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅安全性支柱概述。
SAS 工作负载的输出可能是组织的关键资产之一。 SAS 输出提供有关内部效率的见解,并且可以在报告策略中发挥关键作用。 因此,请务必确保对 SAS 体系结构的访问安全。 为了实现此目标,请使用安全身份验证并解决网络漏洞。 使用加密可帮助保护所有进出体系结构的数据。
Azure 通过使用基础结构即服务 (IaaS) 云模型来提供 SAS。 Microsoft 在以下级别将安全保护构建到服务中:
- 物理数据中心
- 物理网络
- 物理主机
- Hypervisor
仔细评估你为虚拟机监控程序上方的区域选择的服务和技术,例如用于 SAS 的来宾操作系统。 请务必为体系结构提供适当的安全控制。
SAS 当前不完全支持 Microsoft Entra ID。 若要向 SAS 的可视化层进行身份验证,可以使用 Microsoft Entra ID。 但对于后端授权,请使用类似于本地身份验证的策略。 管理 IaaS 资源时,可以使用 Microsoft Entra ID 进行 Azure 门户身份验证和授权。 使用 Microsoft Entra ID 域服务时,无法对来宾帐户进行身份验证。 来宾尝试登录时将失败。
使用网络安全组来筛选进出虚拟网络中资源的网络流量。 借助这些组,便可以定义可授予或拒绝对 SAS 服务的访问权限的规则。 示例包括:
- 授予从本地 IP 地址范围访问 CAS 工作端口的权限。
- 阻止从 Internet 访问 SAS 服务。
可以使用 Azure 磁盘加密在操作系统中进行加密。 此解决方案使用 Linux 的 DM-Crypt 功能。 但我们目前不建议使用 Azure 磁盘加密。 它可能会严重降低性能,尤其是在本地使用 SASWORK
文件时。
Azure 磁盘存储的服务器端加密 (SSE) 会保护数据。 它还有助于满足组织安全性和合规性承诺。 对于 Azure 托管磁盘,SSE 会在将数据保存到云时加密静态数据。 此行为默认适用于 OS 和数据磁盘。 可以使用平台管理的密钥或自己的密钥来加密托管磁盘。
保护基础结构
控制对已部署的 Azure 资源的访问。 每个 Azure 订阅均与一个 Microsoft Entra 租户存在信任关系。 使用 Azure 基于角色的访问控制 (Azure RBAC) 向组织内的用户授予对 Azure 资源的正确权限。 通过向特定范围内的用户或组分配 Azure 角色,授予访问权限。 该范围可以是订阅、资源组或单个资源。 确保审核对基础结构进行的所有更改。
通过 Azure Bastion 管理对 VM 的远程访问。 不要向 Internet 公开以下任何组件:
- VM
- 安全外壳协议 (SSH) 端口
- 远程桌面协议 (RDP) 端口
部署此方案
最好使用基础结构即代码 (IaC) 过程来部署工作负载。 SAS 工作负载可能对手动部署中经常发生的错误配置敏感,并会降低工作效率。
构建环境时,请参阅 Azure 上的 CoreCompete SAS 9 或 Viya 中的快速入门参考材料。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Roeland Nieuwenhuis | 首席架构师
- David Baumgarten | 首席架构师
其他参与者:
- Drew Furgiuele | 高级架构师
要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。
后续步骤
有关如何入门的帮助,请参阅以下资源:
如需有关自动化过程的帮助,请参阅 SAS 提供的以下模板: