一、SQL Server Cluster vs. RAC
1. RAC
RAC,全称Real Application Clusters,译为“真正应用群集”, 是 Oracle 9i 开始采用的一项新技术,是高可用性的一种。
当一个客户端发送请求到某一台服务器的 listener(侦听器)后,这台服务器根据我们的负载均衡策略,会把请求发送给本机的 RAC 组件处理,也可能会发送给另外一台服务器的RAC组件处理,处理完请求后,RAC 会通过群集软件来访问该数据库的共享存储设备。
RAC的每个节点都可以实现Read/Write 的实时访问,因此带来性能的提升,相当于“负载均衡”。
2. SQL Server Cluster
SQL Server 的群集(cluster)最多可以部署16 个节点,但是,在任一时刻只有一个节点(称为主节点)在提供SQL Server 服务,其它节点都处于“休息”状态。当主节点发生故障导致SQL Server 服务停止时,listener 才通知下一个节点接管SQL Server 服务,因此该技术全称为Fail-over Cluster(故障转移群集)。
由于应用程序访问SQL Server必须通过VNN(虚拟网络名称,Viturl Network Name)访问,当节点发生故障转移时,应用程序的访问连接会自动转移到新的节点。这一点与RAC非常相似。
SQL Server 数据库群集技术的最大缺点,在于数据库文件(mdf/ndf/ldf)都必须保存在共享存储(shared storage),意味着数据实际上只有一份。这是群集架构中的“单一故障点”,一旦共享存储发生故障,数据库群集就完全失效。
3. SQL Server的其它高可用(High Available)技术
(1)数据库镜像
SQL Server 2005 sp1 为单个的database提供了镜像(Mirror)功能。主体(主节点)和镜像(即辅助节点,仅可以有1个)拥有各自的独立存储,意味着数据实际上是独立的2份。主体的数据可以同步提交到镜像(实时同步),也可以异步提交到镜像(主节点发出提交请求后无需等待镜像的回应)。辅助节点的副本可以通过建立快照(snapshot)实现只读访问。
如果添加第3台SQL Server 作为见证服务器(Witness),可以实现主体与镜像节点的自动故障转移。但是,应用程序需要能够识别转移后的节点IP地址,毕竟主体与镜像节点是不同的IP地址。
(2)日志传送
一个数据库可以通过日志传送(log shipping)将数据分发到无数个SQL Server实例。分发的这个数据库一般处于“正在恢复”的状态,也可以设置为“备用”状态以提供read-only访问。分发的过程是异步的,因此存在延时。当发生故障时,可以方便地将某个分发的数据库迅速提升为“活动的”数据库。
(3)可用性组
SQL Server 2012 提供了新的功能:可用性组(Availability Group)。主节点(Primary Node)和辅助副本(Secondary Replica,最多4个副本)拥有各自的独立存储。主节点的数据被单向复制到各个辅助节点,其中最多2个辅助节点可以实现同步提交,其余的辅助节点只能实现异步提交。主节点的数据可以实现Read/Write 访问;辅助节点可以直接提供3种访问模式:不可读、只读、意向读(仅允许部分访问)。
可用性组集中了其它3种高可用技术的优势:cluster的自动故障转移及对外唯一IP地址、Mirror的每个数据库独立副本与实时同步、log shipping的“备用”状态提供read-only访问。
二、SQL Server为何不实现RAC功能
既然RAC有诸多优势,SQL Server为何不实现RAC功能?
从纯粹的技术角度来看,可以肯定 Microsoft 完全有能力实现这项技术,甚至已经有部分第三方厂家开发了SQL Server的插件以实现RAC功能。那么Microsoft 为何要说“不”呢?大致可以分为以下几种原因:
1. RAC的扩展程度有限
RAC 可以便于用户对数据库节点数量进行扩展,但是,各个节点之间必须实现数据实时的、多向的同步,而这种同步是以牺牲性能为代价的,因此,随着节点数量的增加,性能的扩展并不是线性的,甚至可能随着节点的增加而导致性能下降。SQL Server 2012 的可用性组技术最多只允许2个辅助节点实现单向的“同步提交”,也是基于这种因素而不得不采取的一种限制措施。
一般来说,RAC 在双机(2个节点)的时候性能最佳,双机性能大约是单机性能的1.8 倍。一般的工程经验可以按照1.6 倍性能进行设计。
在设计近期目标时,RAC 是一项很不错的选择。如果从长远角度来看,当数据量和负载越来越大时,RAC 也就越来越显得力不从心。这也是大多数的Oracle 客户(特别是大型客户)不愿意使用RAC 的主要原因。
2. RAC不符合“性价比”、“易学易用”原则
与SQL Server 相比,RAC 的强项在于它可以部署在高性能的小型机甚至大型机上,如果性能提供1.6倍,可以视为性能的大幅提升(但是,也意味着提升到极限了)。而SQL Server 仅可部署在PC Server 上,由于PC Server 的性能相对有限,即使通过双机部署将性能提升1.8 倍仍然不是最理想的目标。因此,从性价比角度考虑,部署尽可能多的PC Server 仍然比RAC 更具有竞争优势。
而且,部署和维护 RAC 并不是一项简单轻松的工作,其复杂程度远远大于SQL Server 常规技术,不符合Microsoft 一贯坚持的“易学易用”原则。
据了解,中国移动的部分省公司BI、网管、客服等模块已经采用DB2、SQL Server 等数据库,明确表明这些模块不可能使用RAC。另据报道,中国移动2009年发文,要求各省公司新建IT 系统中所需的数据库使用Syabase。http://tech.it168.com/a2009/1026/789/000000789847.shtml
3. Microsoft有替代方法
基于前述各项原则和理由,Microsoft有变通的方法实现负载平衡。下文会有详细讲述。
三、SQL Server的负载平衡规划
正是由于SQL Server 部署在PC Server 上,因此可以充分利用PC Server 的极高的性价比优势实现负载平衡。值得注意的是,这里使用了“平衡”,而不是“均衡”。
可以独立或同时实施下述方案与技术:
1. 规划设计----平衡分布
在系统规则时,就需要设计一定的策略,将数据库分布部署在不同的数据库(甚至不同的服务器)。
例如,工厂的流水线生产过程中的数据采集,可以根据车间与流水线的分布情况,部署多套SQL Server。
又如,一家从事鞋服销售的电商,可以根据产品类别(鞋、童装、成人套装、等),将不同的业务数据分布部署到多套SQL Server。
实现数据库分布部署之后,对于其中某些共通数据,既可以集中到某一套SQL Server,也可以在多套SQL Server 中通过复制(replicate)实现数据同步(如下图)。
SQL Server 的日志传送、可用组性等技术,实现了多个副本的read-only 访问,实际上也能承担负载平衡,但仅限于“读写分离”。
2. 技术实现----复制(replication)
复制是一组技术,它将数据和数据库对象从一个数据库复制和分发到另一个数据库,然后在数据库之间进行同步以保持一致性。使用复制,可以在局域网和广域网、拨号连接、无线连接和 Internet 上将数据分发到不同位置以及分发给远程或移动用户。http://msdn.microsoft.com/zh-cn/library/ms151198.aspx
SQL Server 主要通过以下3种复制,提供功能强大且灵活的系统,以便使企业范围的数据同步。
(1)事务复制:通常用于需要高吞吐量的服务器到服务器方案,包括:提高伸缩性和可用性、数据仓库和报告、集成多个站点的数据、集成异类数据以及减轻批处理的负荷。
(2)合并复制:主要是为可能存在数据冲突的移动应用程序或分步式服务器应用程序设计的。常见应用场景包括:与移动用户交换数据、POS(消费者销售点)应用程序以及集成来自多个站点的数据。
(3)快照复制:用于为事务复制和合并复制提供初始数据集;在适合数据完全刷新时也可以使用快照复制。
复制有多种方式,其中事务(对等)复制与合并复制可以实现负载平衡,但要考虑复制时存在的延迟。
(1)对等复制
对等复制可以同时在多个位置(服务器)修改同一条记录,这必然会带来冲突。
在程序设计之初,就应当尽可能地消除冲突。当冲突不可避免时,可以指定专门的写入区域,解决冲突,如下图的右侧所示。
(2)合并复制
合并复制允许不同站点自主工作,并在以后将更新合并成一个统一的结果。由于更新是在多个节点上进行的,同一数据可能由发布服务器和多个订阅服务器进行了更新。因此,在合并更新时可能会产生冲突,合并复制提供了多种处理冲突的方法,并在晚些时候合并更改和根据需要解决冲突。
四、案例
1. 基于大量数据处理的非SQL Server 案例
某大型通信公司的计费系统以省为单位组建数据库系统,全网由北京公司做交换池通信,各省的数据库都不尽相同的。其中,省公司的计费系统又分为后付费(全球通)和预付费(智能网)。
某门户网站,春运期间高峰时每秒有20万人同时在线,一天内共有1700万人次登录,日点击量高达15 亿次。为了在高峰期提高刷屏的效率,多家网站都推出了“抢票插件”。据未经证实的消息,该网站耗资5亿元,每天完成 200 万笔订单。(同样据未经证实的消息,“双十一”开闸的第一个小时内“支付宝”处理了598 万笔付款。)
2. 电商的SQL Server数据库
国内电商,例如ctrip、elong、VANCL,都可以见到SQL Server的成功案例。
例如:ctrip 每天都在通过门户站点收集着海量的业务数据,SQL Server 为支持庞大的客户端连接提供了技术支持。 http://www.microsoft.com/china/casestudies/details.aspx?CompanyProfileID=154
例如:VANCL 以 SQL Server 为基础来支撑公司的关键业务,保障订单高效、准确的处理,并随时监控库存和物流情况,为客户提供更加优异的购物体验。 http://www.microsoft.com/china/casestudies/details.aspx?CompanyProfileID=127
3. 券商的SQL Server数据库
国内的证券交易软件大多数采用金证公司(深圳市金证科技股份有限公司,股票代码600446.SH)开发的在线交易平台。据金证公司的公开资料显示:公司在券商营销服务系统方面耕耘16载,在50家建设了呼叫中心的券商中,就有33家由金证公司建设。金证公司推出的一体化营销服务平台已被中信证券、国泰君安(http://www.microsoft.com/china/casestudies/details.aspx?CompanyProfileID=78)、国信证券(http://www.microsoft.com/china/casestudies/details.aspx?CompanyProfileID=56)等13家大券商采用。金证公司最重要产品线之一金证一体化营销服务平台市场份额已达40%以上。http://www.microsoft.com/china/casestudies/details.aspx?CompanyProfileID=22
本文结语:
不要把所有的鸡蛋都放在一个篮子里,这个篮子再大,能装下的鸡蛋也是有限的。宏观上,考虑多用几个篮子。