云事业群CTO线技术晋升考核机试题-分布式专题-D 分布式数据同步

2023****年(Q3财年)技术部门CTO线技术人员晋升考核机试题

分布式篇-D 分布式数据同步

* 参考答案*

出题人:湖北 TL 田超凡
答案制定:湖北 TL 田超凡

***** 试卷启用前绝密 ****

1 缓存一致性产生背景

答:当需要频繁访问数据库的时候,虽然数据库底层基于B+索引检索数据,但是仍然会十分消耗磁盘IO资源,导致数据库访问压力增加。

此时可以基于缓存设计来减轻数据库访问压力。

2 多级缓存架构设计方案

答:多级缓存架构设计采用的设计模式是装饰者模式。

  1. 首先是JVM内置缓存,如ehcache、oscache。数据同步可以基于RMI机制(JVM和JVM之间的通讯)实现,效率比较低。
  2. 其次是外置缓存,如redis、memcached等,先查内置缓存,内置缓存没有再查外置缓存,外置缓存没有再查数据库,然后同步数据到外置和内置缓存中。

3 Mysql与Redis缓存一致性原理

答:

  1. 基本查询流程:

首先从redis缓存中查询数据,如果能查到就直接返回客户端,如果不能查到就再到数据库中查询,把查询到的数据同步到redis缓存中,再返回查询结果给客户端。

  1. 基本数据同步实现原理:

大多数场景Redis都是作为只读缓存,当mysql做增量写操作时,会同步到Redis,此时分以下几种情况讨论:

  1. Insert db,insert redis 增量同步
  2. Update db ,清除redis缓存,懒加载
  3. Update db ,更新redis缓存,增量同步
  4. Delete db, 清除redis缓存,增量同步

4 如果数据库数据发生变化,如何同步给Redis

答:

  1. 删除redis缓存,增量同步
  2. 基于MQ异步同步
  3. 基于canal异步同步
  4. 基于canal+MQ异步同步

5 canal数据同步实现原理

答:canal主要用途是对mysql增量日志(binlog)解析,提供增量数据订阅和消费。

canal 数据同步实现原理:

  1. Canal 服务器端伪装成mysql从节点,订阅mysql主节点binlog日志
  2. 当mysql主节点binlog日志发生变化的时候,会通知给canal服务器端
  3. Canal 服务器端接收到binlog增量数据日志,解析并转换成json格式输出到canal客户端
  4. Canal 客户端接收到canal服务器端传递的增量数据日志后,异步写入到redis实现数据同步

优化建议:可以基于canal+kafka实现高效的异步数据同步,canal客户端接收到canal服务器端发送的增量数据日志后,异步将增量数据消息投递到kafka服务器端,再由kafka服务器端下游消费者订阅kafka主题,异步获取增量数据并同步到redis,大大提高大数据量数据同步场景下的数据同步效率。

相关推荐
弹简特6 天前
【JavaEE12-后端部分】SpringMVC07-综合案例3-从留言板看前后端交互:接口文档与HTTP通信详解
spring boot·网络协议·spring·http·java-ee·交互
弹简特6 天前
【JavaEE11-后端部分】SpringMVC06-综合案例2-从用户登录看前后端交互:接口文档与HTTP通信详解
java·spring boot·spring·http·java-ee·tomcat
Haven-7 天前
【无标题】
java-ee
♡喜欢做梦8 天前
Spring Boot 日志实战:级别、持久化与 SLF4J 配置全指南
java·spring boot·后端·spring·java-ee·log4j
QQ24391979 天前
语言在线考试与学习交流网页平台信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·spring boot·sql·学习·java-ee
想不明白的过度思考者9 天前
JavaEE进阶 ——【SpringBoot 快速上手】从环境搭建到HelloWorld实战
java·spring boot·spring·java-ee
Dylan的码园11 天前
从软件工程师看计算机是如何工作的
java·jvm·windows·java-ee
弹简特12 天前
【JavaEE09-后端部分】SpringMVC04-SpringMVC第三大核心-处理响应和@RequestMapping详解
java·spring boot·spring·java-ee·tomcat
弹简特14 天前
【JavaEE08-后端部分】SpringMVC03-SpringMVC第二大核心处理请求之Cookie/Session和获取header
java·spring boot·spring·java-ee
手握风云-15 天前
JavaEE 进阶第十九期:MyBatis-Plus,让 CRUD 飞起来
java·java-ee·mybatis