雲上RDS架構

来源:https://www.cnblogs.com/cchust/archive/2019/08/18/11366175.html
-Advertisement-
Play Games

概述 越來越多的企業選擇上雲,最基礎的雲服務就是IaaS(Infrastructure as a Service)服務,直觀理解就是虛擬主機,用戶不用再自建機房,自己購買伺服器,而是直接向雲廠商購買虛擬主機服務ECS(Elastic Compute Service),按時按量付費。對於資料庫而言,將 ...


概述

越來越多的企業選擇上雲,最基礎的雲服務就是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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 人用紙和筆來做運算,都是用十進位,直接用十進位和我們最熟悉的符號不是最簡單麽? 為什麼電腦里我們最終要選擇二進位呢? 來看看,電腦在硬體層面究竟是怎麼表示二進位的,你就會明白,為什麼電腦會選擇二進位。 1 怎麼做到“千里傳書” 馬拉松的故事相信你聽說過。公元前490年,在雅典附近的馬拉松海邊, ...
  • 1.設置管理員root密碼為123 開啟MySQL服務後 再次登錄不輸入密碼,出現一下結果。 2.更改密碼 3.忘記密碼 3.1關閉MySQL伺服器 3.2跳過授權表 3.3再次登錄時無需輸入密碼 3.4更改密碼為'abc' 3.5刷新許可權後退出 3.6關閉mysql進程 3.7再次開啟服務,使用新 ...
  • 程式 = 演算法 + 數據結構 對應到電腦的組成原理(硬體層面) 演算法 各種電腦指令 數據結構 二進位數據 電腦用0/1組成的二進位,來表示所有信息 程式指令用到的機器碼,是使用二進位表示的 存儲在記憶體裡面的字元串、整數、浮點數也都是用二進位表示的 萬物在電腦里都是0和1,搞清楚各種數據在二進 ...
  • cdh6.3企業級大數據視頻教程 鏈接:https://pan.baidu.com/s/1NSAWV4qD-mLN-jWNg8UUlA 提取碼:plnt 系統和軟體版本1,操作系統:Centos7.62,Cloudera Manager : 6.3 下載地址:https://archive.clou ...
  • 前言: 前面幾篇文章為大家介紹了DML以及DDL語句的使用方法,本篇文章將主要講述常用的查詢語法。其實MySQL官網給出了多個示例資料庫供大家實用查詢,下麵我們以最常用的員工示例資料庫為準,詳細介紹各自常用的查詢語法。 1.員工示例資料庫導入 官方文檔員工示例資料庫介紹及下載鏈接: "https:/ ...
  • 前言: 在上篇文章中,主要為大家介紹的是DDL語句的用法,可能細心的同學已經發現了。本篇文章將主要聚焦於DML語句,為大家講解表數據相關操作。 這裡說明下DDL與DML語句的分類,可能有的同學還不太清楚。 DDL(Data Definition Language):數據定義語言,用於創建、刪除、修改 ...
  • 刷新許可權,將某些許可權從硬碟刷新到記憶體中(修改root密碼自帶隱式刷新許可權操作) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> 查看服務埠 mysql> show variables like 'port';... ...
  • MySQL管理——操作和查看資料庫的命令 摘要:本文主要學習了操作和查詢資料庫的常用命令。 查看資料庫的基本信息 查詢所有的資料庫 語法: 示例: 指定要使用的資料庫 語法: 示例: 查詢指定資料庫所有的表 語法: 示例: 查詢指定表的欄位 語法: 示例: 查詢指定表的索引 語法: 示例: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...