欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~

作者简介:abllen,2008年加入腾讯,一直专注于腾讯计费平台建设,主导参与了腾讯充值中心、计费开放平台、统一计费米大师等项目,见证了米大师从0到1,业务营收从PC到移动多终端再到全球化的跨越过程。20+篇支付专利主撰写人。目前专注于跟团队一起为腾讯业务提供稳定高效安全的全球化个人和企业市场计费服务。

本文由 腾讯技术工程官方号 发布在云加社区!

经过海外3年建设,腾讯Midas(米大师)计费逐步构建起了一个分布式的全球计费系统,来助力公司及业内产品计费扬帆出海,走向深蓝。在刚过去的北京全球架构师峰会上,腾讯计费平台部架构师陈宁国分享了Midas在海外计费系统架构演进上的一系列思路与做法。

Midas计费,目前已经接入2000+ APP,60多万家商户,覆盖国内10+和海外40+渠道,托管账户总量200多亿,每日流水稽核500多亿条,基本上涵盖了所有常见的计费模式,如虚拟代币购买、道具、订阅、实物等,是一个全方位的一站式计费平台。

在讨论海外的计费架构演进前,先看下国内在线交易系统的简要架构。

该架构下,计费系统已具有如下能力:

1.整体多地部署,具备跨城容灾能力

2.就近接入,通过GLSB等机制,尽量将用户的请求从邻近公网入口导入计费系统,这可以明显降低用户时耗,提升体验;

3.域内系统自治,存储底层来解决必要的数据跨区域访问问题,如某些风控策略,数据必须全局共享, 底层的透明网关会根据请求信息来就决定是本地访问还是远程访问。在这个机制下,故障时一地区可在短时间内甚至无缝来承载另一地区的全部交易请求,以达成系统的高可用。

计费走向海外国际化,所要面对的首要核心问题就是地域跨度,从下图即2017-12-7日的Midas全球各区域实时支付时耗图就可以看到,内部网络单路径的时耗,经常性约200ms左右,作为对比,深圳到上海的时耗一般都在50ms以内,而实际的请求往往要经历多次路径接力,特别是从用户终端到就近接入点,耗时更久,这对系统流程控制、监控、发布等都有挑战。其次,随着部署地域的增加,不同地区的网络结构,机器软硬件环境,及机器数都会有所限制,譬如在国内, 一整套计费系统一般机器数都在百台以上,而在海外某些地区,出于业务试水等情况,机器可能刚开始只有3~5台, 那么就需要有办法将数百台机器的计费系统缩减到只需3台即可正常运行。还有就是底层存储,需要能实现跨区域数据主动动态迁移。

架构演进之一,整体网络优化。

Midas海外计费,目前主要部署在香港(HK)和加拿大(CA)两大公司自有IDC,及南北美、欧洲、澳洲的AWS,还有部分是合作伙伴机房。在这些区域间,涉及到多级骨干网,二级网络和本地运营商网络,物理路径长,时耗常不稳定,我们通过利用公司全球POP加速点的部署,结合分析海外网络结构特点,建设了8个自营的交易中心入口,并利用智能DNS远程代理方式,来优化如AWS的接入点,最终有效避开了局部经常性的网络异常,加之终端的针对性优化,如预加载,请求合并等,成功将全球17个地区单次通信平均时耗明显降低。

下图是MC的优化前后支付时耗图,可以看到优化后平均单次通信时耗都降到了800ms内。

架构演进之二, 配置、发布及数据处理

针对海外的机房差异性大的特点,我们设计了一套配置的统一推送同步系统,譬如针对合作商网络,布置中间层代理,对于不同地域,将配置打标记做差异化减少网络数据流量,并且实现应用及活动规则等细粒度配置同步,同时,还能实时获得各配置下发的进度及生效情况,最终实现的配置的跨国秒级下发。

针对海外机房众多的问题,还研发了全球发布平台,能根据各地域机房情况采取相应的最优化发布策略,最终实现即时的按需发布。

随着发布地点的增加, 监控和交易数据的实时处理愈发重要,我们构建了一个集中式的数据收集及处理平台,最终实现秒级的全球交易异常告警及数据稽核。

架构演进之三,跟随部署

计费针对海外的机房环境差异及机器数限制,采用了两项策略。

一项解决环境依赖,譬如,对能提供docker类虚拟化容器环境的,构建计费系统的镜像来部署;对不能提供虚拟化容器的,在自有的开发框架层上,直接打包开发环境的runtime,不再依赖部署机器的runtime,同时,还提供这些runtime的hook,使得框架中的app也不再依赖部署机器的runtime。最后,对于app使用的特定库,要求尽量采用静态编译的办法来解依赖。

另一项, 对于机器数量有限制的,采取灵活适配的办法,通过将大的系统模块完全微服务化来达成。微服务化后,每个系统都有一个或多个app组成, 而这些app均可以在统一的框架下运行,这样最少3台机器(考虑存储的需要)就可以部署所需要的全部功能, 并且,微服务化后还使得计费部署能根据场景灵活组合做最佳化适配。细节如下图

架构演进之四,框架与交易引擎

前面讲到要完全微服务化,随着逻辑被分拆,app增多,会面临新的服务治理的问题,一方面是服务间的访问调度,一个是服务内逻辑的可控性。

对于服务调度,我们开发了TDF框架,来实现服务间的动态路由、负载均衡、灰度、引流、流控等管理。

对于服务内逻辑,特别是计费强调高一致事务类的,我们开发了交易引擎 TDXA,通过范式定义来简化XA事务开发,如包括 TCC\ TRY_BEST\DB及几者的混合处理等,实现事务及异常处理的完备;同时引入图形化的流程管理,使得逻辑流程可以通过图检查来确保完备,还可以展示某个请求的处理过程,这使得流程更加清晰化,增强逻辑可维护性。

架构演进之五,跨地域动态迁移

在跨地域情况下,严重的时耗问题使得远程访问代价过大,这时就需要有办法能将远程访问尽量变本地化,下图是我们考虑的策略,根据用户的就近位置来决定数据归属。如对同一个账户表,如果用户位置变动是短暂行为,则仍旧是远程访问原位置数据,如果位置明确变动,则会自动做数据的平滑迁移,即短期的数次远程访问后,会将数据搬到用户新的所在位置,变成快速本地访问,这可以明显降低交易时耗,提升用户付费体验。

经多以上的这些架构调整,最终我们构建了一套全球化的计费系统, 实现如下预定目标:

1.灵活按需部署,按需快速发布、灰度、扩容,并实现高可用

2.多主中心 + 各小中心 + 集中式运营,具体为:

A)自营全球7大机房,外发部署就近8国,覆盖全球主要区域

B)4大POP加速点, 3大远程代理, 单次通信时耗降低到1s内;

C)海外已接入40个渠道,基本涵盖各区域主流渠道

D)业务接入周期从1月降低到3天,实现秒级的发布与异常告警;

E)数据跨地域动态迁移,基本做到全本地化访问,进一步降低付费时耗。

3.我们认为这是目前阶段能达到的较合理的计费体系,线上运行也表明符合预期。

结束语

经过持续建设优化,Midas米大师已成为一套完备的全球性、全场景、一站式整体解决方案。支付的持续发展有赖于付费场景的扩展,Midas欢迎各类业务的洽谈接入与合作。米大师自身也将继续追求技术的突破,不断迭代演化,为各业务营收带来更大的价值。

专题介绍

ArchSummit全球架构师峰会是InfoQ中国团队推出的面向高端技术管理者、架构师的技术大会,参会者数量1000+。其中,出品人及演讲嘉宾中高级技术专家比例占79%,90%拥有10年以上开发经验。本次“TEGer在全球架构师峰会”专题将带来TEG人在会上的系列主题分享。

相关阅读

【TEGer 在全球架构师峰会】 : 腾讯海外计费系统架构演进的更多相关文章

  1. 优云软件助阵ArchSummit全球架构师峰会

    由极客邦科技与 InfoQ 中国主办的 ArchSummit 全球架构师峰会深圳站,于 7 月 7 日 - 8 日在深圳华侨城洲际酒店举办. 本次大会特邀 100 多位国内外技术专家,与1000余名技 ...

  2. 【重磅资料】ArchSummit全球架构师峰会·2019华为云技术专场资料下载

    ArchSummit全球架构师峰会是InfoQ中国团队推出的重点面向高端技术管理者.架构师的技术会议,54%参会者拥有8年以上工作经验.ArchSummit聚焦业界强大的技术成果,秉承"实践 ...

  3. ArchSummit全球架构师峰会2017年深圳站 漫谈

    自去年6月跳槽到某CDN厂,从偏向移动端开发又回到了专注后端,关于做一个移动应用独立开发者的计划暂时搁置,但是如马云所讲: "梦想还是要有的,万一实现了呢".去年下半年辛苦加班加点 ...

  4. 【JAVA进阶架构师指南】之一:如何进行架构设计

    前言   本博客是长篇系列博客,旨在帮助想提升自己,突破技术瓶颈,但又苦于不知道如何进行系统学习从而提升自己的童鞋.笔者假设读者具有3-5年开发经验,java基础扎实,想突破自己的技术瓶颈,成为一位优 ...

  5. 5G 融合计费系统架构设计与实现(一)

    5G 融合计费系统架构设计与实现(一) 随着5G商用临近,5G的各个子系统也在加紧研发调试,本人有兴全程参与5G中的融合计费系统(CCS)的设计.开发.联调工作.接下来将用几篇文章介绍我们在CCS实现 ...

  6. IOS架构师之路:我对IOS架构的点点认识(大纲)

    1.今天我鼓起了勇气,想纪录自己对IOS架构学习成长的点点滴滴. 从事IOS开发也有几年的时间,从刚開始最主要的语言.界面.逻辑,再到后面复杂点的线程.数据处理.网络请求.动画,最后到最复杂的底层音视 ...

  7. 架构师Jack专访:全面认识软件测试架构师

    ◇ 测试架构师的职责 测试的职业通道基本是管理线和技术线两条路. 管理线主要的职责:更多是项目管理和资源管理. 技术线主要的职责:更多是技术管理和业务知识. 软件测试架构师更多就是技术线的带头人.管理 ...

  8. Java架构师必看,超详细的架构师知识点分享!

    在Java程序员行业中,有不少Java开发人员的理想是成为一名优秀的Java架构师,Java架构师的主要任务不是从事具体的软件程序的编写,而是从事更高层次的开发构架工作.他必须对开发技术非常了解,并且 ...

  9. iOS 系统架构及常用框架(iOS的系统架构分为四个层次)

    1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多 2.iOS的系统架构分为四层,由上到下一次为:可触摸层(Cocoa Touch layer).媒体层(Media l ...

随机推荐

  1. Linux命令学习备忘

    格式:   命令:原理:实践及截图 1.su <user> 执行该命令,需要输入password,它是<user>中定义的用户的password,即,要变换成的用户的passw ...

  2. HTML的用法

    今天学习了HTMIL,标签.这个东西吧,没什么很难的,就是得多练多打.今天的一些个人心得: 标签:成对存在的名称 标签注意:1.标签名放在<> 2.标签成对存在的 3.结束标签有斜杠/ 例 ...

  3. 【源码解析】Sharding-Jdbc中的算法

    Sharding-jdbc中的很多地方涉及到算法,比如主从配置这块.分库分表这块.本文主要从源码角度介绍下,目前主要包含哪些算法,以及这些算法的内容. 一.读写分离(主从配置) 这块的代码主要在cor ...

  4. linux top结果保存到文本上

    [root@web-DB script]# cat top.sh # !/bin/bash today=`date +%Y%m%d%H%M` yesterday=`date -d "1 da ...

  5. SQL 之存储过程

    存储过程 是用来执行管理任务或应用复杂的业务规则, 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 存储过程的优点 存储过程已在服务器注册 执 ...

  6. 《java.util.concurrent 包源码阅读》10 线程池系列之AbstractExecutorService

    AbstractExecutorService对ExecutorService的执行任务类型的方法提供了一个默认实现.这些方法包括submit,invokeAny和InvokeAll. 注意的是来自E ...

  7. Servlet之初始化参数和传递数据(ServletConfig,ServletContext )

    ServletConfig 容器初始化一个Servlet的时候,会为这个Servlet建一个唯一的Servletconfig的对象(Servlet的配置对象) 容器会从部署的描述文件(web.xml) ...

  8. C++PRIMER 阅读笔记 第三章

    本章主要介绍 string vector 和 bitset, 不能贪多,现在本文主要介绍 string 与 vector 头文件中最好不要使用namespace std, 因为头文件会直接被预处理器放 ...

  9. Shell中处理方法返回值问题

    同步发表:http://blog.hacktons.cn/2017/12/13/shell-func-return/ 背景 通过shell编程,写一些工具批处理的时候,经常需要自定义函数.更复杂点的情 ...

  10. Common Data Service (CDS) 初探

    作者:陈希章 发表于 2017年12月16日 前言 Common Data Service(以下简称为CDS),通用数据服务是一个创新性的基础功能,这是微软试图打造一个全新的基于SaaS模式的数据服务 ...