来源| 阿里云峰会

文| 技术领导力社区

本文整理自,阿里高级技术专家-许文奇在2019阿里云峰会上的分享《技术中台-分布式架构在蚂蚁金服的实践》,结合技术领导力社区架构专家的点评和解读,全面解析阿里技术中台的架构实践。

一、分布式架构的优势和理念

01

传统单体架构特点

(本文图片来源:阿里云峰会 版权归作者)

通常一个初创型项目,都是从单体架构开始的。

优点就是快,易于开发、测试、部署,一个WAR包发上生产就完事了。

缺点也很明显,因为所有模块都在一个程序包里,导致编译慢、启动慢、代码冲突,每次合并代码的时候都是恶梦,发布成功率?完全靠运气。

02

微服务架构 vs 单体架构

(点击图片放大)

复杂度较小时采用单体应用生产效率更高,复杂度到了一定规模时单体应用的生产效率开始急剧下降,这时对其进行服务化拆分才是合算的。

微服务架构之所以得到广泛认可,源于对业务多变性的不可预测,微服架构能够不断的自演化 ,进而快速适应业务变化。

03

模块化开发

微服务架构,从业务顶层设计开始,按照业务线进行模块拆分,从表现层、逻辑层、数据层进行独立的剥离单体应用。很多企业都经历过单体应用到服务化应用的拆分过程,这里要注意业务的连续性、数据的完整性问题。

04

微服务架构的负载均衡优势

以前通常用LVS、F5作为接入层的负载均衡服务,主要提供限流、负载、安全等等。

在微服务架构中,由网关作为接入层,提供轻量级的负载均衡、协议转换、鉴权等服务,微服务通常有服务治理框架,如DUBBO等,提供服务治理、服务注册、服务发现、隔离等。

05

数据访问瓶颈解决方案--数据库垂直切分

分布式架构是如何解决数据访问瓶颈的呢?首先是数据库的垂直切分,比如,按用户、交易、账务拆分到独立的数据库当中,缓解了数据存储和访问的压力,当然也可以做主备库,进行读写分离的。

06

数据访问瓶颈解决方案--数据库水平切分

其次,进行数据库的水平切分,比如交易数据库和数据表的数据量太大,可以按交易时间进行分表、分库,拆分表的数量计算方法见上图。

拆表拆库是解决数据访问、存储问题,但是会给数据查询带来很大麻烦,比如跨多表、多库的复杂查询场景。解决的办法很多,通常有:用ES进行复杂查询,筛用ID再到库里捞数据(即复杂查询拆分多次查询),或用分布式海量数据库方案,不去做太细粒度的拆分库表,如下面会提到的OceanBase。

二、分布式架构实践举例--分布式TA系统

07

传统TA系统架构

传统TA系统架构,清算串行效率低,无法通过增加机器线性扩展性能,一般使用大事务,出现问题全部回滚。

08

分布式TA系统架构

分布式TA系统架构,结构更合理,也更复杂。分成了:接入层、业务服务层、SOFAStack层、LAAS、运维工具链、治理控制。

接入层:包括协议转换、访问控制、文件传输、运维工作台。

业务服务层:即业务核心逻辑服务,如:账户、交易、账单、清算等。

SOFAStack:蚂蚁金服的通用服务组件,许多都开源了,包括:微服务框架、分布式事务、任务调度、消息队列、数据代理、链路跟踪等。

分布式TA系统的需求攻克的技术难题。分布式清算任务如何高效实现?分布式下,加大应用处理出错可能性,那清算任务如何确保正确性?下面会谈谈如何解决。

09

分布式任务调度平台

分布式任务调度平台,支持:

自定义分片,高效利用集群计算能力。

执行中可对任务进行暂停/续跑,强制取消。

任务失败重试机制,保障整体计算任务成功。

10

清算任务调度

清算任务调度,整个架构分为:1)任务拆分,即申请交易文件,按一定的逻辑进行数据分片;2)任务执行,将执行处理过后的数据,存入流水库;3)核心服务,包括交易、清算、账务、账户等。

11

清算的容错和核对机制

清算的容错和核对机制,包含:日初始化、文件导入、清算处理、收益计算、份额调整、清算导出、二次清算、收益导出。

每个环节都可以冲正重做。

可以按文件、用户、备份点进行作业回滚。

优点是,任意流程可回滚、精准逐笔核对,支持按中台用户回滚,缩短了清算时长。

三、分布式架构下如何保障系统的可靠性及稳定性

02

灰度发布机制

灰度发布机制,流程包括:beta发布、分组发布、灰度引流、全量发布。

清算灰度,可以灵活的按用户维度抽取分片,缩短灰度时间。

13

线上全链路压测

线上全链路压测,通过数据访问代理,压测数据进入线上影子表,不影响正常业务数据,全链路压测特点有:

1、压测环境复用生产,结果可靠;优于线下。

2、压测数据打标无法进入生产环境,表级隔离。

14

OceanBase高可用机制

OceanBase高可用机制,基于Paxos协议的典型三副本部署:

1)数据强一致性;

2)持续可用;

3)主备自动切换;

4)单机、机房、城市级故障:不停服务,不丢数据;

OceanBase分布式数据库方案,优于商用数据库的主备库方案,主要体现在:分布式数据库,写事务到达超过半数库,少数库异常不影响业务,两地三中心多活,灰度升级。

15

OceanBase常用部署方案

OceanBase的部署方案有:

同城三机房,同城多个核心机房,相距30公里以内,延迟约在0.5~2ms之间;

两地三中心,正常情况下和同城三中心部署的延迟一致,其中一个城市的一台ObServer 宕机会增加异地同步延迟。

16

同城双活容灾架构

同城容灾双活架构,平时以主机房为主,承载日常交易,少量交易走备机房,架构特点是:

1)同机房优先,避免跨损耗

2)对应用无任何侵入

3)像单机房一样开发部署应用

4)容灾自动切换

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

阿里专家讲中台:技术中台-分布式架构在蚂蚁金服的实践相关推荐

  1. React 技术栈在蚂蚁金服的实践

    在2017在线技术峰会"阿里开源项目最佳实践"上,蚂蚁金服前端工程师崔晓斌为大家带来了"React 技术栈在蚂蚁金服的实践"的演讲.主要从研发的模式变迁开始说起 ...

  2. 开放计算架构:蚂蚁金服是如何用一套架构容纳所有计算的?

    蚂蚁金服在过去十五年重塑支付改变生活,为全球超过十二亿人提供服务,这些背后离不开技术的支撑.在 2019 杭州云栖大会上,蚂蚁金服将十五年来的技术沉淀,以及面向未来的金融技术创新和参会者分享.我们将其 ...

  3. 从平台到中台 | Elaticsearch 在蚂蚁金服的实践经验

    来源 | 授权转载自金融级分布式架构公众号 编辑 | Vincent AI 前线导读:善仁,蚂蚁金服通用搜索产品负责人,通用搜索目前拥有上万亿文档,服务了上百个业务方,是蚂蚁内部最大的搜索产品.其所在 ...

  4. 从平台到中台 | Elasticsearch 在蚂蚁金服的实践经验

    善仁,蚂蚁金服通用搜索产品负责人,通用搜索目前拥有上万亿文档,服务了上百个业务方,是蚂蚁内部最大的搜索产品.其所在的蚂蚁中间件搜索团队专注于构建简单可信的搜索产品,是阿里经济体中最大的搜索服务提供商. ...

  5. 从平台到中台:Elaticsearch 在蚂蚁金服的实践经验

    https://www.infoq.cn/article/IfwCVj-qJ4TU0dmBZ177 本文根据他在 2018 Elastic 中国开发者大会的分享整理. 大家好,我是来自蚂蚁金服中间件团 ...

  6. 移动测试架构演进 | 蚂蚁金服自动化用例管理探索

    作者:周力(问瑾),蚂蚁金服技术专家.本文围绕支付宝面向移动应用日志复杂的测试工作,如何思考演进出成熟稳定的测试用例管理展开讨论和总结. 相比普通测试用例,自动化用例在形式.实现方式及内容上有一定的特 ...

  7. 架构系列---蚂蚁金服面对亿级并发场景的组件体系设计

    今天,我主要想和大家分享一下移动领域基础组件体系,内容大致可以分为四大块,第一块是标准移动研发所需的基础服务体系,第二块是支撑亿级并发的核心组件"移动接入"的架构演进过程,第三块是 ...

  8. 蚂蚁金服的技术架构,到底有多牛?

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  9. 多个mapper的事务回滚_揭秘蚂蚁金服分布式事务 Seata 的AT、Saga和TCC模式

    作者| 屹远(陈龙),蚂蚁金服分布式事务核心研发 . 导语 本文根据 8月11日 SOFA Meetup#3 广州站 <分布式事务 Seata 及其三种模式详解>主题分享整理,着重分享分布 ...

最新文章

  1. 20.Feature分支
  2. Shiro SpringMVC 非maven HelloWorld
  3. POJ2446 二分匹配
  4. 关于面向对象的的设计原则的使用
  5. python中关键字 表示空类型_Python小知识:如何在Python 3中转换数据类型
  6. Spring 使用注解@DependsOn控制Bean加载顺序
  7. IOS 控件 - Swift 集成 IOS 自带 API 扫描二维码
  8. Java 三大特性 —— 多态
  9. 使用vue+webpack从零搭建项目
  10. CSDN-Markdown--基本语法功能效果
  11. Programming pearls 编程珠玑的题目
  12. ae2020不支持的视频驱动程序_英伟达发布支持GeForce GTX 1660 SUPER的新Linux图形驱动程序...
  13. java cp classpath_java -cp、java -jar、java -classpath
  14. python scatter参数详解_Python中scatter函数参数及用法详解
  15. 百度谷歌一起搜 - 百Google度 - Chrome插件
  16. 重装系统后必装的5大软件,让你大幅度提升工作效率
  17. 想再考一个教师资格证,相同的科目需要重考笔试吗?
  18. 袭扰战术_战术十必不可少的八
  19. python int() round() floor()函数的比较
  20. 【MongoDB】01、MongoDB基础

热门文章

  1. 排序算法 时间复杂度+空间复杂度 总结
  2. 【Java】排序算法 之 【归并排序】 总结
  3. poj2186(强连通分量)
  4. python画层次结构图_Maptree-层级结构数据展示的绝佳尝试
  5. springboot+shiro使用权限注解问题_无法使用注解_使用注解无法跳转无权限页面
  6. python交互式窗口怎么换行_Python多版本情况下四种快速进入交互式命令行的操作技巧
  7. 原生js实现点击按钮切换全屏!
  8. Linux下查找Nginx配置文件位置
  9. 酷!一键构建我自己的PHP框架的开发环境
  10. instanceOf,isInstance,Class,isAssignableFrom区别比较