Java小技巧:mysql2002错误

本文讲述了作者在担任架构师期间,遇到MySQL数据库性能瓶颈,尤其是2002错误的问题。通过分析,作者决定采用数据库切分策略以提高系统性能。在面临CAP定理的抉择时,选择了牺牲一致性,遵循BASE理论,实现基本可用。通过哈希分散数据,确保即使部分数据库出现问题,系统仍能保持基本运行。然而,这也引入了数据不一致性的风险,文中讨论了如何在这种情况下平衡业务需求和数据完整性。
摘要由CSDN通过智能技术生成

一、

前些年,互联网行业里对架构师这个岗位的标准还不是很清晰。所以,很多架构师的工作往往就是一些技术被公司认可的资深工程师负责。

彼时,正巧我也是这类人员之一,故也得到了一个从零开始架设一套广告投放平台的机会。

我很喜欢钻研技术,对这种机会自然很看重。

那时候,架构并无如今这么复杂,一开始就是前面搞几个 Web 应用,后面共享个数据库。大致像这样:

image

当然,上面的架构其实做了很多简化,省略了很多细节。比如,为了提高性能做的缓存,为了提高吞吐做的负载均衡统统没有在上图给出。因为这些和本章话题无关,暂时咱们就忽略这些东西,只看核心部分。

这套架构初期运行还是没什么问题的,再加上一些缓存机制,初期一些性能问题都通过调整缓存提升缓存的碰撞率应付了过去。

可是,随着广告投放量的增大,广告的访问量也在暴涨。这些暴涨的访问量引发了性能问题。当时,由于前端有负载均衡,应用层倒是没出现什么问题……

问题出在后面的数据库上

二、

这套架构数据库用的是 MySQL,本身也只有一台主库在对外服务,另外一台备库采用了 MySQL 自己的全同步机制做实时备份。

当广告访问量暴涨的时候,因为业务需要,很多数据需要在数据库中做实时插入,这就导致了大量的磁盘 IO 产生。这些大量的磁盘 IO 造成了数据库本身性能的急剧下降。

悲催的是,整套广告平台的所有功能又都是共享一个数据库的,所以随着数据库本身的性能下降,平台的所有功能都受到了影响。

由于问题主要在于大量广告流量的写入,所以,靠读写分离的方案去缓解问题这条路就走不通了。

只好先升级硬件了。在经过了几轮硬件升级和数据库调优之后,单数据库再也无法支撑不断上涨的流量了。没办法,要考虑搞数据库切分了。

那时候,我个人是很恐惧数据库切分的。

原因不仅仅在于需要在应用层多写很多复杂的逻辑,其根本原因是当时流行的 2PC

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值