為什么我要遷移 SpringBoot 到函數(shù)計算
為什么要遷移?
我們的業(yè)務(wù)有很多對外提供服務(wù)的 RESTful API,并且要執(zhí)行很多不同的任務(wù),例如同步連鎖 ERP 中的商品信息到美團(tuán)/餓了么等平臺,在線開發(fā)票等。由于各種 API 和任務(wù)執(zhí)行的不確定性,經(jīng)常會因為資源不足導(dǎo)致服務(wù)不可用,但是盲目的擴(kuò)容又很燒錢。整個團(tuán)隊每天都陷在不停的擴(kuò)容,縮容之中。關(guān)鍵是有時候稍稍慢了一些,就會對業(yè)務(wù)照成影響,導(dǎo)致被投訴。每天還要被其他業(yè)務(wù)部門催著做新功能。更難的是,因為我們沒有運(yùn)維經(jīng)驗。作為一個初創(chuàng)公司的研發(fā)團(tuán)隊,我們的資源少,人手少,經(jīng)驗少,面對穩(wěn)定性,安全性和業(yè)務(wù)的壓力真的是非常痛苦。
在被前同事安利了函數(shù)計算以后,我發(fā)現(xiàn)這太有用了!遷移的過程非常順滑,遷移的效果也大大超出了我的預(yù)期。下面是我覺得函數(shù)計算非常適合我們的理由:
- 默認(rèn)彈性,可以輕松應(yīng)對大量 API 請求和任務(wù),不會再因為擴(kuò)容不及時導(dǎo)致資源耗盡引起的業(yè)務(wù)不可用了!
- 無流量時支持縮容到 0,省錢神器,再也不用買虛擬機(jī)和負(fù)載均衡了,對我們來說降本效果杠杠滴!
- 免運(yùn)維,免去了虛擬機(jī)的運(yùn)維成本!
- 更安全,它不能被 SSH 登陸,而且也不會像虛擬機(jī)一樣一直開著,等著被人掃描和攻破!
- 零改造,無需修改代碼,之前虛擬機(jī)上的 JAR 包直接就可以跑在函數(shù)計算上!
遷移步驟
有三種使用方式,這里我具體講一下怎么在控制臺上操作。
- 使用函數(shù)計算控制臺進(jìn)行遷移。
- 使用函數(shù)計算提供的 S 工具,通過命令行 + YAML 的方式進(jìn)行部署,查看詳情 1[1]。
- 使用函數(shù)計算控制臺上的應(yīng)用中心,從 GitHub 等源代碼庫中自動構(gòu)建并部署。CICD/GitOps 直接就有了,太香了!查看文末詳情 2[2]
1. 開通函數(shù)計算
訪問控制臺[3],點(diǎn)擊“免費(fèi)開通”將跳轉(zhuǎn)到開通頁面。
2. 創(chuàng)建服務(wù)
點(diǎn)擊“服務(wù)及函數(shù)”,“創(chuàng)建服務(wù)”,輸入“名稱”后點(diǎn)擊“確定”。
3. 對 JAR 包進(jìn)行壓縮,得到 ZIP 文件
注意?。。∵@里要對打包好的 JAR 包進(jìn)行壓縮,然后上傳 ZIP 包?。?!
備注:其實也可以直接上傳 JAR 包,但是啟動命令要寫為 java
org.springframework.boot.loader.JarLauncher 我個人不是很喜歡這種寫法。我還是喜歡 java -jar gs-rest-service-0.1.0.jar 的寫法。
如果你還沒有可用的 JAR 包,請參考 SpringBoot 官方快速開始文檔[4]進(jìn)行構(gòu)建。
4. 創(chuàng)建函數(shù)
- 在“函數(shù)管理”頁面,點(diǎn)擊“創(chuàng)建函數(shù)”,
- 選擇“使用自定義運(yùn)行時平滑遷移 Web Server”
- “運(yùn)行環(huán)境”選擇您需要的 Java 版本
- 選擇“通過 ZIP 包上傳代碼”
- “啟動命令”為您在虛擬機(jī)上啟動 JAR 包的命令,例如:java -jar rest-service-initial-0.0.1-SNAPSHOT.jar.zip
- “監(jiān)聽端口”為您的 JAVA 程序在虛擬機(jī)上監(jiān)聽的端口,例如:8080
- “請求處理程序類型”選擇“處理 HTTP 請求”
- 點(diǎn)擊“創(chuàng)建”
5. 測試函數(shù)
在函數(shù)詳情頁面的觸發(fā)器列表中找到“公網(wǎng)訪問地址”。注意:因為相關(guān)規(guī)定,不能直接在瀏覽器中打開這個 URL,需要配置自己的域名才能在瀏覽器中訪問。
你可以通過 curl 命令進(jìn)行測試。
你也可以通過函數(shù)詳情頁中的“測試函數(shù)”頁簽直接進(jìn)行測試。
6. 使用自己的域名訪問函數(shù)
- 點(diǎn)擊“首頁”,“域名管理”,“創(chuàng)建域名”,“添加自定義域名”
- 復(fù)制頁面中的“公網(wǎng) CNAME”,在云解析 DNS 控制臺[6]上為你的域名添加 CNAME 記錄
- 在路由配置中選擇您剛建好的服務(wù)和函數(shù)
- 點(diǎn)擊“創(chuàng)建”
- 完成!現(xiàn)在可以通過自己的域名訪問服務(wù)了!
7. 更多進(jìn)階文檔
配置 NAS 文件系統(tǒng):
?https://help.aliyun.com/document_detail/87401.html?
配置 HTTPS:
?https://help.aliyun.com/document_detail/90763.html?
授權(quán)函數(shù)訪問其他服務(wù):
?https://help.aliyun.com/document_detail/181589.html?
訪問 VPC 內(nèi)的資源:
?https://help.aliyun.com/document_detail/72959.html?
訪問 RDS 數(shù)據(jù)庫:
?https://help.aliyun.com/document_detail/84514.html?
訪問 Redis 緩存:
?https://help.aliyun.com/document_detail/148798.html?
更多快速入門文檔:
?https://fcnext.console.aliyun.com/overview?
遷移后的效果
面對流量洪峰,我們再也不會手忙腳亂了,函數(shù)計算自動會幫我們擴(kuò)容!很好的解決了我們的 API 場景和不定時執(zhí)行各種不同任務(wù)的場景。對我們這種不懂 Docker,不懂 Kubernetes,沒有運(yùn)維人員,虛擬機(jī)擴(kuò)容縮容對我們來說都很難的小團(tuán)隊來說真是一大福利。同時,我們再也不用買虛擬機(jī)和負(fù)載均衡了!縮容到 0 和按量付費(fèi)的方式也極大的降低了我們的成本!整體來說就兩個字!真香!