专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

分布式系统中客户访问到不一致窗口的旧数据怎么处理_服务器

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/7 17:03:44       共计:3546 浏览

分布式系统中客户访问到不一致窗口的旧数据怎么处理?

分布式的系统有很多种,通常情况下,我们的业务系统有数据存储分布式的,也有应用程序分布式的,不同的场景会应用到不同的分布式解决方案。

你这个问题提到了访问到旧数据,感觉像是数据库读写分离或者是主从机的场景。通常我们对于数据库主从设计,都是设置一台主库数据库服务器,一台或多台库数据库服务器,通过数据库日志订阅的模式进行数据同步。我们的系统也是写操作在主库进行,读操作在从库进行。

而这种方式中,主库和从库之间的数据同步会需要一定的时间,所以很大概率会出现写入主库的数据还没有同步到从库,用户就去读数据了,往往读出来的就是旧数据。

那么这种情况怎么来避免呢?

其实解决方案也有不少,主要看我们的场景是什么,然后考虑如何应用。

最简单的就是半同步复制(semi-sync)

这种实现方式非常简单,我们的数据库同步就自带了此功能。当我们的写请求到主库以后,主库先自己把数据保存好,但是并不返回,而是等待从库同步,从库同步完成后,主库再告诉我们的应用程序数据保存成功。

使用这种方式的话,我们不需要修改任何的代码,数据库原本就带有这样的功能,配置也非常方便。但是不好的就是,我们的写请求时间会变长,锁表的时间也会增加,这会导致数据执行效率下降、吞吐量也就降低了。

如果我们对效率比较看重,那么可以使用这种方式——缓存

缓存是一个好东西,在我们的各个业务场景都大量的使用。而缓存也可以用来保证读写分离以后的数据一致性。

方法其实也比较简单,就是我们在数据Commit成功以后,让缓存里面写入一条数据,我们的读并不直接作用到从库,而是作用到缓存上,这样就能够保证用户每次读取出来的数据都是最新的了。

不过,这里有一个问题,就是如果我们在一个事务里面进行了写操作,事务提交之前去读这个数据的话,如果去读缓存,就会读到旧的数据,可能导致我们的业务失败。所以,我们这里需要做一个处理,如果在事务里面读的话,我们需要读写库。只有没有事务的读,才会读缓存,这样就可以防止这种情况了。

当然,关于数据库缓存的一致性保证,其实是一个比较复杂的场景,还有很多的问题在里面,也有很多的解决方案。不管如何,使用这种方式的话,首先是需要增加设备成本——缓存服务器,其次就是代码需要进行改动,业务逻辑复杂度也会提高。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:IDC机房空调系统气流组织常见种类是怎么样的_服务器 | ·下一条:pubg突然卡死但有声音_服务器

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有