【騰訊云TDSQL-C Serverless 產品體驗】新時代數(shù)據(jù)庫大殺器
概要
近年來,隨著互聯(lián)網行業(yè)的高速發(fā)展,關系型數(shù)據(jù)庫也面臨著前所未有的挑戰(zhàn)。云原生數(shù)據(jù)庫成為解決這些挑戰(zhàn)的重要方案之一。騰訊云推出的 TDSQL-C Serverless
版正是云原生數(shù)據(jù)庫領域的佼佼者之一。
我在CSDN “學習” 的過程中發(fā)現(xiàn)騰訊云聯(lián)合CSDN推出了 “騰訊云TDSQL-C產品測評活動 ”,為了更好地了解 TDSQL-C Serverless
版這個產品,我第一時間申請了 TDSQL-C Serverless
數(shù)據(jù)庫的體驗名額,成功通過手冊的指引構建了一個集群,作為本次CMS
開發(fā)的基礎支撐。
整體體驗流程
首先我根據(jù)活動手冊對 TDSQL-C Serverless
版進行了初體驗,然后我通過創(chuàng)建一個 LightCMS
進行Web
服務搭建,我將原本在我服務器上運行的Mysql5.7
數(shù)據(jù)庫無縫遷移到了TDSQL-C
中,確實能夠完全兼容MySQL
協(xié)議,然后在不寫入和讀取數(shù)據(jù)的情況下,系統(tǒng)自動停止了數(shù)據(jù)庫服務,而一旦有數(shù)據(jù)訪問,系統(tǒng)又能在毫秒級自動對數(shù)據(jù)庫實例進行擴容,既保證應用響應速度,也驗證了 serverless
的特性。
我們公司系統(tǒng)屬于電商行業(yè),是符合二八原則的系統(tǒng)(即百分之80讀,百分之20是寫入),所以我也根據(jù) TDSQL-C Serverless
輕松地實現(xiàn)讀寫分離,這也是為什么這個產品是一個集群產品,它可以通過讀寫組將其他實例給鏈接起來,通過這種方式可以大幅度降低系統(tǒng)的負載情況,并且還是按量計費。
通過這個初步的體驗,我也深深地感受到 TDSQL-C Serverless
版在自動彈性、兼容性、高可用等方面的優(yōu)勢。接下來我把我的整個體驗過程放在下面,如有不對之處,還希望大家斧正。
一、搭建項目環(huán)境
1.1、創(chuàng)建TDSQL-C Serverless
我們選擇 serverless
版本,因為我原來的數(shù)據(jù)庫也是 mysql
,所以這里為了更好的遷移過去,我也選擇了 mysql5.7
,同時這里還支持海外地區(qū),如果大家有海外項目也是可以選擇這個產品的
我們先去購買一個集群,這里很有意思,就是為什么買一個數(shù)據(jù)庫叫一個集群呢?看到后面大家就知道了!
立即購買完后就會看到創(chuàng)建中的一個狀態(tài)
然后我們將公網訪問打開就可以了,處于下面這個狀態(tài)
1.2、 創(chuàng)建 cms數(shù)據(jù)庫
這里 TDSQL-C 自帶Web管理工具,通過DMC進行集群登錄即可看到新建一個
cms
數(shù)據(jù)庫
這樣我們的數(shù)據(jù)庫基本就算搭建好了,是不是比我們自己搭建也方便太多了!
1.3、搭建LightCms
我們要使用的是 laravel
開發(fā)框架構建的LightCms
,這里我采用8.x版本,倉庫地址如下:https://github.com/eddy8/LightCMS.git
git clone https://github.com/eddy8/LightCMS.git
cd LightCMS
composer install
然后配置一下.env
文件,將 tdsql-c
數(shù)據(jù)庫配置進去
運行遷移文件和初始數(shù)據(jù)
php artisan migrate --seed
然后進行 nginx 配置即可正常訪問了
server {
listen 80;
server_name light.com;
root /data/www/lightCMS/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#不同配置對應不同的環(huán)境配置文件。比如此處應用會加載.env.pro文件,默認不配置會加載.env文件。此處可根據(jù)項目需要自行配制。
#fastcgi_param APP_ENV pro;
include fastcgi_params;
}
}
二、體驗自動啟停
2.1 什么是自動啟停
大家都知道,關系型數(shù)據(jù)庫一般需要我們手動去配置和管理數(shù)據(jù)庫服務器。比如需要提前購買服務器配置,然后再根據(jù)業(yè)務情況來開啟和關閉數(shù)據(jù)庫。如果訪問量高,需要升級配置,如果訪問量低,又需要主動停服節(jié)省開支。這給我們帶來很多管理上的工作量。
但是TDSQL-C Serverless
版不一樣,它支持自動啟停功能。這個怎么理解呢? 我們只需要正常使用數(shù)據(jù)庫完成讀寫操作,它內部就能自動感知訪問量的高低。訪問量高時,它會自動給我們增加更多計算和存儲資源,保證操作速度不受影響。而訪問量如果變低了,它也會主動回收一些資源,幫我們節(jié)省開支。
就是像電梯一樣,我們按了樓層按鈕就可以乘坐,內部會自動打開和關閉電梯門。我們不需要考慮電梯具體的運作細節(jié)。TDSQL-C Serverless版的自動啟停功能,也就是這種智能的“按需”運作機制。
2.2 自動啟停測試
我們先在后臺添加一篇文章
現(xiàn)在是正常從數(shù)據(jù)庫中獲取文章數(shù)據(jù)展示的,然后我們去將數(shù)據(jù)庫手動暫停,或者也可以等他空閑一段時間自動暫停
現(xiàn)在數(shù)據(jù)庫已經是一個暫停暫停的狀態(tài)了,然后我們對我們文章進行刷新訪問,看看數(shù)據(jù)庫和程序是一個什么樣的運行狀態(tài):
我刷新之后還是和之前一樣穩(wěn)定運行,數(shù)據(jù)庫也自動啟動了,我根本就感覺不到期間這個數(shù)據(jù)原來已經停止了,沒有在運行,感覺做到的真正按需付費,沒有流量我們就不用額外付費了
對于我們那些測試的程序、或者那些分段流量的感覺很不錯,因為很多的時候其實數(shù)據(jù)庫可以處于暫停狀態(tài)
三、體驗讀寫分離架構
之前也有說到,我們公司的項目就是會使用到讀寫分離,所以這次我也是特地地來看看,TDsql-C serverless 的讀寫分離到底怎么樣?能不能讓公司采購一份!
3.1、創(chuàng)建只讀實例
在集群詳情中,可以選擇添加只讀實例
然后可以選擇只讀組的數(shù)量以及只讀服務器的
ccu
情況,這個可以根據(jù)我們平時項目讀的一個流量進行配置預定,也是彈性伸縮的這里就能看到我們的讀寫實例和只讀實例了,同時我們也給只讀實例開啟公網訪問
然后在程序中,我們將查詢的流量全部導入給只讀節(jié)點,這個只讀實例也有些需要注意的,跟我們平時的只讀實例不太一樣:
- 只讀實例與讀寫實例是共享同一個存儲,不需要維護賬號與數(shù)據(jù)庫。
- 只讀實例無需通過
binlog
與讀寫實例保持同步,無需復制搬遷數(shù)據(jù),通常只需秒級時間即可完成只讀實例的創(chuàng)建。 - 只讀實例規(guī)格可以與讀寫實例不一致,但為了方便用戶根據(jù)負載情況調整配置,建議各只讀實例的規(guī)格保持一致。
3.2、將文章列表和文章詳情流量分給只讀組
因為系統(tǒng)查詢比較多的就是文章詳情和文章列表了,這里我們不對讀寫實例進行查詢了,讀寫實例就用于寫數(shù)據(jù)就好了
3.2.1、 .env 中配置只讀組
DB_READ_HOST=gz-cynosdbmysql-grp-mq7d6y1f.sql.tencentcdb.com
DB_READ_PORT=20229
DB_READ_USERNAME=root
DB_READ_PASSWORD=Qwerabc.
3.2.2、 config/database.php 中配置讀寫分離
'mysql' => [
'read' => [
'host' => env('DB_READ_HOST', ''),
'username' => env('DB_READ_USERNAME', ''),
'password' => env('DB_READ_PASSWORD', ''),
'port' => env('DB_READ_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
],
'write' => [
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
],
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
3.2.3、內容控制器將流量轉發(fā)到讀實例 Front/HomeController.php
public function content($entityId)
{
$entity = Entity::query()->External()->findOrFail($entityId);
ContentRepository::setTable($entity->table_name);
ContentRepository::model()::on('mysql::read');
$contents = ContentRepository::paginate();
return view('front.content.list', compact('entity', 'contents'));
}
3.2.4、啟動jmeter構造線程組
這里也是簡單構造了30個線程循環(huán)100次
3.2.5、觀察讀和寫實例的性能狀態(tài)
這是讀寫服務器的,可以看到就算線程起來了,也對CPU和內存沒什么影響,因為根本沒有請求轉發(fā)給他同時我們看這個只讀實例,當我們開始測試時,這個CPU和內存就已經開始拉起來了
這里其實就可以看到,接入TDSQL-C Serverless
讀寫分離還是非常簡單的,那么如果我們的流量非常大,一臺只讀實例不夠怎么辦?別擔心,TDSQL-C
已經給我們處理好了,我們不用在代碼中做邏輯分流,而是開啟一個只讀組,由只讀組地址統(tǒng)一進行均衡分流
3.3、創(chuàng)建只讀組分流
然后我們再購買一個只讀實例,點擊這個調整配置
將只讀節(jié)點選擇 2
這里默認外網地址是沒開的,另一個外網地址也可以關閉掉了,因為我們開啟了只讀組,我們所有的只讀流量交給只讀組管理就可以了
將配置改成只讀組配置
同時我們還是使用jmeter
進行測試,同樣是一樣的線程,30線程 100次循環(huán),看看只讀實例的壓力是否得到了分擔。目前測試腳本停下來后,只讀服務器的CPU也降低下來了
一臺只讀服務器,最多使用了 8%
的CPU,看下圖
兩個只讀實例通過只讀組自動就進行分流了,通過這個圖表也可以看出來是一個均衡的分配
文章來源:http://www.zghlxwxcb.cn/news/detail-722019.html
總結
這個體驗流程就是這樣,同時也回答一下為什么這個數(shù)據(jù)庫是創(chuàng)建一個集群,而不是一個實例,其實通過我們的體驗過程也不難發(fā)現(xiàn),整個TDSQL-C Serverless
不僅僅只是一個實例,它還可以鏈接讀寫實例進行壓力分擔,這也已經不是普通數(shù)據(jù)庫實例的能力范圍了。作為一名開發(fā)者,我非常慶幸參與了此次活動,感受到了 serverless
產品的魅力。通過實踐TDSQL-C Serverless
版,我也積累到了更多云原生數(shù)據(jù)庫的使用經驗,同時也可以通過測評將自己對產品各個方面優(yōu)勢和看法提供出來,希望這篇文章能夠帶給大家一點幫助!文章來源地址http://www.zghlxwxcb.cn/news/detail-722019.html
到了這里,關于【騰訊云TDSQL-C Serverless 產品體驗】新時代數(shù)據(jù)庫大殺器的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!