热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

[SqlServer03]

随着企业的业务扩展,企业应用所承载的访问需求也更加频繁及多元化,对于大多数企业应用来说,确保企业应用的高可用性(HA)是十分必要的。比如公共安全系统,电子商务支持系统、银联支付系统等等系统。高可用性分为两个主要的部分,一部分是应用程序(SOA服务

随着企业的业务扩展,企业应用所承载的访问需求也更加频繁及多元化,对于大多数企业应用来说,确保企业应用的高可用性(HA)是十分必要的。比如公共安全系统,电子商务支持系统、银联支付系统等等系统。高可用性分为两个主要的部分,一部分是应用程序(SOA服务

随着企业的业务扩展,企业应用所承载的访问需求也更加频繁及多元化,对于大多数企业应用来说,确保企业应用的高可用性(HA)是十分必要的。比如公共安全系统,电子商务支持系统、银联支付系统等等系统。高可用性分为两个主要的部分,一部分是应用程序(SOA服务)的高可用性,另一个方面就是数据库的高可用性。企业应用服务的高可用性主要是通过网络负载均衡(NLB)来实现,这个在另外的章节我们再探讨,这一章节我们主要探讨sqlserver数据库的高可用性集群是如何满足高可用性需求的。

数据库有两大基础作用,一个是存储系统相关的数据,二是提供对数据的管理机制。管理机制很多时候比存储数据功能更重要。这套机制能够确保数据的一致性,合理性、提高读取性能等等方面,当然这些规则及特性支持可以实际情况进行手动开启或关闭,并且可以自定义一些规则来约束对数据的操作。基于数据安全性的考虑,通常需要在另外一个物理位置对数据进行备份,避免数据因为一些特殊原因丢失而造成无法挽回的损失。这种情况下,确保两个数据库的数据一致性就很重要,如何将针对其中一个数据库的操作准确无误地反映到另外一个备份数据库上是一个重要的课题。其实这也是数据库HA最需要解决的问题。具体来说有以下几种方式:

1)数据库复制

数据库复制不是数据库备份和还原。数据库复制是通过发布和订阅来实现的。主数据库和备份数据库之间是发布和订阅的关系,一旦主库数据进行了修改,那么从库也做相应的动作,但主从数据库并不是实时同步的,一般会有延时,因为订阅数据库在一定时间内(通常5sec)会扫面主数据库是否有更改。这种方式是通过日志进行同步操作的,效率也还可以接受。但有一点是不接受DDL语句,即主数据库表结构的变动无法反应到从数据库,必须手动来同时更改库结构再同步。

2)数据库镜像

数据库镜像顾名思义是数据库的实时备份镜像。不同于发布订阅,数据库镜像的镜像数据库是不可读也不可写的。也就是说,如果应用程序希望通过访问镜像数据库来获取数据从而分担主数据库的压力这种方案是行不通的。必须对镜像数据库做数据库快照才可以访问。做数据库镜像的时候对数据库有一些要求,如必须在Full Recovery 模式下才能做数据库镜像,对版本也有一定的要求。

3)数据库快照

数据库快照是给数据库的拍的照片,这个不是实时的备份,很多的应用需求不能被满足。相比于通过日志进行的同步,性能损耗比较大,尤其是当数据量比较大。通常是通过数据库快照恢复数据。

这三种方式中数据库复制订阅支持多个数据往一个数据库进行同步。对于单向数据复制的需求能够很好地满足。比如有多个录入系统,数据入库进入本地数据库,本地数据库与服务端的数据库进行发布订阅,本地数据库发布数据库,服务端数据库订阅数据库,每一个录入端都发布数据库,服务端数据库订阅每一个服务端,这样每个录入端的数据就能够及时进入服务端,服务端就能够对所有客户端的数据进行汇总,统计,分析等等。优点是无论是订阅端还是发布端数据都是可读的(客户端当然是可写的),原则上订阅端的数据时不可写的,因为订阅端的更改不会反应到发布端,因为发布订阅是单向的。

通常数据库镜像是由三个物理数据库组成,一个是Principle,一个是Mirror, 还有一个Witness,Witness数据库是监测Principle 和 Mirror 的状态,实际并不存储数据,通常Witness 会承担其他任务,比如 Reporting Service。Principle 和 Mirror 之间传递着一个 Message. 这个Heart Beat是主从数据库角色转换的依据,一旦从数据库收不到主数据的Heart Beat 信息,从数据库立即响应数据库访问请求,从数据库立即转变成主数据库,主数据库理解转换成从数据库。主从数据库之间的数据同步是通过日志来实现的,并且有High PerformanceHigh Safety 两种模式,前者是理解响应访问请求,然后再将数据更改反应到从数据库,后者是先将数据更改反应到从数据库,再响应访问请求。因为将数据更改反应到从数据库的过程中可能fail掉。

数据库响应请求分为读请求和写请求,由于数据库有物理读和逻辑读,读请求访问物理磁盘的几率较小,效率最低的是写请求。如果能够将读请求和写请求进行分离,能够大大地提高数据库集群的处理能力。于是SqlServer 2012 开始,提供了 SqlAlwaysOn组件。SqlServer 2012 组件让数据库的镜像能够可读。由数据库镜像来处理数据库的读请求,主数据库处理写请求。

还有非常重要的一点是SqlAlwaysOn能够对数据库进行分组。

下一个章节继续。






推荐阅读
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 探讨GET与POST请求数据传输的最大容量
    在Web开发领域,GET和POST是最常见的两种数据传输方法。本文将深入探讨这两种请求方式在不同环境下的数据传输能力及其限制。 ... [详细]
  • 免费获取:全面更新的Linux集群视频教程及配套资源
    本资源包含最新的Linux集群视频教程、详细的教学资料、实用的学习课件、完整的源代码及多种软件开发工具。百度网盘链接:https://pan.baidu.com/s/1roYoSM0jHqa3PrCfaaaqUQ,提取码:41py。关注我们的公众号,获取更多更新的技术教程。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • 本文详细探讨了虚拟化的基本概念,包括服务器虚拟化、网络虚拟化及其在云计算环境中的应用。特别强调了SDN技术在网络虚拟化和云计算中的关键作用,以及网络虚拟化技术如何提升资源利用效率和管理灵活性。 ... [详细]
  • 腾讯视频 Node.js 服务国庆阅兵直播高并发实战
    本文分享了腾讯视频团队在国庆阅兵直播项目中,如何利用Node.js服务成功应对2.38亿次观看的高并发挑战。文章将从服务架构、可用性保障、缓存策略、日志与告警等方面详细解析。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
author-avatar
wcnm
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有