文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mysql读写分离在项目实践中的应用

2020-10-22 03:11

关注

mysql读写分离在项目实践中的应用

工程背景介绍:

我们开发了一个万能接口,用户通过这个接口中传入数据,我们拿到数据进行复杂的逻辑处理然后再将数据各种匹配展示分发等操作,处理的流程相当庞大,接口中我们只保留了接收数据和返回一个本次请求的id的操作,其余操作都是异步到其他程序中处理的。

返回id的操作是需要和数据库进行两次连接,一次读库得到最新的id 然后把id更新到数据库。

v2-4d5a5146e4cb1120114a4e26917d8222_720w.jpg

项目出现问题:

我们以为自己的程序就像上图中的那样运行,一次请求,读库,写库,返回id,其余异步处理。但是没有考虑高并发,强压力写的性能问题,在高并发下,多个接口线程同事访问数据库,这样的情况会出现并发同步的问题,当然这点我们是考虑到了 ,使用线程锁可避免数据的幻读,重复读等。可一旦这样大量的接口线程堆积,很快服务器cpu将扛不住发生宕机!

那如果不试用线程同步锁呢,很明显不只是数据的错乱问题将发生,数据库在极大线程的访问压力下也将抗不住,cpu使用率达到85%!程序面临着瘫痪的风险。

v2-87f40e3a447c72efd7f6327d44fa457f_720w.jpg

解决方式:

1.数据库集群?

好处:增加数据库服务器,压力随之分摊到几个服务器中,减小数据库压力

坏处:硬件成本大 数据库主从问题 哈希一致性问题 单点故障问题

2.接口服务器集群

好处:访问压力被分摊到几个服务器中 线程的堆积问题得到有效解决

坏处:硬件成本大 单点故障问题 nignx负载均衡服务器的搭建 操作复杂

 

以上两种方案都是增加硬件成本,加大了开发难度,难以真正实施

终极解决方案:读写分离的应用!

好处:硬件成本不变 释放了数据库压力 再也不用担心数据库和服务器压力了

坏处:无

实现思路:

1.对读库操作解耦合,增加缓存服务ecache(也可以是其它如redis),读不再直接面对数据库,只有缓存中没有数据时才把数据库中的数据读写到缓存之中,这样数据库的读压力完全被释放!

2.对写数据库进行异步操作,在更新数据库操作中增加消息中间件rabbitmq(也可以是其它如activemq,spring对前者支持较好),我们将更新后的id写入到rabbitmq中,单线程消费mq到数据库,由于此时跟新后的id已经返回给客户,写库的操作并不需要高时效性。这样数据库的写压力也完全被释放!

这个时候我们来看看整个操作,读写均不再直接面对数据库,但是数据库中的数据依然没有错乱,缓存的操作速度极快,接口服务器也不再有很多的线程挤压,我们在硬件成本不变的情况下解决了数据库和服务器压力过大,可以说是一种完美的解决方案

v2-93fb5dcaa468c2500f41fe25f056289d_720w.jpg

至此,压力的问题成功解决,当然问题的解决并非是一撮而就的,这里还有着一些其它的问题,比如分布式事务的解决,这里不再一一赘述,后面我们找机会仔聊聊这些分布式服务的经典问题!

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯