短网址程序在多服务器组负载均衡系统中遇到的问题
由于短网址业务量的逐渐增大,原有的服务器系统负载已经接近极限。为了更好的满足用户的需求,FT12短网址有新增了两台服务器,和原有的一台服务器组成负载均衡系统。前段任何一条短网址的访问,都会先经过负载均衡服务器,然后再随机转发给后台的任意一台服务器处理。这样就能有效的提升短网址的稳定性和快速访问。但经过一段时间的使用,发现了有些致命的缺陷。
用户A生成一条短网址,这个请求被随机转发到后台的任意一台服务器。然后这台服务器再链接数据库,获取短链接代码,最后进行插入操作。这个逻辑看似没有什么漏洞,但是每次在网站访问高峰期,就会发生一个逻辑上的bug。那就是用户B也在这个时候生成一条短网址,这个请求被转发到了另一台后端服务器B,那么这个时候服务器B也会连接数据,获取短网址代码,然后再插入数据库。那么,问题来了。这个时候,用户A和用户B很有可能再链接数据库时,获取了相同的短网址代码,而短网址代码(CODE)在数据库中是唯一的,其中必然会有一个用户的数据库插入操作会以失败告终。这大大影响了用户的正常使用体验。为了解决这个问题,我们阐释了很多种方法。
上图是我们最终的解决方案。对服务器的数据库操作使用了try函数,如果插入数据库不成功,则重新获取短网址代码,然后再次进行插入。这样的逻辑设计很好的解决了负载均衡下,短网址的生成成功率极大的提升了。