TDSQL-C 真·秒級啟停:連接斷了,又沒斷

来源:https://www.cnblogs.com/tencentdb/archive/2022/11/11/16881222.html
-Advertisement-
Play Games

你聽過多少款無伺服器架構(Serverless)資料庫? 什麼是Serverless呢?簡單理解,Serverless 分為 FaaS 和 BaaS 兩個部分,其中 FaaS 指的是函數即服務,BaaS 是後端即服務。 舉個例子,用戶瀏覽網頁,可能涉及CDN資源。如果是靜態內容,從對象存儲下載照片、 ...


你聽過多少款無伺服器架構(Serverless)資料庫?

什麼是Serverless呢?簡單理解,Serverless 分為 FaaS 和 BaaS 兩個部分,其中 FaaS 指的是函數即服務,BaaS 是後端即服務。

舉個例子,用戶瀏覽網頁,可能涉及CDN資源。如果是靜態內容,從對象存儲下載照片、視頻;如果是動態內容,則觸發一個函數計算,雲函數將從雲資料庫獲取相應的資源,生成用戶所需的動態內容。其中,雲函數為 FaaS,對象存儲和雲資料庫則為 BaaS。

file

傳統的雲資料庫會提供多種記憶體/CPU規格給用戶購買。即使無法時刻用滿負載,用戶也需要為選中的規格付費。大多數客戶在購買資料庫服務時,只能根據歷史經驗來推測需求規格,無法準確判斷業務未來的發展趨勢。也是,咱們沒有天眼,誰知道什麼時候能被時代選中呢?

不過,咱還是要默默的問自己一聲。萬一爆紅,你的資料庫做好準備迎接業務訪問量暴漲、計算或存儲的需求量激增了嗎

不打算爆紅的企業不是好企業,抱著一顆要爆紅的心,大多數的企業會選擇比真實需求稍微偏大一些規格的資料庫服務。在沒爆紅前,這就是存儲、計算資源的浪費,也是嘩嘩的銀子在流淌。當然也有很多務實的企業,計算的近乎精準,可還是避免不了資源的靈活規劃問題,如某一時刻突然業務訪問量暴漲,對計算或存儲的需求量激增,也容易出現實例資源不夠、規格太小,需要緊急擴容。

那,用戶當然要問了,到底我要選擇多大規格的呢?在 TDSQL-C 這兒,完全不用糾結。

Serverless 服務是騰訊雲資料庫自研的新一代雲原生關係型資料庫 TDSQL-C MySQL版的無伺服器、全 Serverless 架構版。TDSQL-C 推出的 Serverless 服務基於計算與存儲分離的理念,滿足了客戶在公有雲計算環境下根據業務發展彈性擴展集群的剛性需求,讓用戶不再糾結實例資源問題,讓用戶像使用自來水一樣使用資料庫。總結其特性,可分為以下三點:

  • 自動擴縮容:用戶不需要過度關註規格,訪問量上來時自動擴容,降低時自動縮容,且實現擴縮容的過程中做到業務無感知;
  • 實用實付:按秒計量,按小時結算,按照實際使用的資源付費;
  • 不使用不計費:如果沒有訪問,不應該收費,幫助業務極大程度地節省成本;

要想完美的實現 Serverless 的特性,必然不能放過任何一個細節。資料庫實例的啟停過程帶來的時間成本、安全挑戰就是其中重要的一點,接下來將會圍繞這個細節為大家闡述騰訊雲資料庫TDSQL-C的解法。

一、頭腦風暴

在一些極限的測試場景下,實例會頻繁的自動啟停,這時候如何保證實例停止後快速恢復呢?如何保證在恢復實例時無需用戶重覆鏈接,直到恢復訪問?

站在用戶的角度考慮,誰都不希望資料庫每次啟停都耗費大量的時間,更不希望在這個過程中對業務有任何的影響。因此,極致壓縮冷啟動時間,做到鏈接不斷轉發請求的能力相當關鍵。

為了實現這一能力,我們做了眾多探索,最後選定了通過在接入層增加一個恢復感知器來實現秒級冷啟動這一方案。同比於通過 proxy 來實現鏈接的保持和轉發能力的方案,我們採用的方案更加貼合 Serverless 服務為用戶提供低成本的理念。這是因為採用 proxy 模式需要支付額外的成本,整體設計會更加複雜,並且還需要設計多租戶的能力。

二、建連流程

接下來,我們將詳細解讀 TDSQL-C Serverless 服務是如何實現通過接入層來實現恢復感知服務這一方案的。

這一方案的核心要點是在 TDSQL-C 的接入層增加了一個恢復感知器(下文簡稱:perceptron),通過 perceptron 模塊來實現請求轉發,perceptron 在和客戶端握手之後,不斷開與用戶連接,恢復實例後,與 TDSQL-C 握手,後續轉發四層報文。以下為 perceptron 與 TDSQL-C 建連的具體過程:

file

在實例暫停的狀態下,如果有連接發起時,MySQL 客戶端首先會同 preceptron 進行 TCP 握手(P0)。

file

完成 TCP 握手之後,preceptron 會向客戶端發送 “隨機數 A” 進行挑戰(P1),MySQL 客戶端用自己的賬號密碼和 “隨機數 A” 來計算並回覆自己的 “登錄解答 A”(P2)。

file

由於 preceptron 並沒有存儲用戶的賬號密碼,所以無法校驗 “登錄解答 A” 是否正確,但 preceptron 能區分客戶端是 MySQL 客戶端,還是其他類型的客戶端(preceptron 在機器學習界是分類器,區分不同類型的客戶端,這也是我們以它命名的原因之一)。

校驗 “登錄解答 A” 將由 TDSQL-C 計算層(下文簡稱:TDSQL-C)來完成,preceptron 通過管控喚醒 TDSQL-C 後(P3),開始下一步的登錄校驗流程。

file

在和 preceptron TCP 握手之後(P4),對於 TDSQL-C 來說,preceptron 也是一個普通的 MySQL 客戶端,所以也發送一個 “隨機數 B” 挑戰(P5)給 preceptron。

preceptron 的回覆是一個我們實現的特殊的 MySQL 報文(P6),首先它用 “隨機數 B” 和 preceptron 自身的鑒權機制計算得到 “登錄解答 B” 並放入報文中,其次它也將 “隨機數 A” 和 “登錄解答 A” 捎帶在此報文中。

file

TDSQL-C 收到特殊的解答報文後會做兩次校驗,第一次是 “隨機數 B” 和 “登錄解答 B” 的正確性以及 preceptron 的身份,通過後再進行第二次的 “隨機數 A” 和 “登錄解答 A” 的正確性,通過即以用戶身份進行登錄,並回覆 preceptron 登錄成功(P7)。

file

preceptron 進而回覆用戶登錄成功(P8)。

file

經歷過這樣的流程後,我們在客戶端發起一次登陸請求後,實例就可以完全無感地進行實例恢復,恢復登錄後,後續的請求和數據包通過 preceptron 進行相互的轉發。

比較巧妙的點在於整體流程設計採用了兩個挑戰隨機數進行鑒權,這樣做的優勢在於:

  • 實現中繼模塊 preceptron 不存儲用戶名密碼的情況下也可以完成用戶名密碼驗證;
  • 保證了用戶密碼的安全性,也不會引入存儲的密碼不一致的問題;

由於後續的 SQL 請求都是通過 preceptron 進行轉發,此功能對於 preceptron 的安全性、穩定性、低資源消耗以及低延遲響應能力都有要求。所以 TDSQL-C 團隊採用了 Rust 語言進行研發,相比使用垃圾回收機制管理記憶體的語言,Rust 具有更穩定的響應時間。同時基於 Rust 記憶體管理特點,使得 preceptron 更安全,占用的記憶體資源更少,最大化降低成本。

至此,讀者一定會疑問,基於 serverless 形態下如果所有請求都通過 preceptron 進行轉發,這樣成本和開銷無疑會變大,有悖於資料庫在 serverless 下的低成本特性吧?

其實,選擇 serverless 的用戶更在意低成本,而不是讀寫分離和鏈接保持能力。因此我們在設計 preceptron 模塊時,只會把觸發恢復的請求鏈接接路由到 preceptron 上,當實例恢復後,新增的請求會直接發給 TDSQL-C。

這一流程是通過 VIP 權重來實現路由的定向轉發。當實例處於暫停狀態時,僅保留 preceptron 的路由;當實例恢復後時,同時保留 preceptron 的路由和 TDSQL-C 的路由,並設置 preceptron 的路由權重為 0,以實現新增連接直連到 TDSQL-C,同時存量與 preceptron 已經建連的鏈接依然能夠通訊。

三、測試一下

那麼下麵我們來模擬一下用戶恢復實例的鏈接不斷機制。首先我們選好一個暫停狀態的 serverlss 實例,如果其在運行中我們也可以通過手動暫停來停止實例的運行。

file

通過監控數據和控制台,我們可以看到上面的實例已經處於完全暫停狀態了,接下來我們通過遠程連接工具,直接對資料庫發起連接請求。

如下圖所示,我們在發起資料庫連接請求時,可以做到秒級資料庫恢復,並且在整個連接的過程中用戶側對實例恢復和重連毫無感知,極大程度地提高了 Serverlss 產品的易用性。

經過多輪測試,我們累加內核側、管控側、perceptron 側的總體冷啟動時間,整體重連時間約在 2000ms 左右。淺放一張今天下午測試的結果,歡迎大家來體驗秒級的快樂!

file

TDSQL-C Serverless 功能還在持續優化中,今天我們更貼近了雲函數的啟動時間,在保證實例暫停的狀態下快速拉起服務並對業務無感。未來,我們還會繼續提升冷啟動的時間。

同時,我們為了進一步降低用戶的存儲成本,我們在持續探索新型的存儲能力,在實例暫停狀態下將數據轉存到對象存儲COS,並保證實例在恢復時不影響數據的讀取,更大程度幫助用戶降低成本。


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

-Advertisement-
Play Games
更多相關文章
  • 前言 大家早好、午好、晚好吖 ❤ ~ 最近,一部名叫《點燃我,溫暖你》得電視劇衝進了大家得視野~ 講述得是肆意張揚的編程天才李峋與勇敢堅韌的少女學霸朱韻從青澀校園到職場拼搏幾經波折,依然攜手前行的成長愛情故事! 其中李峋用代碼做出的紅色跳動的愛心,一下子跳到朱韻的心坎里,同樣也跳到我們的心坎 今天, ...
  • 前後端分離開發,必須解決跨域問題! 跨域:對於 url 如 http://localhost:8080,請求協議、ip 地址、埠號,只要發送請求方和接收請求方的這三個數據中,只要有一個不同,就表示是跨域訪問! AJAX 跨域訪問:用戶訪問 A 網站時所產生的對 B 網站的跨域訪問請求均提交到 A ...
  • 逆向目標 猿人學 - 反混淆刷題平臺 Web 第二題:js 混淆,動態 cookie 目標:提取全部 5 頁發佈日熱度的值,計算所有值的加和 主頁:https://match.yuanrenxue.com/match/2 介面:https://match.yuanrenxue.com/api/mat ...
  • gRPC JSON轉碼 gRPC JSON 轉碼允許瀏覽器應用調用 gRPC 服務,就像它們是使用 JSON 的 RESTful API 一樣。 瀏覽器應用不需要生成 gRPC 客戶端或瞭解 gRPC 的任何信息。 通過使用 HTTP 元數據註釋 .proto 文件,可從 gRPC 服務自動創建 R ...
  • 2022年11月8日.NET 7正式發佈 .NET仍然是最快、最受歡迎、最值得信賴的平臺之一,其龐大的.NET軟體包生態系統包括33萬多個軟體包。 .NET 7為您的應用程式帶來了更高的性能和C# 11/F# 7、.NET MAUI、ASP.NET Core/Blazor、Web APIs、WinF ...
  • 什麼是Path環境變數? 在探討這個問題之前,我們需要瞭解什麼是環境變數。 “環境變數”和“path環境變數”其實是兩個東西,這一點大家一定要區分開,不要混為一談。 “環境變數”是操作系統工作環境設置的一些選項或屬性參數。每個環境變數由變數名和文件路徑組成的,可以設置很多個環境變數。 我們一般使用環 ...
  • AIR32F103CBT6的存儲容量加上206MHz頻率, 跑RTOS才能充分利用它的性能. 關於FreeRTOS的介紹和集成, 網路上已經有不少文章, 可以直接百度搜索查看, 這裡主要介紹一下項目中的FreeRTOS集成步驟和代碼說明. ...
  • 在物聯網、監控、感測器、金融等應用領域,數據在時間維度上流式的產生,而且數據量非常龐大。 例如我們經常看到的性能監控視圖,就是很多點在時間維度上描繪的曲線。 又比如金融行業的走勢數據等等。 我們想象一下,如果每個感測器或指標每100毫秒產生1個點,一天就是864000個點。 而感測器或指標是非... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...