概述

越来越多的企业选择上云,最基础的云服务就是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架构的更多相关文章

  1. Lambda plus: 云上大数据解决方案

    本文会简述大数据分析场景需要解决的技术挑战,讨论目前主流大数据架构模式及其发展.最后我们将介绍如何结合云上存储.计算组件,实现更优的通用大数据架构模式,以及该模式可以涵盖的典型数据处理场景. 大数据处 ...

  2. 从运维的角度分析使用阿里云数据库RDS的必要性--你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库

    开宗明义,你不应该在阿里云上使用自建的MySQL or SQL Server数据库,对了,还有Oracle or PostgreSQL数据库. 云数据库 RDS(Relational Database ...

  3. 云计算之路-阿里云上:踩着RDS的2个坑

    最近发现阿里云RDS管理控制台升级了,界面更好看了,操作也更方便了,但在美丽的外表下却藏着坑,不小心被我们睬着了. 8月31日下午,我们在RDS管理控制台中创建了一个新的数据库帐号,创建时选择了绑定多 ...

  4. 云计算之路-阿里云上-阵雨:RDS故障的突袭

    风雨之后是彩虹,经历了三个月的风雨之后,从6月14日起(上次故障发生于6月13日)开始享受彩虹...而今天突袭而来的RDS故障让我们懂得了彩虹期间会有阵雨,但不管怎么样,离“晴空万里”越来越近了. 2 ...

  5. 云上的芯脏病:奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题

    最近遇到了奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题,遇到了3次. 第一次是10月12日(周六)凌晨 3:24 负载极低的时候开始出现,早上发现后进行了主备切换,恢复了正常. 第二次 ...

  6. 一面数据: Hadoop 迁移云上架构设计与实践

    背景 一面数据创立于 2014 年,是一家领先的数据智能解决方案提供商,通过解读来自电商平台和社交媒体渠道的海量数据,提供实时.全面的数据洞察.长期服务全球快消巨头(宝洁.联合利华.玛氏等),获得行业 ...

  7. 阿里云产品介绍(三):云数据库RDS

    写完云服务器ECS,本来想先写负载均衡的. 因为发现很多客户,都是直接将单台云服务器应用对外提供访问,如果云服务器宕机,应用就会停止服务.云服务器标称有99.95%的可用率,一年下来宕机四个多小时也是 ...

  8. 【IT名人堂】何云飞:阿里云数据库的架构演进之路

    [IT名人堂]何云飞:阿里云数据库的架构演进之路 原文转载自:IT168 ​ 如果说淘宝革了零售的命,那么DT革了企业IT消费的命.在阿里巴巴看来,DT时代,企业IT消费的模式变成了“云服务+数据”, ...

  9. 转- 阿里云、Amazon、Google云数据库方案架构与技术分析

    「一切都会运行在云端」. 云时代早已来临,本文着眼于顶级云服务商云服务商的云数据库方案背后的架构,以及笔者最近观察到的一些对于云数据库有意义的工业界的相关技术的进展,希望读者能有所收获. 现在越来越多 ...

随机推荐

  1. Windows下通过CMD命令行程序操作MySQL数据库

    注意:如果您的MySQL没有安装在C盘下,先使用命令进入MySQL的安装目录下的bin目录中才可以进行后续操作. 方法如下:例如您安装在D盘.先输入 D:  回车即可进入D盘,再输入cd D:\您my ...

  2. Sending Operations to Multiple Threads_翻译

    The speed and efficiency of a long-running, data-intensive operation often improves when you split i ...

  3. kali linux上安装ssh

    1.暂停kali上的ssh进程 root@kali:~# sudo stop ssh 2.卸载ssh服务 root@kali:~# apt-get remove openssh-server 这里可能 ...

  4. E11000 duplicate key error index

    E11000 duplicate key error index mongodb插入报错,重复主键问题,有唯一键值重复 一般使用collection.insertOne(doc);插入一条已存在主键的 ...

  5. HBase的优化

    HBase的优化 高可用 在 HBase 中 Hmaster 负责监控 RegionServer 的生命周期,均衡 RegionServer 的负载,如果 Hmaster 挂掉了,那么整个 HBase ...

  6. [剑指offer] 46. 孩子们的游戏(圆圈中最后剩下的数)

    题目描述 随机指定一个数m,让编号为0的小朋友开始报数.每次喊到m-1的那个小朋友要出列,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下最后一个小朋友 ...

  7. python基础练习 斐波那契数列

    转载于知乎刘奕聪的方法 一 f = [1, 1]print([f.append((f[-1] + f[-2])) or f.pop(0) for i in range(100)]) ///  f.ap ...

  8. KNN算法实现手写体区分

    KNN算法在python里面可以使用pip install指令安装,我在实现之前查看过安装的KNN算法,十分全面,包括了对于手写体数据集的处理.我这里只是实现了基础的识别方法,能力有限,没有数据处理方 ...

  9. 备战金九银十,Java研发面试题(Spring、MySQL、JVM、Mybatis、Redis、Tomcat)[带答案],刷起来!

    八月在即,马上就是"金九银十",又是跳槽招聘季.咱们这行公认涨薪不如跳槽加的快.但不建议频繁跳槽,还是要学会融合团队,抓住每个机会提升技能. 苏先生在这里给大家整理了一套各大互联网 ...

  10. Android开发进阶——自定义View的使用及其原理探索

    在Android开发中,系统提供给我们的UI控件是有限的,当我们需要使用一些特殊的控件的时候,只靠系统提供的控件,可能无法达到我们想要的效果,这时,就需要我们自定义一些控件,来完成我们想要的效果了.下 ...