无数据库支付处理:事件溯源的革命性应用

2024-12-21

支付工程师Alvaro Duran在《支付工程师手册》中提出了一种颠覆性的支付系统设计理念:无需数据库。文章指出,异步编程的广泛应用源于对数据库的依赖。通过事件溯源,系统将支付过程中的每一个步骤都作为事件记录,而非直接存储状态。这些事件暂时存储在内存中,系统根据事件流重建支付状态,从而无需持久化存储。这种方法借鉴了高频交易领域的技术,实现了高性能和高可靠性,即使系统宕机,通过热备份也能迅速恢复。文章以支付流程为例详细阐述了这一理念,并展望了其在未来支付系统中的应用前景。

阅读更多

工程师在构建账本时不能犯初创公司常犯的错误

2024-11-29

本文作者讲述了其在一家初创股票交易平台工作时,因团队没有构建复式记账系统,导致每笔交易损失几美分,引发用户不满,最终不得不手动补偿的经历。作者强调了复式记账系统的重要性,并详细解释了其数据模型,包括账户、分录和交易,以及它们之间的关系和状态变化。文章还探讨了记账的上下文重要性,以及会计系统和工程系统之间的区别与联系,最后,作者询问读者是否会购买一本关于构建面向未来账本的书籍。

阅读更多
未分类 账本设计

如何构建99.999%可用性的支付系统

2024-11-27

本文探讨了如何构建高可用性的支付系统,重点关注数据库层面的优化。作者指出,像Stripe那样99.999%的可用性需要现代存储技术和精心设计的分布式系统。文章介绍了TigerBeetle数据库的优势和采用难点,并提出支付工程师需要持久性无关性,以便快速切换数据库。作者认为,通过事件锁机制和只追加事件的策略,可以避免脏读、不可重复读和幻读等问题,从而在服务器端实现类似MongoDB的持久性无关性,最终提升支付系统的可用性和性能。

阅读更多
未分类

Airbnb 如何实现精准一次支付

2024-08-18

本文探讨了 Airbnb 如何在其支付系统中实现“精准一次支付”。由于分布式系统中消息丢失的可能性,精准一次支付在技术上是不可能的。Airbnb 通过结合客户端重试和服务器端幂等性来解决这个问题。服务器使用缓存和互斥机制来确保每个请求只处理一次,而客户端则遵循一致性、安全性和责任原则来处理失败的请求。

阅读更多
未分类

令人震惊的真相:优步如何在生产环境中测试支付系统

2024-08-07

软件工程师 Alvaro Duran 在本文中揭示了优步如何进行支付系统测试。与大多数公司依赖模拟环境不同,优步选择直接在生产环境中进行测试。其核心策略是将每次部署视为实验,并通过监控关键业务指标来验证假设。优步会选择一个具有代表性的地区进行小范围测试,例如 GooglePay 在葡萄牙的试点,以便及早发现并解决问题。Duran 认为,虽然前期测试很重要,但真正的考验在于真实用户和真实交易,这与算法交易的原则相似。

阅读更多
未分类 生产环境测试

原型的语言

2024-06-20

本文探讨了编程语言在支付系统中的演变,指出曾经占主导地位的Java正被Python取代。作者以COBOL的衰落为例,说明技术革新和使用场景的变化导致旧工具不再适用。Python作为一种快速原型开发语言,在当今追求速度和灵活性的技术环境中更具优势,而Java则显得笨拙且受限于传统模式。

阅读更多
未分类