《胡宇-rust分布式账务系统.pptx》由会员分享,可在线阅读,更多相关《胡宇-rust分布式账务系统.pptx(27页珍藏版)》请在三个皮匠报告上搜索。
1、第三届中国第三届中国Rust开发者大会开发者大会Rust构建分布式账务系统在Fintech公司落地Rust项目的经验分享Airwallex胡宇Airwallex我们是一家跨境支付领域的Fintech独角兽关于我们E2轮Fintech独角兽,业务遍布全球关于我们:Airwallex墨尔本墨尔本新加坡新加坡伦敦伦敦深圳深圳香港香港北京北京旧金山旧金山上海上海东京东京班加罗尔班加罗尔阿姆斯特丹阿姆斯特丹西安西安马来西亚马来西亚币种50+国家130+办公地点191300+员工提供高效,低成本的数字银行服务关于我们:Airwallex从设计架构到实现细节项目介绍分布式账务系统Fintech互联网互联网正
2、确性bug=资损bug不可怕,快速迭代可靠性丢数据=资损允许数据丢失性能超低延迟+高吞吐超高吞吐交易日志审计,监管调试使用分布式账务系统Fintech 领域中的软件与互联网软件的不同需求分析支付处理:转账冻资/解资账户限额批处理事务正确性:无双花或少付审计监管:交易日志不可篡改,交易历史可回溯条件事务:根据一定的条件决定事务执行与否高可用:在部分节点失效的情况下,依旧可以提供正确的服务超低延迟:实时交易,超低响应延迟水平扩展性:利用分布式事务实现钱包集群的的水平扩展,应对高达100万TPS的流量可演化性:业务逻辑与底层API解耦,当业务发生改变时,底层API不用改变分布式账务系统设计理念-Ru
3、st是我们可靠的基石分布式账务系统存算分离API解耦读写分离层级账号Rust事务层与账户层分离独立水平扩展CQRSEvent Sourcing针对读场景,写场景分别优化稳定的底层API灵活的顶层API树状结构聚合查询正确性:内存安全,线程安全可靠性:Raft共识算法 raft-rs 高性能:关键路径无锁单线程顶层架构Gateway 路由层业务API到底层API的翻译产生转账计划Marker 事务层使用业务id进行路由执行转账计划分发账户变动请求Auticuro 账户层 使用账户id进行分区执行账户变动请求更新账户余额分布式账务系统性能展示8 vCPUs*5 节点SSD 磁盘当 TPS=10K
4、时,延迟 P99 20ms分布式账务系统高吞吐,超低延迟账户层:Auticuro分布式账务系统账户层:Auticuro1.接受转账请求,转换成eventsTokio+Tonic分布式账务系统12341.接受转账请求,转换成events2.将events送入Raft共识,等待events被多数节点保存共识:基于raft-rs的可靠消息队列存储:Rocksdb with Rust账户层:Auticuro分布式账务系统12341.接受转账请求,转换成events2.将events送入Raft共识,等待events被多数节点保存3.处理被共识的events,更新状态机(账户表)去重&更新余额关键路径采
5、用无锁单线程账户层:Auticuro分布式账务系统12341.接受转账请求,转换成events2.将events送入Raft共识,等待events被多数节点保存3.处理被共识的events,更新状态机(账户表)4.回调完成请求账户层:Auticuro分布式账务系统1234事务层:Marker分布式账务系统A,B,C在不同分区执行一个事务的TCC转账计划转账计划有向无环图节点是一个任务边是依赖关系事务层 Marker 负责执行计划ACID 保证依赖控制条件执行调度账户变动请求跨分区转账分布式账务系统拥抱开源github:https:/ 技术选型心路历程对新技术持开放态度Kotlin:简洁,JVM
6、,GCRust 引入 Linux 内核Android 支持 Rust积极探索新技术对金融科技的改变对于核心领域系统,追求极致性能,使用 RustAirwallex业界业界共识共识厉兵秣马-人才培养 Rust 的吸引力更加容易吸引对技术有追求的人才Rust 学习曲线Java背景,C+背景的同事学习rust程序设计1-3 月可以熟练转型使用RustRust 与原有技术栈的融合Kotlin:偏业务,适合快速迭代Rust:偏基础架构,适合精心打磨gRPC:跨语言跨平台通讯心路历程真刀实枪 开发调试部署 IDE JetBrains+Rust 插件Gitlab CI/CD心路历程真刀实枪 文档工具 文档生成 CI/CDgit page 作为文档心路历程吐槽点Nightly 版本编译器:tikv,raft-rs无官方库,官方库支持不成熟Kafka(第三方:https:/ Cloud Platform(GCP),基于C语言的wrapper,容易编译出错心路历程欢迎加入Airwallex 联系邮箱:Thank you!