权限管理、用户权限系统、开源用户权限系统、信息化建设标准基础数据管理平台
代码改变世界

优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 读写分离

2013-04-18 09:23  通用C#系统架构  阅读(13296)  评论(64编辑  收藏  举报

     好久没写博客了,一方面是日常工作繁忙,另外一方面是想更多的时间陪陪家里人,享受春天的美好时光,还在写一本《程序员,你伤不起》的一本书要由人民邮电出版社出版;我的性格可能也跟大多数程序员类似吧,没什么兴趣爱好、不擅长与人交流、平时话也少、也不够幽默,唯一的优点就是一个实实在在。

下图命名为:孤独的程序员

      由于公司的主服务器责任重大,而且满负荷跑了接近2年了,怕万一有闪失主服务器出现硬件故障后重新购买新服务器订货到货周期可能会比较长,所以公司在春节期间购买了一台更强大的新服务器来当备用服务器,购买的初衷就是防止出现硬件故障。

      春节前新服务器就采购到位了,由于手上事情比较多根本忙不过来配置新服务器,春节休息期间看了一些数据同步的资料,准备把主数据库的读写分离,当初主要思路见下图。

很多需要读取的都从另外一个服务器读取,这样主服务器的压力会小很多,2台服务器之间进行读写分离。

     以前习惯了什么事情都自己亲自操刀,也想也改变一下思维模式,把数据库镜像、读写分离的工作安排给部门里的其他人员去实施,自己只是抛出了一些主导核心思想,结果折腾了很久没能那么顺利实现,期间主要问题有:

     1: 读写分离,进行了复制订阅后,同步的周期非常长,在主服务器繁忙时,3分钟都无法进行同步。

     2:主服务器无形中额外增加了更严重的数据同步负担,没能达到预期的效果,反而效果更糟糕。

     3:服务器维护人员对数据库也不是很精通,主要精通硬件及网络配置维护,他们平时的各种维护管理工作也非常繁杂,无法集中精力专门搞定这个任务。

    经过第一次读写分离接近失败后,思考了2-4周时间,还是打算亲自操刀一下否则没有非常狠的力度。

     1:分析主服务器最影响性能效率的SQL语句,几乎把所有常用的语句都整理出来,分析公司的核心业务、核心数据表。

     2:把最核心的少数几个表同步到新服务器,这样同步的效率高一些,主服务器的压力也小一些,而不是选择同步所有的表,同步所有的表意义不大。

     3:把推送模式修改为从主服务器拉的模式进行同步,由于新服务器的性能更好,承担的工作压力更小,所以新服务器主动去拉数据的模式。

     4:把主服务器上的所有SQL语句、索引都进行优化,主服务器的性能提升了接近4倍,然后再进行数据同步工作相对轻松了很多,效率也高了很多。

     5:把所有实时性要求不高的,数量庞大的,操作频繁的SQL语句都从新服务器读取,解放主服务器的磁盘读写压力。

     6:新服务器的性能非常强大,所以一部分磁盘用来做镜像、另外一部分磁盘做数据同步,这样新服务器的磁盘也充分利用起来了,没有闲置的磁盘。

     7:新服务器装了2个SQL2008实例,一套用来数据同步,一套用来数据镜像,这样丢失数据的概率降低到极点、同时也不担心发生硬件故障数据丢失了。

    

    其实说说复制订阅很简单一样,一晚上折腾了5-6次,耗时4-5个小时才能成功同步,很多东西不是亲自动手是不知道其中的痛苦,嘴巴说说也就几句话,这就是为什么需要有工作经验的开发人员,而不是理论知识够能纸上谈兵就可以了,实战才是最锻炼人的。

      第一次设置数据库的发布订阅,以前工作上也没这个需要,设置成功了,进行了几次测试都正常这时候已经是深夜2点了,新服务器正常开始运转,又检测了几天复制订阅的运行情况都良好,不管在业务高峰期还流量不大时,运行状态都比较稳定,把主网站上的一些需要大量读取数据的程序进行了调整,从新服务器读取,读写分离成功了。

      耗费了巨资购买的新服务器,从2-3个月的接近闲置空闲状态进入了忙碌的工作状态了,舒服了很多心也不堵了,数据库镜像也做好了,数据库同步读写分离也如愿了,主服务器的磁盘I/O压力接近降低了10倍以上最高时降低了100倍,对主机的磁盘寿命、整个网站的稳定高效性运行打了牢固的基础,接着应该一年半年内不用优化也可以了,也不用购买新服务器,这2个服务器足够用2-3年的甚至更长时间也没关系。

      在主服务器优化前经常有超过2秒运行的SQL语句非常多,有时还有耗时20-30秒的SQL语句,经过一周的优化后,主服务器上几乎看不到超过2秒的,绝大部分都能在0.5秒以内能运行完毕了。

      经过这次优化,有2个心得体会,一方面决策很重要、另一方面执行力也很重要;没有强劲的执行力决策就是漂浮在空中的无法落地。遇到任何困难不能妥协、坚决想办法克服各种困难,每次突破就是一次职业生涯上的一次升华。

     其实公司里有不少人想加薪、获得更好的待遇;也总是抱怨自己的水平无法施展什么的;其实公司里需要做的事情很多,需要去主动承担很多艰巨的任务、去做一些自己并不擅长的事情;例如我也不是专业DBA的工作岗位,以前也从来没优化过这么大并发量的电子商务网站的核心数据库,但是需要去突破,克服困难,把一个个难题解决掉,别人其实都能看到你做出贡献了。

 

 

     其实写文章比空想需要更强大的能力,能通顺的写出一篇文章让别人有所收获是一种贡献;若这篇文章能对你有所帮助,请不要吝啬点击“推荐”,点一下推荐不收费、不费力、可以鼓励读者继续写出更好的文章分享给大家,不需要钞票,只求一个推荐

 

     思想很关键、毛驴车很便宜也不需要加油、绿色环保、驴肉还可以吃、车还可以当柴火烧。当你最想要是什么?最想达到的目的是什么?

     

 



C# ASP.NET 通用权限设计、通用权限管理、通用权限组件、单点登录、集中式权限管理、统一授权体系、分级管理分级授权


微信扫一扫加好友