如何打造高可用的收银系统?腾讯云联合微信支付

2024-05-20
来源:网络整理

1、为什么强调收银系统的易用性?

随着移动支付的快速发展,用户已经养成了不带钱包出门购物的习惯。 频繁的日常消费对商户收银系统的高可用性提出了极高的要求。 收银系统的轻微故障如“无法支付、重复支付”等支付、支付超时等会给用户和商户带来很多不适和不利,引发用户愤怒、投诉、纠纷,最终导致商户用户流失。 因此,构建一个高可用的收银系统对于商户来说非常重要。

如何构建高可用的收银系统? 读完这篇文章,相信你一定会受到启发。

2、高可用收银系统设计方案

通过对市场上收银系统的分析和研究,我们发现普遍存在以下风险:

1、服务时延不稳定:

2、对系统可用性考虑不够:

3、数据容灾不及时:

为了帮助商户提高服务质量,尽可能降低上述风险,微信支付团队提出了高可用收银系统的设计方案。 系统架构图如下:

接下来我们将从三个层面来阐述:

1. 减少服务延迟:

收银系统线下门店遍布全国,网络复杂(包括中国电信、中国联通、铁通、中国移动等),对系统时延提出了较高的挑战。

针对这一问题,部分云服务商支持“BGP网络接入跨区域实时切换”的能力。 通过冗余网络出口部署,实现跨区域网络之间的灵活切换调度,为网络出口容灾提供保障。

此外,腾讯云与微信支付推出支付加速解决方案。 部署在腾讯云上的服务可以直接将发送到微信支付的公网请求解析为内网访问,延迟率降低30%,提升用户支付体验。

同时,微信支付官方提供了两个API域名:api和api2,供服务商系统自行检测服务质量,并优先使用速度较快的域名进行访问。

注:双域名检测选择最佳时应注意以下几点:

对于并发检测,谁先回来就先使用,从而提高效率; 建立检测重试机制,控制检测频率,减少不必要的检测; 建议检测时机:系统开机时启动检测,或者请求超时时启动检测;

2、云辅助,低成本提升可用性:

正如文章开头提到的,移动支付时代,用户对收银系统的易用性有了更高的要求,这迫使服务提供商在设计系统时要考虑更多的因素。

由于这些因素的实施成本都比较高,单纯靠自己去实施是不现实的。 因此,笔者将结合腾讯云提供的大家熟悉的能力进行讲解。 建议云时代的服务商更多地了解这些能力,以低成本解决高层次的问题。 可用的问题。

因素 1. 在多个位置和多个接入点进行部署:

利用腾讯云遍布全球20多个数据中心的基础设施,轻松实现多地部署、多点接入。 架构层的高可用设计,可以最大程度地容忍单个区域内网络运营商故障和网络抖动带来的不便。 稳定因素并为全球商业伙伴提供最佳的准入条件。

当网络发生故障时,腾讯云全球内网互联,及时将业务流量调度至其他区域,确保用户体验不受影响。

因素 2. 防止 DDoS 攻击:

DDoS攻击屏蔽了真实用户,现在云服务提供商也会提供防御此类攻击的服务。 例如,腾讯云大域BGP高级防御系统提供800G防护带宽和21条BGP线路,可以动态调度网络流量,帮助用户有效抵御DDoS攻击。

因素三、负载均衡、故障屏蔽:

为了提高系统的稳定性和容灾能力,业界比较成熟的解决方案是基于“无状态应用层服务设计”,可以“实时监控服务器节点的可用性状态,自动转移失败的任务”到其他可用节点,以及集中请求并将其分发到集群中每个机器节点的能力。”

云时代的服务提供商可以利用腾讯云的负载均衡(CLB)能力以低成本解决这一问题。 腾讯云的负载均衡具有健康检查功能,允许用户自定义健康检查的频率,以保证后端云服务器尽快检测到故障并及时关闭业务流量,保证了业务的高可用和不可感知性。前端应用程序。 。

CLB 由单个集群中的 4 台物理服务器组成。 最大并发连接数超过1.2亿。 它可以处理峰值流量,每秒处理 600 万个数据包。 在只有一个实例可用的极端情况下,仍可支持超过3000万并发连接,保证后端能够提供正常服务。 高扩展性和低成本的优势可以最大程度地节省IT成本。

因素 4. 过载保护:

移动支付目前正处于快速增长期,各类营销活动将带来业务高峰。

一方面,要及时扩容,储备冗余服务能力; 另一方面,当实际业务流量远远超过系统最大正常服务水平时,需要进行自我保护,快速拒绝一些请求,以保证正常的服务水平而不是被拉垮。 影响所有服务;

建议使用云服务商提供的消息队列,通过云上的分布式消息队列CMQ提供可靠的异步通信,可以有效提高系统吞吐量,保证消息的可靠传递,减轻后台压力结束系统,并防止系统雪崩。

此外,腾讯云服务器具有弹性伸缩(自动)功能。 只需配置简单的伸缩规则,集群即可在高负载时自动扩缩容,保证业务顺利度过高峰期。 按量付费的计费能力可以最大程度地节省IT成本。

3、“跳单”实现数据层秒级自动容灾切换能力:

收银系统中的数据分为两类,一类是订单信息(主要包括订单表和退款表,特点是数据量大,读写次数多); 另一种是基础信息(主要包括店铺、设备、商家等信息,特点是数据量小、多读少写)。 这里介绍的高效数据库容灾实践,以订单信息DB为例。

容灾策略一般依靠自动或手动切换的方式实现“半同步、主备切换”(业务恢复时间从1分钟到几十分钟不等)。 对于交易量稍大的场景,故障恢复时间还是太长。 为了在更短的时间内恢复业务,我们设计了“跳序”数据层容灾方案。

核心理念:

在数据访问层封装了一个“跳单”组件来“自动避免存储错误”,从而可以将订单数据随意落入各种容器中。

支付移动系统有哪些_移动支付系统_支付移动系统包括哪些

下面详细介绍一下“跳单”的整个流程:

为了实现跳序逻辑,我们首先将数据库水平划分为几组。 每组DB一主二备,读写分离。 主DB用于写入,从DB用于读取。 主从同步通过半同步机制保证。

使用订单号保存组标记。 如果原来的订单号是,可以在最后一位添加组标记。 例如第2组,则变为

在此前提下:

a) 创建订单请求:

当收银终端有订单创建请求时,首先调用DB选择器随机选择一组DB,然后查询计数器看该组中DB故障的数量是否超过阈值。 如果数据库故障数量超过阈值,则将跳过重选。 否则,将通过检测器发送一份声明。 检测DB是否可用。 如果失败,需要重新选择DB。 如果成功,则将分组标记写入订单号​​,并将订单插入重组DB。

b) 更新或查询请求:

直接解析单个数字的分组标记,然后操作对应的DB。 “跳单”保证新交易正常,先完成支付。 当某组DB出现故障时,订单查询、取消等操作必须等待主备切换恢复。

这里需要注意的事项:

3、“跳单”后的日常演练

为了测试系统是否真正高可用,需要定期演练。 以下是我们每天的演练计划:

每周对单组数据库故障进行一次例行演练。 每季度进行多组数据库故障演练。

从下图演练过程中的监控可以看出,当某组DB出现故障时,会出现请求下降、订单跳过的情况,但整体曲线平稳,业务运行正常,没有受到任何影响。

4、“跳单”后的扩容和缩容

扩展步骤:

部署一个新的订单DB并为其分配一个DB编号; 将新的数据库信息配置到DB选择组件; 将新数据库连接到业务流量; 观察监测是否有异常情况;

收缩步骤:

对已移除DB所在库的数量取模,对缩容后剩余的DB数量取模:例如原本有5组DB,缩容为3组,如果打算移除5个库,则对3取模对于第5个库获取2,将数据迁移到库2,修改配置,关闭库5的流量。新订单将不再进入库5,历史查询可以通过取模访问库2。 监测无异常后,将正式删除该库。 5. “跳单”后商户维度查询

多组DB容灾方案中常见的一个问题是“商户维度列表查询效率问题”。 订单分散在不同的DB中。 如果查询量较小,可以直接使用全库扫描,通过上层并发调用来解决效率问题。 如果变成高频操作,就需要考虑额外建一个数据库来存储商家纬度的数据。 两个数据库之间的数据同步使用可靠的消息队列进行同步。 特别推荐学习腾讯云上的PGXZ和MQ组件。

虽然“跳单”带来了列表查询的效率问题,但对于收银系统来说,核心的设计理念仍然是“尽可能地付款”! 不会因列表查找问题而影响核心支付可用性。

6、收银系统的安全考虑

系统安全性也是衡量收银系统可用性的一个关键指标。 通过研究发现,线下收银系统可能存在以下安全风险:

收银终端软件被非法安装; 整台POS机被盗; 中间人攻击; 正常交易订单被非法退款;

为了应对上述风险,我们提供以下策略供您参考:

POS机注册激活机制,解决收银终端软件非法安装问题,POS机被盗时可直接封锁; 请求和响应参数签名机制,防止客户端伪造和请求篡改; 遵循协议,有限制 合法的根证书可以防止中间人抓包、监听、请求重放; 当天以内的订单仅限在当时交易的POS机上退款,超过一天的订单只能通过微信支付商户系统退款,解决恶意退款问题。

另外,微信支付官方安全团队还在微信支付开发者文档中添加了“最佳安全实践”,大家可以自行查看。

7.建议使用微信支付网络监控工具

为了更好地监控商户服务器与微信支付服务器之间的网络质量,微信支付运维团队提供了一套网络监控工具。 通过将监控数据上报至微信支付运维系统,方便运维人员为商户提供帮助。 优化链接质量。

该工具的详细使用说明可以参见微信支付开发者文档。

8.写在最后

综上所述,从头开始构建高可用收银系统需要考虑的问题有很多。 自建成本不低。 建议多关注云服务商提供的一些基础能力(BGP高防、BGP网络访问跨区域实时切换、分布式消息队列CMQ、负载均衡CLB、弹性伸缩AS、“云支付”等) .),尽可能基于云时代的基础设施进行高效的研发是更明智的选择。

再次强调,我们的追求是“尽可能付款”!

微信支付团队将持续对“高可用收银系统”进行技术研究,希望能够持续为整个行业提供经验,帮助行业提升服务质量,最终让用户享受到更好的移动支付服务。

文字有点多,感谢您的耐心阅读!

本文作者:郭润增、唐传鹏、黄冬青、苗俊雷、邵然 商户运营开发团队简介:

我们致力于用科技赋能微信支付合作伙伴!

分享