用优步工程重新架构现金和数字钱包支付

0.
用优步工程重新架构现金和数字钱包支付

优步正在为印度开发一个支付平台,使运营团队能够更无缝地向司机收取和分发现金和数字钱包支付。在这篇文章中,旧金山的软件工程师Yijun Liu回顾了他在班加罗尔与优步印度工程团队一起设计这个改进的支付系统的经历。

作为优步支付效率团队的成员,我负责在世界各地的运营团队开发支付系统。我们以不同的方式运行的每个地区不同,因此,没有两个支付系统完全相同。

信用卡的使用在印度和其他东南亚国家并不常见,因此优步应运而生现金支付系统在2015年使我们的服务更能访问这些市场。使现金支付呈现出新的挑战,从确保骑手在处理和收集司机委员会的手头上有现金。

数字钱包是印度车手的第二次付款选项。去年10月,货币恶魔化导致数字钱包用法T.o飙升,但许多提供者尚未成熟并稳定在当地市场。与此同时,识别验证技术,如两步认证和一次性密码,即使习惯使用现金交易的骑手也会复杂化支付经验。虽然数字钱包是高效且性能的,但仍然从骑车经验的角度来改进余地。

自2017年1月以来,我一直在班加罗尔的优步印度工程公司工作,帮助团队重建和发运我们的印度支付系统。在下面的章节中,我将描述我们之前的系统,概述其问题,并讨论我们如何通过为我们的运营团队和司机构建一个更无缝、更方便的支付平台来解决这些问题。

旧金山的工程师Yijun Liu在班加罗尔的Uber India Engineering Working,为印度发货。

委员会收藏在印度

由于硬币在印度市场发挥着巨大作用,因此优步班加罗尔的主要重点是优化现有委员会收集系统进行现金交易。虽然现有系统在世界某些地区运作良好,但印度跨越的付款方式的现金交易和多样性需要更加可扩展和可配置的解决方案。

概念上,优步的支付系统像数据流水线一样运作,该数据管道将在数字货币中将旅行付款(现金)转换为通过直接存款或数字钱包支付司机的支付系统收集。

图1:模拟恒河的流动,我们的支付数据管道由一个事件(乘车或交付请求)组成;订单(事件的货币化表示);和解(就某一支付人/受款人之间的交易作出和解或争议的决定);以及收款/付款(通过电子钱包或直接存款向司机收款的行为)。

恒河流动,从高层次上说明了这个管道。恒河起源于喜马拉雅山脉的一条小溪,然后流经多个城市rishikesh.哈利瓦尔阿拉哈巴德, 和瓦拉纳西。在每一阶段,恒河长得更宽,直到它在孟加拉湾的印度洋排放到印度洋。

类似地,支付系统数据流水线从基本的事件信息(如行程持续时间和距离)开始转换为Money Order详细信息,然后转换为结算策略,最终通过支付服务提供商进行实际收集或支付,完成交易。当作为付款选项中的现金被考虑到等式中,管道变得更加复杂,必须以不扰乱系统流动的方式纳入其中的第三方数字银行服务。

在等式中加入现金

当我们在印度首次推出现金回收系统时,我们从乘客那里收取款项,并通过司机支付系统向司机合作伙伴支付。然而,最近,优步的全球增长和新的业务需求呼吁修订后的收集管道用于现金旅行委员会。要构建本市管道,我们必须使用驾驶员支付管道连接现金收集管道,并将两台之间的几个步骤联系起来。

这一壮举最不可能具有挑战性:作为一个类比想象一下,通过挖掘运河加入恒河与恒河加入南德河河;如果不维持这些路线,剩余的水很容易淹没它们。鉴于印度和东南亚的现金交易金额,现金支付系统不可避免地与交通泛滥。除此之外,每个地区根据驾驶员实践和业务需求略有不同地处理现金收集。

我们的旧付款系统无法处理现金佣金,有两个原因:

  1. 从系统的角度来看,驱动程序和骑手管道之间的额外步骤可能导致数据不一致。当系统将状态保存到数据库时,发送通知,日志条目,并调用下一个级别服务,即使这些动作通过Trick-Catch块的层异步发生,繁忙的流量中的部分发生故障也可能导致不一致的数据。
  2. 从商业角度来看,印度的城市具有巨大的现金支付场景。它们在每次旅行票价,总旅行量,收集渠道和现金处理偏好时变化。由于此类差异,城市运营团队需要多才多艺的方法来定义和执行其收集策略。由于旧系统更加植根于其收集实践,因此它无法用于自定义方案。
图2:当副作用被异步触发时,可伸缩性问题就出现了。

如图2所示,事件通过以下收集管道流过:(1)将事件写入数据库,(2)触发多个副作用(如发送电子邮件或短信)异步,(3)调用下一个服务的界面以询问进一步的操作,并记录这些交互。虽然这个流量听起来逻辑,但这个设计有三个陷阱:

  • 当同时发生太多调用时,可能会淹没下游服务并导致超时。无论下行故障如何,系统都会将数据写入数据库,这可能会导致(1)和(3)之间的数据差异。
  • 类似地,异步调用触发副作用(2)也可以压倒系统和超时。这可能会禁止将SMS通知传递给驱动程序,从而防止它们接收支付收集指令。
  • 由于对下一个服务(3)的调用通常是异步,因此无论第三个连接点中的结果如何,系统都会写入日志条目,因此无论这种日志记录行为如何,它都不保证成功。

构建下一代支付系统

为了解决这些问题并部署一个更先进的支付系统,我们需要用更新的架构来重建我们的系统流程,并在计算附加费用方面设计出更大的灵活性。

建筑物重写

我们对第一个问题的架构解决方案是用排队反转呼叫流程。而不是依靠服务一次调用所有方法,而不是一次调用所有方法独立服务侦听到一个接一个的数据库事件。对于每个成功的写操作,该服务将副作用指令写入队列,然后副作用和下游服务都只是侦听,以自己的速度获取数据。

图3:我们的新支付系统架构通过排队反转事件调用流,防止流量超时系统。

在我们的新架构中,突然的交通速度仅暂时充满了队列,但从不失去任何数据或未能执行重要的行动。该设计改变了支付系统架构,如图3所示。

现金收集定制

为了解决印度的现金收集偏好的多样性,我们需要了解这些策略在地区之间不同的方式,包括每个驱动程序的所需收集金额和频率以及运营团队触发副作用的顺序。

如果我们直接编写自定义收集条件的业务逻辑,以进入后端代码,我们必须为每个区域开发不同的流量,这两次都是时间和成本无效。每次一个地区都需要创建,读取,更新和删除(CRUD)它的收集策略,我们将需要工程师编写和部署新的代码,进一步降低我们的效率。

为了解决这些条件,我们部署了一个配置图层以表示所有业务逻辑,并实现每个副作用和状态转换为单位模块。从后端模块代码中的顶部配置层中,将业务逻辑分离,从而使它们均可轻松重用作为可移动型系统中的组件。现在,每当操作团队需要修改其区域的集合流时,它们只需要更新配置层。当配置更新时,收集系统根据该配置的单元模块重新加载该区域的流程。下面,我们展示了我们的新收藏系统机制:

图4:我们的新系统能够按区域/配置杂耍多副作用。

我们的更新还解决了面向用户的问题。在旧的系统中,我们依靠短信和电子邮件来通知我们的司机收集状态,而没有在应用内整合本地钱包和银行账户。虽然短信和电子邮件是一种可行的方式来与我们的司机沟通更新在世界其他地方,但用户可能会遇到限制在印度和东南亚的各种原因,包括:

  1. 如果当地电信公司将其误解为欺诈,他们不会收到我们的短信。
  2. 它们无需轻松访问电子邮件或不经常检查它们。
  3. 他们需要登录电子钱包查看余额,这可能是一个耗时又不方便的过程。

为了解决这三个问题,我们将驱动钱包集成到合作应用程序本身,减轻了必须在两个应用程序之间切换以查看余额的不便。

此外,我们还优化了交流渠道,从短信和电子邮件转向本地化的应用内部通知和每个区域的应用内部页面。这个新功能使得与司机分享关于收款的重要信息变得更容易、更无缝。

印度以外的工程支付

这些后端和前端对我们的现金支付系统的变化提供了优步建立印度和东南亚的灵活运输解决方案所需的灵活性和用户友好性。

Uber India Engineering的现金支付和收集系统的重新设计远远超出了我们自己用户的影响;我们的付款技术的创新是数字化印度付款世界的最前沿。除了构建我们的付款系统外,我们的班加罗尔团队还专注于司机增长,骑手经验,车辆技术和地图项目,所有具有挑战性-但奖励-对印度巨大和新兴市场影响巨大影响的领域。

班加罗尔义金和优步印度工程团队从重新架构付款中休息一下,为相机微笑。

有兴趣致力于突破规模极限的工程挑战吗?考虑申请职务在Uber印度工程团队。

Yijun Liu是优步支付效率团队的软件工程师,Mrina Natarajan是优步开发者体验团队的技术项目经理。

注释