云上RDS架构
概述
越来越多的企业选择上云,最基础的云服务就是IaaS(Infrastructure as a Service)服务,直观理解就是虚拟主机,用户不用再自建机房,自己购买服务器,而是直接向云厂商购买虚拟主机服务ECS(Elastic Compute Service),按时按量付费。对于数据库而言,将数据库能力集成进来,就是DaaS(Database as a Service)服务,我这里主要讨论RDS(Relational Database Service)。因为目前主流云厂商在数据库领域,除了基础的RDS服务,还有新型分布式数据库服务,比如Amazon的Aurora,阿里云的PolarDB等。所以对于用户而言,他们选择在云上使用数据有两种方式,一种是自己买ECS,自己搭建数据库服务;另外一种方式是,直接购买RDS服务。本文主要讨论RDS的链路,RDS链路中的核心组件SLB转发模式,以及RDS中proxy的作用,最后还会提到RDS的高可用解决方案。
RDS链路
1. app+ECS(DB)自建
2. app+lvs+DB
简单说明下,云上并不提供单独买一个RDS的服务,因为这种场景无法提供高可用能力,所以一般购买数据库服务时,会同时带上SLB作为一套整体解决方案。SLB本质就是基于LVS的改进,LVS工作在IOS七层网络模型的TCP/IP层,属于4层负载均衡。利用IP,Port映射转发能力,提供高可用,负载均衡等能力,RDS正是借助SLB来实现RDS的高可用和负载均衡等能力。LVS主要有几种工作模式,DR模式,NAT模式,FULL-NAT模式,IP-TUN模式以及我们阿里云优化的ENAT模式。
2.1 DR模式(Direct Routing)
核心逻辑:本质是2层转发,SLB-Server与RDS共享一个IP,经过SLB-Server时,SLB-Server将mac地址改为目标RDS的mac地址,将请求包转给真实的RDS;回包时不用经过SLB-Server,DR模式要求SLB和RDS需要配置相同的VIP地址。
2.2 NAT模式(Network Address Translation)
核心逻辑:client端不感知RDS真实地址;发包经过SLB时,dip(dest_ip)会被替换成RDS的ip,请求包返回经过SLB时,再将回包源地址改为vip。对比DR模式,请求和回报都需要经过SLB-Server,RDS的ip不再需要是公网地址;与DR模式相同的是,SLB和RDS需要在同一个局域网内。
2.3 FULL NAT模式
核心逻辑:本质是4层转发,请求经过LVS时,LVS请求的(IP,Port)替换成真实RDS的(IP,Port),回包时,再经过LVS,将回包的源地址改为LVS的(IP,Port),LVS与RDS不再要求在同一个局域网内。所有请求的来回都要经过LVS,效率比较低。
2.4 ENAT模式(Enhance NAT,三角模式)
核心逻辑:ENAT模式解决了来回包都要经过LVS问题,具体而言,LVS接收请求后,修改包地址时,会将用户的CIP地址冗余在网络包中,回包时,将包改为(vip,cip),这样就不用再经过LVS了。
3. app+lvs+proxy+DB
通过引入SLB,RDS已经具备了高可用的能力,但由于SLB是工作在4层负载均衡,对于应用层协议无法感知,所以当发生主备切换时,所有已经连接在old-master的连接都需要被断掉,对用户来说,就是连接发生了闪断,对于没有重连机制的业务简直就是灾难。引入proxy后,则能有效解决这种问题。切换过程中,对于old-master会等待事务完成,而新的请求则会路由到new-Master。
核心逻辑:本质是7层转发,proxy模拟实现MySQL协议,应用实际是连接proxy,proxy再连接RDS,转发SQL给RDS,并将结果集转发回传给应用。
4.主要优缺点对比
RDS链路类型 |
优势 |
缺陷 |
App+ECS(DB)自建 |
成本低 |
用户个人负责数据库的容灾、备份、恢复、监控、迁移 |
App+lvs+DB |
无需经过proxy转发,RT短,具备高可用能力 |
无法解决闪断问题,也不容易实现读写分离等高级功能 |
App+lvs+Proxy+DB |
功能丰富,包括防SQL注入,读写分离,连接池等。 |
多一跳proxy,增加RT。 |
Proxy中间件 VS TDDL 中间件
proxy中间件引入使得RDS除了具备必要的高可用能力,还能实现更多的高级功能,包括读写分离,连接池,防SQL注入,防闪断等,这部分能力的获取是通过牺牲一定RT来获得的。实际上,中间件有两种模式,一种是client模式,一种是server模式,集团的TDDL和云上的Proxy就是两种典型代表。client模式要求与语言强绑定,比如TDDL中间件以jar包的模式打进用户的应用,只支持JAVA语言,这对于云上业务肯定是不可行的,毕竟现在用PHP,Python写后端的应用也非常多。另外一点是,client模式会导致连接数随着client的个数同比例增加,这带来的影响是到后端DB的连接数增加,client模式的好处是不用经过proxy这一跳,RT更好;而server模式则能有效控制到后端DB的连接数,但是整个链路增加了一层,也就增加了一层风险,Proxy自身的高可用也需要严格保证,确保整个链路的可用性。至于功能层面的,比如读写分离,连接池,防SQL注入等功能,两种都是可以实现的。
RDS高可用
云上售卖的数据库都是传统的数据库包括MySQL,PostgreSQL,SQLServer等都是单机数据库,所以数据库的高可用还需要依赖于外部的HA组件。
参考文档
https://my.oschina.net/yunqi/blog/3069510
云上RDS架构的更多相关文章
- Lambda plus: 云上大数据解决方案
本文会简述大数据分析场景需要解决的技术挑战,讨论目前主流大数据架构模式及其发展.最后我们将介绍如何结合云上存储.计算组件,实现更优的通用大数据架构模式,以及该模式可以涵盖的典型数据处理场景. 大数据处 ...
- 从运维的角度分析使用阿里云数据库RDS的必要性--你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库
开宗明义,你不应该在阿里云上使用自建的MySQL or SQL Server数据库,对了,还有Oracle or PostgreSQL数据库. 云数据库 RDS(Relational Database ...
- 云计算之路-阿里云上:踩着RDS的2个坑
最近发现阿里云RDS管理控制台升级了,界面更好看了,操作也更方便了,但在美丽的外表下却藏着坑,不小心被我们睬着了. 8月31日下午,我们在RDS管理控制台中创建了一个新的数据库帐号,创建时选择了绑定多 ...
- 云计算之路-阿里云上-阵雨:RDS故障的突袭
风雨之后是彩虹,经历了三个月的风雨之后,从6月14日起(上次故障发生于6月13日)开始享受彩虹...而今天突袭而来的RDS故障让我们懂得了彩虹期间会有阵雨,但不管怎么样,离“晴空万里”越来越近了. 2 ...
- 云上的芯脏病:奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题
最近遇到了奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题,遇到了3次. 第一次是10月12日(周六)凌晨 3:24 负载极低的时候开始出现,早上发现后进行了主备切换,恢复了正常. 第二次 ...
- 一面数据: Hadoop 迁移云上架构设计与实践
背景 一面数据创立于 2014 年,是一家领先的数据智能解决方案提供商,通过解读来自电商平台和社交媒体渠道的海量数据,提供实时.全面的数据洞察.长期服务全球快消巨头(宝洁.联合利华.玛氏等),获得行业 ...
- 阿里云产品介绍(三):云数据库RDS
写完云服务器ECS,本来想先写负载均衡的. 因为发现很多客户,都是直接将单台云服务器应用对外提供访问,如果云服务器宕机,应用就会停止服务.云服务器标称有99.95%的可用率,一年下来宕机四个多小时也是 ...
- 【IT名人堂】何云飞:阿里云数据库的架构演进之路
[IT名人堂]何云飞:阿里云数据库的架构演进之路 原文转载自:IT168 如果说淘宝革了零售的命,那么DT革了企业IT消费的命.在阿里巴巴看来,DT时代,企业IT消费的模式变成了“云服务+数据”, ...
- 转- 阿里云、Amazon、Google云数据库方案架构与技术分析
「一切都会运行在云端」. 云时代早已来临,本文着眼于顶级云服务商云服务商的云数据库方案背后的架构,以及笔者最近观察到的一些对于云数据库有意义的工业界的相关技术的进展,希望读者能有所收获. 现在越来越多 ...
随机推荐
- Connecting to the Network
This lesson shows you how to implement a simple application that connects to the network. It explain ...
- 硬件设计--DC/DC电源芯片详解
本文参考:http://www.elecfans.com/article/83/116/2018/20180207631874.html https://blog.csdn.net/wangdapao ...
- GPS常识-B版(简)
第一章 绪论 1.简述GPS系统的特点有哪些? 在测绘工程中有如下优点:(1)定位精度高(2)观测时间短(3)测站间无需通视(4)可提供地心坐标(5)操作简便(6)全天候作业(7)功能多.应用广 GP ...
- Spring 动态创建并切换数据源
公司要求后端项目可以进行动态创建并切换数据源,看了网上很多例子大多数使用的都是Spring内置的AbstractRoutingDataSource进行的,使用此方法不是不行但是有诸多缺陷,比如切换时需 ...
- CF39D Cubical Planet-C++
银河系中没有你找不到的东西!有一颗形状为立方体的的行星正在绕着一颗形状为二十面体的恒星运转.现在我们让这颗行星的两个在同一条体对角线上的顶点置于(0,0,0)和(1,1,1)上.有两只苍蝇住在行星上. ...
- VMware上安装虚拟机-教程
xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! - ...
- 【CodeForces - 1167C 】News Distribution(并查集)
News Distribution 题意 大概就是分成几个小团体,给每个人用1 - n编号,当对某个人传播消息的时候,整个小团体就知道这个消息,输出 分别对1 - n编号的某个人传递消息时,有多少人知 ...
- 「PowerBI相关」一款极其优秀的DAX建模工具Tabular Editor
做Excel插件开发的时间久了,大部分人的印象是笔者是做软件开发,谈不上软件,也是插件开发级别. 但笔者更希望大家记住的身份是做BI开发,特别是企业级的BI. 故也借着Excel催化剂这个平台,输送一 ...
- 利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字
序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...
- c语言进阶12-线性表之顺序表
一. 线性表的定义 为什么要学习线性表呢? 因为我们日常生活中存在种数据关系,计算机程序是为了解决日常生活的数据关系,因此我们要学习线性表. 线性表是什么呢? 线性表是由n个元素组成的有限序列. 需 ...