`
wsql
  • 浏览: 11776263 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

分布式设计与开发 数据拆分

 
阅读更多

一 个大型系统里各个环节中最容易出性能和可用性问题的往往是数据库,因此分布式设计与开发的一个重要领域就是如何让数据层具有可扩展性,数据库的扩展分为 Scale Up 和Scale Out,而Scale Up说白了是通过升级服务器配置来完成,因此不在分布式设计的考虑之内。Scale Out是通过增加机器的方式来提升处理能力,一般需要考虑以下两个问题:

数据拆分数据库高可用架构

数据拆分是最先会被想到的,原理很简单,当一个表的数据达到无法处理的时候,就需要把它拆成多个表,说起来简单,真正在项目里运用的时候有很多点是需要深入研究的,一般分为:

切分策略与应用程序端的整合策略

切分策略

切分策略一般分为垂直切分、横向切分和两者的混搭。

1)垂直切分

垂 直切分就是要把表按模块划分到不同数据库中,这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和 表都在一起,当网站不断丰富和壮大的时候,也会变成多个子系统来支撑,这时就有按模块和功能把表划分出来的需求。如下图所示:

其 实,相对于垂直切分更进一步的是服务化改造,说得简单就是要把原来强耦合的系统拆分成多个弱耦合的服务,通过服务间的调用来满足业务需求看,因此表拆出来 后要通过服务的形式暴露出去,而不是直接调用不同模块的表,淘宝在架构不断演变过程,最重要的一环就是服务化改造,把用户、交易、店铺、宝贝这些核心的概 念抽取成独立的服务,也非常有利于进行局部的优化和治理,保障核心模块的稳定性。这样一种拆分方式也是有代价的:

表关联无法在数据库层面做单表大数据量依然存在性能瓶颈事务保证比较复杂应用端的复杂性增加

上面这些问题是显而易见的,处理这些的关键在于如何解除不同模块间的耦合性,这说是技术问题,其实更是业务的设计问题,只有在业务上是松耦合的,才可能在技术设计上隔离开来。没有耦合性,也就不存在表关联和事务的需求。另外,大数据瓶颈问题可以参见下面要将的水平切分。

2)水平切分

上 面谈到垂直切分只是把表按模块划分到不同数据库,但没有解决单表大数据量的问题,而水平切分就是要把一个表按照某种规则把数据划分到不同表或数据库里。例 如像计费系统,通过按时间来划分表就比较合适,因为系统都是处理某一时间段的数据。而像SaaS应用,通过按用户维度来划分数据比较合适,因为用户与用户 之间的隔离的,一般不存在处理多个用户数据的情况,下面是一个比较简单的按user_id来水平切分的例子:

水平切分没有破坏表之间的联系,完全可以把有关系的表放在一个库里,这样就不影响应用端的业务需求,并且这样的切分能从根本上解决大数据量的问题。它的问题也是很明显的:

当切分规则复杂时,增加了应用端调用的难度数据维护难度比较大,当拆分规则有变化时,需要对数据进行迁移

对于第一个问题,可以参考后面要讲的如何整合应用端和数据库端。对于第二个问题可以参考一致性hash的算法,通过某些映射策略来降低数据维护的成本,可参见以前的博文分布式设计与开发(二)------几种必须了解的分布式算法

3)垂直与水平联合切分

由上面可知垂直切分能更清晰化模块划分,区分治理,水平切分能解决大数据量性能瓶颈问题,因此常常就会把两者结合使用,这在大型网站里是种常见的策略,这可以结合两者的优点,当然缺点就是比较复杂,成本较高,不太适合小型网站,下面是结合前面两个例子的情况:




与应用程序端的整合策略

数据切出来还只是第一步,关键在于应用端如何方便地存取数据,不能因为数据拆分导致应用端存取数据错误或者异常复杂。按照从前往后一般说来有以下三种策略:

应用端做数据库路由在应用端和服务器端加一个代理服务器做路由数据库端自行做路由

1)应用端做数据库路由

应 用端做数据库路由实现起来比较简单,也就是在数据库调用的点通过工具包的处理,给每次调用数据库加上路由信息,也就是分析每次调用,路由到正确的库。这种 方式多多少少没有对应用端透明,如果路由策略有更改还需要修改应用端,并且这种更改很难做到动态更改。最关键的是应用端的连接池设计会比较复杂,池里的连 接就不是无状态了,不利于管理和扩展。

2)在应用端和服务器端加一个代理服务器做路由

通过代理服务器来做服务器做路由可以对客户端屏蔽后端数据库拆分细节,增强了拆分规则的可维护性,一般而言proxy需要提供以下features:

对客户端和数据库服务端的连接管理和安全认证数据库请求路由可配置性对调用命令和SQL的解析调用结果的过滤和合并

现在有些开源框架提供了类似功能,比如ameoba,在以前博文设计与开发应用服务器(一)------常见模式中介绍过ameoba的大致结构,在构建高性能web之路------mysql读写分离实战介绍过如何实战ameoba,有兴趣的朋友可以参考一下。

3)数据库端自行做路由

例如MySQL就提供了MySQL Proxy的代理产品可以在数据库端做路由,结构如下所示:

这种方式的最大问题就是拆分规则配置的灵活性不好,不一定能满足应用端的多种划分需求。

以上介绍了些数据拆分的策略和相关支撑策略,随后会研究一下前面谈到的数据库高可用架构。

(很资料来源于简朝阳的《MySQL性能调优与架构设计》,需要深入学习的朋友可以参考这本书)

分享到:
评论

相关推荐

    分布式业务层数据层框架Albianj2.zip

    Albianj是我们设计并开发的一套分布式统一框架。他主要是面向海量数据处理、海量数据 访问、并解决互联网开发中经常会碰到的数据海量增长问题,也一并解决 互联网开发团队 中,因开发人员的水平参差不齐而导致的...

    分布式数据库设计方案.doc

    面对海量数据库在高并发的应用环境下,仅仅靠提升服务器的硬件配置是不能从根本上 解决问题的,分布式网格集群通过数据分区把数据拆分成更小的部分,分配到不同的服 务器中。查询可以由多个服务器上的CPU、I/O来...

    Fourinone分布式计算框架

    总的来说,是将大数据的复杂分布式计算,设计为一个链式的多“包工头”环节去处理,每个环节包括利用多台“农民工”机器进行并行计算,无论是拆分计算任务还是合并结果,都可以设计为一个单独的“包工头”环节。...

    Fourinone分布式并行计算四合一框架

     但是fourinone并不提供一个分布式存储系统,比如文件数据的导入导出、拆分存储、负载均衡,备份容灾等存储功能,不过开发人员可以利用这些api去设计和实现这些功能,用来满足自己的特定需求。  二、自动化class...

    大规模分布式系统架构下调测能力构建之道

    简介:在大规模分布式应用中,曾经的单体应用按横向和纵向的维度被拆分到集群的各个节点之中,为了解决服务及数据调用的问题,我们引入了分布式服务框架、分布式消息集群、分布式文件存储、分布式缓存等一系列服务。...

    车贷风险控制平台的设计与实现

    平台整体使用分布式架构,将 各个功能拆分为微服务,每个微服务建立多个实例,保证服务的高可用性,并且每 个微服务相互独立。使用分布式文件系统来对客户的信审文件和多媒体数据进行 存储,并通过一套数据安全规范...

    基于分布式事务RT模式实现适用于hyperf框架的组件源码.zip

    4. 支持分布式事务嵌套,与savepoint一致效果。 5. 支持避免不同业务代码并发造成脏数据的问题。 6. 默认支持http协议的服务化接口,想要支持其它协议则需要重写中间件。 7. [支持子服务嵌套分布式事务(全球首创)]...

    java springboot快速开发权限框架

    5、使用分包分层设计,工程拆分,分为dao,service,Controller,view层,层次清楚,低耦合,高内聚。 6、支持分布式部署,session集成了redis 7、灵活的权限控制, 整合shiro,可控制到页面或按钮,满足绝大部分的...

    资源前后端分离式分布式微服务架构项目课程预览EurekaFeign讲义+源码+视频

    course注册到Eureka Server"Feign远程调用 理解 重点 能够测试Feign远程...拆分方法能够完成静态页面测试能够完成课程数据模型查询接口理解课程信息模板设计方法"课程预览功能开发 应用 重点 能够完成课程预览功能开发...

    大数据分析平台.docx

    设计了一个分布式计算框架,可以处理结构化和非结构化数据,并提供内存计算、规划计算、数据挖掘、流计算等各种企业计算服务。Data Studio包括了数据建模、开发、测试等集成开发环境。管理工具包括了实施、客户化及...

    腾讯开源的分布式毫秒服务引擎 msec.zip

    特点与优势模块间访问采用RPC的方式,开发者不用关注网络与报文格式,像写单机程序一样开发分布式服务。负载自动均衡与容错,对于单机故障、局部网络波动等状况自动应对,服务高可用性。支持C/C 与Java语言,后续还...

    远程数据采集工具

    通用分布式统计组件就是为了解决这类问题而设计开发的。 2、 功能:实现数据表格的分布式分发、录入、审查、汇总;汇总的数据表格可以是ODBC兼容的数据源(如EXCEL、FOXPRO、ACCESS、SQL等),并且在同...

    计算机软件项目设计方案(2020).docx

    分布式缓存、分布式消息队列等技术支撑服务在数据中心进行共享,LEAF6 平台通过技术支撑服务实现与基础技术平台进行对接。 1.2.3LEAF6平台核心框架实现 1.2.3.1数据访问逻辑层次说明 LEAF6核心框架(LEAF6-Core)中...

    Java高并发高性能分布式框架从无到有微服务架构设计(1).doc

    Java高并发高性能分布式框架从无到有微服务架构设计 微服务架构模式〔Microservice Architect Pattern〕.近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注 微服务架构是一种架构模式,它提倡将...

    论文研究-基于子模式的关系数据到图数据ETL方法研究.pdf

    不仅提高了ETL的效率,转换结果能满足图数据的分布式存储要求,也可以作为Spark GraphX计算框架的基础数据。最后,使用Java EE和Neo4j开发了原型系统,并进行了实验验证。结果表明,改进后的ETL方法获得了较已有方法...

    AutoMeter-API是一款专门为测试人员准备的针对分布式服务微服务API接口功能和性能一体的自动化测试平台

    设计API接口用例基础要素:用例数据,用例的断言,快捷调试等基础,支持复制,批量复制,后续支持自动生成基础用例 从个人或者公司的角度看,用例的数量和类型来决定需要做怎么样的执行,如果用例数量庞大,并且需要...

    大数据技术-题库.pdf

    A、 ⼤数据成为⼀种新的决策⽅式 B、 ⼤数据应⽤促进信息技术与各⾏业的深度融合 C、 ⼤数据开发推动新技术和新应⽤的不断涌现 D、 ⼤数据使得数据科学家成为热门职业 21、下列哪个不属于 Hadoop 的特性?...

    网站架构技术

    问题: 读库与写库的数据同步 解决方案: 不同的数据库都有自己的数据库的主从复制功能 使用反向代理与CDN加速网站响应 反向代理产品 ngix 使用分布式文件系统和分布式数据库系统 使用no-sql和搜索...

    VC与Labview、Matlab编程论文资料

    基于USB接口的LabVIEW数据采集与传输系统的设计与实现.pdf 基于VC++6.0技术的回采巷道支护专家系统的研究.pdf 基于VC++6.0的ARINC429总线接口卡通讯程序.pdf 基于VC++6.0的图形自动编程系统的研究.pdf 基于VC++6.0的...

    VC与Labview、Matlab编程论文资料[2].rar

    基于USB接口的LabVIEW数据采集与传输系统的设计与实现.pdf 基于VC++6.0技术的回采巷道支护专家系统的研究.pdf 基于VC++6.0的ARINC429总线接口卡通讯程序.pdf 基于VC++6.0的图形自动编程系统的研究.pdf 基于VC++6.0的...

Global site tag (gtag.js) - Google Analytics