分布式系统架构设计之数据访问

数据访问层是一个链式的处理过程,并且多数组件都是提供对外提供JDBC的实现,提供服务的方式有三:

1)  提供专有API,通用性差

2)  通用性强的方式,如JDBC

3)  基于ORM的方式,可以在ORM框架上再包一层,对外暴露的还是原有框架的接口。

在合并查询时,JDBC优势明显。

数据访问层设计的基本步骤:SQL解析,规则处理,SQL改写,数据源选择,SQL执行和结果集返回合并处理。

1)在进行SQL解析时,解析的缓存可以提升解析速度。一个重要的事情是根据执行的SQL得到被操作的表,根据参数及规则来确定目标数据源的连接数。

2)规则处理时,可以采用固定hash,根据某个字段取模,然后分散到不同的库和表中,通常将周期性数据放在一起;也可以采用一致性hash,把节点对应的hash值变为了一个范围,不再是离散的;还可以通过在一个物理节点上对应多个虚拟节点且虚拟节点均匀分布的方式来解决增加或减少节点时负载不均衡的问题。映射表是根据分库分表字段的值的查表法来确定数据源的方法,一般用于热点数据的特殊处理,或者对不完全符合规律的的规则进行补充。

3)SQL修改一般用于表名,索引,以及跨库计算。

4)规则处理是确定一组数据源,数据源选择是确定具体某个数据源。

5)SQL执行和结果处理部分需要注意异常的判断和处理。

从工程上看,可以把spring中的driverClassName,username和password抽取出来做成一个公共配置,但最好在配置管理中心中进行。GroupDataSource解决了具体访问数据库的选择问题,具体选择策略是groupDataSource完成的重点包括根据事务,读写等特性选择主备,不同库间的选择等。GroupDataSource意味着分组数量的绑定,虽然不能整体缩放,但可以进行组内缩放、主备切换等。数据源分组后,通过对数据源进行功能切分,可以构建原子数据源,原子数据源仅管理一个具体的数据库。

数据访问层的部署也可以分为jar包和Proxy两种方式,与服务框架类似,使用Proxy时,协议同样可以使用数据库协议和私有协议,最好直接使用数据库协议。

数据库读写分离最好基于数据库的日志来进行数据的复制。数据变更场景包括:复制数据库,索引构建,缓存失效等,一般引入数据抽取器把数据源变更的信息加入到数据分发平台,数据采用器把这些变更应用到相应的目标上,数据分发平台是由多个管道组成的。不同的数据变更来源需要不同的抽取器来进行解析和变更进入分发平台的工作。在进行数据迁移时,记录增量的日志,迁移后,再对增量的变化处理。

时间: 2024-10-05 19:04:27

分布式系统架构设计之数据访问的相关文章

项目架构开发:数据访问层之Query

接上文 项目架构开发:数据访问层之Repository 上一章我们讲了IRepository接口,这张我们来讲IQuery 根据字面意思就可以知道,这次主要讲数据查询,上一章我们只针对单表做了查询的操作,多表联查并没有实现 其实对于任何一个项目来说,多表联查都是比较麻烦的地方,因为项目的“读”操作,特别是多表的“读”,至少占据所有“读”的一半以上 然而至今,据我所知还没有哪一款ORM工具可以灵活处理多表联查:想要不写sql语句,又想性能高,还想用强类型的ling查询方法:这对于多表查询来说比较难

【2017-04-20】Ado.Net与面向对象结合架构中的数据访问层(实体类,数据访问类)

开发项目三层架构:界面层.业务逻辑层.数据访问层 今天学习一下数据访问层,分为实体类和数据访问类 所有的类放在App_Code这个文件夹下边.养成一个好的习惯. 一.实体类 数据库中的表映射为一个类,类名与表名一致.表中的每一列,都为该类下的成员变量和属性也就是最简单的封装 把数据库中的表名变为类的类名. 把数据库中的每一个列,变为实体类中的成员变量和属性 列名与属性名一致.成员变量名:在列名前边加上下划线.因为在外部访问只能访问到属性,为了看起来一致. using System; using

分布式系统架构设计

一个完整的电商系统,分为前台交易系统与后台作业系统,前后台共库是传统企业在设计电商项目时的一个常见做法.但这个做法引发了上线后的诸多麻烦.在前台交易系统处于峰值情况下,数据库本身已存在很大的压力,此时如果后台作业系统产生大规模的查询或写入请求,则很容易造成数据库无法响应.我们在很多客户案例中发现,如果前后台共库,正常非峰值情况下,每日订单数只要超过2000单,就会不同程度地出现前后台互相干扰,数据库成为主要瓶颈.此时,客户不得不在系统高峰时停止在后台作业系统上的操作,这给业务造成了很大伤害,发货

全球异地多活架构设计(二): 数据层的支持

要做到全球异地多活, 一定要在数据层支持多机房写入, 并且对大多数业务场景提供最终一致性的解决方案.原因如下: 跨洲的网络延迟在100ms的数量级,如果只有单点写, 对于用户体验是种灾难 对于高频操作来说,  如果做强一致性,那么任然受限于网络延迟, 对于用户体验是种灾难 既然决定要选择最终一致性, 那么随之而来就有两个问题需要解决: 跨机房的数据同步 多点写入时的数据冲突处理 一 .数据同步 数据的同步有几个核心问题需要考虑: 1.获取数据变更以及重放 2.不丢不重不乱序 3.避免数据回环同步

大型分布式网站架构设计与实践

大型分布式网站架构设计与实践(一线工作经验总结,囊括大型分布式网站所需技术的全貌.架构设计的核心原理与典型案例.常见问题及解决方案,有细节.接地气/京东:大型分布式网站所需技术的全貌.架构设计的核心原理与典型案例.常见问题及解决方案) 陈康贤 著   ISBN 978-7-121-23885-7 2014年9月出版 定价:79.00元 460页 16开 编辑推荐 --作者一直奋战在阿里巴巴及淘宝网一线,书中所讲是其亲身经验的总结,显得更加实战和珍贵. --全面介绍大型分布式网站架构所涉及的技术细

数据访问层之Repository

数据访问层之Repository 接上文 项目架构开发:数据访问层之Logger 本章我们继续IRepository开发,这个仓储与领域模式里边的仓储有区别,更像一个工具类,也就是有些园友说的"伪仓储", 这个仓储只实现单表的CURD与Query,都是通过主键ID或拉姆达表达式进行操作的,返回的都是单表的实体或实体集合, 多表的在IQuery接口中再讲:虽然如此,但是如果与"活动记录"开发模式搭配的话,会非常合适,可以减少开发的时间 及出错几率,更符合开发人员的类型

升讯威微信营销系统开发实践:(2)功能设计与架构设计

微信开发系列教程,将以一个实际的微信平台项目为案例,深入浅出的讲解微信开发.应用各环节的实现方案和技术细节. 本系列教程的最终目标是完成一个功能完善并达到高可用性能指标的微信管理软件,所以除了与微信本身紧密相关的对接和应用技术,还会讲到其它相关的所有知识点,从技术选型,架构设计,数据层的设计,API的设计,数据传输协议的设计,再到细节的前端的设计及技术应用,后台开发中的各方面技术,都会涉及.同时,在架构设计中,会考虑到运维领域的诸多问题,会涉及到部署环节中负载均衡及CDN分发,服务器流量及带宽控

高可用架构设计与实践

第一课:高可用架构知识原理篇 什么架构的高可用? 架构高可用的重要性? 架构高可用的常用手段都有哪些? 架构高可用评价维度是什么? 架构高可用的考核如何分级? 架构高可用的涉及环节都有哪些? 第二课:高可用架构设计之总体架构篇 高可用架构为什么需要分层? 高可用架构分层设计原则是什么?如何架构分层? 高可用架构分层最佳实践: 我们的实践案例: 第三课:高可用架构设计之硬件篇 如何选择硬件?选择什么样的硬件? 高可用架构硬件层面如何保证? 硬件层面高可用架构保证的最佳实践是什么? 我们的实践案例:

企业级系统架构设计技术与互联网应用技术结合主题一 大规模并发性能问题探讨

何谓大规模并发,不同层面有不同的理解 企业应用(Intranet):千级强并发,万级弱并发(在线用户),十万级用户 大型企业ERP.供应链,大型企业HR.办公OA 互联网应用(Internet):百万级强并发,千万级弱并发(在线用户),亿级用户/ 门户网站(新浪.腾讯) 平台级电子商务(阿里巴巴.淘宝网.拍拍网) 搜索引擎(百度) 电子商务企业应用(Intranet + Internet):十万级强并发,百万级弱并发(在线用户),千万级用户 B2C电子商务(京东.凡客.一号店) 垂直型电子商务(