浅谈管理软件数据库负载均衡及实现 (转)

来源:互联网 发布:非结构化数据存储 编辑:程序博客网 时间:2024/04/30 10:31

在我的系统里面一直想加这个功能,但觉得实在不靠谱,不但要考虑稳定性,而且这样的设计会给系统带来多大性能上的提高也是必须先考虑的,如果没有性能的提高多稳定也是没作用的,不过今天还是拿出来给大家看看,也帮忙考虑一下。

WinformWebform在负载均衡处理的大部分时候有些不太一样的重点,Winform偏重点可能是数据库的负载均衡,而Webform重点偏向的是网络负载均衡(注:Webform里数据库的负载均衡也是一样的重要)。

系统定位Winform应用,SQL Server系列数据库(OracleMySQL就可以用自带的),面向中小企业,注册用户数量大概会在1000以下,按网友老马的算法,平均在线用户数是注册用户数的1/3,大概是333,再按大概是50%的请求交换,大概是200个并发,显然瓶颈应该不会在这里。

       那么对于业务复杂的管理系统来说如果数据库设计不当或者数据库设计不得不冗余时,数据库的瓶颈应该是第一时间感受得到的。我有想过把单据表在服务端中支持库表散列,当用户批量提取数据时由系统自动处理并返回结果,但这样的设计对于报表的二次开发来说应该是一个负担。如果分成个应用服务器,那么数据就比较松散,也不利于一些功能开发。而且我想我暂时也没条件做这么大的项目,先考虑现状:并发的用户数不多,数据库存取的数据量大,业务复杂导致数据查询复杂。

       回顾现有的项目,SQL Server 对于单表100W数据的处理速度应该是可以接受的,包括简单的SQL查询也可以得到优化,对于复杂的SQL查询可能就有点吃力了,CPU100%,看了关于SQL Server上实现负载均衡集群的一些相关资料后,实现原理大概是,写数据时往多个数据库服务器同时写,读取的时候“随机”从一台服务器里读取。关键在于实现多个数据库的实时同步,数据要保证一致而且消耗要小效率要高。

       对于我的管理系统来说,客户端是通过TCP向服务端提交数据,由服务端处理并读/写数据库,我的想法是:在服务器读数据时“随机”(轮回算法)从一台服务器里读,而写数据时往多个数据库服务器同时写。

       这种做法一方面,稳定性很难说,没实现出来,另一方面对于常规的使用数据库导入数据类似这样的操作会变得更复杂了。

       代码已经实现了一部分了,不敢更新上去,毕竟其中一个用到的项目是政府的,如果数据一不小心弄错了,可能会导致麻烦甚至官司。

       希望各位高手、牛人给小弟一些指导,在此先谢过。!

 

后记:能力提升 - 来源于从别人的指导中学习进步。文笔不怎么样,旨在分享!