唐劉:當 SaaS 愛上 TiDB(一)- 行業挑戰與 TiDB 的應對之道

導讀

在 TiDB 8.1 發布后,TiDB 展現了強大的支持 SaaS 業務的能力,成為 SaaS 業務數據庫的優先選擇之一。

本文為“當 SaaS 愛上 TiDB”系列文章的第一篇,系列文章將從技術原理真實用戶體驗兩個角度深入探討 TiDB 在 SaaS 業務中的表現,包括如何應對可擴展性、多租戶管理、運維便利性、高可靠性等挑戰,后續文章將分別從資源隔離、彈性擴展、方便運維、業務架構等角度展開。通過這些內容,您將了解為何 TiDB 是高成長 SaaS 業務的最佳選擇。

本文作者:唐劉,PingCAP 研發副總裁。

當TiDB 8.1 發布之后,我非常相信,TiDB 已經具備了支持客戶 SaaS 業務的能力,甚至可以做為客戶 SaaS 業務數據庫的最優先選擇之一,為什么我會這么篤定,主要信心的來源就是我已經看到了非常多的客戶,來自不同的行業(譬如游戲,電商,AI,互聯網等等),基于 TiDB 構建他們的 SaaS 業務的成功案例。

TiDBSAAS

當然,成功并不是一蹴而就的,TiDB 也并不是從一開始就能支持好客戶的 SaaS 的業務,所以后面,我會寫一系列的文章,來聊聊 TiDB 是如何在 SaaS 業務場景下,如何一步一步贏得客戶的『信任之旅』,以及說明下為什么 『TiDB 會成為你高成長 SaaS 業務的第一選擇』。

一個好的 SaaS 業務給數據庫帶來哪些挑戰?

什么是 SaaS,網上已經有太多的解釋,這里簡單的說明一下,SaaS 全稱為軟件即服務,新一代 SaaS 目前都是基于云計算的軟件服務,通過互聯網提供軟件應用。用戶無需在本地計算機或服務器上安裝和維護軟件,而是通過網絡瀏覽器進行訪問。SaaS 業務由服務提供商托管和管理,用戶可以從任何有互聯網接入的設備訪問,并且通常采用訂閱制,使其對企業和個人來說既方便又具有成本效益。從某一方面來說,TiDB Cloud 也算是一種 SaaS,后面如果有機會,我也可以寫寫我們是如何構建 TiDB Cloud 這個 SaaS 業務的。

SaaS 業務的挑戰非常的大,對于數據庫的要求尤其的高。通常一個數據庫要支持好 SaaS 業務,會面臨如下的一些挑戰:

可擴展性 - SaaS 業務一個非常有意思的點就在于你的業務的租戶數量可能會從一點點突然就漲到了成千上萬,甚至百萬以上的級別,而單個租戶數據也可能從 GB 級別瘋漲到百 TB 級別。在整個業務增長,數據膨脹的過程中,數據庫的可擴展性尤其重要:客戶總不可能容忍因為數據庫沒法承載業務增長導致錯過成長紅利。

多租戶的管理 - 如何在一個數據庫里面管理多個租戶,既要確保這些租戶之間的數據隔離以及安全,又要保證租戶之間不能相互影響,是一件非常困難的事情。

方便運維 - SaaS 業務另一個好玩的點就在于業務的快速變化,我們如何對數據庫進行快速的變更以滿足不斷變化的業務需求,還有如何快速的對不同的租戶進行數據備份,性能監控等等,在運維上面都是挑戰。

高可靠性和高可用性 - SaaS 業務的連續性非常重要,如果 SaaS 業務出現宕機,影響的可是成千上萬的租戶,這個損失客戶是承受不起的。數據庫需要穩定高可靠的長時間運行,即使出現最極端的情況,也要保證能快速的幫助客戶恢復數據。

還有:高性能、數據安全和合規、成本等等。

可以看到,要支持好一個 SaaS 業務,對數據庫的核心能力要求非常的高。下面我就來大概的介紹下 TiDB 是如何應對上面的一些挑戰的。

可擴展性-SaaS業務增長的基石

如果你問我,要支持好 SaaS 業務,對于數據庫來說,最重要的特性是什么?我會毫不猶豫的回答 - 『可擴展性』。一個不支持可擴展性的數據庫是沒法支持好客戶的 SaaS 業務增長的。

說起可擴展性,我猜測,大部分的讀者立刻能想到的就是數據規模的可擴展性,這個也是 SaaS 業務一個通用需求。而這方面,TiDB 具備天生的優勢,因為 TiDB 從一開始就具備水平擴展能力,隨著數據規模的增大,客戶唯一需要做的一件事情就是不斷地增加存儲節點,TiDB 會自動的將數據進行切分打散到不同的存儲節點,并且使用多副本的方式保證數據的高可用性。這塊網上因為有太多的文章,就不詳細的說明了。

**不過,數據規模僅僅只是可擴展性一個方面的挑戰,這里說另外一個例子,就是 schema 的可擴展性挑戰。**我們的一個客戶,他在設計自己的 SaaS 業務的時候,讓所有租戶共用一套 schema 模板,也就是實際創建一個租戶的時候,一個租戶一個數據庫,每個數據庫里面有十幾張表,所以不同租戶除開數據庫名字不一樣,里面的表結構是一模一樣的。最開始這個客戶只有幾千個租戶,不過很短時間,租戶數量直接直接漲到了 10 萬個,這就意味著他需要在 TiDB 里面存至少 100 萬級別以上的 tables,簡化一點,我們就說 1M tables,我不確定有多少數據庫有信心說能很好的支持好 1M tables 這個場景。坦白的說,當前我們只能說能承接 1M tables 這個場景,還有很多挑戰需要攻堅,關于這塊的,我后面也會有文章詳細的說明。

除開上面兩個例子,可擴展性還包括很多方面,這個我們會在后面的文章中具體解析。

下圖是一個客戶實際的例子,他使用 TiDB Cloud 提供的自動擴縮容功能,在一小時之內直接新增了 200 個計算節點,承載住了那一段時間的業務流量,然后在業務穩定之后,又下線了 50 個計算節點,節省了成本。

Nodes

方便運維-為SaaS業務敏捷性兜底

SaaS 業務以靈活多變著稱,靈活多變就意味著業務邏輯調整的頻繁,甚至會對數據庫進行變更,而變更,恰恰是最容易引入故障的。

第一個最直接挑戰就是 Schema 的變更,研發不可能一開始就規劃好 Schema 設計,所以就很可能出現為了業務對 schema 進行變更的情況。可能有些讀者會說,不就是做 DDL 操作嗎,對數據庫不就是小菜一碟?不過假設現在一個客戶在數據庫里面存了 10 萬個租戶,一次業務變更,可能要進行 10 萬次 DDL 操作,中間的任何失敗,以及執行效率變慢,都會影響到實際的業務變更,拖慢業務的迭代。

所以對于數據庫來說,在 DDL 這塊,需要具備如下關鍵核心能力:

  1. Online DDL 能力,確保做 DDL 的時候不會影響在線業務。
  2. 失敗重試管理,譬如能隨時從中途某一個階段恢復繼續執行。
  3. 高效,快速,性能好,譬如如果要給一個 100TB 的表添加索引,需要小時級別就能搞定,甚至越快越好。

另一個挑戰就是依據對業務的規劃,對數據庫進行擴縮容處理。譬如下一周如果有一個重要的活動,譬如最近的歐洲杯,或者游戲新功能上線,客戶需要提前做好應對。這一塊一直是 TiDB 的優勢,上面也說到了,這里就不提了。

還有一個非常大的變更挑戰,這個算一個低頻的操作,不過真要做的時候,大家的頭一定是非常大的 - 這個就是數據庫版本的升級。SaaS 業務在這方面,挑戰尤其突出:如果只能停機升級,這個對于客戶來說,就會面對成千上萬個租戶的業務停機,對客戶來說這個損失不可想象。另外,如果因為代碼 bug(無論是 SaaS 業務自身,還是數據庫自身),可能會導致一部分租戶能正常工作,一部分租戶出現問題,對于特定租戶的數據修復,也是一個非常大的難題。

TiDB 從一開始就支持了 online upgrade,能讓客戶不停機,直接在線滾動升級,不影響客戶的業務連續性。在 TiDB Cloud 上面,我們也提供了非常充分的升級解決方案,更進一步保證升級的成功。當然 TiDB 也還有一些挑戰需要更好的解決,這個后面有機會再說。

下圖是另一個客戶跑的一個 SaaS 業務(某客戶給我們提供的數據,做了脫敏處理)。他在 30 分鐘時間內進行了 300 多次 DDL 變更,這里我們僅僅列出了 create table,還并沒有列 drop,alter 的統計。實際上這個客戶的 DDL 頻繁一直如此頻繁,而如此頻繁的進行 DDL 處理,我只能猜測,客戶實際已經是基于 TiDB Online DDL 特性,構建他自己的 SaaS 業務邏輯了。

create table

資源管控-助力精細化資源管理

多租戶的支持是 SaaS 業務里面一個很重要的能力,對于客戶來說,在數據庫里面,一個很重要的難題就是我需要給這一個租戶設置多少的資源,才能確保一方面這個租戶的業務能正常運行,而另一方面則是不能影響到其它的租戶。

這里其實就涉及到數據庫里面資源隔離,或者資源管控的支持。在非常多的數據庫里面,通過使用 cgroup 或者其他方式,提供了按照 CPU/Mem 等物理資源拆抽象的隔離方案,譬如我給租戶 1 設置只能使用 8c16g 的資源,給租戶 2 設置只能使用 16c32g 的資源,這種資源設置的方案非常的直觀,客戶也容易理解,為了便于說明,我們后面叫這個方案為 resource group(RG)。

**相比于單純的 RG,TiDB 提供了另一種抽象,我們叫做 request unit(RU)。**為什么我們要提供 RU 的抽象,一個很重要的原因就是我們希望客戶能更加細粒度的控制自己的資源,譬如對一條特定的 SQL 進行細粒度的控制。一個例子,在 RG 這個方案里面,我給一個租戶設置了 16c32g 的資源,不過這個租戶完全跑滿了,那么到底是哪幾條 SQL 占用了最多的資源,是不是需要控制這些 SQL 的資源開銷?另外如果我發現一個租戶一直沒跑滿過資源,我是不是要重新設置下它的 RG,不過萬一這個租戶在某一天突然又需要更多的資源,我如何來調整?這些都是一些比較有意思的挑戰。

而使用 RU 的方式,是容易就能達到精細化控制的效果,幫助客戶能更好的看清楚自己業務每一條 SQL 的資源開銷,針對性的進行成本優化。如果你要對你的租戶進行收費,RU 也可以提供更加細粒度的賬單,方便你更好的設計你的定價模型。當然,RU 這個方案也并不是完美的。關于 RG 和 RU 的優劣,后面有時間,可以再來討論。

因為現在的數據庫幾乎都能支持 HTAP 了,所以如何在一個數據庫里面很好的處理 TP 還有 AP 的業務,也是在資源管控上面的另一個挑戰。不少的數據庫,在自己的存儲層支持了行列混存的方案,而 TiDB 則是完全的將行列兩種數據分別放到了不同的存儲節點上面,從物理上面進行了隔離。

為什么我們要選擇行列分離的存儲方案,一個很樸素的偏見就是我們認為 AP 的查詢都是會占用比較多的資源的,無論是 IO 還是 CPU,在物理層面上面 TP 和 AP 分開,會顯著的減少 AP 對于 TP 的影響,做到更好的,更徹底的隔離。行列混存方案在資源充分的情況下工作的很不錯,不過當資源吃緊的時候,我們并不相信這樣的方案能很好的保證 AP 不會干擾 TP。而 TP,恰恰是客戶跑得最重要的業務。關于這兩個方案的優劣對比,后面有時間,也可以再來討論。

下圖是一個客戶在 TiDB Cloud 使用 RU 的效果(客戶自己提供的監控數據),可以明顯的看到,在設置好 RU 之后,租戶之間的影響降低了,整體的 TP 業務更加的穩定。

latency spikes

寫在最后

上面僅僅只是列舉了一些 TiDB 如何支持好客戶的 SaaS 業務的例子,可以看到,我們實實在在的助力了客戶 SaaS 業務的增長,幫助這些客戶成功,能贏得這些客戶的信任,是我們的榮幸。

當然,離真正的讓任何的 SaaS 業務在 TiDB 上面都能完美順暢的直接運行,我們還有很長的一段路要走。在后面的系列文章中,我會詳細的介紹 TiDB 在 SaaS 業務場景中一系列具體的挑戰(譬如 1M tables,資管隔離等) 以及我們是如何應對的。我也會介紹一些客戶是如何基于 TiDB 構建他們自己 SaaS 業務的最佳實踐。

在產品方向上面,SaaS 業務的支持也會做為今年以及未來幾年 TiDB 重點的發展方向,所以如果你的業務是 SaaS 業務,需要選擇一款數據庫,不要猶豫,請從現在開始使用 TiDB。即使當前可能在一些方面 TiDB 會有一些問題,我們也會跟你一起努力,共同克服難關,在助力你 SaaS 業務增長的同時,也一起將 TiDB 打造成全世界上『高成長 SaaS 業務的首選數據庫』。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43798.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43798.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43798.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

qt gridlayout 應用舉例

Qt的GridLayout是一種非常有用的布局管理器&#xff0c;它允許你在一個網格中放置控件&#xff0c;這樣你就可以創建出結構清晰、布局整齊的用戶界面。下面是一個使用GridLayout的簡單例子&#xff0c;展示了如何在一個窗口中放置幾個按鈕。 #include <QApplication> …

太速科技-3U VPX飛騰處理器刀片計算機

3U VPX飛騰處理器刀片計算機 一 、產品概述 該產品是一款基于國產飛騰FT2000 4核或騰銳D2000 8核的高性能3U VPX刀片式計算機。產品提供了4個x4 PCIe 3.0總線接口&#xff0c;同時可配置為1個x16或2個x8 PCIe3.0接口&#xff0c;因此具有很強的擴展性&#xff0c;極大…

agents 分類

一、分類 自動agent、半自動agent、領域、自定義sop和支持人為干預的agent。 先潑個冷水&#xff0c;目前這些agent項目都是實驗品&#xff0c;發展還沒有做知識庫問答相關開源項目那么成熟&#xff0c; 二、全自動agent autoGPT、loopGPT、babyAGI 全自動agent就是人類不可…

sizeof()

一、題目 *struct T { char a; int *d; int b; int c:16; double e; }; T *p; 在64位系統以及64位編譯器下&#xff0c;以下描述正確的是 A: sizeof 24 B: sizeof(p) 24 C: sizeof(p->a) 1 D: sizeof(p->e) 4 二、解析 p是一個指針&#xff0c;指針在32位機器上是…

GEE數據集——全球Ookla 5G 基站地圖數據(Ookla 5G Map Data)

Ookla 5G Map Data Ookla 5G 地圖數據 Ookla 5G Map? 于 2019 年 5 月推出,旨在全面展示 5G 技術在全球的擴展情況。在推出之初,該地圖突出顯示了 17 個國家的 300 項部署,說明了這一變革性技術的初步推廣情況。隨著時間的推移,該地圖已大幅增長,現在包含了來自 142 個…

實例演示Kafka-Stream消息流式處理流程及原理

以下結合案例&#xff1a;統計消息中單詞出現次數&#xff0c;來測試并說明kafka消息流式處理的執行流程 Maven依賴 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusio…

Java中的LinkedList(鏈表)(如果想知道Java中有關LinkedList的知識點,那么只看這一篇就足夠了!)

前言&#xff1a;在Java編程語言中&#xff0c;Java集合框架提供了一組豐富的數據結構&#xff0c;以滿足各種應用需求。其中&#xff0c;LinkedList作為一種常用的數據結構&#xff0c;具有獨特的優勢和廣泛的應用場景。 ???這里是秋刀魚不做夢的BLOG ???想要了解更多內…

linux radix-tree 基數樹實現詳解

radix tree&#xff0c;又稱做基數樹&#xff0c;是一種適合于構建key(index)與value(item)相關聯的數據結構。內核中使用非常廣泛。本文主要聚焦linux內核基數樹的代碼實現,大量注釋過的代碼。 radix-tree組織結構如下: 1、數據結構 /** The bottom two bits of the slot de…

如何通過JSON-RPC向以太坊鏈發送簽名交易數據?

概述 在以太坊開發當中,通過web3.js、ethers.js等提供的API方法,都可以完成與以太坊的轉賬交易。那么如何通過以太坊JSON-RPC與以太坊進行交易呢? 在以太坊的JSON-RPC當中,有eth_sendRawTransaction這個方法,可以向以太坊網絡提交預簽名的交易廣播。 curl https://main…

IDEA阿里云OSS實現文件上傳·解決蒼穹外賣圖片回顯

簡單交代配置阿里云OSS的思路 1. 首先去阿里云開通一個OSS服務&#xff0c;配置好一個自己的Bucket 2. 在IDEA配置Bucket 3. 拷貝官網的OSS工具類代碼 package com.sky.utils;import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSS…

同三維T80001編碼器(帶屏)系列視頻使用操作說明書:高清HDMI編碼器,高清SDI編碼器,4K超清HDMI編碼器,雙路4K超高清編碼器

同三維T80001編碼器&#xff08;帶屏&#xff09;系列視頻使用操作說明書&#xff1a;高清HDMI編碼器&#xff0c;高清SDI編碼器&#xff0c;4K超清HDMI編碼器&#xff0c;雙路4K超高清編碼器 同三維T80001編碼器&#xff08;帶屏&#xff09;系列視頻使用操作說明書&#xff1…

【C語言】printf、fprintf、sprintf,scanf、fscanf、sscanf的區別

目錄 前言 printf、fprintf、sprintf printf fprintf sprintf scanf、fscanf、sscanf scanf fscanf sscanf 前言 這幾個函數曾出現在面試中&#xff0c;因為函數名都差不多&#xff0c;所以很讓人迷惑啊~ 下面我們逐個分析。 printf、fprintf、sprintf 這三個函數的主…

子任務:IT運維的精細化管理之道

在當今的企業運營中&#xff0c;信息技術已成為支撐業務發展的核心力量。根據Gartner的報告&#xff0c;IT服務管理&#xff08;ITSM&#xff09;的有效實施可以顯著提升企業的運營效率&#xff0c;降低成本高達15%&#xff0c;同時提高服務交付速度和質量。隨著業務的復雜性和…

電腦工具箱神器——uTools

AI視頻生成&#xff1a;小說文案智能分鏡智能識別角色和場景批量Ai繪圖自動配音添加音樂一鍵合成視頻https://aitools.jurilu.com/ 很多人腦子里都有一些一個月只用兩三次的軟件&#xff0c;這些軟件就這樣積滿了灰塵&#xff0c;需要的時候又不知道去哪里找。uTools 完美地解決…

筆記:在Entity Framework Core 中,常用Attribute有哪些

一、目的&#xff1a; Entity Framework Core (EF Core) 支持使用屬性&#xff08;Attributes&#xff09;來配置模型和映射數據庫。這些屬性提供了一種聲明性的方式來指定如何將類和屬性映射到數據庫表和列。以下是一些EF Core中常用的屬性&#xff1a; 二、實現 1. [Table] …

力扣題解(環繞字符串中唯一的子字符串)

467. 環繞字符串中唯一的子字符串 定義字符串 base 為一個 "abcdefghijklmnopqrstuvwxyz" 無限環繞的字符串&#xff0c;所以 base 看起來是這樣的&#xff1a; "...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd....". 給你一個字符串 s …

深入理解 MyBatis 的 SqlSession:MyBatis 核心接口全解析

MyBatis 是一個非常流行的 Java 持久層框架&#xff0c;它簡化了數據庫操作&#xff0c;并且提供了強大的映射特性。在 MyBatis 中&#xff0c;SqlSession 是與數據庫交互的核心接口。本文將詳細介紹 SqlSession 的功能和使用方法。 什么是 SqlSession&#xff1f; SqlSessio…

MYSQL審批流程判斷同一層級審批人是否全部通過審批

在做流程審批的時候&#xff0c;通常會出現某一層有多個審批人的情況&#xff0c;這個時候需要所有人都通過才會進入到下一步 數據結構如下圖表格所示 每一個審批申請對應一個apply_id serial_no相同的代表是同一層級審批人 approval_status是審核狀態 下面我們可以用一個SQL來…

Day50:單調棧 LeedCode 739. 每日溫度 496.下一個更大元素 I 503. 下一個更大元素 II

739. 每日溫度 給定一個整數數組 temperatures &#xff0c;表示每天的溫度&#xff0c;返回一個數組 answer &#xff0c;其中 answer[i] 是指對于第 i 天&#xff0c;下一個更高溫度出現在幾天后。如果氣溫在這之后都不會升高&#xff0c;請在該位置用 0 來代替。 示例 1: 輸…

【蓄勢·致遠】 同為科技(TOWE)2024年年中會議

2024年7月2日-8日&#xff0c;同為科技&#xff08;TOWE&#xff09;召開2024年年中工作會議。會議回顧上半年總體工作情況&#xff0c;分析研判發展形勢&#xff0c;規劃部署下半年工作。 為期一周的工作會議&#xff0c;由同為科技&#xff08;TOWE&#xff09;創始人、董事長…