
SAP云上跨可用区高可用架构现状
在SAP云上官方架构设计指引中,展示了如何利用其多可用区的技术优势、诸如Route 53、NLB等基础设施服务以及SAP或操作系统的高可用技术实现端到端的跨可用区高可用方案。

图片来源:
https://docs.aws.amazon.com/sap/latest/sap-netweaver/net-win-high-availability-system-deployment.html
此架构优点是符合SAP与亚马逊云科技最佳实践的无单点故障跨可用区高可用方案,而且易于实现,只需要安装部署人员按照官方指引或者使用Amazon QuickStart/LaunchWizard就可以实现;但对于追求云上最佳用户体验的客户,其可能需要考虑如下问题:由于同区域内不同可用区之间的延迟必然远远高于同可用区内的延迟,如当可用区AZ2上的SAP应用实例与可用区AZ1上的HANA数据库主实例交互时,其运行的程序均会受到延迟的影响形成性能影响;这造成了终端用户或程序将有50%的概率获得比较明显的体验差异。

以上ABAPMeter的结果来自一套根据SAP云上官方架构设计指引设计在亚马逊云科技北京区域搭建的SAP系统,其中saptstapp01与数据库主节点放在同一可用区内,而saptstapp02位于与数据库主节点不同的可用区;可以看到由于跨可用区的网络延迟,saptstapp02的数据库访问性能(数据列Acc DB与E. Acc DB)比saptstapp01慢了近7倍,根据ABAPMeter的源码,此数值为循环200次简单数据库单行查询(SELECT SINGLE)的总时间;除了SAP官方推荐此数值应低于150ms(SAP Note 2879613)之外,值得一提的是不同节点数据库性能表现的差异将是造成终端用户日常体验差异的一个巨大隐患。

📢 想要了解更多亚马逊云科技最新技术发布和实践创新,敬请关注2021亚马逊云科技中国峰会!点击图片即刻报名~
更进一步地分析,这种由延迟差异所造成的性能表现差异是由SAP应用的数据库访问特点造成的;SAP作为数据库交互密集型的应用,为其ABAP开发人员提供了OPEN SQL这样的数据库交互层,而其强大灵活的功能使得程序的数据库开发模式多种多样,具体来说,跨可用区的延迟将对如下几种程序编写模式产生显著影响。
使用游标逐行fetch大结果集
通过SQL一次性取出大结果集保存在内表(itab),然后对其进行循环,并在循环中再进行一次或多次数据库查询
密集型逐条插入/删除/修改
存在大量短小的数据库访问
实际上这些场景并不少见,而且根据上面的ABAPMeter测试结果来看,对于上述数据库密集型访问模式,传统高可用方案中不同可用区的SAP应用节点的处理性能差异将会接近7倍;虽然通过批量fetch,优化程序逻辑等方法可以缓解延迟造成的性能问题,但我们认为为了适配高可用架构来调整应用程序并不是一个好的选择,相反,这将成为在云上获得最佳表现的一个巨大阻碍。
自适应方案设计与解决思路
解决这个问题的最好方法,是将活动的SAP应用与SAP数据库主实例始终放在同一个可用区里,这样它们之间的交互就不会因为跨可用区的延迟受到影响,也避免了跨可用区流量造成的额外费用;但是这样做的问题也显而易见:SAP应用实例失去了天然的跨可用区的保护,一旦遇到可用区级的故障,需要额外的方案或人为介入来保障业务连续性。
以此为背景,在本博客中,我们会详述具备SAP系统跨可用区高可用冗余与最优延迟兼具的架构方案(SAP云上自适应跨可用区高可用架构)。
什么是自适应
本博客中最核心的“自适应”的目标是:在总体资源成本不增加的情况下,利用亚马逊云科技云原生服务,在云上构建一套SAP高可用系统架构,使得SAP的实际负载实例(ABAP/Java Server)以及SAP ASCS实例自动随着SAP HANA主实例所处之可用区进行平滑转换,从而移除跨可用区访问的延迟问题。
其方案架构概览如下图所示:

在此架构方案中,SAP应用实例AS01/02始终与HANA主实例所在可用区保持一致,在另一个可用区,预先准备好SAP应用实例AS03/04供自适应流程进行管理,二在自适应流程过程的最后,AS01/02将被正常关闭。
可靠的事件总线、针对事件的处理流程以及关键事件的捕获
SAP系统整体可用区转换的流程处理
使用SAP系统即代码思想(SAP as Code)控制SAP实例
SUSE的官方文档:
https://documentation.suse.com/sbp/all/html/SLES4SAP-hana-sr-guide-PerfOpt-12_AWS/index.html
Amazon EventBridge:
https://amazonaws-china.com/cn/eventbridge/
Amazon Step Functions:
https://amazonaws-china.com/cn/step-functions/
Amazon Lambda:
https://amazonaws-china.com/cn/lambda/
alert功能:
https://clusterlabs.org/pacemaker/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/ch07.html
ClusterMon:
https://github.com/ClusterLabs/resource-agents/blob/master/heartbeat/ClusterMon
CRM_alert_kind
CRM_alert_version
CRM_alert_recipient
CRM_alert_node_sequence
CRM_alert_timestamp
CRM_alert_node
CRM_alert_desc
…
{
"detail-type": [
"saptstdb01" <= 数据库节点Hostname
],
"source": [
"bcs-sac-adaptive-cluster" <= 事件来源标识
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "events:PutEvents",
"Resource": "<arn-of-the-event-bus>"
}
]
}
能够应对事件乱序送达或者未送达情况
能够在转换过程中针对突发性事件(诸如SAP HANA实例切换失败)进行调整
能够保障应用实例可用区转换的效率




使用SAP系统即代码思想
(SAP as Code)控制SAP实例
#SAP PAS
saptstas01:
Template: /sap/instances/sapapp
System: TST
Properties:
InstanceName: D00
InstanceNumber: 00
Role: PAS
EC2Instance: saptstapp01
saptstapp01:
Template: /ec2/instances/sapapp

bcs:sac:sap-sid:TST 等于 True
bcs:sac:sap-role 包含 PAS 或者 AAS
实例子网所在可用区等于 AZ1
# sapcontrol -nr <SAPInstanceNumber> -function Stop
# crm resource stop <目标pacemaker资源名>

Automatic Recovery & HSR without Data Preload (Warm Standby + Dev/QA)
https://d0.awsstatic.com/enterprise-marketing/SAP/sap-hana-on-aws-high-availability-disaster-recovery-guide.pdf

本篇作者

刘斐文
亚马逊云科技ProServe团队SAP顾问


听说,点完下面4个按钮
就不会碰到bug了!





