<commit_before>---
layout:     post
title:      [数据库]聊聊数据库的读写分离
subtitle:   
date:       2018-12-02
author:     huanzhewu
header-img: img/post-bg-ios9-web.jpg
catalog: true
tags:
    - 数据库
---

今天来聊一聊高性能数据库的读写分离。读写分离的本质是分散数据库服务器的访问压力。mysql集群的架构图如下所示：

![image-20181202095446194](http://pj05m6t8l.bkt.clouddn.com/3_0.png)读写分离的基本实现是：

- 以一主一从或一主多从的服务器配比来构建集群
- 数据库主机（后续简称“主机”）只负责写操作，数据库从机（后续简称“从机”）只负责读操作
- 来自业务服务器写操作请求到主机上，读操作请求到从机上
- 主机将数据通过复制，同步到所有的从机上

我们经常听到“一主多备”，注意读写分离架构中 并不是备机，而是从机。从字面上理解，备机一般只提供数据备份的能力，而不直接向外提供服务能力。而从机是直接向外提供了读数据度的能力。

读写分离虽然可以分散业务对服务器主机的访问压力，但是也引入了其他的复杂度。这体现在：

- 主从数据同步问题
- 实现方式的选择

主从数据之间的同步存在一定的延迟，数据量越大，延迟时间越长，延迟1分钟也是有可能的。在某些业务场景来说，这种延迟是不能忍受的。例如，在腾讯课堂上，用户在课程详情页报名了一门课程时会去数据库写用户的报名关系，报名成功后，页面会跳转到任务页，在任务页会校验用户的报名关系。如果主从数据同步存在较长的延迟，就会出现用户报名成功后无法马上进入任务页的情况.
<commit_msg>update post<commit_after>---
layout:     post
title:      [数据库]聊一聊数据库的读写分离
subtitle:   
date:       2018-12-02
author:     huanzhewu
header-img: img/post-bg-ios9-web.jpg
catalog: true
tags:
    - 数据库
---



今天来聊一聊高性能数据库的读写分离。读写分离的本质是分散数据库服务器的访问压力。mysql集群的架构图如下所示：

![image-20181202095446194](http://pj05m6t8l.bkt.clouddn.com/3_0.png)读写分离的基本实现是：

- 以一主一从或一主多从的服务器配比来构建集群
- 数据库主机（后续简称“主机”）只负责写操作，数据库从机（后续简称“从机”）只负责读操作
- 来自业务服务器写操作请求到主机上，读操作请求到从机上
- 主机将数据通过复制，同步到所有的从机上

我们经常听到“一主多备”，注意读写分离架构中 并不是备机，而是从机。从字面上理解，备机一般只提供数据备份的能力，而不直接向外提供服务能力。而从机是直接向外提供了读数据度的能力。

读写分离虽然可以分散业务对服务器主机的访问压力，但是也引入了其他的复杂度。这体现在：

- 主从数据同步问题
- 实现方式的选择

主从数据之间的同步存在一定的延迟，数据量越大，延迟时间越长，延迟1分钟也是有可能的。在某些业务场景来说，这种延迟是不能忍受的。例如，在腾讯课堂上，用户在课程详情页报名了一门课程时会去数据库写用户的报名关系，报名成功后，页面会跳转到任务页，在任务页会校验用户的报名关系。如果主从数据同步存在较长的延迟，就会出现用户报名成功后无法马上进入任务页的情况.

{'fraction_non_alphanumeric': 0.11145898559799625, 'fraction_numerical': 0.041327489041953665, 'mean_word_length': 6.910891089108911, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1790932', 'n_tokens_mistral': 1317, 'n_tokens_neox': 1576, 'n_words': 57}