1. 程式人生 > 實用技巧 >基於函式計算搭建Serverless小商城

基於函式計算搭建Serverless小商城

本場景介紹如何使用阿里雲函式計算服務快速搭建一個Serverless小商城

場景體驗目標

本場景將介紹將litemall輕商城部署於函式計算之上。輕商城是移動版本的商城,提供了微信小程式和H5手機端介面、Web管理員介面。函式計算為litemall提供了按需使用的計算資源,藉助於函式計算,使用者可以實現業務零元起步,按照訪問量付費和免運維。

背景知識

本場景主要涉及以下雲產品和服務:

函式計算

函式計算(Function Compute)是事件驅動的全託管計算服務。使用函式計算,您無需採購與管理伺服器等基礎設施,只需編寫並上傳程式碼。函式計算為您準備好計算資源,彈性地可靠地執行任務,並提供日誌查詢、效能監控和報警等功能。函式計算幫助您無需管理伺服器(Serverless),僅專注於函式程式碼就能快速搭建應用。函式計算能夠彈性 地伸縮,您只需要按使用量付費。

函式計算Serverless服務和自建服務相比有以下優點:

1)上手簡單, 只專注業務邏輯開發, 極大提高工程開發效率。

  • 自建方案有太多學習和配置成本,例如針對不同場景,ESS需要做各種不同的引數配置
  • 系統環境的維護升級麻煩等。

2)免運維,函式執行級別粒度的監控和告警。

3)毫秒級彈性擴容,保證彈性高可用,同時能覆蓋延遲敏感和成本敏感型別。

系統學習函式計算知識可以觀看《Serverless 技術公開課》

工作流程

函式計算工作流程如下圖所示。

編號說明:

開發者使用程式語言編寫應用和服務。函式計算支援豐富的程式語言比如 NodeJs、Python、Java、PHP、C#, 也支援語言自定義,可以使用任何語言例如 Go。

開發者上傳應用到函式計算。

1. 上傳途徑包括:

a. (推薦)通過函式計算控制檯上傳。
b. (推薦)通過命令列工具 Funcraft上傳。
c. 通過 API 上傳。
d. 通過 SDK 上傳。

2. 觸發函式執行。觸發方式包括 OSS、API 閘道器、日誌服務、表格儲存以及函式計算 API、SDK 等。

3. 動態擴容以響應請求。函式計算可以根據使用者請求量自動擴容,該過程對您和您的使用者均透明無感知。

4. 根據函式的實際執行時間按量計費。函式執行結束後,可以通過賬單來檢視執行費用,收費粒度精確到 100 ms。

使用限制

函式執行資源限制

資源預設值
函式最大申請記憶體 3 GB
函式最大執行時間 600 秒
函式同步呼叫響應正文有效負載大小 6 MB
函式非同步呼叫請求正文有效負載大小 128 KB
程式碼部署包大小(壓縮為.zip/.jar檔案) 50 MB

每個區域賬戶資源限制

資源預設值
函式最大併發度 300 注:如果需要更大併發數,請工單聯絡客服

litemall輕商城

litemall輕商城是一個基於Spring Boot、Vuejs和微信小程式等技術開發的商城系統。它包括一個SpringBoot的後端、Vue管理員前端、微信小程式使用者前端和Vue 移動前端。

1)專案架構如下所示。

2)商城功能清單如下所示。

小商城功能

  • 首頁
  • 專題列表、專題詳情
  • 分類列表、分類詳情
  • 品牌列表、品牌詳情
  • 新品首發、人氣推薦
  • 優惠券列表、優惠券選擇
  • 團購
  • 搜尋
  • 商品詳情、商品評價、商品分享
  • 購物車
  • 下單
  • 訂單列表、訂單詳情、訂單售後
  • 地址、收藏、足跡、意見反饋
  • 客服

管理平臺功能

    • 會員管理
    • 商城管理
    • 商品管理
    • 推廣管理
    • 系統管理
    • 配置管理
    • 統計報表

連線ECS伺服器

1. 開啟系統自帶的終端工具。

  • Windows:CMD或Powershell。
  • MAC:Terminal。

Windows使用者請檢查系統中是否安裝有ssh工具。檢查方法:

1)在終端中輸入命令ssh -V。

ssh -V

2)出現如下結果說明已安裝。

3)否則請下載安裝OpenSSH。

2. 在終端中輸入連線命令ssh [username]@[ipaddress]。您需要將其中的username和ipaddress替換為第1小節中建立的ECS伺服器的登入名和彈性公網IP。例如:

ssh root@123.123.123.123

命令顯示結果如下:

3. 輸入yes。

4. 同意繼續後將會提示輸入登入密碼。 密碼為已建立的雲服務的ECS的登入密碼。

登入成功後會顯示如下資訊。

開通函式計算服務和日誌服務

在使用函式計算前,您需要在控制檯開通服務,具體步驟如下。

1. 在頁面左側資源欄點選一鍵複製登入url

2. 開啟瀏覽器隱身視窗(無痕模式),貼上已複製的url地址前往RAM使用者登入介面。

3. 在RAM使用者登入頁面,輸入雲產品資源提供的子使用者名稱稱點選 【下一步】

跳轉後輸入子使用者密碼,並點選 【登入】 。

4. 在阿里雲管理控制檯,點選頂部【產品與服務】 ,然後點選【函式計算】 ,進入服務開通頁面。

5. 選擇資源提供的地域,勾選函式計算服務協議,點選【立即開通】。

開通成功頁面如下。

安裝Fun工具

Fun是一個用於支援Serverless應用部署的工具,能幫助您便捷地管理函式計算、API 閘道器和日誌服務等資源。它通過一個資源配置檔案(template.yml),協助您進行開發、構建和部署操作。

1. 將Fun的安裝包下載到本地。請將下面的FUN_VERSION變數的值設定為最新版本號,最新版本號請參見Releases。以下操作將在ECS伺服器上安裝和配置Fun。

FUN_VERSION="v3.6.1"
curl -o fun-linux.zip https://gosspublic.alicdn.com/fun/fun-$FUN_VERSION-linux.zip

2. 安裝解壓工具unzip,並使用unzip將下載的Fun安裝包解壓到當前目錄。

yum -y install unzip
unzip fun-linux.zip

3. 將解壓出來的可執行檔案移動到系統路徑。

mv fun-*-linux /usr/local/bin/fun

4. 配置Fun關聯的阿里雲賬號和呼叫SDK的超時時間等資訊。

fun config

請參考以下資訊輸入您的阿里雲賬號ID、AccessKeyID和AccessKey金鑰等資訊。

  • Aliyun Account ID:子使用者名稱稱中@符號後面部分就是給您分配的主賬號ID,例如u-zftb79nc@105997185439****中包含的賬號ID為105997185439****
  • Aliyun Access Key ID和Aliyun Access Key Secret:請使用平臺提供給您的子賬號AK ID和AK Secret。

  • Default region name:請選擇雲產品資源所在地域。
  • The timeout in seconds for each SDK client invoking:建議將超時時間設定長一點(例如10000),防止在上傳部署包時發生超時中斷。

正確設定如下所示:

安裝NodeJS

litemall的管理端和使用者端的前端介面是由Vue.js開發,編譯這兩部分的時候需要用到NodeJS環境,以下操作將安裝一個NodeJS環境。

1. 從淘寶映象下載NodeJS的安裝包。

wget https://npm.taobao.org/mirrors/node/v12.4.0/node-v12.4.0-linux-x64.tar.xz

2. 將下載的安裝包解壓到/usr/local/目錄。

tar -xvf node-v12.4.0-linux-x64.tar.xz -C /usr/local/

3. 將NodeJS安裝目錄重新命名。

mv /usr/local/node-v12.4.0-linux-x64/ /usr/local/node

4. 將NodeJS的可執行檔案目錄加入到系統環境變數中,並使用source命令使配置檔案立即生效。

echo "export PATH=$PATH:/usr/local/node/bin" >> /etc/profile
source /etc/profile

5. 安裝淘寶cnpm映象。

npm install cnpm -g --registry=https://registry.npm.taobao.org

6. 安裝cross-env。

cnpm install -g cross-env

安裝Maven

1. 安裝OpenJDK1.8,litemall要求JDK版本1.8以上

yum -y install java-1.8.0-openjdk-devel.x86_64

2. 下載Maven安裝包。

wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

3. 將下載的安裝包解壓到/usr/local/目錄,並將安裝目錄重新命名。

tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/
mv /usr/local/apache-maven-3.6.3/ /usr/local/maven

4. 將maven的可執行檔案目錄加入到系統環境變數中,並使用source 命令使/etc/profile檔案中的內容立即生效。

echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile
source /etc/profile

5. 執行以下命令開啟映象倉庫配置檔案,新增阿里雲映象倉庫配置。

vim /usr/local/maven/conf/settings.xml

進入Vim編輯器頁面後輸入:/mirrors,搜尋並跳轉到<mirrors>標籤的位置。

按下n鍵跳轉到第二個沒有被註釋的標籤位置。

按下o鍵,另起一行進行編輯,貼上以下內容。

<mirror>
       <id>nexus-aliyun</id>
       <mirrorOf>central</mirrorOf>
       <name>Nexus aliyun</name>
       <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

按下ECS退出編輯模式,輸入:wq儲存並退出Vim編輯器。

安裝MySQL

1. 下載安裝MySQL的Yum源。

wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm

2. 安裝mysql-server。

yum -y install mysql-community-server

3. 啟動mysql-server。

systemctl start mysqld.service

4. 修改預設密碼。

a. 查詢root密碼。

grep "password" /var/log/mysqld.log

命令輸出如下所示。

b. 使用查詢到的密碼登入到mysql。

mysql -uroot -p

命令輸出如下所示。

c. 修改密碼安全策略為低(只校驗密碼長度,至少8位)。

set global validate_password_policy=0;

d. 修改密碼。

alter user root@'localhost' identified by '12345678';

e. 授予root使用者遠端管理許可權。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678';

f. 退出MySQL命令列。

quit

下載商城專案程式碼

1. 安裝Git。

yum -y install git

2. 使用Git下載程式碼。

git clone https://github.com/vangie/litemall.git

專案包括4個系統和9個模組。

  • 基礎系統子系統:由資料庫、litemall-core模組、litemall-db模組和litemall-all模組組成。
  • 小商場子系統:由litemall-wx-api模組、litemall-wx模組和renard-wx模組組成。
  • 輕商城子系統:由litemall-wx-api模組和litemall-vue模組組成。
  • 管理後臺子系統:由litemall-admin-api模組和litemall-admin模組組成。

初始化資料庫

參考以下步驟將商城專案的初始資料匯入到資料庫中。請將下面命令中的12345678修改為您設定的資料庫密碼。

1. 建立資料庫和使用者。

cd litemall && mysql -uroot -p12345678 < litemall-db/sql/litemall_schema.sql

2. 初始化資料庫表結構。

mysql -uroot -p12345678 litemall < litemall-db/sql/litemall_table.sql

3. 插入測試資料。

mysql -uroot -p12345678 litemall < litemall-db/sql/litemall_data.sql

部署專案

1. 修改Fun部署模板中的資料來源資訊。

vim template.yml

進入Vim編輯器後,按下i鍵進入編輯模式,修改以下內容。

SPRING_DATASOURCE_DRUID_URL: jdbc:mysql://120.26.46.183:3306/litemall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
SPRING_DATASOURCE_DRUID_PASSWORD: 12345678

請將上面內容中的IP地址修改為ECS伺服器的公網IP地址,資料庫連線密碼修改為您設定的資料庫密碼。

按下ESC鍵,輸入:wq儲存並退出Vim編輯器。

2. 安裝NodeJS子專案依賴

sh install.sh

3. 在專案根目錄下執行fun deploy -y命令獲取臨時域名。

fun deploy -y

命令輸出如下所示。

返回結果中的18063760-19861144305*****.test.functioncompute.com即為臨時域名,該域名有10天的有效期,且每天有 1000 次的呼叫次數限制。

4. 構建並部署。

請將DOMAIN變數的值修改為上一步獲取到的臨時域名。

DOMAIN=http://18063760-19861144305*****.test.functioncompute.com ./deploy.sh

命令輸出如下所示。

5. 訪問litemall。

說明:函式部署成功後,會有冷啟動延時,請等待1~2分鐘再進行訪問。

  • 瀏覽器輸入http://18063760-19861144305*****.test.functioncompute.com訪問後臺管理頁面。

  • 瀏覽器輸入http://18063760-19861144305*****.test.functioncompute.com/vue/index.html訪問使用者頁面。