SQLServer AlwaysOn在阿里云的前世今生

缘起

早在2015年的时候,随着阿里云业务突飞猛进的发展,SQLServer业务也积累了大批忠实客户,其中一些体量较大的客户在类似大促的业务高峰时RDS的单机规格(规格是按照 内存CPUIOPS 一定比例分配,根据底层资源不同都会有各自上限)已经不能满足用户的业务需求,在我们看来也需要做Scale Out了,但SQLServer并没有完备的中间件产品,所以无论是逻辑Sharding还是只读分离,都需要用户配合做应用改造,而从用户角度看Sharding改动量很大不是一时间能完成的,那么更多寄希望我们提供读写分离的方案来满足业务需求。

那么读写分离我们第一个想到的即是AlwaysOn技术,但由于当时AlwaysOn对域控和Windows群集都是强依赖,而这两者又对我们所依赖的基础设施有很大挑战,需要做很多的突破产品限制的非标准化操作才有可能实现并且还有安全风险,所以最后我们只能放弃AlwaysOn技术方案,重新设计方案帮助用户度过难关。

最后,面对这类客户需求我们的方案如何产品化是值得我们思考的。

产品快速发展

除了读写分离,产品上还有很多更重要的问题急需我们去解决,所以从2015年到2017年我们经历了一个飞速发展阶段,围绕产品稳定性、多样性以及用户体验做了非常多的事情,举几个点:

  • 为了提高稳定性和用户体验我们最先替换了底层架构,这也为后续产品多样化发展打下基础
  • 为了满足不同用户需求,推出了SQLServer 2008R2/2012/2014/2016 Web/Standard/Enterprise 不同Version、Edition的组合版本
  • 为解决上云难问题推出了上云评估工具,以及针对不同版本、不同场景的上云方案全量备份数据上云SQL Server 2008 R2版、全量备份数据上云SQL Server 2012及以上版本、增量备份数据上云SQL Server 2012及以上版本、SQL Server实例级别数据库上云
  • 为了提升用户体验支持更多特性,我们在SQL层提供了很多封装的存储过程,这里有些看似简单的功能在面对外部的安全、内部的SQL镜像等因素的共同作用下,实现的挑战还是很大的
  • 为了让专家服务更智能、更能贴近每个用户,我们研发了SQLServer CloudDBA集合了云上大量性能、空间问题的解决方案

在这当中依旧不断有读写分离的用户需求,每次遇到我们都先引导到了IaaS层用ECS自建实现,因为PaaS化的时机并不成熟,具体原因跟SQLServer当前的技术栈和云产品的结合有着密切的关系,这里也可以把我们背后的一些思考分享出来。

读写分离

首先明确我们讨论的读写分离是什么,MySQL的读写分离大部分是利用中间层做路由解析,基本上可以实现对应用端透明只有少部分场景需要用户做适配。

SQLServer并没有成熟的中间件产品,本质上讲是TDS(Tabular Data Stream)不完全开放的原因,如果要做也是有办法的,只是投入的成本远大于收益;基于此,SQLServer无论利用当前何种技术实现读写分离,对应用来讲都需要做一些适配,即使是使用AlwaysOn技术在链接驱动的参数配置上也会不同,所以我们后面讨论的读写分离都是基于这个前提。

技术选型

我们对比了SQLServer所有相关的技术栈

其中数据安全、HA(High Availability 高可用)、DR(Disaster Recovery 灾难恢复)以及备库是否可读是我们最关注的;这里的HA是指原生技术本身是否支持自动HA,当结合了部分云产品后我们也有能力把不支持变为支持,数据安全和灾难恢复的时间基本是原生技术决定的,备库是否可读是对单一技术的说明但做一些技术组合是可以把不可读变为可读的(比如Database Mirroring+Database Snapshots),最终综合来看Transactional Replication和AlwaysOn是我们觉得有机会做读写分离产品化的技术。

接着我们单独来看这两种技术对比

原理上讲Replication是逻辑复制,对比AlwaysOn的物理复制在性能、延迟、可靠性上都会有一定的差距;并且在产品复杂度读、可控性上和易用性上,由于Replication过于灵活细到表、列级别很难控制,无论用户使用还是我们做产品化整个复杂度非常高;所以最终我们选用AlwaysOn。

AlwaysOn技术

AlwaysOn是原生支持High Availability和Disaster Recovery的技术,本身又分为Failover Cluster Instances(后续简称FCI)和Availability Groups(后续简称AG),下面的图是FCI和AG的基础架构

其中FCI和常规版本的AG都依赖Windows Server Failover Clustering(后续简称WSFC),不同点是FCI是Share Storage而AG是Share Nothing,FCI是实例级别同步而AG是DB级别,那么很容易想到Share Nothing会有同步和异步的区别(和镜像技术类似),其中两者的区别点需要我们知道AlwaysOn的基本同步过程

首先在Primary节点的日志(Commit/Log Block Write)会从Log Cache刷到磁盘,同时Primary节点的Log Capture也会把日志发送到其它所有Replica节点,对应节点的Log Receive线程把收到的日志同样从Log Cache刷到磁盘,最后会由Redo Thread应用这些日志刷到数据文件里。

这其中还有一步,就是在Secondary端刷日志的时候,如果Primary节点等待这次返回的Acknowlege Commit,那么就是同步模式,反之如果Primary端不等Secondary的返回那么就是异步模式,两者的区别由此展开。

这是基本的同步过程,但无论是AlwaysOn还是Database Mirroring都存在一种情况,即同步模式下如果Secondary端异常,Primary端没有收到他的心跳也没有收到这次的Acknowlege Commit,那么也并不会算作写入失败,因为它一旦认定Secondary异常就不会等这次ACK,而是退化为类似异步的模式,但会把Secondary端的异常状态记录在基表里,通过相关视图(sys.dm_hadr_database_replica_states、sys.database_mirroring)暴露出来,就是我们常见的NOT SYNCHRONIZING/Disconnect状态,这时候自动化运维系统或者DBA就需要做判断处理,等到Secondary修复重新联机后会向Primary报告End of Log (EOL) LSN,Primary端再向它发送EOL LSN 之后hardened的所有日志,一旦Secondary端开始接收到这些日志并逐步刷到日志文件中,那么整个AG或者Mirroring相关的视图又会标记其状态为Synchronizing,表明正在追赶直到Last Hardened (LH) LSN达到主备一致状态,这时重新回到同步模式。

以前的情况一直是这样,直到SQLServer 2017 CU 1引入了REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT这个参数,参数名字很长但也基本包含了他的作用,应对刚才的场景是可以让Primary端一直等到Secondary节点重新联机并同步后在提供服务。

了解了AG同步、异步以及FCI,在总结下我们关心的点

在实际方案中这些也可以结合起来,最终再和阿里云产品整合做一个整体方案,之前也讲到阿里云从15年就开始做类似方案来解决用户问题,一直到最终PaaS化也过度了三个版本。

云上演进

第一版本我们使用了ECS、SSD云盘、OSS、VPC、SLB作为基础;在SQL技术上,我们使用SQL+WSFC+AD的方式,目前看这种方式支持的版本也非常多,从12到17都可以;验证方式既可以用域控也可以用证书。

但他有2个缺点:第一是成本高,除了Primary和两个Secondary节点还要有两个AD节点,毕竟我们每个环节都要保证高可用;
第二点是稳定性不够,网络抖动的情况非常容易让WSFC判断异常,SQL端DB同时出现不可用;

这是第二版的架构,跟第一版相比我们用到了HAVIP来解决监听器问题,去掉了AD只能用证书做验证,但也因此最小资源开销降低到3;这个方案也是之前在阿里云上用的比较多的,但同第一个方案一样,在网络稳定性上会有很多挑战,因为我们未来面对的场景不只是同城跨可用区还会有更多跨Region以及打通海外的场景,所以这个方案也只能Cover一部分用户的需求,但对我们不是一个最终方案。

最终我们找到了方案三,去除了WSFC和AD,只关注基础云产品和SQL本身;最终要的是跟方案二相比,对网络的抖动敏感度会更低也更可控,最多是在Primary端出现Send Queue的堆积,这个我们完全可以通过SQLServer相关的Performance Counter监控并做一些修复调整。

但没有方案是完美的,可控性强的代价是这种无群集无域控架构原生是不具备HADR能力的,这点熟悉WSFC的同学可以知道之前架构的HA都是依赖WSFC,他包括健康检查、资源管理、分布式元数据通知维护以及故障转移,所以这时候就必须我们自己去解决这个问题;为此我们也做了很多努力,最终实现了支持AlwaysOn无域控无群集的HA系统,不依赖Cluster完全自主可控的HA。

产品化

最终的产品架构如下,首先会保证有2个同步节点做主备,并且尽量分配在不同的可用区,其它只读节点默认是异步,最多可以有7个只读节点;用户的访问链路可以有三种:

  • 第一种是读写链路,会指向两个同步节点,由我们的HA来保证高可用
  • 第二种是统一只读链路,根据用户需求设定,把指定的Replica节点绑定到一起按照一定的权重比例分配链接
  • 第三种是单一只读链路,即每个只读节点会提供一个单独的链接,让用户也可以自己灵活配置,比如用户的APP Server就是在可用区A那么就可以直接访问可用区A的只读地址,避免再通过统一只读被路由到其它区域

至此SQLServer AlwaysOn已经在阿里云PaaS化,当然目前只是支持最主要功能,后续还有很多可以完善丰富的地方,希望有更多用户了解和使用这个产品并帮他们解决实际问题。

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建企业数字化转型协同力有多难?青云发布workly.ai誓要解决这些棘手的问题!...

戳蓝字“CSDN云计算”关注我们哦!相信大部分人都经历过办公中的手忙脚乱与无所适从,每天面对无数的任务与工作本就是一项挑战,而在办公中面对不同终端协同工具,所带来的那些令人头疼的密码、来不及回复的信息与邮件、繁琐的办公流…

阿里云高级技术专家带你全面了解云主机性能评测

钱超,花名西邪,阿里云高级技术专家,超12年老阿里,是云主机性能领域的知名专家。 在目前的云计算测评领域,很多性能测评存在营销的包装,容易引起误导:比如用瞬时性能引导读者得出结论&#xff0…

阿里云HBase携X-Pack再进化,重新赋能轻量级大数据平台

一、八年双十一,造就国内最大最专业HBase技术团队 阿里巴巴集团早在2010开始研究并把HBase投入生产环境使用,从最初的淘宝历史交易记录,到蚂蚁安全风控数据存储。持续8年的投入,历经8年双十一锻炼。4个PMC,6个committ…

2018阿里云双12年终大促主会场全攻略

2018阿里云双12年终大促活动已经于12月7日正式开启,从已开放的活动页面来看,活动分为两个阶段: 12月7日-12月23日的拉新返现阶段和12月24日-12月28日的TOP100英雄榜PK阶段。 活动核心亮点: 老会员拉新可享25%返现最高2.5万奖金&a…

RabbitMQ集群原理介绍

文章目录一、RabbitMQ默认集群原理1. RabbitMQ集群元数据的同步2. 为何RabbitMQ集群仅采用元数据同步的方式3. RabbitMQ集群发送/订阅消息的基本原理4. 客户端直接连接队列所在节点5. 客户端连接的是非队列数据所在节点7. 集群节点类型磁盘节点内存节点8. 总结二、RabbitMQ镜像…

阿里云物联网平台体验(树莓派+Python篇)

阿里云物联网平台体验(树莓派Python篇) 虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作。但是同时也见证了阿里云物联网团队从几十人到数百人的迅速扩张&#x…

阿里云物联网边缘计算加载MQTT驱动

写在前面 本文在LinkEdge快速入门样例驱动的基础上,加载了MQTT订阅的客户端,使得边缘端容器可以通过MQTT获得外部数据。 1. 系统需求 物联网边缘计算平台,又名Link IoT Edge[1]。在物联网边缘计算帮助文档中的 “快速入门”描述了…

完爆 Best Fit,看阿里如何优化 Sigma 在线调度策略节约亿级成本

2018 年“双 11”的交易额又达到了一个历史新高度 2135 亿。相比十年前,我们的交易额增长了 360 多倍,而交易峰值增长了 1200 多倍。相对应的,系统数呈现爆发式增长。系统在支撑“双 11”过程中的复杂度和难度呈现指数级形式上升趋势。 作为…

重磅!阿里巴巴工程师获得 containerd 社区席位,与社区共建云时代容器标准

重磅!阿里巴巴工程师获得 containerd 社区席位,与社区共建云时代容器标准 11 月 29 日,CNCF containerd 社区正式宣布:两位阿里巴巴工程师正式获得 containerd 社区席位,成为 containerd 社区 Reviewer,未…

RabbitMQ管控台操作手册

文章目录一、MQ管控台配置1.1. 修改guest用户的默认密码1.2. 创建Virtual Hosts1.3. 创建用户1.4. 给Virtual Hosts指定用户1.5. 给Virtual Hosts创建监控用户1.6. 给Virtual Hosts指定监控用户二、 验证2.1.给proj-01项目配置mq连接信息2.2.为proj-01项目声明队列和交换机2.3.…

只有程序员才能读懂的三国演义(一)

戳蓝字“CSDN云计算”关注我们哦!作者 | popsuper1982责编|阿秃这是通过三国演义串起操作系统的原理。第一回:宴桃园豪杰三结义,开放平台启动内核话说天下大势,分久必合,合久必分。IT江湖起起伏伏&#xff…

基于协同过滤算法的推荐

基于协同过滤算法的推荐 (本实验选用数据为真实电商脱敏数据,仅用于学习,请勿商用) 数据挖掘的一个经典案例就是尿布与啤酒的例子。尿布与啤酒看似毫不相关的两种产品,但是当超市将两种产品放到相邻货架销售的时候&a…

python三菱_三菱机器人melfarxm.ocx控件的Python使用,MelfaRxMOCX,python,用法

1. 安装控件 \MelfaRXM\MelfaRXM_Dev\Redist\Installer2. 在WINDOWS/System32里找到MelfaRxM.ocx3.把OCX控件转成C#的DLLa.打vs的开发人员命令行b.把刚刚的OCX放到命令行显示的目录c.在命令输入 : aximp MelfaRxM.ocx生成的DLL就是pythonnet可用调用的DLL的4.p…

如何基于阿里云搭建适合初创企业的轻量级架构?

----基于阿里云搭建的适合初创企业的轻量级架构 前言 在项目的初期往往存在很多变数,业务逻辑时刻在变,而且还要保证快速及时,所以,一个灵活多变、快速部署、持续集成并可以适应多种情况的架构便显得尤为重要。本文主要介绍基于阿…

年底了,程序员如何谈加薪?

前两天,我和朋友一块出去吃饭,他说了一个哭笑不得的事儿:“我面了一个2年经验的男孩,张嘴就要20k,我去了,我在公司呆了7年啊,才22k好吗?” 其实,他的问题并不是特例&…

数据库中间件介绍

文章目录 什么是数据库中间件?Smart-client 模式优点缺点 Proxy 模式优点缺点 单元化架构优点缺点 总结 数据库中间件是连接数据库和应用程序之间的软件层,用于简化数据库管理、提高性能和可伸缩性,同时提供额外的功能和服务。在分布式系统和…

基于阿里云物联网平台,我们这样实现简易出入监控

本文通过一个简单实例,主要介绍了如何使用树莓派快速接入阿里云iot platform,并实现了一个简易的监控人员出入并拍照上送钉钉群的场景 场景 在公司大门入口处布点树莓派和红外感应,实现出入口人员出入时,自动拍照并上送钉钉群机器…

RabbitMQ消息流转图

生产者生产消息,发送到MQ的交换机(exchange)上,交换机可以绑定多个队列(Message Queue)。这个图中有3个队列,只有一个队列收到了消息,这是因为咱们的交换机是有路由策略的,这个路由就是Routerke…

结合实际场景谈一谈微服务配置

作为 Nacos 5W1H 的系列文章,本文将围绕“Where”,讲述 Nacos 配置管理的三个典型的应用场景: 数据库连接信息限流阈值和降级开关流量的动态调度上一篇:Nacos帮我解决了什么问题? 数据库连接信息 曾经有朋友跟我聊过…

哈工大人工智能研究院院长刘劼:AIoT 核心在“智”不在“联”,需云边端协同...

受访者 | 刘劼采访者 | 伍杏玲出品 | CSDN(ID:CSDNnews)物联网是继计算机、互联网和移动通信之后的又一次信息产业的革命性发展。近几年来,物联网发展迅速:据研究机构IDC公司预测,到2020年,物联…