[环境]
有多台高性能数据库服务器组成一个中央服务器集群,提供核心共享数据库,可以认为中央服务器是绝对安全的.另外有若干台数据库服务器供业务访问.[业务流程介绍]
办理某业务时需要对信用额度进行检测和操作.各种业务对额度的访问频繁.大致流程如下:
业务服务器:提交单据时,判断信用额度减冻结额度是否大于0,大于0则增加冻结额度,信用额度余额不变,业务继续.小于0则禁止提交,中止操作.
中央服务器:单据确认成功时,判断信用额度余额是否足够,足够则取消提交时的额度冻结,即冻结额度减少,同时也扣除信用额度.额度不足则禁止确认,中止操作.[目的]
现在做一个设计,保证对这些额度数据的高可用性和高性能.
方案A:
设计一个表,存在于中央服务器,有冻结额度和信用额度余额字段(当然还有其他基本信息).业务服务器对额度的操作都在这个集群上完成.数据流程同上文中介绍.
当一台业务服务器挂掉时,立刻切换到其他业务服务器操作.依然保持对额度信息的访问.
方案B:
分别设计一张信用额度表和一张冻结额度表.
信用额度余额表存在于中央服务器.冻结额度表存在于业务服务器.为防止业务服务器挂掉而无法访问冻结额度.再增加一组业务服务器的备份服务器,用事务同步将所有业务服务器中的冻结额度实时备份至备份服务器.当业务服务器挂掉时,立即切换至其他业务服务器,并访问备用服务器的冻结额度信息.
关于备用服务器的另一个变招是,将所有业务服务器的冻结额度数据与备用服务器做合并同步,这样能减少问题的复杂度,但可能造成数据的延迟.数据流程:
发生业务提交单据时,分别读取业务服务器上冻结额度与中央服务器信用额度,判断可用余额是否足够,若余额足够,则增加业务服务器上的冻结额度,若不够,则禁止操作.当确认单据时,读取中央服务器的信用额度,若足够,则扣除额度,并且访问业务服务器,取消单据的冻结额度.若额度不足,则禁止操作.
文字比较多,简洁表达一下就是,方案A将冻结额度和信用额度存储在中央服务器,对冻结额度的更改和对信用额度的更改都在中央服务器上进行,实现简单,缺点是对冻结额度和信用额度的更改都在中央服务器,增加中央服务器压力.而方案B是将冻结额度与信用额度分开存储.对冻结额度的更改只在业务服务器上进行,保证了冻结额度的高效访问,分解了了对额度的访问,也一定程度减少中央服务器压力.缺点是实现复杂,可能会有延迟和不可靠性,跨服务器操作有损性能.而且需要增加另一个备用服务器作实时同步.
提问:1:到底哪种方案更合理呢?2:是否有更优方案?3:猜猜哪种方案是我的,哪种方案是领导的?

解决方案 »

  1.   

    信息严重不足哦,最重要的数据量和预算都没有说明
    方案没有好坏之分,只有是否适合数据量不大则方案a,预算不足则方案b你估计方案b吧,技术人员往往少考虑预算
      

  2.   

    楼主的集群是怎么配的,能达到什么样的效果?
    事务同步将会有5-10s 的延迟。个人建议第二种,但是可以第二种应该是 查询db很多频繁的查询都用从机去判断。减少主机的查询,主机同步到丛机,从机可以有很多。。但是你这种连贯性的动作 不适合放在两台服务器上搞。同步本身石油延迟的。
      

  3.   

    昨天领导定下方案了.
    公布结果,顺便附上我给领导发的邮件分析.
    太长了,进我博客查看:
    http://blog.csdn.net/xxyj6450/article/details/7933399