基於函式計算搭建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訪問使用者頁面。