当前位置: 首页 > news >正文

一文说清楚支付架构

作者:陈斌

支付的技术架构是为了保障能够顺利处理支付请求而设计的结构体系。从系统的角度看,它包括了计算机系统的软件、硬件、网络和数据等。从参与的主体角度来看,它涉及交易的付款方、收款方、支付机构、银行、卡组织和金融监管机构等。要想成功地设计和构建支付系统的架构,需要深入地理解支付的业务生态体系,弄清楚并且照顾好支付业务生态体系中各利益相关方的诉求。

本章将讨论支付业务生态体系中利益相关方的作用和特点,分析各利益相关方的核心诉求,总结出为满足利益相关方的需求而提供的各种功能,并且进一步把相关联的功能聚合成子系统。在此基础之上,通过引入参考架构和分层架构设计的方法,讨论支付系统的架构,并描述支付机构的总体技术架构。

5.1 支付业务生态的利益相关方

5.1.1收款人与付款人

(1)收款人

一般来说,在支付过程中,发起支付活动的,首先是收款人(卖方)。卖方为了能卖出自己的产品或者服务,需要展示商品并游說买家付款去购买。而且,当双方的交易意向达成之后,收款人需要提供给付款人发货清单和付款请求。

对收款人而言,核心的利益诉求就是能在合约规定的时间,收到买方支付的约定数额的资金;需要履行的义务是按时、按质、按量发货,并且提供发票和发货信息。

(2)付款人

一般是交易中的买方,付款人(买方)的核心诉求是能够按照合约,在规定的时间收到卖方发出的约定数量和质量的货物,或者接受到约定数量和质量的服务。需要履行的义务是按时、按量完成与货物或服务相对应的资金支付。

对付款人而言,购买商品或者服务是偶尔发生的事情,需要有办法在短期內查询物流和支付情况。对收款人来说,卖东西是他的生意,需要不断地查询是否有新订单?已经收到的订单是否已完成支付?完成支付的订单是否已经发货等情况。

5.1.2银行

除了与交易直接相关的买方或付款人与卖方或收款人之外,银行也是支付活动的积极参与方。因为在通常的情形下,付款方和收款方的资金都存放在银行里。支付将会涉及从买方银行账户把资金转移到卖方银行账户的过程。

银行的核心诉求是能够按照客户的支付指令,按时按量完成资金的转移,从而赚取银行的服务费用。银行要在约定的时间与支付机构进行对账,确保双方所处理的支付请求可以匹配。银行还要帮助支付机构完成结算后的出款活动。图5-1 展示了银行在支付生态体系中的作用。

有些银行对支付的参与度更深,因为他们为了服务好在本银行开户的商户,需要帮助商户完成收单,或者委托第三方支付公司帮忙服务好商户。也就是说,银行可以直接地或者间接地参与支付活动。在某些复杂的情况下,银行还会给买方提供买方信贷,或者为卖方提供应收账款的融资便利,例如应收账款的保理业务。

58564d2a77f89f5d6d0344a191e6711d.jpeg

5.1.3卡组织

如果支付涉及银行卡,那么卡组织将是银行之外的另一个参与者。通常,从卡组织的角度看,付款人就是持卡人,卡组织透过发卡行为持卡人提供底层的基础网络和授权认证服务。收款人也就是商户,有自己签约的收单行,收单行透过卡组织与开户行间接完成支付信息的交换和资金的结算。卡组织的核心诉求是高效且安全地提供银行卡服务,从而赚取银行卡支付处理费。

a3c1d58c8a6fd71ef771bd71cadce524.jpeg

5.1.4支付机构

支付机构可以在买卖双方之间充当中间人的角色,或者接受卖方的委托,代理收取买方支付的与货物或者服务相对应的资金。支付机构的核心诉求是准确、准时和安全地帮助买卖双方完成交易资金的交割。在交易的过程中,支付机构帮助卖方向买方银行发出支付扣款的指令。支付机构有责任管理好交易过程中存在的信用卡风险。配合金融监管机构调查潜在的洗钱和恐怖融资活动。

cebbe1c453912c0d76858dce773e4ce2.jpeg

5.1.5监管机构

根据支付请求的具体情况,支付交易还有可能涉及政府或者行业监管机构,例如各地的人民银行、国际、国家和地区的反洗钱中心。金融监管机构的核心诉求是确保支付活动符合国家的法律和规范,例如外汇管制法规和信贷管理规范,要求支付机构定期上报所处理的支付请求,以核查可疑的交易。

下表概括总结了支付相关主体的作用和诉求:


作用

诉求

付款人

付款

能按时按质按量付款

收款人

收款

能按时按质按量收款

发卡银行

为付款人提供银行账户

赚取银行服务费用

收单银行

为收款人提供银行账户

赚取银行服务费用

卡组织

为卡支付提供基础网络和服务

收取基础网络和服务费用

支付机构

为付款人和收款人提供中间服务

收取支付处理费用

监管机构

调查反洗钱和打击恐怖融资活动

确保支付活动合规合法

表5-1 支付相关主体的作用和诉求

总之,支付机构不仅需要拥有强大的技术架构和健全的业务管控体系,以保障可以高效、安全和顺畅地处理支付请求,让付款方和收款方满意,而且还需要能考虑和照顾到其他利益相关方的各种需求。全面透彻地理解这些诉求和作用,并且归纳和提炼出相关的功能是成功构建支付的技术架构和业务管控体系的关键。

546effff678de65163f21d7a7329859d.jpeg

5.2支付机构的功能

本节将以利益相关方为主轴,从业务功能的角度,对支付机构应该具备的业务功能和相应的技术保障体系进行讨论。一个典型的支付机构要想提供能满足各个利益相关方的核心诉求,就必须要系统地分析并掌握各个利益相关方在支付过程中的功能需求。

5.2.1 为付款人提供的功能

为付款人提供的功能,最基础的是银行提供的借记卡,以及六大卡组织通过银行发行的各种信用卡,在此基础上还包括预付费卡,白条和先买后付(BNPL)卡。不少支付机构还提供积分和商品券(Coupon)等功能。

除了这些支付卡以外,支付机构还研发了各类电子钱包来方便消费者完成支付。

在中国主要包括微信钱包、京东钱包、百度钱包和支付宝钱包,另外还有银联和工行、农行、中行、建行、交行和招行等各种商业银行也在提供各种钱包,甚至还有很多最新式的数字货币钱包。

在日本,主要包括PayPay,LINEPay,DoCoMoPay,AuPAY、QuoPay和RakutenPay等近20多种各式各样的钱包。

在美国主要包括PayPal,Square,Vemo, ApplePay,GooglePay和AmazonPay钱包,以及诸如Wells Fargo,Bank of America, Citibank, JP Morgan Bank等各商业银行的钱包。

这些钱包在形式上大同小异,主要功能基本上都包括:在线支付、扫码支付和余额支付,在中国,现在还有不少的钱包开通了数字货币支付的功能。

170115fb456862a6fa3b8a3d5364512e.jpeg

5.2.2 为收款人提供的功能

支付机构需要为收款人,即卖方或者商户,提供收单的功能以及收单完成后的资金处理功能。这些功能听起来简单,实际上做起来会有很多挑战。因为它的易用性和安全性会影响到海量消费者,系统的可用性和可扩展性会影响到商户日常营业的开展,具体描述这些必备的功能如下:

(1)收单功能

处于业务前端的支付收单功能。这些功能通常是以诸如POS机、扫码和生物特征识别设备这样的硬件方式出现,也可能是以软件系统集成的方式出现。例如,传统收银综合机和云端POS机等。这些硬件或者软件都是为了帮助商户能顺利达成交易,接收和处理消费者的支付请求。

(2)查询统计

处于业务后端的查询统计功能。这些功能通常是商户常用的查询功能,例如支付请求详细查询、支付请求汇总查询、每日交易对账、周期性的结算、支付数据分析报告等,这些都是商户在经营过程中必不可少的功能。从本质上讲,这些功能属于商户的后台业务运营系统MBOSS(Merchant Backend Operation System)。

(3)接入功能

除了收单和查询功能之外,支付机构也会帮助商户快速接入支付请求处理系统。这部分的接入功能需要易用性好而且安全度高,尽量不要让商户花费太多的时间和精力接入。因为该部分接口是用来接收来自于商户端的支付请求,同时向商户回传支付成功或者失败的状态信息,所以这部分功能做得好坏会直接影响商户对支付机构的信心。

(4)数据分析

根据收单请求,支付机构帮助商户完成各维度的数据分析。例如,支付请求的时间序列分析,即支付请求在每分,每小时,每天,每周,每月,每年等不同颗粒度的数据聚合。这些数据可以帮助商户深入了解自己的业务发展趋势和走向。也可以按照支付资金的来源情况分析用户的支付行为,例如,哪些钱包受消费者欢迎?哪些积分比较受欢迎?这些结论对商户在未来获客引流都有一定的启发。

5.2.3 支付机构的功能

除了要满足支付业务生态体系中利益相关方的诉求之外,支付机构还要拥有一整套用来处理支付请求及其相关业务的系统功能。这部分是支付系统的核心。按照业务发展的顺序描述这些功能如下:

(1)支付前的功能

这部分的功能也被称为KYC(Know Your Customer)。所谓KYC,是指在支付请求发生之前,支付机构了解和掌握商户真实身份的过程。KYC的主要目的是保证业务的合规性,对与支付业务而言就是要保证所提供的支付业务不会被用来洗钱和资助恐怖主义活动等违法的活动。

通常KYC所涉及的真实性检查可以通过线下物理访问商户,或者根据客户提交的申请材料,通过政府权威机构数据库来查询,最终确保商户的真实性与合规性,具体地说,这些功能包括了合约、申请、审核、批准和开通五个部分。

(2)支付中的功能

这部分功能主要发生在商户的支付业务开通之后,商户首先要与支付机构对接系统,以便把支付请求传送给支付请求处理系统进行处理。其次,这些功能还包括了支付机构接收支付请求、解析支付请求、风险管理、形成指令、发送指令、结果通知、分账算费和客户服务等活动。

这些活动是整个支付活动的核心,既包含了商户与支付相互作用的体系,也包含支付机构与银行与其他金融机构相互作用的体系。支付机构的系统把商户的支付请求,转换为银行或者其他金融机构可以理解和操作的支付指令,完成资金的交割工作。

(3)支付后的功能

在支付请求处理完成后,还有后续的环节需要继续完成。支付机构要准确地处理好商户委托收取的交易款项,以便能在规定的时间把累积的资金转移给商户。这部分的功能主要包括账务、账户、对账、结算、出款、统计和报告。支付中所完成的资金交割是在银行或者其他金融机构之间完成的,真正把消费者支付的资金转移给商户是在支付后才完成的。

所以,支付后的活动主要包括检查和确定支付中发生的支付处理活动及其相应的状态,计算出支付机构代收的备付金的数额,然后按照约定的时间和方式把备付金转移给商户。

5.2.4 与银行相关的功能

银行是当前消费者开立账户放置和存储资金的金融机构,银行的账户具有金融属性。支付机构属于非金融机构,并不能直接操作银行或者其他金融机构的账户。为了能有效地处理支付请求,支付机构必须要接入银行、卡组织和其他的金融机构。

这种接入是支付机构主动发起的API对接工作。有些支付机构把这部分功能抽象成可以反复使用的机构接入服务。如果能把机构接入部分做得灵活,不仅可以提高接入的效率,而且还能减少接入占用的资源。

这部分的功能主要包括金融机构支付接口的参数解析和转译等。支付机构与银行之间通常采用专线连接并使用硬件的加密机。除了接入之外,支付机构还会构建与银行的对账子系统,以及为了出款自动化而完成的企业网银对接。

5.2.5 为监管机构提供的功能

支付机构有义务定期或不定期地向监管机构提供支付请求活动的信息,甚至接入监管机构的系统,以完成反洗钱和打击恐怖融资的调查配合工作。这部分的功能主要是反洗钱系统,一般会有专业的反洗钱机构提供,然后集成到支付机构的技术体系中。

中国的支付机构还要依法完成与中国人民银行备付金管理系统相关联的备付金报告和集中功能。除了央行的备付金报备之外,中国的支付机构还面临着来自于公安部门、外汇管理局、人民银行的反洗钱中心、人民银行的支付结算部门,人民银行的在各地的营业管理部。

综上所述,支付机构要能够为在支付生态体系中的各利益相关方提供各种必须的业务功能,这些功能构成了支付的业务体系,进而决定了支付技术体系应该如何搭建。下图汇总展示了支付机构所需要具备的核心功能。

b035d16e4a9edae39e564eb77cf40730.jpeg

5.3 对支付技术架构的要求

不同于游戏、短信、直播、广告和电商平台。支付业务涉及资金处理,范围广而且功能复杂。支付的技术体系需要满足高可用性、高安全性、高效率和可扩展性四个方面的要求。详细描述这四个方面的要求如下。

5.3.1 高可用性

支付的技术架构必须要能够做到7*24*365不间断地提供服务,核心系统的可用性至少要能达到99.99%,也就是说每年最多只能有52.6分钟的宕机时间, 最好是99.999%。如果技术的体系架构设计得合理,运维得当,优秀的支付技术系统的可用性甚至可以与IBM主机系统相当水平的99.999%媲美,也就是说每年宕机5.26分钟。

这是一项非常具有挑战性的工作,也是非常高的标准。毕竟在资源的冗余度和高可靠性设计方面无法与IBM的主机系统相提并论。高可用性不仅仅是一个技术架构的设计问题,更需要技术管理最佳实践的有力配合。本书将在后续章节专门对此进行分析和讨论。

5.3.2 高安全性

支付涉及的是银行账户或者银行卡相关的信息 (PCI),数据和应用与资金相关,所以其价值极高,对于外界很有吸引力,深受黑客的关注。同时,在支付的过程中,还会涉及商户的法人信息,以及消费者的个人身份识别数据 (PII)。

如果这些数据出现泄漏,同样也会带来很多潜在的问题。所以支付的技术架构必须要处理好信息安全,高安全性是支付业务成败的关键。关于支付卡数据( PCI)和个人身份识别数据(PII)保护方面的有关内容,本书将会在〈第12章 支付的信息安全〉中进行详细的讨论。

衡量支付系统安全性主要看下面两个方面:

第一,系统是否已经获得必要的安全认证,对支付机构来说,最重要的就是PCI-DSS认证。

第二,系统是否已经取得公安部门的《信息安全等级保护》认证。

第三,系统是否通过定期性的脆弱性安全检查,并且不存在中高等级的安全漏洞。

5.3.3 高效率

支付的收益模式是赚取支付请求处理费用中的一个部分,所以支付的技术系统在处理每笔支付请求的时候。成本要足够低。支付的处理费一般会按照交易金额的某个比例来收取,例如1%,也就是说100元的交易可能最多只能收到1元的支付处理费用。如果不能形成规模,同时以非常高效率的技术手段自动化处理支付,则很难赚到钱。计算单笔交易成本的公式如下:

  • 运维成本:包括IDC或云服务基础设施的成本,以及维护技术平台的人员成本。

  • 支付总笔数:所有在支付系统发生的支付请求的个数,含退款和取消。

一般来说,单笔支付的技术运维成本并没有什么绝对的意义。更多的是支付技术体系内部以时间为轴线的自我对比,目的在于确保支付的技术体系可以不断地得到优化,从而提高效率降低成本。下图展示了某支付机构的单笔交易成本变化情况。

386a34fa44195adfb5ea5ebb292142cf.jpeg

5.3.4 可扩展性

所谓的可扩展性是一个架构术语,是指支付系统的架构在外部支付请求不断增加的情况下,不必修改应用程序,可以通过增加系统的资源来满足外部的请求。

在现实生活当中,支付机构所支持的各种商业活动,经常会有促销、爆款、打折等带来的海量高并发请求。这种海量的高度发会在瞬间对支付系统的计算、网络和存储资源带来巨大的冲击,甚至会因此而瘫痪并导致支付系统的服务中断。

我曾经经历过几次支付系统的严重失败情况。2015年我在中国的某宝支付工作,当时某电商平台联合了一家智能手机制造商进行打折促销活动。活动从上午10点准时在网上开始,刚开始没有几分钟,监控部门(NOC:Network Operations Center)就发现支付系统的响应非常迟缓,而且越来越慢,出现了请求排队和阻塞现象。与此同时,电商平台上骂声此起彼伏,客户服务电话被打爆。

不久,技术运维团队发现有上万笔支付请求在不到10秒钟的短时间内蜂拥而来。因为每笔支付请求都需要应用系统中的数据进行锁表以更新商户的账户,结果造成数据库无法及时响应,直至最后系统完全瘫痪。活动当然也以失败告终了。

由此可见,支付系统的技术架构必须具有良好的水平可扩展性,才能经得起大风大浪的考验。所谓良好的水平可扩展性,指的是当外部的请求增加的时候,可以通过不断增加设备来实现容量的扩展,而且这种扩展不存在任何障碍。那么,如何才能够设计和研发出具有高可用性、高安全性、高效率和可扩展性的支付技术架构呢?

9874fc4f6be576cb930fa267dc5a4c6f.jpeg

《一本书读懂支付》特别推荐,有关支付的前生后世。

评论区点赞前3获得新书一本。(文章发布后第三天00:00统计)

让你成为首批彻底搞懂支付的人!支付领域标志性著作,支付领军人物在中、美、日等4国30年经验总结,中国银联执行副总裁力荐,360°解读支付。

优惠购书链接(6.5折)点击阅读原文

可以加入技术琐话读者群,请后台回复:读者群

往期推荐:

    • 今年这情况,大家多一手准备吧。。。

    • 从管理1800人团队到退隐江湖,聊聊张雪峰

    • 整理:开源LLM,可微调的项目列表

    • 新书上市 | ChatGPT之父Sam Altman强推,国内首部顶级AI学者GPT原理解释之作

    • 别纯技术视角想问题,论ToB的N种“死”法

    • AI,多赚了1000

技术琐话 

以分布式设计、架构、体系思想为基础,兼论研发相关的点点滴滴,不限于代码、质量体系和研发管理。

相关文章:

一文说清楚支付架构

作者:陈斌 支付的技术架构是为了保障能够顺利处理支付请求而设计的结构体系。从系统的角度看,它包括了计算机系统的软件、硬件、网络和数据等。从参与的主体角度来看,它涉及交易的付款方、收款方、支付机构、银行、卡组织和金融监管机构等。要…...

【Golang 接口自动化00】为什么要用Golang做自动化?

目录 为什么使用Golang做自动化 最终想实现的效果 怎么做? 写在后面 资料获取方法 为什么使用Golang做自动化 顺应公司的趋势学习了Golang之后,因为没有太多时间和项目来实践,怕止步于此、步Java缺少练习遗忘殆尽的后尘,决定…...

Android 架构模式如何选择

作者:vivo 互联网客户端团队-Xu Jie Android架构模式飞速演进,目前已经有MVC、MVP、MVVM、MVI。到底哪一个才是自己业务场景最需要的,不深入理解的话是无法进行选择的。这篇文章就针对这些架构模式逐一解读。重点会介绍Compose为什么要结合MV…...

深入了解 LoRaWAN® B 类设备

介绍 在 LoRaWAN 网络中,终端设备以三种模式之一运行:LoRaWAN A 类、B 类和 C 类。网络只能将消息(下行链路)发送到终端设备在两个短接收窗口之一期间处于 A 类模式,该接收窗口在设备向网络发送消息(上行链路)后立即打开。然而,这些上行链路不是预先安排的,并且可以由…...

KK集团再闯港交所:引领潮流零售市场,2023年一季度业绩增势显著

撰稿|行星 来源|贝多财经 7月31日,KK Group Company Holdings Limited(下称“KK集团”)在港交所更新招股书,补充了截至2023年3月31日的财务数据等信息,继续推进上市事宜,摩根士丹利和瑞信为其联席保荐人。…...

Vue中的组件渲染

在Vue中,组件的被渲染意味着将组件的内容转换为真实的DOM元素并添加到页面上。当Vue应用启动时,根组件会被渲染,并递归地渲染其子组件。 当组件被渲染时,Vue会将组件的模板解析成虚拟DOM(Virtual DOM)的形…...

docker 保存和载入镜像

查看本机docker镜像 docker images保存镜像 docker save -o /home/space/work1/docker_qnx7.1.tar.gz a01ee6d74c36复制镜像到其他服务器 scp /home/space/work1/docker_qnx7.1.tar.gz XXXIP:/home/dell/work1/登录新 服务器操作 docker load -i docker_qnx7.1.tar.gz载入后…...

Java框架(九)--Spring Boot入门(1)

SpringBoot 2.x入门简介 学前基础 Maven Spring MVC理念 开发环境 Spring Boot官网版本介绍 https://spring.io/projects/spring-boot#learn 我们点击 Reference Doc. ,再点击Getting Started,就可以看到官网系统环境说明了 官网系统环境说明 Sp…...

2023年第四届“华数杯”数学建模思路 - 案例:随机森林

## 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林? 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法。如果用图来表示他们之…...

Redis中缓存穿透、击穿、雪崩以及解决方案

Redis中缓存穿透、击穿、雪崩以及解决方案 Redis作为一个高效的内存数据库,提供了缓存能力使得我们能够快速访问数据。然而,在使用Redis作为缓存时,我们可能会面临缓存穿透、缓存击穿和缓存雪崩的问题。接下来,我将详细解释这些现…...

系统架构设计师-软件架构设计(6)

目录 一、物联网分层架构 二、大数据分层架构 三、基于服务的架构(SOA) 1、SOA的特征 2、服务构件与传统构件的区别 四、Web Service(WEB服务) 1、Web Services 和 SOA的关系 五、REST(表述性状态转移) 六、ESB(…...

Knife4j系列--解决不显示文件上传的问题

原文网址&#xff1a;Knife4j系列--解决不显示文件上传的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍使用Knife4j时无法上传文件的问题。 问题复现 依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-…...

深入学习Mysql引擎InnoDB、MylSAM

目录 一、什么是MySQL 二、什么是InnoDB 三、什么是MyISAM 四、MySQL不同引擎有什么区别 一、什么是MySQL MySQL是一种广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是由瑞典MySQL AB公司开发并推广&#xff0c;后来被Sun Microsystems收…...

第七章:SpringMVC中

第七章&#xff1a;SpringMVC中 7.1&#xff1a;SpringMVC的视图 ​ SpringMVC中的视图是View接口&#xff0c;视图的作用渲染数据&#xff0c;将模型Model中的数据展示给用户SpringMVC视图的种类很多&#xff0c;默认有转发视图和重定向视图。 ​ 当工程引入jstl的依赖&…...

MySQL数据库——DQL操作——基本查询

文章目录 前言事前准备——测试数据整表查询指定列查找别名查询MySQL运算符条件查询模糊查询排序查询聚合查询分组查询分组之后的条件筛选 分页查询将整张表的数据插入到另一张表中 前言 MySQL数据库常见的操作是增删查改&#xff0c;而其中数据的查询是使用最多&#xff0c;也…...

Electron 开发,报handshake failed; returned -1, SSL error code 1,错误

代码说明 在preload.js代码中&#xff0c;暴露参数给渲染线程renderer.js访问&#xff0c; renderer.js 报&#xff1a;ERROR:ssl_client_socket_impl.cc(978)] failed; returned -1, SSL error code 1,错误 问题原因 如题所说&#xff0c;跨进程传递消息&#xff0c;这意味…...

知识区博主转型——兼做知识区和改造区博主!!!!!

想脱单的进来&#xff0c;一起交流如何能脱单&#xff01;&#xff01;&#xff01; 为什么——我太羡慕有对象的人了哭死&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 你是不是很羡慕别人怎么都有女朋友 别人家的女朋友怎么都那么好&#xff…...

Resnet与Pytorch花图像分类

1、介绍 1.1数据集介绍 flower_data├── train│ └── 1-102&#xff08;102个文件夹&#xff09;│ └── XXX.jpg&#xff08;每个文件夹含若干张图像&#xff09;├── valid│ └── 1-102&#xff08;102个文件夹&#xff09;└── ─── └── XXX.jp…...

【NLP概念源和流】 03-基于计数的嵌入,GloVe(第 3/20 部分)

接续上文 【NLP概念源和流】 02-稠密文档表示(第 2/20 部分)...

【React】关于组件之间的通讯

&#x1f31f;组件化&#xff1a;把一个项目拆成一个一个的组件&#xff0c;为了便与开发与维护 组件之间互相独立且封闭&#xff0c;一般而言&#xff0c;每个组件只能使用自己的数据&#xff08;组件状态私有&#xff09;。 如果组件之间相互传参怎么办&#xff1f; 那么就要…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...