精华内容
下载资源
问答
  • 例如,为了从Oracle数据库提取信息,开发人员可以调用面向数据库中间件来登录到数据库,请求信息并处理从数据库中提取的信息。尽管CLI是跨越多种数据库的通用API,通过定义良好的通用接口提供对任意数量的数据库...

    面向数据库的中间件是促进与数据库通信的中间件,无论是来自应用程序还是数据库之间。 开发人员通常使用面向数据库的中间件作为从本地或远程数据库提取信息的机制。 例如,为了从Oracle数据库提取信息,开发人员可以调用面向数据库的中间件来登录到数据库,请求信息并处理从数据库中提取的信息。

    尽管CLI是跨越多种数据库的通用API,通过定义良好的通用接口提供对任意数量的数据库的访问,但它们通常被发现可用于关系数据库。 Microsoft ODBC就是这种情况。 ODBC公开一个接口以便于访问数据库。 然后使用驱动程序来适应数据库之间的差异。 ODBC还提供对同一接口的同时多个数据库访问 - 在ODBC体系结构中,驱动程序管理器可以加载和卸载驱动程序以促进不同数据库(例如Oracle,Informix和DB2)之间的通信。

    JavaSoft的Java数据库连接(JDBC)是CLI的另一个例子。 JDBC是一种接口标准,它使用一组Java方法来方便访问多个数据库。 JDBC非常像ODBC,可以从任何Java应用程序访问任意数量的数据库:applet,servlet,JSP,EJB或独立应用程序。 Microsoft数据库中间件的未来由其OLE DB表示。 OLE DB提供了一种标准机制来访问任意数量的资源(包括数据库,Excel电子表格和平面文件)作为标准对象(例如COM对象)。 OLE DB提供了一个对象框架来检索结果集,然后在内存中导航和操作结果集。 OLE DB依靠OLE Transactions事务管理框架来确保ACID属性(原子性,一致性,隔离性和持久性)

    本地数据库中间件不是使用单个多数据库API,而是仅使用本机机制来访问特定数据库的功能。 这种限制 - 仅与一种类型的数据库进行通信 - 是本地数据库中间件的主要缺点。 其优点包括提高了性能并可以访问特定类型数据库的所有功能。

    展开全文
  • 数据库中间件---详解

    千次阅读 2021-11-15 16:50:45
    一、业务场景 1、当一张表进行水平分库分表之后,可能会影响已有产品功能,同时想要进行多张分表的搜索结果数据聚合在一起,在sql上会比较麻烦(只能不断 join),而且如果不...引进数据库中间件,例如:Cobar、M...

    一、业务场景

            1、当一张表进行水平分库分表之后,可能会影响已有产品功能,同时想要进行多张分表的搜索结果数据聚合在一起,在sql上会比较麻烦(只能不断 join),而且如果不知道分表的表名,业务sql书写上无法做到。

            2、数据库搭建好了完善的集群后,由于复杂度的上升,主从主备、读写分离、故障切换、心跳检测都是很繁杂的,能不能有种解决方案,能简单解决上述的各类繁杂问题。

            等等.....

    二、解决方案

            引进数据库中间件,例如:Cobar、MyCat、Atlas、TDDL。

            (一)、定义

            数据库中间件:处于底层数据库和用户应用系统之间,主要用于屏蔽异构数据库的底层细节的中间件。是客户端与后台的数据库之间进行通信的桥梁。

            (二)、设计模式

            典型的数据库中间件设计模式有2种:服务端代理、客户端代理

            下图演示了这两种方案的架构:        

            1、服务端代理模式(server-proxy)

            我们独立部署一个代理服务,这个代理服务背后管理多个数据库实例。而在应用中,通过一个普通的数据源(c3p0、druid、dbcp等)与代理服务器建立连接,所有的sql操作语句都是发送给这个代理,由这个代理去操作底层数据库,得到结果并返回给应用。在这种方案下,分库分表和读写分离的逻辑对开发人员是完全透明的。

            这种模式下典型的中间件有:

    • 阿里开源的cobar(目前已经不再维护)

    • 在cobar基础上开发的mycat(持续更新中....)

    • mysql官方提供的mysql-proxy(目前已经不再维护)

    • 奇虎360在mysql-proxy基础开发的Atlas(只支持分表,不支持分库)

    • 当当网开源的sharing-sphere(持续更新中....)

            优点:

            1、多语言支持。不论你用的php、java或是其他语言,都可以支持。以mysql数据库为例,如果proxy本身实现了mysql的通信协议,那么你可以就将其看成一个mysql 服务器。mysql官方团队为不同语言提供了不同的客户端却动,如java语言的mysql-connector-java,python语言的mysql-connector-python等等。因此不同语言的开发者都可以使用mysql官方提供的对应的驱动来与这个代理服务器建通信。

            2、对业务开发透明。由于可以把proxy当成mysql服务器,理论上业务开发不需要进行太多代码改造,既可以完成接入。

            缺点:

            1、proxy本身需要保证高可用。由于应用本来是直接访问数据库,现在改成了访问proxy,意味着proxy必须保证高可用。否则,数据库没有宕机,proxy挂了,导致数据库无法正常访问,就尴尬了。 

            2、租户隔离。可能有多个应用访问proxy代理的底层数据库,必然会对proxy自身的内存、网络、cpu等产生资源竞争,proxy需要需要具备隔离的能力。

            2、客户端代理模式(client-proxy)

            业务代码需要进行一些改造,引入支持读写分离或者分库分表的功能的sdk。通常client-proxy是在连接池或者driver的基础上进行了一层封装,内部与不同的库建立连接。应用程序产生的sql交给代理层进行处理,其内部对sql进行必要的操作,例如在读写分离情况下,选择走从库还是主库;在分库分表的情况下,进行sql解析、sql改写等操作,然后路由到不同的分库,将得到的结果进行合并,返回给应用。

            这种模式下典型的中间件有:

    • 阿里开源的TDDL(目前已经不再维护)

    • 大众点评开源的zebra(目前已经不再维护)。

    • 当当网开源的sharding-jdbc,目前算是做的比较好的,文档资料比较全。

            优点:

            1、实现简单。proxy需要实现数据库的服务端协议,但是代理层不需要实现客户端通信协议。原因在于,大多数据数据库厂商已经针对不同的语言提供了相应的数据库驱动driver,例如mysql针对java语言提供了mysql-connector-java驱动。客户端的通信协议已经在driver层面做过了。因此通常只需要在此基础上进行封装即可。

            2、天然去中心化。smart-client的方式,由于本身以sdk的方式,被应用直接引入,随着应用部署到不同的节点上,且直连数据库,中间不需要有代理层。因此相较于proxy而言,除了网络资源之外,基本上不存在任何其他资源的竞争,也不需要考虑高可用的问题。只要应用的节点没有全部宕机,就可以访问数据库。(这里的高可用是相比proxy而言,数据库本身的高可用还是需要保证的)

            缺点:

            1、通常仅支持某一种语言。例如tddl、zebra、sharding-jdbc都是使用java语言开发,因此对于使用其他语言的用户,就无法使用这些中间件,除非开发多语言客户端。

            2、版本升级困难。因为应用使用数据源代理就是引入一个jar包的依赖,在有多个应用都对某个版本的jar包产生依赖时,一旦这个版本有bug,所有的应用都需要升级。而数据库代理升级则相对容易,因为服务是单独部署的,只要升级这个代理服务器,所有连接到这个代理的应用自然也就相当于都升级了。

    三、部分中间件技术讲解

    (一)Cobar

           Cobar 是由 Alibaba 开源的 MySQL 分布式处理中间件,Cobar是关系型数据的分布式处理系统,它可以在分布式的环境下像传统数据库一样为您提供海量数据服务。

            github地址:https://github.com/topics/cobar

            特点:

    • 解决了大数据量下的透明水平分表
    • 必须使用封装过的 MySQL 驱动包 Cobar Driver,无框架要求
    • 后端对 MySQL 是直接面向二进制协议的
    • 基于 LL(2) 手写的 SQL 解析器
    • 支持弱一致性事务(多库并行执行/提交)
    • 不支持跨库 join、分页、排序、子查询、读写分离
    • 在 MySQL 实例上没有 agent
    • MySQL 主从数据同步使用 MySQL 解决方案
    • 主异常时切换到从后主恢复,没有 failback,只能手动切换回主
    • 后端对 MySQL 有连接池
    • 支持跨地域

    (二)MyCat

            官网:Mycat1.6        

            前身 Cobar,开源,较为活跃。

            特点:

    • 遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。
    • 基于心跳的自动故障切换,支持读写分离,支持 MySQL 一双主多从,以及一主多从
    • 有效管理数据源连接,基于数据分库,而不是分表的模式。
    • 基于 NIO 实现,有效管理线程,高并发问题。
    • 支持数据的多片自动路由与聚合,支持 sum , count , max 等常用的聚合函数。
    • 支持2表 join,甚至基于 caltlet 的多表 join。
    • 支持通过全局表,ER 关系的分片策略,实现了高效的多表 join 查询。
    • 支持多租户方案。
    • 支持分布式事务(弱xa)
    • 支持全局序列号,解决分布式下的主键生成问题。
    • 分片规则丰富,插件化开发,易于扩展。
    • 强大的 web,命令行监控。
    • 支持前端作为 MySQL 通用代理,后端 JDBC 方式支持 Oracle、DB2、SQL Server 、 mongodb 、巨杉。
    • 集群基于 ZooKeeper 管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。

            对比:开源的分布式数据库中间件系统Mycat和阿里巴巴Cobar的对比_许恒的博客-CSDN博客_cobar

    (三)Atlas

            较为活跃,Atlas 是由 360 Web平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用 Atlas 运行的 MySQL 务,每天承载的读写请求数达几十亿条。

            官网:Apache Atlas – Data Governance and Metadata framework for Hadoop

            主要功能:
            1. 读写分离
            2. 从库负载均衡
            3. IP过滤
            4. SQL语句黑白名单
            5. 自动分表

    (四)sharing-sphere

            Apache ShardingSphere 由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的基于数据库作为存储节点的增量功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

            官网:ShardingSphere

            手册:概览 :: ShardingSphere

    四、结论

            每项数据库中间件都有自己的优势和特点,在做技术选型的时候,先结合实际业务场景需要确定采用哪种模式的中间件,再去选择哪个中间件技术更符合实际需求。

    展开全文
  • 解决的问题数据库相关平台主要解决以下三个方面的问题为海量前台数据提供高性能、大容量、高可用性的访问为数据变更的消费提供准实时的保障高效的异地数据同步上图的讲解最上层的是分布式数据库分表分库中间件,读写...

    解决的问题

    数据库相关平台主要解决以下三个方面的问题

    为海量前台数据提供高性能、大容量、高可用性的访问

    为数据变更的消费提供准实时的保障

    高效的异地数据同步

    AAffA0nNPuCLAAAAAElFTkSuQmCC

    上图的讲解

    最上层的是分布式数据库分表分库中间件,读写分离,水平扩容 --》代表中间件有(Cobar,Mycat,tddl,drds,ddb)

    增量数据订阅和消费,用户对数据库操作,比如DML DDL DCL操作,中间件可以监控这些操作所产生的增量数据。典型代表Canal,根据MySQL的binlog实现。也有针对Oracle(redolog)的增量数据订阅与消费的中间件有 Canal,erosa

    数据库同步中间件涉及数据库之间的同步操作,可以实现跨(同)机房同步以及异地容灾备份、分流等功能。可以涉及多种数据库,处理之后的数据也可以以多种形式存储。(Otter, JingoBus, DRC)

    数据库与数据库之间会有数据迁移(同步)的动作,同款数据同步原理比较简单,比如MySQL主备同步,只要在数据库层进行相应的配置既可,但是跨数据库同步就比较复杂了,比如Oracle->MySQL. 数据迁移一般包括三个步骤:全量复制,将原数据库的数据全量迁移到新数据库,在这迁移的过程中也会有新的数据产生;增量同步,对新产生的数据进行同步,并持续一段时间以保证数据同步;原库停写,切换新库。将“跨数据库”这个含义扩大一下——“跨数据源”,比如HDFS, HBase, FTP等都可以相互同步。(yugong, DataX)

    数据库中间件举例

    分布式数据库分表分库

    数据增量订阅与消费

    数据库同步(全量,增量,跨机房,复制)

    跨数据库(数据源)迁移

    分布式数据库

    分表分库类的中间件主要有两种形式向应用提供服务

    一种是以JDBC的jar包形式为Java应用提供直接依赖,Java应用通过提供的JDBC包实现透明访问分布式数据库集群中的各个分库分表,典型代表网易的DDB和阿里的TDDL.

    另一种是为应用部署独立的服务来满足应用分库分表的需求,在这种方式下通过标准JDBC访问Proxy,而Proxy则根据MySQL标准通信协议对客户端请求解析,还原应用SQL请求,然后通过本地访问数据库集群,最后再将得到的结果根据MySQL标准通信协议编码返回给客户端。典型代表阿里的Cobar, Cobar变种MyCAT, 阿里的DRDS,网易的DDB proxy模式以及DDB的私有云模式。

    Mycat

    这里就不对Cobar做介绍了,目前来看Cobar的发起人的离职导致维护也停止了,整个开发不算完备所以直接跳过,介绍MyCat

    从定义和分类看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的Server,前端用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL Native Protocol与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。

    MyCAT发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL, SQL Server, Oracle, DB2, PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。

    MyCAT是一个强大的数据库中间件,不仅仅可以用作读写分离,以及分表分库、容灾管理,而且可以用于多租户应用开发、云平台基础设施,让你的架构具备很强的适应性和灵活性,借助于即将发布的MyCAT只能优化模块,系统的数据访问瓶颈和热点一目了然,根据这些统计分析数据,你可以自动或手工调整后端存储,将不同的表隐射到不同存储引擎上,而整个应用的代码一行也不用改变。

    MyCAT和Cobar比较有两个显著提高:

    后端由BIO改为NIO,并发量有大幅提高

    增加了对Order By, Group By, Limit等聚合功能(虽然Cobar也可以支持Order By, Group By, Limit语法,但是结果没有进行聚合,只是简单返回给前端,聚合功能还是需要业务系统自己完成)

    AAffA0nNPuCLAAAAAElFTkSuQmCC

    事务是弱XA含义:分布式事务处理( Distributed Transaction Processing , DTP )指一个程序或程序段,在一个或多个资源如数据库或文件上为完成某些功能的执行过程的集合,分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚)

    MyCAT的原理中最重要的一个动词是“拦截”,它拦截了用户发来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析,路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户

    MyCAT对自身不支持的SQL语句提供了一种解决方案——在要执行的SQL语句前添加额外的一段由注解SQL组织的代码,这样SQL就能正确执行,这段代码称之为“注解”。注解的使用相当于对MyCAT不支持的SQL语句做了一层透明代理转发,直接交给目标的数据节点进行SQL语句执行。

    MyCAT自身有类似其他数据库的管理监控方式,可以通过MySQL命令行,登录管理端口(9066)执行相应的SQL进行管理,也可以通过jdbc的方式进行远程连接管理

    高可用(HA)

    MySQL的HA

    MySQL节点开启主从复制的配置方案,并将主节点配置为MyCAT的dataHost里的writeNode,从节点配置为readNode,同时MyCAT内部定期对一个dataHost里的所有writeHost与readHost节点发起心跳检测

    正常情况下,MyCAT将第一个writeHost作为写节点,所有的DML SQL会发送此节点

    若MyCAT开启了读写分离,则查询节点会根据读写分离的策略发往readHost(+writeHost)执行

    如果第一个writeHost宕机,MyCAT会在默认的三次心跳检测失败后,自动切换到下一个可用的writeHost执行DML SQL语句

    当原来配置的MySQL写节点宕机恢复后,作为从节点,跟随新的主节点,重新配置主从同步

    MyCAT自身的HA

    官方建议是采用基于硬件的负载聚亨或者软件方式的HAproxy等

    如果还担心HAproxy的稳定性和但节点问题,则可以用keepalived的VIP的浮动功能,加以强化。

    MyCAT功能和特性

    支持SQL 92标准

    支持Mysql集群,可以作为Proxy使用

    支持JDBC连接多数据库

    支持NoSQL数据库

    支持galera sfor mysql集群,percona-cluster或者mariadb cluster,提供高可用性分片集群

    自动故障切换,高可用性

    支持读写分离,支持MySQL双主多从,以及一主多从的模式

    支持全局表,数据自动分片到多个节点,用于高效表关联查询

    支持一致性Hash分片,有效解决分片扩容难题

    多平台支持,部署和试试简单

    支持Catelet开发,类似数据库存储过程,用于跨分片复杂SQL的人工智能编码实现

    支持NIO与AIO两种网络通信机制,windows下建议AIO,Linux下目前建议NIO

    支持MySQL存储过程调用

    以插件的方式支持SQL拦截和改写

    支持自增长逐渐、支持Oracle的Sequence机制

    支持Mysql, MongoDB,Oracle, SQL Server, Hive, DB2, PostgreSQL等。

    mycat的缺点

    我能想到的就是他是具有浓厚java基因的产品

    数据增量订阅与消费

    增量订阅和消费模块应当包括binlog日志抓取,binlog日志解析,事件分发过滤(EventSink),存储(EventStore)等主要模块。

    如果需要确保HA可以采用Zookeeper保存各个子模块的状态,让整个增量订阅和消费模块实现无状态化,当然作为consumer(客户端)的状态也可以保存在zk之中。

    整体上通过一个Manager System进行集中管理,分配资源。

    Canal

    AAffA0nNPuCLAAAAAElFTkSuQmCC

    server代表一个canal运行实例,对应于一个jvm

    instance对应于一个数据队列 (1个server对应1..n个instance)

    instance模块:

    eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)

    eventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)

    eventStore (数据存储)

    metaManager (增量订阅&消费信息管理器)

    注意:一台机器下部署一个canal,一个canal可以运行多个instance(通过配置destinations等), 一般情况下一个client连接一个instance(每个instance可以配置standby功能), 可以多个client连接同一个instance,但是同一时刻只能有一个client消费instance的数据,这个通过zookeeper控制。

    数据库同步

    关于数据库同步这里就贴出相应的技术栈,后期会单独开文章讲解,目前接触的就是mycat和canal

    名称

    otter

    异地双活数据架构基础设施DRC

    JD多中心交易系统

    原理

    基于Canal开源产品,获取数据库增量日志数据典型管理系统架构manager(Web管理)+node(工作节点)manager行时推送同步配置到node节点node节点将同步状态反馈到manager上基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作。

    所谓异地双活主要关注两件事,一个数据同步,一个数据分发。异地双活重点做了几件事。一个是热插拔,可以做到在业务高峰时增加节点,高峰过了把增加的节点关闭。做到这个的一个关键是流量实时切换 ,DRC可以在20秒以内把一个单元(region)的流量迁移到另一个单元。另一个是数据实时恢复,就是通过一定的冗余设计,一旦一个单元挂掉了,可以在另一个单元做全量恢复

    多中心交易系统通过数据总线JingoBus进行快速数据交换,同步性能是mysql的3倍以上,而且可用性高,架构灵活。其中,全新的总线设计解决了多中心交易跨机房的数据库复制和多数据源间的数据异构同步等难题,实现了高性能、低延时、健壮的数据同步机制

    作用

    异构库
    mysql->mysql、oracle. (目前开原版只支持mysql增量,目标库可以是mysql或者oracle,取决于canal的功能)
    单机房同步(数据库之间RTT(Round-Trip Time)<1ms)
    数据库版本升级
    数据表迁移
    异步二级索引
    双向同步
    文件同步

    异地多活中DRC的核心能力就是在低延迟,一致性和高可用一致性:基于日志流式抓取、回放库表结构变更、基于事务的冲突检测。低延迟:最大延迟不超过1s, 消息协议优化,三级数据存储,预读优化IO, 多连接复用和传输压缩,高效的并发复制算法。高可用:主备切换,拓扑变化,心跳跟踪,多维度容灾。

    Replicator直接连接Relay,消费Relay内存队列中的事务日志。但有些情况下,因为网络抖动、目标库的负载过高等因素,可能导致Replicator相对Relay落后很多。另外,当新的消费端加入同一数据源的订阅者时,新消费端有冷启动的问题。为了避免重新从数据源做全量快照,Snapshot作为Relay的一个特殊消费端,通过一种高吞吐的消费方式,从Relay源源不断的消费在线事务日志,通过对事务日志的有效处理,最终保存了数据源的一份一致快照(Consistent Snapshot),即包括了数据源库表中每一行的最新状态的快照,同时保留了一段比Relay buffer更旧的事务日志(Log Store)。由此看来,数据总线作为一个数据层的通用CDC组件,对于多中心交易项目以及异步复制场景提供了整体解决方案,奠定了项目的核心内容。

    拓展

    Otter调度模型:batch处理+双节点部署。
    Otter数据入库算法
    Otter双向回环控制
    Otter数据一致性
    Otter高可用性
    Otter扩展性

    Otter与DRC的区别:- Otter是阿里B2B的产品,DRC是阿里技术保障团队的产品- Otter是针对MySQL的,DRC可以支持多种类型的数据源- DRC从业务上进行了划分,可以实现单元内封闭,Otter的实现不涉及业务,而是在纯数据库层打通的技术- Otter是双写,DRC是中心写、分中心读,或者都部分写,相互同步。- Otter所处的网络环境较DRC差,解决一致性问题也较复杂(基于trusted source的单向环回的补救,基于时间交集的补救),DRC有两种实现方式,具体参考上面。

    系统包括一个主中心和多个分中心,主中心与分中心之间通过数据总线交换数据。数据流向中,主数据(商品数据、商家数据、用户数据等)的流向从主中心通过数据总线实时同步到分中心,分中心只读;而交易数据(订单数据)的流向从分中心实时同步到主中心;在故障时,会从分中心转移到主中心。在这个系统中,有多处体现分流的概念。通过分流,将用户分配到相应的分中心,一方面响应速度快,用户体验更好,不用跨地域访问数据中心了;另一方面,每个中心服务一定数量的用户,水平扩展性好,也能支撑更大的交易规模了。当然,多数据中心不能盲目干活,还考虑到容灾备份的问题。(支付宝光纤事件)交易系统包括应用和数据部分,应用部分是无状态的,就是说,这些工作是无差别的,一台服务器出问题,我换一台服务器来处理就是了,较容易实现多机房多活。但是数据不一样,多中心交易本质上是一个更大的分布式系统,必然涉及到数据分区、路由、复制、读写一致性、延迟等分布式领域的常见问题。另外,交易流程中依赖和产生的数据和服务有不同的特点。比如商品、促销和价格、库存的读服务,我们可以将之称为基础主数据,它们在用户下单流程中是无法分区的,否则无法实现单机房内流量闭环,也就是说,不能因为分区数据的不一致,导致同一用户在单一流程中看到不同的数据,数据的问题表现在以下几个方面:一、 如何保证数据的即时性和准确性,多中心之间需要同步卖家数据和商品数据,由于是异地部署,最好延时能控制在1秒内。数据正确性也是很大的挑战,因为数据故障跟应用层故障不一样,应用出故障了,可能只影响用户访问;数据写错了无法恢复。2、如何保证路由规则的一致性,要保障这个用户从进来到访问服务,到访问数据库,全链路的路由规则都是完全一致的;如果路由错误,看到的数据不正确。从同城双机房的分布转变为异地多机房的分布,给数据同步带来了新的挑战,因此如何设计数据总线也是项目能否实现的关键因素。通过数据总线JingoBus进行快速数据交换,同步性能是mysql的3倍以上,而且可用性高,架构灵活。其中,全新的总线设计解决了多中心交易跨机房的数据库复制和多数据源间的数据异构同步等难题,实现了高性能、低延时、健壮的数据同步机制。

    数据库迁移

    yugong

    整个数据迁移过程,分为两个部分:

    全量迁移

    增量迁移

    过程描述:

    增量数据收集(创建Oracle表的增量物化视图)

    进行全量复制

    进行增量复制(可并行进行数据校验)

    原库停写,切换到新库

    DataX

    DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesystem)之间的数据交换。

    目前成熟的数据导入导出工具比较多,但是一般都只能用于数据导入或者导出,并且只能支持一个或者几个特定类型的数据库。

    这样带来的一个问题是,如果我们拥有很多不同类型的数据库/文件系统(Mysql/Oracle/Rac/Hive/Other…),并且经常需要在它们之间导入导出数据,那么我们可能需要开发/维护/学习使用一批这样的工具(jdbcdump/dbloader/multithread/getmerge+sqlloader/mysqldumper…)。而且以后每增加一种库类型,我们需要的工具数目将线性增长。(当我们需要将mysql的数据导入oracle的时候,有没有过想从jdbcdump和dbloader上各掰下来一半拼在一起到冲动?)这些工具有些使用文件中转数据,有些使用管道,不同程度的为数据中转带来额外开销,效率差别很非常大。很多工具也无法满足ETL任务中常见的需求,比如日期格式转化,特性字符的转化,编码转换。另外,有些时候,我们希望在一个很短的时间窗口内,将一份数据从一个数据库同时导出到多个不同类型的数据库。DataX正是为了解决这些问题而生

    核心模块介绍:

    DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。

    DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。

    切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。

    每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。

    DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0。

    DataX调度流程:

    举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。 DataX的调度决策思路是:

    DataXJob根据分库分表切分成了100个Task。

    根据20个并发,DataX计算共需要分配4个TaskGroup。

    4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。

    展开全文
  • (4)完善reload config,支持不丢事务 其架构设计如图: 多中心支持如图: 五、其他数据库中间件 1、Mango 2、Cobar 3、Heisenberg 4、Atlas 5、Amoeba 六、Mycat的优势 Mycat 现在由一支强大的技术团队维护,吸引...

    一、什么是分布式系统

    分布式系统是指其组件分布在网络上,组件之间通过传递消息进行通信和动作协调的系统。它的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。主要特点如下。

    透明性:分布式系统对于用户来说是透明的,一个分布式系统在用户面前的表现就像一个传统的单处理机分时系统,可让用户不必了解其内部结构就能使用。

    扩展性:分布式系统的最大特点是可扩展性,它能够根据需求的增加而扩展,可以通过横向扩展使集群的整体性能得到线性提升,也可以通过纵向扩展单台服务器的性能(上升空间有限,使用不多)使服务器集群的性能得到提升。

    可靠性:分布式系统不允许单点失效的问题存在,它的基本思想是,如果一台机器坏了,则其他机器能够接替它进行工作,具有持续服务的特性。

    高性能:高性能是人们设计分布式系统的一个初衷,如果建立了一个透明、灵活、可靠的分布式系统,但是它运行起来像蜗牛一样慢,那么这个分布式系统是失败的。

    分布式系统在拥有众多优点的同时自然有其缺点。

    · 在节点通信部分的开销比较大,线程安全问题也变得复杂,需要在保证数据完整性的同时兼顾性能。

    · 过分依赖网络,网络信息的丢失或饱和将会抵消分布式系统的大部分优势。

    · 有潜在的数据安全和网络安全等安全性问题。

    分布式系统与集中式系统的区别:

    首先,简单地讲,分布式系统采用并行计算,而集中式系统采用串行计算,这是二者本质上的区别;

    其次,分布式系统的性价比高,对于处理大规模数据而言,最节约成本的办法是在一个系统中使用集中在一起的大量的廉价CPU;

    然后,分布式系统的可靠性高,通过把负载分散到众多机器上,单个芯片发生故障时最多会使一台机器停止运行,而其他机器不会受到影响;

    另外,分布式系统比集中式系统的可扩展性强,可根据业务量的增长逐渐扩展系统的计算能力;最后,从性能上讲,分布式系统的计算能力比单个大型主机更强。

    二、分布式数据库应用的必然条件

    分布式数据库是指数据在物理上分布而在逻辑上集中管理的数据库系统。物理上分布是指分布式数据库的数据分布在物理位置不同并由网络连接的节点或站点上;逻辑上集中是指各数据库节点之间在逻辑上是一个整体,并由统一的数据库管理系统管理。不同的节点分布可以跨不同的机房、城市甚至国家。

    分布式数据库的主要特点如下:

    透明性:用户不必关心数据的逻辑分区和物理位置分布的细节,也不必关心重复副本(冗余数据)的一致性问题,同时不必关心在局部场地上数据库支持哪种数据模型。对于系统开发工程师而言,当数据从一个场地移到另一个场地时不必改写应用程序,使用起来如同一个集中式数据库。

    数据冗余性:分布式数据库通过冗余实现系统的可靠性、可用性,并改善其性能。多个节点存储数据副本,当某一节点的数据遭到破坏时,冗余的副本可保证数据的完整性;当工作的节点受损害时,可通过心跳等机制进行切换,系统整体不被破坏。还可以通过热点数据的就近分布原则减少网络通信的消耗,加快访问速度,改善性能。

    易于扩展性:在分布式数据库中能够方便地通过水平扩展提高系统的整体性能,也能够通过垂直扩展来提高性能,扩展并不需要修改系统程序。

    自治性:各节点上的数据由本地的DBMS管理,具有自治处理能力,完成本场地的应用或局部应用。

    说明:

    分布式数据库还具有经济、性能优越、响应速度更快、灵活的体系结构、易于集成现有系统等特点。

    三、分布式数据库的实现原理

    具体来讲分布式数据库应有4个优势:数据分片及复制管理、具有事务的可靠性存取、良好的性能、易于扩展,所以分布式数据库在设计上需要实现分布式数据库的目录管理、数据分片、分布式查询处理、分布式并发控制、分布式锁管理、分布式存储、分布式网络架构、分布式安全管理等。

    1.分布式数据库的目录管理

    分布式数据库的目录存放着系统元数据及数据库的元数据的全部信息,这些数据的存在是为了正确、有效地访问数据。数据的增、删、改、查操作都需要用到目录,用户授权、安全管理及并发控制等也都需要用到目录,目录结构的合理性直接影响数据库的性能。目录一般包括各级模式的描述、访问方法的描述、关于数据库的统计数据和一致性信息等,系统根据这些信息将用户查询转换为物理数据库上的查询,选择一条最佳的存取路径进行事务管理及安全性、完整性检查等。

    分布式数据库的目录可分为全局目录、分布式目录、全局与本地混合目录。

    2.数据分片
    当数据库过于庞大,尤其是写入过于频繁且很难由一台主机支撑时,我们还是会面临扩展瓶颈。我们将存放在同一个数据库实例中的数据分散存放到多个数据库实例(主机)上,进行多台设备存取以提高性能,在切分数据的同时可以提高系统整体的可用性。

    数据分片是指将数据全局地划分为相关的逻辑片段,有水平切分、垂直切分、混合切分三种类型。

    2.1、水平切分:按照某个字段的某种规则分散到多个节点库中,每个节点中包含一部分数据。可以将数据的水平切分简单理解为按照数据行进行切分,就是将表中的某些行切分到一个节点,将另外某些行切分到其他节点,从分布式的整体来看它们是一个整体的表。

    2.2、垂直切分:一个数据库由很多表构成,每个表对应不同的业务,垂直切分是指按照业务将表进行分类并分布到不同的节点上。垂直拆分简单明了,拆分规则明确,应用程序模块清晰、明确、容易整合,但是某个表的数据量达到一定程度后扩展起来比较困难。

    2.3、混合切分:为水平切分与垂直切分的结合。

    3.分布式查询处理

    分布式查询处理的任务就是把一个分布式数据库上的高层次查询映射为在本地数据库上的操作,查询的解析必须拆分为代数查询的关系运算序列,将要查询的数据定位到各节点,使得查询在各节点进行,最后通过网络通信的操作汇聚查询结果。

    4.分布式并发控制
    并发控制是分布式事务管理的基本任务之一,其目的是保证分布式数据库中的多个事务并发高效、正确地执行。并发控制用来保证事务的可串行性,也就是说事务的并发执行等价于它们按某种次序的串行执行,从而为用户提供并发的透明性。进行并发控制的方法主要有三种:加锁并发控制、时间戳控制、乐观并发控制。加锁并发控制应用广泛,但是容易发生死锁;时间戳控制消除了死锁,一旦发生冲突便会重启而不是等待,需要有全局的统一时钟;乐观并发控制对于冲突较少的系统较为适合,对于冲突多的系统则效率低下。

    总体来看,实现分布式数据库不仅仅是如此简单的几个方面,在实际设计中还需要解决网络架构、分布式存储等问题。每个模块都可以作为一个课题去研究,本节仅是抛砖引玉。

    四、Mycat 1.6正在开发的功能如下。

    (1)对子查询的支持。

    (2)数据一致性的增强:采用分布式事务或消息队列实现;全局表的一致性保证。

    (3)基于ZooKeeper协调的主从切换。

    (4)引入测试框架,可以配置用例和进行自动化测试。

    (5)新增自动迁移功能,实现不停机迁移时不丢数据。

    Mycat 1.6对系统稳定性的开发任务如下。

    (1)解决全局自增ID列无法作为分片字段的问题。

    (2)解决分片表与对应分片规则的一致性检查问题。

    (3)解决DirectMemory的管理问题。

    (4)完善reload config,支持不丢事务

    其架构设计如图:

    在这里插入图片描述

    在这里插入图片描述
    多中心支持如图:

    在这里插入图片描述
    五、其他数据库中间件

    1、Mango

    2、Cobar

    3、Heisenberg

    4、Atlas

    5、Amoeba

    六、Mycat的优势

    Mycat 现在由一支强大的技术团队维护,吸引和聚集了一大批业内大数据和云计算方面的资深工程师,参与者都是有 5 年以上经验的资深软件工程师、架构师、DBA,优秀的技术团队保证了Mycat 的产品质量。Mycat 不依托于任何一家商业公司,因此不像某些开源项目将一些重要的特性封闭在其商业产品中,Mycat 的发展和壮大主要基于开源社区志愿者的持续努力。

    Mycat 还形成了一系列周边产品,比较有名的是 Mycat-web、Mycat-NIO、Mycat-Balance等,已成为一个比较完整的数据处理解决方案,而不仅仅是中间件。

    七、Mycat的适用场合

    1、高可用性与MySQL读写分离

    2、业务数据分级存储保障

    3、100亿大表水平分片,集群并行计算

    4、数据库路由器

    5、整合多种数据源

    展开全文
  • 分布式数据库中间件 在分布式情况下随着用户量的增加,Mysql数据库表逐渐庞大随之而来的问题就是导致数据库性能的下降,当数据量超过500W行那么就可以考虑分库分表了 分库分表概述 什么是分库分表 分库分表,相信...
  • shardingsphere组成:sharding-jdbc、sharding-proxy、sharding-sidecar(计划中)核心功能以及整体框架图 sharding-jdbc...支持任何第三方数据库连接池4.支持任意实现JDBC规范的数据库 sharding-Proxy1.透明的数据库...
  • Mysql 数据库中间件

    2021-01-20 03:58:23
    读写分离:简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力。主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作。当主数据库...
  • 数据库中间件

    2021-03-02 20:55:16
    导读:本文详细介绍了中间件,主要从数据库拆分过程及挑战、主流数据库中间件设计方案、读写分离核心要点、分库分表核心要点展开说明。 1. 数据库拆分过程及挑战 垂直拆分、读写分离、分库分表(水平拆分)。每个...
  • 数据库中间件MyCat

    2021-03-28 15:19:05
    文章目录数据库中间件MycatMycat能干什么原理安装启动安装配置文件修改配置文件启动登录搭建读写分离mysql主从复制原理主从机配置搭建双主双从模式配置垂直拆分-分库schema 配置文件水平拆分-分表全局表 数据库...
  • 类别lib库1)业务直接到数据库,少一层proxy效率更高2)没有proxy的lvs的单点问题proxy1)统一管理所有到数据库的连接,连接复用2)基础查询功能抽象,减少代码耦合3)易于实现监控、数据迁移、连接管理等功能(二)...
  • 数据库读写分离中间件——ShardingSphere一、ShardingSphere作用二、ShardingSphere实现过程三、集群的数据库四、宕机问题五、主从数据库的一些问题 一、ShardingSphere作用 ShardingSphere是一个用在数据库里的...
  • 加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求,这个时候NoSQL的出现暂时 解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能 上的提升。但是,在...
  • 并建立了完整的Schema(数据库)、Table(数据表)、User(用户)的逻辑模型,并将这套逻辑模型映射到后端的存储节点DataNode上的真实的物理库中,这样一来所有能使用MySQL的客户端及编程语言都能将Mycat当成MYSQLServer...
  • 点击上方“方志朋”,选择“置顶或者星标”你的关注意义重大!1 数据库拆分过程及挑战 互联网当下的数据库拆分过程基本遵循的顺序是:垂直拆分、读写分离、分库分表(水平拆分)。每个...
  • 本发明属于通信领域,特别涉及一种MySQL数据库中间件预处理方法。(二)背景技术:通常来说,MySQL集群和应用程序之间需要通过一个中间件来实现通信。中间件的作用是,对于应用程序来说,不需要关心数据库是单机数据库...
  • MyCat 是一个功能强大的分布式数据库中间件,是一个实现了 MySQL 协议的 Server,前端人员可以把它看做是一个数据库代理中间件,用 MySQL 客户端工具和命令行访问;而后端人员可以用 MySQL 原生协议与多个 MySQL ...
  • 数据库中间件-jdbi

    2020-12-29 13:44:17
    java的数据库原生使用jdbc,中间件有很多,例如说hibernate、...数据库中间件就是节省开发人力,用很少的代码就可以快速开发。但是也会引入一些复杂度,特别是如果对中间件不熟悉或者中间件存在bug,会导致更高...
  • 前言Mycat主要是针对方便架构师进行系统架构架构和DBA管理数据库的一个中间件,提供了多种数据库常见问题的解决方案,但某些技术点与开发工程师也息息相关,这里主要是针对开发工程师相关的技术点----读写分离,主从...
  • Gaea简介Gaea是小米商城/系统组研发的基于mysql协议的数据库中间件,目前在小米商城大陆和海外得到广泛使用,包括订单、社区、活动等多个业务。Gaea支持分库分表、sql路由、读写分离等基本特性,更多详细功能可以...
  • 分布式存储系统数据库中间件-Mycat 官方文档网站:http://mycat.org.cn/ Mycat基本定义 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL...
  • 点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试资料来源:jianshu.com/p/ed7a263a436c前言什么是中间件开发中间件开发人员需要哪些素质?如何成为中...
  • 关注、星标公众号,直达精彩内容来源:feiyangqingyun一、前言近期花了两个多月时间,将数据库相关的代码重新封装成了各种轮子(这条路必须打通,打通以后,相关项目只需要引入这个组件p...
  • Cobar是阿里巴巴研发的关系型数据的分布式处理系统,是提供关系型数据库(MySQL)分布式服务的中间件,该产品成功替代了原先基于Oracle的数据存储方案,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个...
  • 聊聊中间件开发

    千次阅读 2021-02-20 11:23:00
    最近频繁地在跟实习生候选人打交道,每次新接触一个候选人,都要花上一定的时间去介绍我们团队,候选人问的最多的一个问题就是「中间件部门一般是干嘛的?」,恰好我之前也接触过一些想从事中间件开发的...
  • 数据库中间件--Mycat

    2021-11-16 10:15:32
    数据库中间件的文章:数据库中间件---详解_guo2312668的博客-CSDN博客 今天我们就来详细讲讲一个热门的数据库中间件---MyCat 一、Mycat是什么? 活跃的、性能好的开源数据库中间件! ------ 来自官网:Mycat1.6 ...
  • 中间件开发心得

    2021-02-20 18:53:38
    」,恰好我之前也接触过一些想从事中间件开发的小伙伴,问过我「现在转行做中间件开发还来得及吗?」诸如此类的问题,索性就写一篇文章,聊聊我个人这些年做中间件开发的感受吧。 什么是中间件开发? 我大四实习时...
  • NewSQL的三种分类中,新架构和云数据库涉及了太多与数据库相关的底层实现,为了保证本文的范围不至太过发散,我们重点介绍透明化分片数据库中间件的核心功能与实现原理,另外两种类型的NewSQ...
  • 作者:路路 热爱技术、乐于分享的技术人,目前主要从事数据库相关技术的研究。不定时更新个人公众号WU双。...今天想为大家介绍下中间件开发所需的技能,说不定能够吸引对中间件开发感兴趣的同学,.
  • 随着业务和用户数量的增多, 企业对于程序的高可用,高并发能力有了更高的要求.MyCat作为一个优秀的分库分表中间件应运而生. 可以理解它是一个虚拟数据库,准确地说是数据库的一个代理 在程序中扮演的角色如下 MyCat的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 130,146
精华内容 52,058
关键字:

数据库中间件开发