格瑞趋势(Green Trend)是一家专注于数据库集群领域的行业解决方案供应商,致力于数据库的负载均衡集群及分布式数据库集群技术的研发和推广。基于Microsoft SQL Server的内核,研发出了Moebius(莫比斯)系列集群系统,解决了困扰在广大SQL Server用户心头的两大难题: 如何构建数据库的负载均衡集群? 如何解决数据库高性能、高可伸缩性与低价格之间的矛盾?
   问
您的应用系统是否正在使用SQL Server数据库?
您的客户是不是总在抱怨页面结果反馈的非常慢,一些操作的实时性得不到保障?
您的SQL Server系统的负载是不是总是维持在一个非常高的状态下?
您是不是还在为数据库的扩展而发愁呢? 

Microsoft不是提供了集群(MSCS)吗?难道不能解决这些问题吗?和Moebius for SQL Server负载均衡集群有什么区别?Microsoft SQL Cluster Server、SQL2005镜像、或第三方的HA(高可用性)集群都是单纯的解决高可用性的,不能实现负载均衡。
 数据库只运行在一个节点上,当出现故障时,另一个节点只是作为这个节点的备份;
 因为始终只有一个节点在运行,在性能上得不到提升,系统也就不具备扩展能力;
 当现有机器的性能不能满足应用的负载时,只能更换更高配置的机器。

既然是这样,那么有没有一个集群既可以实现并行计算达到数据库的高性能,又可以保证数据库的高可用呢?能不能用低成本实现集群的持续扩展呢?
Moebius集群将会把您带入一个全新的负载均衡集群世界, 您将以最小的源代码改动,获得SQL server系统的高效运转。
Moebius for SQLServer负载均衡集群是由一组相互独立的服务器组成,通过中间件相互协作形成一个统一的整体,由多个机器共同支撑业务,实现数据库的高性能。
Moebius for SQLServer负载均衡集群支持无共享磁盘架构,集群中各机器可以不连接一个共享的设备,数据可以存储在每个机器自己的存储介质中,这样冗余的硬件架构不但可以避免单点故障而且提供了杰出的故障恢复能力。一旦发生系统失败,Moebius for SQLServer负载均衡集群对用户保证最高的可用性,保障关键业务数据不丢失。由Moebius构建的集群中,需要更高数据库处理速度时,只需简单地增加数据库服务器就可以实现。这样可以大大减小硬件投资的风险,而且大大提高现有服务的质量,扩展非常方便。             www.grqsh.com

解决方案 »

  1.   

    Moebius for SQLServer负载均衡集群支持无共享磁盘架构,集群中各机器可以不连接一个共享的设备,数据可以存储在每个机器自己的存储介质中,这样冗余的硬件架构不但可以避免单点故障而且提供了杰出的故障恢复能力。一旦发生系统失败,Moebius for SQLServer负载均衡集群对用户保证最高的可用性,保障关键业务数据不丢失。 
    试问楼主:
    1.群集共同运行业务,你的中间件是如何工作的?
    2.如果A,B,C共同运行群集业务,假设某一个表放在A服务器上,但这个A服务器出现故障了,你如何保证关键业务数据不丢失?
      

  2.   

    大概看了一下这个公司的网站, 针对三种解决方案,我有这些疑问:1. 第一种解决方案,集群不是instance-level的,应该是通过client的DP layer增加dispatcher来实现的,然后在两个宿主DB instance之间进行同步。 “数据同步完成后客户端才会得到响应”,这样的performance和原来比较是什么样的?例如:client的写请求被dispatch到node1,因为没有shared storage,node1写完之后将同步到node2,node2同样要处理这些写请求,其实并没有load balance,而是load duplicate。 当然,对于读操作,的确是load balance了,而实际上是以写操作load duplicate为代价的。2. 第二种解决方案,同样的问题,读操作的load balance是以写操作的load翻倍为代价的3. 第三种解决方案,从逻辑上来看,访问调度层充当了database instance的角色,负责所有的读写操作,并且可能还有distributed QO的逻辑,可是,访问调度层同样是系统的瓶颈,一旦该层出现问题,系统还是无法达到HA,如果保证该层的HA? 当然,这种解决方案可以存储海量数据,对scalable OLTP是不错的,前提是如果在访问调度层实现了很好的Query Optimizer。
      

  3.   

    当然,我觉得大家都说的有道理,确实是以牺牲写为代价的 
    但是所有的应用都是有条件的,这又不是万能的,肯定是适合一部分场合的,不可能全部包含,伟大的oracle的"RAC"难道没有这样的问题
    因为大多数的应用是读多写少,主要目的就是为了解决读带来的压力.
    希望大家提出宝贵的意见和建议,尽管这个团队做了很细致的考虑,也尽管团队里有在Microsoft工作过的,难免有不周到的.
    多多批评指正,希望大家支持国产,支持新技术.
      

  4.   

    "核心程序宿主在SQL Server内部"具体指什么? 是指写了存储过程? 
    总不可能修改了SQL Server的源代码吧?
      

  5.   

    公司提供试用版本,欢迎大家索取.www.grqsh.com北京格瑞趋势
                   msn:[email protected]
      

  6.   

     工作原理 
     数据库负载均衡是有由Moebius集群的架构来支撑的,集群中的每个节点都具有等同地位,具有相同的数据库,实现了真正的冗余,应用程序连接组件中提供了数据库连接的负载均衡分担功能,可以有效的均衡所有的连接请求,实现了集群中各服务器负载的均衡,进而显著提升数据库系统的性能。
    1如何保证各节点数据的一致性,实现数据实时同步?
       中间件驻留在每个机器的数据库中,监测数据库内数据的变化并将变化的数据同步到其他数据库中。数据同步完成后客户端才会得到响应,同步过程是并发完成的,所以同步到多个数据库和同步到一个数据库的时间基本相等;另外同步的过程是在事务的环境下完成的,保证了多份数据在任何时刻数据的一致性。    正因为中间件宿主在数据库中的创新,让中间件不但能知道数据的变化,而且知道引起数据变化的SQL语句,根据SQL语句的类型智能的采取不同的数据同步的策略以保证数据同步成本的最小化。
     数据条数很少,数据内容也不大,则直接同步数据
     数据条数很少,但是里面包含大数据类型,比如文本,二进制数据等,则先对数据进行压缩然后再同步,从而减少网络带宽的占用和传输所用的时间。
     数据条数很多,此时中间件会拿到造成数据变化的SQL语句, 然后对SQL语句进行解析,分析其执行计划和执行成本,并选择是同步数据还是同步SQL语句到其他的数据库中。此种情况应用在对表结构进行调整或者批量更改数据的时候非常有用。
      

  7.   

    我正在找SQL Server 负载均衡的解决方案, 想像搂主请教几个问题:
    1、上这个解决方案对我已有的应用会产生多大的影响?
    2、写是有消耗的,消耗到底有多大, 有没有过测试数据?
    3、我非常关心同步的策略及其正确性,有没有更详尽的资料?
    希望搂主能够解答:[email protected]
      

  8.   

    machao1981我对你的问题进行简单回答
    1、对已有系统的影响就是需要把过去的数据导入到集群中,不需要改变应用程序。
    2、对于全部是写操作,和SQL 2005mirror相比要略小
      

  9.   

    这里有微软的人?哪个是, 帮忙给看一下下面的东西, 这是我从这个叫“格瑞趋势”公司的技术支持那里要来的同步策略,我对于数据库不是很精通,所以不太能判断他们说的有没有水分,有多大的水分, 可能有点得罪搂主了,如果是好技术肯定是经得住推敲的,哈哈。中间件同步策略 数据压缩: 
    如果需要同步的数据中包含文本、二进制等大数据类型, 则先对数据进行压缩然后再同步,从而减少对网络带宽的消耗和数据在传输过程中所用的时间。尤其对于网络带宽资源非常稀缺的场景。 通过fire_compression_bytes参数进行阀值控制。批量执行重复性数据:
    如果需要同步的数据中包含重复性的数据,则中间件会把重复性的数据合并到一个同步命令中只执行一次,从而减少执行的次数。
    例如:执行语句 UPDATE dbo.UserInfo SET DeleteFlag = 1 WHERE LastLoginDate < '2008-08-08' 共修改了600条数据,这600条数据的DeleteFlag列具有相同的值,中间件会把这些相同的值合并到一个同步命令中去,同步的SQL语句为:UPDATE dbo.UserInfo SET DeleteFlag = 1 WHERE UserID IN(1, 3, 4, 5, 7, 10, 13, 15, ......, 895, 897, 899, 1000)。而不是逐条的去同步:
            UPDATE dbo.UserInfo SET DeleteFlag = 1 WHERE UserID = 1
            UPDATE dbo.UserInfo SET DeleteFlag = 1 WHERE UserID = 3
            UPDATE dbo.UserInfo SET DeleteFlag = 1 WHERE UserID = 4
                       .
                       .
                       .
                       .
                       .
                       .
            UPDATE dbo.UserInfo SET DeleteFlag = 1 WHERE UserID = 899
            UPDATE dbo.UserInfo SET DeleteFlag = 1 WHERE UserID = 1000
    该策略对数据进行批量更新、批量删除的场景下非常有用。 通过rows_in_command参数进行阀值控制。 升级数据库锁(锁优化器)
    如果更新的数据量非常大,SQL Server本身会对锁进行升级,将大量较细粒度的锁(例如行)转换为少量较粗粒度的锁(例如表)从而减少系统开销。中间件在同步之前先检查当前SQL Server的锁的粒度,如果锁已经升级,则中间件先对目标数据库直接进行锁升级然后再同步数据。从而避免了目标数据库锁升级的过程。通过fire_lock_optimizer_rows 参数进行阀值控制。同步SQL语句(同步优化器)
    如果更新的数据量非常大,超过了设定的阀值,同步大量的数据势必会消耗大量的网络带宽并且延长同步的时间,甚至会造成网络拥堵。这时候中间件首先获取导致数据变化的SQL语句,分析该SQL语句的类型以及执行成本,并选择是把变化的数据同步过去还是把导致数据变化的SQL语句同步过去。该策略在对表结构进行调整或批量更改数据的时候非常有用,大量的减少网络带宽的消耗,降低同步时间。通过fire_sync_optimizer_rows 参数进行阀值控制。并发执行SQL语句
    即使使用了同步SQL语句策略,总的执行时间也相当于执行两次SQL语句的时间。如果这个时间还是不能接受。可以通过中间件提供的系统存储过程usp_MBS_ParallelExecute在集群中的各个节点数据库中并发执行SQL语句,使执行时间降低到相当于在单机数据库中执行一次的时间。但是要注意并不是所有的语句都适合并发执行,具体请参见usp_MBS_ParallelExecute。
      

  10.   

    LZ 你提到集群技术主要依赖中间件来完成,中间件两种主要模式 CSC 和 B2B ,如果是CSC 那么对于中间件的server 不是也要考虑它的负载情况和安全情况吗?如果是B2B,那么单服务器的负载也会很高的呀?LZ 是如何解决的呢?
      

  11.   

    双机热备或者镜像或者基于IO复制所实现的HA集群,核心解决的应用的可用,数据的备份。由于以下原因对性能是没有帮助的。
     数据库只运行在一个节点上,当出现故障时,另一个节点只是作为这个节点的备份;
     因为始终只有一个节点在运行,在性能上得不到提升,系统也就不具备扩展能力;
     当现有机器的性能不能满足应用的负载时,只能更换更高配置的机器。
      

  12.   


    看来这位朋友对中间件技术比较专业,我在这里略微解释一下moebius中间件,可以理解为我们开发的一段代码,是写在每个节点的数据库里面的,主要是用来同步这些变化的数据的。
      

  13.   

    大家晚上好,周末了还都在线,没有出去happy,祝大家周末快乐。也希望大家一如既往的关注Moebius.
      

  14.   

    相当不可靠,很简单,如果真的有这项技术你就不用来csdn打广告了。我不是看不起csdn,但这是事实。
      

  15.   


    出差刚回来,谢谢machao1982的反馈,节后将会发布一个新版本 ,还请多多提出宝贵意见。 确切地说是在我们的研发团里面有在微软工作过的人,至于具体信息我就不能透露了,见谅:)
      

  16.   

    期待这个技术成熟,
    期待SQL server RAC 很久很久了,
    在ITPUB见过介绍,支持技术创新。
      

  17.   


    有技术和打广告是两码事吧。 微软、IBM等在CSDN上还有很多写手呢, 你的意思是他们也“相当不可靠”了呗:)
      

  18.   

    请发试用版到我邮箱,谢谢! --- [email protected]
      

  19.   

    批量执行重复性数据: 
    如果需要同步的数据中包含重复性的数据,则中间件会把重复性的数据合并到一个同步命令中只执行一次,从而减少执行的次数。 
    例如:执行语句 UPDATE dbo.UserInfo SET DeleteFlag = 1 WHERE LastLoginDate < '2008-08-08' 共修改了600条数据,这600条数据的DeleteFlag列具有相同的值,中间件会把这些相同的值合并到一个同步命令中去,同步的SQL语句为:UPDATE dbo.UserInfo SET DeleteFlag = 1 WHERE UserID IN(1, 3, 4, 5, 7, 10, 13, 15, ......, 895, 897, 899, 1000)。对这个百思不得其解啊。
    UPDATE dbo.UserInfo SET DeleteFlag = 1 WHERE LastLoginDate < '2008-08-08' 本身不就是一个命令吗,
    为什么还要转化为
    UPDATE dbo.UserInfo SET DeleteFlag = 1 WHERE UserID IN(1, 3, 4, 5, 7, 10, 13, 15, ......, 895, 897, 899, 1000)呢。这个转化过程是需要消耗很多资源的。还浪费时间。
      

  20.   

    升级数据库锁(锁优化器) 
    如果更新的数据量非常大,SQL Server本身会对锁进行升级,将大量较细粒度的锁(例如行)转换为少量较粗粒度的锁(例如表)从而减少系统开销。中间件在同步之前先检查当前SQL Server的锁的粒度,如果锁已经升级,则中间件先对目标数据库直接进行锁升级然后再同步数据。从而避免了目标数据库锁升级的过程。通过fire_lock_optimizer_rows 参数进行阀值控制。 对这个也很纳闷啊。
    假如两个数据库服务器A 和B ,用户在A服务器上更新了大量数据,假设更新需要1个小时吧,如果锁的粒度小的话,用户还可以在B服务器上操作该表的其他行,但是如果转换为少量较粗粒度的锁,A和B服务器上整个表将将会在1个小时里,不能被访问。当然我说1个小时有点夸张,但是用户响应时间是很小的,多余3秒钟,就是响应慢。
      

  21.   

    请问题楼主,在使用上有什么限制吗? ----
    工作原理 
    数据库负载均衡是有由Moebius集群的架构来支撑的,集群中的每个节点都具有等同地位,具有相同的数据库,实现了真正的冗余,应用程序连接组件中提供了数据库连接的负载均衡分担功能,可以有效的均衡所有的连接请求,实现了集群中各服务器负载的均衡,进而显著提升数据库系统的性能。 
    1如何保证各节点数据的一致性,实现数据实时同步? 
      中间件驻留在每个机器的数据库中,监测数据库内数据的变化并将变化的数据同步到其他数据库中。数据同步完成后客户端才会得到响应,同步过程是并发完成的,所以同步到多个数据库和同步到一个数据库的时间基本相等;另外同步的过程是在事务的环境下完成的,保证了多份数据在任何时刻数据的一致性。     正因为中间件宿主在数据库中的创新,让中间件不但能知道数据的变化,而且知道引起数据变化的SQL语句,根据SQL语句的类型智能的采取不同的数据同步的策略以保证数据同步成本的最小化。 
     数据条数很少,数据内容也不大,则直接同步数据 
     数据条数很少,但是里面包含大数据类型,比如文本,二进制数据等,则先对数据进行压缩然后再同步,从而减少网络带宽的占用和传输所用的时间。 
     数据条数很多,此时中间件会拿到造成数据变化的SQL语句, 然后对SQL语句进行解析,分析其执行计划和执行成本,并选择是同步数据还是同步SQL语句到其他的数据库中。此种情况应用在对表结构进行调整或者批量更改数据的时候非常有用。 --->
    其中有一点 数据同步完成后客户端才会得到响应   部署在广域网上同步对性能的影响有多大,有相关的测试数据吗?
      

  22.   

    有两个问题,希望楼主能够解答一下:
    1.采用中间件后,如何保持不同站点的事务一致性?
    2.对全局死锁是如何解决的,比如:用户A先对T1表的某一行进行更新,B用户对T2表的某一行进行更新;A用户对T2表的相同行进行更新;B用户对T1的相同行进行更新。这样就形成了全局死锁,如何检测?如何处理?
      

  23.   

    可笑可笑,如果这么简单就解决集群LB,微软还会留给你们做?
    别的不说了
    LB最主要的问题在于锁和Cache
    请解释如何防止健忘,脑列和锁资源竞争?
    你们这种应用,低端OLTP写事务频繁,你这种降低效率
    高端OLAP读可以,不过数据同步上那几根网线可不顶用。因为很简单你不是Share Memory,你是Share all disk data。
    和Oracle RAC差了好几个世纪。