基于 Vue3 打造前台+中台通用提效解决方案内附源码电子书

#1

download:基于 Vue3 打造前台+中台通用提效解决方案内附源码电子书

数据异构简单

何谓数据异构,上周买卖部门商品的同事过来做分享,又看到这个词,他的PPT里面是 数据库异构。其实我们以前做的事情,也是能够称之为数据异构。比方我们将DB里面的数据耐久化到Redis里面去,就是一种数据异构的方式。

假如要下个定义的话:把数据按需(数据构造、存取方式、存取方式)异地构建存储。

常见应用场景

分库分表中有一个最为常见的场景,为了提升数据库的查询才能,我们都会对数据库做分库分表操作。比方订单库,开端的时分我们是依照订单ID维度去分库分表,那么后来的业务需求想依照商家维度去查询,比方我想查询某一个商家下的一切订单,就十分费事。

数据异构总结起来大约有以下几种场景

  1. 数据库镜像
  2. 数据库实时备份
  3. 多级索引
  4. search build(比方分库分表后的多维度数据查询)
  5. 业务cache刷新
  6. 价钱、库存变化等重要业务音讯

数据异构方向

在日常业务开发中大致能够分为以上几种数据去向,DB-DB这种方式,普通常见于分库分表后,聚合查询的时分,比方我们依照订单ID去分库分表,那么这个时分我们要依照用户ID去查询,查询这个用户下面的订单就十分不便当了,当然能够运用统一加到内存中去,但这样不太好。

所以我们就能够用数据库异构的方式,重新依照用户ID的维度来分一个表,像在上面常见应用场景中引见的那样。把数据异构到redis、elasticserach、slor中去要处理的问题跟依照多维度来查询的需求差不多。这些存储天生都有聚合的功用。当然同时也能够进步查询性能,应对大访问量,比方redis这种抗量银弹。

数据异构的常用办法

1. 完好克隆

这个很简单就是将数据库A,全部拷贝一份到数据库B,这样的运用场景是离线统计跑任务脚本的时分能够。缺陷也很突出,不适用于持续增长的数据。

2. 标志同步

这个是业务场景比拟简单的时分,理想状况下数据不会发作改动,比方日志数据,这个时分能够去标志,比方时间戳,这样当发作毛病的时分还能够回溯到上一次同步点,开端重新同步数据。

3. binlog方式

经过实时的订阅MySQL的binlog日志,消费到这些日志后,重新构建数据构造插入一个新的数据库或者是其他存储比方es、slor等等。订阅binlog日志能够比拟好的能保证数据的分歧性。

4. MQ方式

业务数据写入DB的同时,也发送MQ一份,也就是业务里面完成双写。这种方式比拟简单,但也很难保证数据分歧性,对简单的业务场景能够采用这种方式。

binlog方式

binglog是数据的日志记载方式,每次对数据的操作都会有binlog日志。如今开源的订阅binlog日志的组件,比方运用比拟普遍的canal,它是阿里开源的基于mysql数据库binlog的增量订阅和消费组件。

由于cannal效劳器目前读取的binlog事情只保管在内存中,并且只要一个canal客户端能够停止消费。所以假如需求多个消费客户端,能够引入activemq或者kafka。如上图绿色虚线框局部。

我们还需求确保全量比照来保证数据的分歧性(canal+mq的重试机制根本能够保证写入异构库之后的数据分歧性),这个时分能够有一个全量同步WORKER程序来保证,如上图深绿色局部。

canal的工作原理

​ 先来看下mysql主备(主从)复制原理

mysql主备(主从)复制原理,从上层来看,复制分红三步:

  1. master将改动记载到二进制日志(binary log)中(这些记载叫做二进制日志事情,binary log events,能够经过show binlog events停止查看);

  2. slave将master的binary log events拷贝到它的中继日志(relay log);

  3. slave重做中继日志中的事情,将改动反映它本人的数据。

  4. canal模仿mysql slave的交互协议,假装本人为mysql slave,向mysql master发送dump协议

  5. mysql master收到dump恳求,开端推送binary log给slave(也就是canal)

  6. canal解析binary log对象(原始为byte流)

我们在部署canal server的时分要部署多台,来保证高可用。但是canal的原理,是只要一台效劳器在跑处置,其它的效劳器作为热备。canal server的高可用是经过zookeeper来维护的。

留意点

  • 确认MySQL开启binlog,运用show variables like ‘log_bin’; 查看ON为已开启
  • 确认目的库能够产生binlog,show master status 留意Binlog_Do_DB,Binlog_Ignore_DB参数
  • 确认binlog格式为ROW,运用show variables like ‘binlog_format’; 非ROW形式登录MySQL执行 set global binlog_format=ROW; flush logs; 或者经过更改MySQL配置文件并重启MySQL生效。
  • 为保证binlake效劳能够获取Binlog,需添加受权,执行 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘admin’@’%’ identified by ‘admin’; FLUSH PRIVILEGES;

MQ方式

mq的方式,就相对简单,实践上是在业务逻辑中写DB的同时去写一次MQ,但是这种方式不可以保证数据分歧性,就是不能保证跨资源的事务。注:调用第三方远程RPC的操作一定不要放到事务中。

总结

本文主要叙说了数据异构的运用场景,办法。这里面触及到的activemq以及canal并没有深化剖析,关于这块的内容能够直接参考相关详细文档,文中已给了链接地址。

依据数据异构的定义,将数据异地构建存储,我们能够应用的中央就十分多,文中说的分库分表之后依照其它维度来查询的时分,我们想脱离DB直接用缓存比方redis来抗量的时分。数据异构这种方式都可以很好的协助我们来处理诸如此类的问题。