什么是函式?剛剛考完數學沒多久的我,腦里立馬想到的是自變數、因變數、函式值,也就是y=f(x),當然,在計算機里,函式function往往指的是一段被定義好的代碼程式,我們可以通過傳參呼叫這個定義好的函式,實作我們所需要的功能,那么,今天的函式計算FC又是什么?
云計算時代的當下,容器化技術與各種工具發展的DevOps,已經把開發與運維的作業進行了新的統籌,開發人員在完成代碼的撰寫后,無需考慮環境,直接提交到各種流水線就可以完成測驗、開發、部署,專案構建微服務,由容器完成環境的封裝,但是往往我們最侄訓是需要投入精力到業務上線的集群,是私有云環境還是公有云?是裸金屬服務器還是云實體ECS?是自購還是租用?

當然,DevOps的落地、服務器\集群的運維,這些都是需要投入大量的資源與精力,DevOps是一條捷徑,但不是唯一的出路,而函式計算FC的出現,帶來了無服務Serverless的架構,讓開發者在開發和部署的時候,不再有部署服務復雜的感覺,
對服務器的無感化,可以使開發者真正的關注在自己的代碼上,阿里云Serverless函式式極簡編程可專注于業務創新,無采購和部署成本、提供監控報警等完備的可觀測能力,阿里云函式計算FC是事件驅動的全托管計算服務,真正的無需去考慮服務器的運維管理,只需要完成開發的代碼進行上傳,函式計算會通過角色策略去規劃計算資源,彈性的方式執行函式,最后高效的執行部署,優雅!

Serverless 將會有那些適用場景?是個人?還是生產?那么這次我將部署兩種不同方向的應用對 Serverless 進行測評!
一、通知系統與Webhook,Trigger觸發與Chat機器人,
許多系統中涉及到的push類功能,例如郵件、短信、Webhook,當然Webhook的能力不只是資訊通知,不過這里所指的通知功能必然是需要基礎設施也就是服務器來支撐運行,如果將這些功能直接由Serverless來操作,我們便無需支付運維一臺服務器,節省了大量的作業與費用,同樣,我們可以利用Serverless事件驅動模型實作定時自動觸發任務,自動簽到自動發送,
二、其次當然是Web類的應用,
基于各類Web框架的應用部署,構建基于Java、Python、PHP等語言的站點,Serverless很容易實作如wordpress這樣的博客應用的上線,配合其他云產品,Codeup、OSS、RDS等,更能實作高可用高性能的Web應用,如官方提供的Kod云盤系統,
Serverless農產品電商網站上云改造
這里我拿隔壁軟體專業(俺是網路技術的)的一個大作業專案作為部署的案例,專案是非常簡單并且功能單一的,但是也是非常經典的前后端分離專案,由于我開發不太會,專案具體技術就不獻丑了,之前據說是有什么著作權的,我就不放源代碼了hhhh,
在改造之前,我相信是很多中小型公司業務的經典AllinOne結構,把業務涉及到的所有服務中間件運行在一臺服務器/虛擬機上,雖然現在看可能完完全全是實驗室環境,但是實際看到的依然有很多專案是這么做的,壞處也不用多提,部署運維難、難以進行資源的擴容、后續改造復雜、性能差沒有應用高可用技術等等,,,

Serverless的農產品電商平臺上云,專案比較簡單,規劃就在同一地域了,主要是將前端HTML頁面與后端Jar包運行分別由兩個單獨的Serverless函式完成運行計算,其余支撐服務上云,分別用對應的云產品實作,這里Redis服務由于我自己ECS上有運行redis服務,就不再單獨購買云資料庫Redis版了,當然推薦使用阿里云的Redis云資料庫產品,

1.Serverless服務創建
進入函式計算控制臺,選擇【服務及函式】,點擊【創建服務】
輸入創建服務的名稱與描述,開啟日志功能,點擊確定,完成服務的創建

服務創建完成后,進入【服務詳情】,找到【網路配置】,點擊【編輯】
選擇允許訪問VPC,選擇自定義配置,選擇VPC、vSwitch、安全組,這里需要和后續其他支撐的云產品(資料庫等)保持在同一VPC下,因此需要做好云上網路的規劃,也要看一下產品是否在地域下有沒有庫存,

2.前端頁面Serverless函式創建
完成服務創建后,點擊【創建函式】,進入函式的創建頁面
選擇【使用自定義運行時平滑遷移WebServer】,輸入函式名稱,選擇運行環境為【Nginx】,上傳前端html代碼與nginx的組態檔,選擇監聽埠為80,即為原nginx中間件的服務埠,

完成函式創建后,進入到函式詳情界面,可以在函式代碼中對代碼進行編輯修改,代碼改動后需要點擊部署代碼重新上傳,上述也提到了,這里需要將Nginx服務配置一同上傳,其中需要拷貝一份/etc/nginx/mime.types檔案到當下目錄,避免mime檔案型別映射錯誤,
這里放nginx關鍵配置,根據自己的業務情況修改,注意配置中埠監聽需要與函式創建監聽埠保持一致,同時網頁代碼的路徑設定為/code
http { include mime.types; #注意引入此檔案 keepalive_timeout 900; server { listen 80; server_name localhost; location / { root /code; index index.html index.htm; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /users { proxy_pass http://serverless.后端函式訪問地址.run; #Nginx反代傳給后端的函式,地址在后續后端函式創建完可以拷貝 } location /items { proxy_pass http://serverless.后端函式訪問地址.run; #Nginx反代傳給后端的函式,地址在后續后端函式創建完可以拷貝 }

可以在呼叫日志查詢相關日志

當函式觸發運行,Serverless將會根據訪問請求自動起實體,在這里可以手動登陸實體,去進行中間件服務的日志、運行環境的一些查看與排錯,

3.后端Serverless函式創建
回到函式服務界面,再次點擊【創建函式】,進入函式的創建頁面
選擇【使用自定義運行時平滑遷移WebServer】,輸入函式名稱,選擇運行環境為【Java】,上傳打包好的Jar包檔案,
根據具體業務修改【啟動命令】與【監聽埠】,我這里需要監聽業務埠為8080,并且需要在運行時傳入資料庫連接的引數,這里所配置的資料庫源用戶名密碼連接地址,在后續的云資料庫RDS中會進行相關設定,

后端函式創建完成后進入函式詳情界面,其余功能與上述前端函式相同,不再復述

點擊【觸發器管理】,此處HTTP觸發器提供了公網與內網訪問地址,我們拷貝內網地址在前端中間件反代配置處填入此域名,實作訪問前端觸發后端函式

4.云資料庫RDS MySQL Serverless創建與遷移匯入
原有Allinone架構中沒有做到資料庫服務的獨立與高可用,在此次云化部署,我們將選用阿里云公測中的云資料庫Serverless版本,RDS MySQL Serverless提供了CPU、記憶體的實時彈性能力,具有資源用量低、簡單易用、彈性靈活和價格低廉等優點,合理優化使用成本,進一步降本增效,
RDS MySQL Serverless實體創建
進入云資料庫RDS控制臺,點擊【創建實體】,開始創建實體的流程,在【基礎資源】設定界面,選擇Serverless版,其余根據實際進行選擇

Serverless RDS創建時【實體配置】需要注意網路VPC的設定,要與Serverless服務所設定的VPC一致,實作內網資料互通,確定訂單后,等待實體創建完成即可

RDS資料庫用戶設定
完成實體創建,選擇管理實體,在左側任務欄選擇【賬號管理】,點擊【創建賬號】創建資料庫賬戶供電商平臺后端進行連接,
輸入賬戶名、密碼,選擇為普通賬戶,點擊確定完成用戶創建

RDS 業務資料庫創建
選擇左側欄中【資料庫管理】,選擇【創建資料庫】
輸入農產品電商業務所需的庫名,并且授權賬戶給前一步設定的用戶,點擊創建完成庫的設定,

RDS 服務連接地址
我們的Serverless函式中所需要連接庫的地址,在rds實體中【資料庫】連接處可以查到,不過需要提前設定白名單,

我們將內網地址進行拷貝,并且也完成了連接用戶、密碼、庫的配置,就可以配置到Serverless函式或者是后端代碼中了

RDS 業務資料庫的匯入恢復
資料庫的上云關鍵是資料內容的遷移,這次部署的業務資料庫很少又很小,因此使用簡單的備份SQL腳本檔案作為遷移的方式,MySQL/Mariadb的資料匯出有多種方式,可以根據實際需求進行備份匯出,當然大型業務庫有專用的備份遷移工具,這里不細說了,
進入DMS資料管理服務,選擇【資料庫開發】,在【資料變更】下點擊【資料匯入】,
根據具體備份方式匯入資料庫,我這里選擇上傳備份的sql腳本,提交申請開始匯入資料

資料匯入完成,資料遷移完成

5.Redis服務上云與靜態資源CDN
Redis服務上云,前文也提到了,這里Redis服務由于我自己ECS上有運行redis服務,就不再單獨購買云資料庫Redis版了,ECS也處于同一VPC之下,可以實作內網互通,當然推薦使用阿里云的Redis云資料庫產品,

靜態資源的CDN,包括css\js\圖片的加速,原有架構中已經存放在阿里的CDN服務上了,我這里就不多做改動了,
6.公網業務訪問域名配置
最后一步,用戶最終訪問的是前端Serverless函式,如同阿里云給出的提示,訪問默認的公網地址不會做任何中間件決議,而是直接下載首頁html靜態檔案,因此我們需要自己配置訪問域名,

回到函式計算控制臺,選擇【域名管理】,點擊【添加自定義域名】
輸入自定的域名,配置路由,選擇對應函式的服務名稱、函式名稱、版本號LATEST(最新)
將需要決議的CNAME值,拷貝

拷貝CNAME記錄值,點擊【云決議DNS控制臺】,進入決議設定,點擊【添加記錄】
選擇記錄型別【CNAME】,輸入主機頭,填入拷貝的記錄值,確認完成添加

7.農產品電商專案Serverless上云效果
首頁,訪問效果,前端函式無誤

農產品詳情頁訪問

用戶注冊功能測驗,資料庫連接與寫入無誤

RDS中資料已成功寫入

用戶登陸測驗

訂單提交測驗,后端函式無誤

使用Serverless應用模板快速構建litemall電商應用系統
1.基于官方模板創建應用
Serverless應用提供了大量的官方應用模板,我們可以根據給出的模板來修改自己的業務,因此熟悉模板的部署也很重要,
進入到函式計算FC的控制臺頁面,點擊【應用】,選擇【通過模板創建應用】,選擇【商城案例】

通過詳情查看部署模板的資訊,以及查詢源代碼,點擊立即創建可以快速體驗Serverless應用的創建,本地部署可以通過ServerlessDev工具進行部署

2.對創建應用進行配置
點擊立即創建后,我們進行應用的初始化配置,
部署型別有兩種:1.通過第三方代碼倉庫部署,2.直接部署
兩者區別就是使用自己的倉庫代碼后續可以通過push更新專案發布,而直接部署需要手動配置,
這里就可以看到,我們的交付觸發也是以Git倉庫push提交為主,每次提交會自動觸發部署,
如是自己配置應用,需要根據業務配置s.yaml檔案,參考:https://www.serverless-devs.com/fc/yaml/readme
這里我選擇Gitee倉庫進行部署,但是需要進行倉庫第三方應用的授權

點擊前往授權,跳轉到gitee的站點進行OAuth授權請求,點擊同意授權

阿里用戶在第一次使用FC函式計算時,需要對角色策略進行添加的,我這里已經使用過FC了,若提示需要添加策略,按照提示點擊添加即可,

其他高級配置,需要根據業務進行修改,這里注意地域的選定,后續的其他彈性資源都會在此地域下,我這里選擇本地杭州,

完成配置后點擊創建,代碼已經新建上傳到我的Gitee倉庫了,這里提供的s.yaml可以作為配置的參考,后續根據所部署的業務去修改yaml

3.應用部署上線

應用創建完成,首次自動進行部署,這里部署狀態可以看到正在部署

查看部署日志,如果部署出現錯誤也可以從日志資訊中查詢報錯,

部署經歷了前置環境、資源同步、資源檢查、執行部署這四個步驟后,我們的電商應用就完成了部署

首次部署完成,也是最新latest的一次部署版本,可以通過部署歷史自由的進行回滾

4.訪問部署上線的電商應用
訪問測驗的域名,就可以看到我們上線的litemall電商系統,進入電商應用的后臺管理

litemall電商系統是一個開源的前后端分離帶微信小程式的電商系統,具有電商平臺基礎的會員管理、商城管理、商品管理、推廣管理、系統管理、配置管理、統計報表,

litemall電商系統,需要配置最小開發環境有以下:
MySQL
JDK1.8或以上
Maven
Nodejs

5.更換業務域名訪問
同樣,當我們正常上線了FC的業務時,Serverless用的是默認訪問地址
函式計算上線提供的域名是以..fc.aliyuncs.com//proxy///[action?queries]為默認的,若是正常業務訪問我們必然要修改訪問的域名,

進入到函式計算FC的首頁,點擊高級功能下的域名管理,這里可以看到我們上線電商應用時的默認域名已經路由資訊
我們選擇添加自定義域名

輸入域名的名稱,也就是購買備案的域名下的自定義二級域名
點擊路由配置,選擇服務名稱,這里是我們部署的電商系統litemall,選擇函式名稱與版本
拷貝公網CNAME地址,后續在DNS域名管理處添加決議

進入到域名管理下,添加一條記錄,記錄型別選擇CNAME,輸入主機記錄,將剛剛拷貝的公網CNAME地址粘到記錄值,點擊添加即可

回到函式計算FC,在最后點擊創建即可,回到主頁看到我們新系結的域名

最后,拿手機訪問我自定義配置的公網地址
電商服務正常上線,公網地址正常訪問主頁

商品的詳情購買頁面

最后
Serverless相對其他方案來說,也是非常容易上手并高效的技術方案,上面的部署測驗,其實還有很多需要改進的地方,但是我想把案例的重點放在Serverless服務器無感化上,本人也使用過不少阿里云的技術產品,深知對底層基礎設施運維難度,
雖然這幾個月學習生活比較繁忙,但是還是對社區的各種活動非常感興趣,也想做一些更好的測驗,這次的Serverless無論是對個人用戶,還是企業用戶,都是一種非常不錯的選擇,彈性資源與按需付費,更加節省資源與Money,更加優雅!
本文轉載自函式計算征集令征文,作者陶宇航
更多內容關注 Serverless 微信公眾號(ID:serverlessdevs),匯集 Serverless 技術最全內容,定期舉辦 Serverless 活動、直播,用戶最佳實踐,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/500772.html
標籤:其他
上一篇:主流定時任務解決方案全橫評
下一篇:云原生應用平臺的核心模塊有哪些
