國內首款 Serverless MySQL 數據庫重磅發佈!

12 月 20 日的 Techo 大會上,騰訊雲重磅發佈了自研雲原生數據庫 TDSQL-C Serverless(原 CynosDB Serverless),這是國內首款計算和存儲全 Serverless 架構的雲原生 MySQL, TDSQL-C Serverless能夠讓企業用戶像使用水、電、煤一樣使用雲數據庫,用戶不需爲數據庫的閒時進行付費,而是按照數據庫資源響應單元實際使用量進行計費,將騰訊云云原生技術普惠用戶。

作爲 Serverless 生態中的重要一環,TDSQL-C Serverless 的發佈也補齊了 Serverless 架構裏 MySQL 數據庫的空缺。因此,Serverless Framework 同步發佈了 TDSQL-C Serverless 組件。這樣,騰訊雲就擁有了一套Serverless 全棧的核心解決方案,包括 Serverless API網關、騰訊雲的 Serverless 函數計算服務、Serverless 對象存儲和數據庫。在數據存儲層可以通過 TDSQL-C Serverless 直接對數據庫連接並進行 SQL 操作。

TDSQL-C Serverless(MySQL 數據庫),具備完全自動化的擴容能力,能夠隨着用戶業務的請求數的增加和減少,智能化“膨脹”和“縮小”,實現資源的自動“吞吐”。從此以後,開發者可以真正的完成 Serverless 應用的開發,專注於業務本身,免除運維,按需付費,享受 Serverless 架構帶來的衆多優勢。

另外,TDSQL-C Serverless 數據庫在試用期間完全免費。

服務特性

  • 自動駕駛(Autopilot):

數據庫根據業務負載自動啓動停止,無感擴縮容,擴縮容過程不會斷開連接。

  • 按使用計費(Utility Pricing):

按實際使用的計算和存儲量計費,不用不付費,按秒計量,按小時結算。

適用場景

  • 開發、測試環境等低頻數據庫使用場景。
  • 物聯網(IoT)、邊緣計算等不確定負載場景。
  • 中小企業建站等 SaaS 應用場景。

下面的教程將以 Node.js 開發語言的函數,指導您如何快速創建 TDSQL-C Serverless MySQL 實例,並在雲函數中進行調用:

操作步驟

  1. 配置環境變量
  2. 配置私有網絡: 通過 Serverless Framework VPC 組件 創建 VPC 和 子網,支持雲函數和數據庫的網絡打通和使用。
  3. 配置 Serverless DB: 通過 Serverless Framework Cynosdb 組件 創建 MySQL 實例,爲雲函數項目提供數據庫服務。
  4. 編寫業務代碼: 通過 Serverless DB SDK 調用數據庫,雲函數支持直接調用 Serverless DB SDK,連接 PostgreSQL 數據庫進行管理操作。
  5. 部署應用: 通過 Serverless Framework 部署項目至雲端,並通過雲函數控制檯進行測試。
  6. 移除項目: 可通過 Serverless Framework 移除項目。

1. 配置環境變量

在本地建立目錄,用於存放代碼及依賴模塊。本文以 test-MySQL 文件夾爲例。

mkdir test-MySQL && cd test-MySQL

由於目前 TDSQL-C Serverless 只支持 ap-beijing-3ap-guangzhou-4ap-shanghai-2ap-nanjing-1 四個區域,所以這裏還需要配置下,只需要在項目根目錄下創建 .env 文件,然後配置 REGIONZONE 兩個環境變量:

# .env
REGION=xxx  
ZONE=xxx 

2. 配置私有網絡

test-MySQL 目錄下創建文件夾 VPC

mkdir VPC && cd VPC

同時在 VPC 中新建 serverless.yml 文件,使用 VPC 組件完成私有網絡和子網的創建。

serverless.yml 示例內容如下,全量配置參考產品文檔

#serverless.yml
org: mysql-app
app: mysql-app
stage: dev
component: vpc # (required) name of the component. In that case, it's vpc.
name: mysql-app-vpc # (required) name of your vpc component instance.
inputs:
  region: ${env:REGION}
  zone: ${env:ZONE}
  vpcName: serverless-mysql
  subnetName: serverless-mysql

3. 配置 Serverless DB

test-MySQL 下創建文件夾 DB,並在 DB 文件夾下新建 serverless.yml 文件,並輸入以下內容,通過 Serverless Framework 組件完成雲開發環境配置。

serverless.yml 示例內容如下,全量配置參考產品文檔

# serverless.yml 
org: mysql-app
app: mysql-app
stage: dev
component: cynosdb
name: mysql-app-db
inputs:
  region: ${env:REGION}
  zone: ${env:ZONE}
  vpcConfig:
    vpcId: ${output:${stage}:${app}:mysql-app-vpc.vpcId}
    subnetId: ${output:${stage}:${app}:mysql-app-vpc.subnetId}

4. 編寫業務代碼與配置文件

test-MySQL 下創建文件夾 src,用於存放業務邏輯代碼和相關依賴項。並在 src 文件夾下創建文件 index.js,輸入如下示例代碼。在函數中通過 SDK 連接數據庫,並在其中完成 MySQL 數據庫的調用。

exports.main_handler = async (event, context, callback) => {
  var mysql      = require('mysql2');
  var connection = mysql.createConnection({
    host     : process.env.HOST,
    user     : 'root',
    password : process.env.PASSWORD
  });
  connection.connect();
  connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
    if (error) throw error;
    console.log('The solution is: ', results[0].solution);
  });
  connection.end();
 }

安裝所需依賴模塊:

npm install mysql2

完成業務代碼編寫和依賴安裝後,創建 serverless.yml 文件,示例文件如下:

org: mysql-app
app: mysql-app
stage: dev
component: scf
name: mysql-app-scf

inputs:
  src: ./
  functionName: ${name}
  region: ${env:REGION}
  runtime: Nodejs10.15
  timeout: 30
  vpcConfig:
    vpcId: ${output:${stage}:${app}:mysql-app-vpc.vpcId}
    subnetId: ${output:${stage}:${app}:mysql-app-vpc.subnetId}
  environment:
    variables:
      HOST: ${output:${stage}:${app}:mysql-app-db.connection.ip}
      PASSWORD: ${output:${stage}:${app}:mysql-app-db.adminPassword}

5. 快速部署

完成創建後,項目目錄結構如下:

   ./test-MySQL
   ├── vpc
   │   └── serverless.yml # vpc 配置文件
   ├── db
   │   └── serverless.yml # db 配置文件
   ├── src
   │   ├── serverless.yml # scf 組件配置文件
   │   ├── node_modules # 項目依賴文件
   │   └── index.js # 入口函數
   └── .env # 環境變量文件

使用命令行在 test-MySQL 下,執行以下命令進行部署。

sls deploy

返回結果如下所示,即爲部署成功。

mysql-app-vpc: 
  region:        xxx
  zone:          xxx
  vpcId:         xxxx-xxx
  ...

mysql-app-db: 
  dbMode:        xxxx
  region:        xxxx
  zone:          xxxx
  ...

mysql-app-scf: 
  functionName:  xxxx
  description:   xxx
  ...

59s › test-MySQL › "deploy" ran for 3 apps successfully.

部署成功後,您可通過 雲函數控制檯,查看並進行函數調試,測試成功如下圖所示:

移除項目

test-MySQL 目錄下,執行以下命令可移除項目。

sls remove

返回如下結果,即爲成功移除。

serverless ⚡ framework
4s › test-MySQL › Success

除了通過組件一鍵創建所有資源外,您也可以通過控制檯完成 Serverless 版本 MySQL 數據庫的創建,並在雲函數中正常使用 SDK 的方式完成調用。

One More Thing

立即體驗騰訊雲 Serverless Demo,領取 Serverless 新用戶禮包 👉 serverless/start

歡迎訪問:Serverless 中文網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章