详解网商银行“三地五中心”数据部署架构(1)

简介: 详解网商银行“三地五中心”数据部署架构(1)

数据库部署架构是容量、可用、性能、成本多方面权衡结果,网商银行基础架构从建行之初满足快速业务响应的分布式架构,到单元化架构的落地,再到云原生时代,其中伴随着业务的快速发展,数据库的部署架构也经过多个版本的迭代发展。

容灾方面,从最初的“两地三中心”,具备机房级容灾,不具备全部的城市级容灾,经过扩容建设发展到现在的“三地五中心”。


具体部署方式如图3-1-1所示,采用3-2-1的部署方式,任意一个城市的故障,通过选主(选择主库)实现主库的切换完成容灾。


image.png


分布式业务应用为支撑业务容量的快速发展和业务的多样性,持续进行微服务的拆分改造,其中数据库也随着进行扩容、拆分、迁移。数据库之间的隔离性、集群故障的业务影响面愈加重要,如何合理规划业务集群,实现业务的故障影响面可控,是发展过程中一直面临的挑战。


分布式数据库


分布式数据库中的数据在逻辑上是一个整体,但物理上分布在计算机网络的不同节点上。网络中的每个节点都可以提供数据服务,可以通过中间件或者协同服务器实现协调,以代理的形式完成数据库访问的策略控制。图3-1-2所示为一种集中代理方式,通过协同服务器实现多应用的数据读写访问,在这种方式中应用不感知分布式的多个节点,通过协同服务器进行读写节点的路由选择、读写分离控制、权限控制等。


image.png


分布式数据库增加了系统交互的复杂性,为系统引入了更多潜在的失败环节,但分布式系统带来的好处也非常明显。


(1)持续可用。分布式数据库对同一份数据维护多个副本,当某个副本出现故障时,其他副本还能继续正常提供服务。为避免多个副本同时服务同一份数据带来的数据一致性问题,引入分布式协议Paxos或Raft实现数据的一致性。以系统包含3个副本(1个主库,2个备库)为例,每次写事务都需要让主库和其中一个备库同步,在主库出现故障时,至少一个备库有完整的数据,数据不会丢失,可通过分布式协议完成选主,继续提供写服务。在任意一个备库出现故障时,主库仍然可以将数据同步到另一个备库,形成“多数派”,保证数据不会丢失。


(2)可扩展。通过对集群节点的扩容,完成读写容量的线性扩展,支撑大促的突发流量


(3)低成本。分布式系统通常只需要采用廉价的普通服务器替代高端服务器与高端存储设备,通过自动容错能力实现运维成本的降低。



分布式事务与数据一致性


处理事务是数据库系统的基本能力,通过事务保证数据的准确性与一致性,从而减少了上层应用的复杂度。但数据库系统为实现事务,也进行了一定的性能牺牲。事务必须具有ACID属性。



  1. lA,原子性(Atomicity):事务中多个操作要么全部完成,要么全部未完成,不存在中间状态。


  2. lC,一致性(Consistency):事务必须始终保证系统的一致性状态,不管在什么时间,并发事务有多少。


  3. lI,隔离性(Isolation):为了防止事务操作的混淆,必须使请求序列化,使得在同一时间仅有一个请求作用于同一数据。


  4. lD,持久性(Durability):事务完成以后,事务对于数据的变更持久保存,不会进行回滚。


分布式事务通常是在多个节点的机器上运行,运行时有进行RPC的过程,相对于单系统数据库,在保证事务的原子性上会遇到更多的异常环节,存在更多的恢复与回滚情形,当前大多通过两阶段提交协议进行解决。分布式事务提交到多台服务器上进行处理时,每台服务器都需要进行日志的记录,当事务出现失败时,对应的服务器都需要进行回滚操作,典型的分布式事务处理过程。


图中左侧是协调者状态机,右侧是参与者状态机。协调者是驱动整个事务提交流程的主体,它可以在任意机器上,当然也可以和其中一个参与者在同一台机器上。参与者是真正的事务操作的执行者。协调者首先通知所有的参与者持久化(图中的prepare命令),当参与者使事务的日志处于持久化状态后会回复prepare OK,当所有参与者都回复prepare OK后,意味着整个事务完成了。


然后协调者会写下事务commit的日志,并且发送commit给所有参与者,如果其中任何一个参与者返回失败(即abort OK),那么协调者就会认为事务是失败的,记下事务回滚的日志,并且发送abort给所有参与者。在这个流程中,分布式事务提交的延迟是两次写日志(参与者写prepare日志,协调者写commit日志)的延迟和两次通信(协调者通知参与者prepare,协调者通知参与者commit)的延迟。


image.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
存储 SQL 关系型数据库
ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
ClickHouse的核心架构包括执行过程和数据存储两部分。执行过程涉及Parser与Interpreter解析SQL,通过Column、DataType、Block、Functions和Storage模块处理数据。Column是内存中列的表示,Field处理单个值,DataType负责序列化和反序列化,Block是内存中表的子集,Block Streams处理数据流。Storage代表表,使用不同的引擎如StorageMergeTree。数据存储基于分片和副本,1个分片由多个副本组成,每个节点只能拥有1个分片。
91 0
ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
|
3月前
|
缓存 安全 API
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现
公司对外开放的OpenAPI-Server服务,作为核心内部系统与外部系统之间的重要通讯枢纽,每天处理数百万次的API调用、亿级别的消息推送以及TB/PB级别的数据同步。经过多年流量的持续增长,该服务体系依然稳固可靠,展现出强大的负载能力。
71 9
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现
|
2月前
|
Kubernetes 测试技术 持续交付
探索微服务架构下的持续集成与部署最佳实践
本文将深入探讨在微服务架构下实施持续集成与部署的最佳实践,介绍如何利用现代化工具和流程来实现自动化测试、持续集成、灰度发布等关键环节,帮助开发团队提升交付效率和质量。
|
2月前
|
SQL 缓存 分布式计算
日增数据超10PB!揭秘沃尔玛Lakehouse架构选型之路
日增数据超10PB!揭秘沃尔玛Lakehouse架构选型之路
49 2
|
2月前
|
存储 SQL 机器学习/深度学习
通用数据湖仓一体架构正当时
通用数据湖仓一体架构正当时
72 2
|
3月前
|
KVM 虚拟化 Android开发
DP读书:鲲鹏处理器 架构与编程(十二)鲲鹏软件实战案例Docker+KVM的部署
DP读书:鲲鹏处理器 架构与编程(十二)鲲鹏软件实战案例Docker+KVM的部署
64 1
|
3月前
|
云计算 开发者 Docker
深入浅出:使用Docker部署微服务架构
在当今快速迭代的软件开发环境中,微服务架构凭借其灵活性和可扩展性成为了热门趋势。本文将探讨如何利用Docker这一强大的容器化技术,简化和加速微服务应用的部署与管理过程。我们将从微服务的基本概念出发,逐步深入到Docker的核心功能,最后通过一个实际案例演示整个部署流程。文章旨在为开发者提供一个清晰、实用的指南,帮助他们有效地利用Docker在微服务架构下的应用部署。
27 0
|
3月前
|
存储 消息中间件 Java
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的高可靠消息服务设计实现
在深入研究了 **“【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现”** 设计实现后,我们意识到,尽管API网关为服务商提供了高效的数据获取手段,但实时数据的获取仍然是一个亟待解决的问题。
45 1
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的高可靠消息服务设计实现
|
3月前
|
前端开发 JavaScript API
|
5月前
|
消息中间件 持续交付 Docker
Docker与微服务:构建和部署微服务架构的完整指南
微服务架构已经成为现代应用开发的主要范式之一,而Docker容器技术则为微服务的构建、部署和管理提供了理想的解决方案。本文将深入探讨如何使用Docker构建和部署微服务架构,提供更多示例代码和细致的指南,以帮助大家更全面地理解和运用这些关键概念。