Serverless 應用引擎 SAE(Serverless App Engine)是面向應用的Serverless PaaS平臺,能夠幫助PaaS層用戶免運維IaaS、按需使用、按量計費,做到低門檻微服務、PHP應用上云。本文介紹如何使用SAE,幫助您快速了解SAE以及各方面的實踐教程。
背景信息
如果您初次接觸SAE,建議您觀看入門視頻,了解SAE及其基本操作。更多信息,請參見什么是Serverless應用引擎。
功能索引
一級分類 | 二級分類 |
SAE使用流程
SAE使用流程如下圖所示。
在首次部署SAE應用前,需要完成規劃VPC、vSwitch、命名空間(區分測試、預發、生產等環境)的準備工作。
具體操作,請參見準備工作。
在SAE控制臺部署應用。
具體操作,請參見應用托管概述。除通過控制臺部署應用外,SAE還支持通過Jenkins、IDE插件、Maven插件、Terraform、OpenAPI和云效等多種方式來部署應用。
說明如果您是第一次部署應用到SAE,需要在SAE控制臺創建應用。
通過以下方式訪問SAE應用。
方式一:綁定CLB訪問,一個端口支持綁定一個應用。具體操作,請參見為應用綁定CLB。
方式二:配置網關路由訪問,一個端口支持綁定多個應用。具體操作,請參見為應用配置網關路由(CLB)。
方式三:綁定EIP訪問,一個實例支持綁定一個EIP。具體操作,請參見基于EIP配置SAE實例公網訪問和訪問公網的能力。
為SAE應用配置更多進階功能。
例如,企業級權限控制、彈性(降本增效)、Java微服務增強、高可用、存儲等功能。
部署
SAE支持代碼包部署和鏡像部署,當前代碼包支持Java的WAR包和JAR包、PHP ZIP包和Python ZIP包。在創建SAE應用時,需要自定義或者自動配置VPC、vSwitch和安全組等,并且需要指定實例規格(創建后可以修改規格)。本文以下列配置為例,介紹SAE的參考部署。
啟動命令和參數
鏡像部署
啟動命令以及相關參數可以直接寫在Dockerfile內,同時也支持在SAE控制臺覆蓋啟動命令,如下圖所示。
代碼包部署
以JAR包部署為例,支持在SAE控制臺配置啟動相關參數,如下圖所示。
數據庫白名單
不同于ECS模式,SAE在容器形態下,每次部署應用時IP地址都有可能變化,但應用綁定的vSwitch的網段不會變化,因此您可以在數據庫的白名單內配置vSwitch的網段。更多信息,請參見應用訪問阿里云數據庫。
CI/CD
除控制臺部署和API部署外,SAE和很多CI/CD工具進行了集成,典型的有云效和Jenkins,可以實現代碼提交以后自動部署。更多信息,請參見應用托管概述。
如果您使用Java語言,SAE提供了豐富的插件部署,包括Maven插件、IntelliJ IDEA插件、Eclipse插件等。更多信息,請參見應用托管概述。
在微服務場景下,通常會拆分成很多應用。如果您的測試環境部署在阿里云,聯調的時候會是一大痛點。SAE聯合Cloud Tookit提供了遠程的端云互聯能力,可以在本機直接調用云端的Consumer、提供Provider等。更多信息,請參見使用Cloud Toolkit實現端云互聯(IntelliJ IDEA)。
SAE支持Terraform。更多信息,請參見terraform-provider-alicloud和Terraform概述。
升級和回滾
SAE支持豐富的回滾策略,包括單批發布、分批發布、灰度發布和回退歷史版本等。更多信息,請參見升級和回滾應用。
權限配置
SAE支持精細的權限控制,支持命名空間、應用和讀寫等粒度的權限控制,通過權限助手功能有效簡化您的配置過程。更多信息,請參見SAE權限助手。
其他
網絡
將應用部署至SAE后,您可能會有不同的網絡訪問需求。更多信息,請參見SAE網絡相關概念和能力。
阿里云網絡基礎概念
專有網絡(VPC):基于阿里云創建的自定義私有網絡,不同的專有網絡之間在邏輯上徹底隔離。
說明私有網絡默認不可訪問公網。
交換機(vSwitch):交換機是組成專有網絡的基礎網絡設備,對應實體物理機房。在VPC內創建云資源時,必須指定云資源所連接的交換機。
彈性公網IP(EIP):只能和一個資源(ECS、SAE實例等)綁定,綁定的資源具備出、入公網的能力。
NAT網關(NAT Gateway):支持VPC內的資源訪問公網(SNAT)。區別于EIP的核心功能,公網NAT網關可用于VPC內的所有資源,而EIP只能用于VPC內的一個資源。
SAE網絡訪問主要場景與方式
將應用部署到SAE后,您可能會遇到以下網絡訪問需求。概念圖如下所示。
SAE應用之間的內網互相訪問(非微服務)
Serverless模式下,每次部署都會產生新的內網IP,但不支持直接基于實例的IP來互相訪問應用。您可以通過以下方式實現。
SAE Service(CLB):基于阿里云負載均衡產品(私網CLB)實現的SAE服務來訪問。更多信息,請參見基于CLB配置應用服務訪問。
SAE ServiceName:基于SAE的K8s底座,實現的基于域名的應用訪問。每個SAE的應用會有一個SAE環境中可供訪問的域名。更多信息,請參見基于K8s ServiceName配置應用服務訪問。
SAE Ingress(ALB/CLB):基于阿里云負載均衡產品(私網ALB/CLB)實現的網關路由,可以根據不同的域名、路徑路由到不同的SAE應用。更多信息,請參見基于ALB/CLB配置網關路由(Ingress)訪問。
SAE應用需要被公網訪問(入口流量)
您可以通過以下方式實現。
SAE Service(CLB):基于阿里云負載均衡產品(公網CLB)實現的SAE服務訪問。更多信息,請參見基于CLB配置應用服務訪問。
SAE Ingress(ALB/CLB):基于阿里云負載均衡產品(公網CLB/ALB)實現的網關路由,可以根據不同的域名、路徑路由到不同的SAE應用。更多信息,請參見基于ALB/CLB配置網關路由(Ingress)訪問。
SAE EIP:為SAE應用的每個實例綁定一個EIP,使該實例能夠同時具備出、入公網的能力。更多信息,請參見基于EIP配置SAE實例公網訪問和訪問公網的能力。
SAE應用需要訪問公網(出口流量)
您可以通過以下方式實現。
NAT網關:為SAE應用關聯的VPC或者vSwitch配置NAT網關,則所有相關的SAE應用都具備了訪問公網的能力。更多信息,請參見配置NAT網關使SAE應用能訪問公網。
SAE EIP:為SAE應用的每個實例綁定一個EIP,則該實例會同時具備出、入公網的能力。更多信息,請參見基于EIP配置SAE實例公網訪問和訪問公網的能力。
SAE需要訪問VPC內的ECS、RDS、Redis等
SAE基于阿里云VPC網絡,因此無需額外配置,可以直接訪問同一VPC內的資源,如ECS、云數據庫RDS和云數據庫 Tair(兼容 Redis)等。反之,同一VPC內的阿里云資源也可以訪問SAE。
需要確認安全組、產品白名單是否放開。如果遇到問題,請參考常見問題的步驟進行排查。
微服務應用訪問注冊中心以及實例互相訪問
更多信息,請參見SAE微服務相關概念和能力。
SAE網絡訪問對比項
SAE中服務(Service)和網關路由(Ingress)的區別
SAE基于阿里云SLB(CLB和ALB)實現的網關路由(Ingress),具備根據域名、路徑路由到不同應用的能力(如下圖),而ServiceName不具備該能力。因此,在滿足需求的前提下,建議您優先考慮使用網關路由。在需要使用4層TCP協議訪問或者無法通過域名訪問等場景下,您可以考慮使用ServiceName。
更多信息,請參見以下文檔:
基于CLB實現的服務和基于域名(K8s Service Domain)實現的服務的區別
K8s服務有兩種模式,一種是基于CLB,另一種是基于ClusterIP。SAE沒有直接提供ClusterIP,而是提供了一個可供訪問的域名。兩者的主要區別如下。
對比項 | CLB | Domain(ClusterIP) |
費用 | 免費 | |
運維 | CLB作為一個獨立的阿里云產品,支持配置相關的監控、告警以及收集訪問日志到SLS,提供細粒度的問題排查能力。 | 未提供獨立的監控、告警、訪問日志等能力,需要應用側本身配置告警和日志。 |
基于ALB實現的網關路由和CLB網關路由的區別
ALB(Application Load Balancer)是阿里云推出的專門面向HTTP、HTTPS和QUIC等應用層負載場景的負載均衡服務。針對網關路由場景,建議您優先考慮使用ALB。更多信息,請參見負載均衡SLB產品家族介紹。
基于NAT訪問公網和EIP訪問公網的區別
EIP訪問公網的示例圖如下,每個實例都會綁定一個EIP。如果EIP不足,則會創建失敗,導致實例無法對外提供服務。
NAT和EIP兩種模式的主要差異如下。
對比項 | NAT | EIP |
生效范圍 | NAT可以控制在VPC或者vSwitch級別,為VPC或者vSwitch內所有無公網IP的實例提供訪問公網的代理服務。一個VPC或者vSwitch只需要配置一個NAT,其所有實例將具備出公網的能力。 | EIP為實例級別,例如10個實例就需要10個EIP。一個實例綁定EIP后,將同時具備出網和入網的能力。 |
是否固定公網IP | 是。 | 否。新的實例成功綁定EIP后,SAE才會銷毀原先的實例并解綁原來的EIP。因此,需保證EIP數量至少為實例數量加一。EIP是變化的,是一個IP池。 |
典型場景 | 應用會自動彈性擴縮,新的實例默認需要出公網的能力,且需要固定IP(95%的用戶都適合該場景)。 | 可接受EIP可變,需要直連實例的場景(例如在線會議),另外還需要自行精細化地控制每個實例的生命周期。 |
費用 | 計費詳情,請參見NAT網關計費。 | 計費詳情,請參見EIP計費。實例數不超過20個時,EIP成本更優。 |
微服務增強
SAE作為微服務架構Serverless化的最佳實踐產品,提供了諸多微服務能力的增強。更多信息,請參見SAE微服務相關概念和能力。
注冊中心
使用說明
為了讓微服務的應用可以快速部署到SAE,SAE提供了“Serverless”版的Nacos作為注冊中心,適用于使用Nacos1.X和2.X客戶端的微服務應用。您可以參見在應用中配置SAE內置Nacos,將您的微服務應用部署到SAE。SAE注冊中心的使用說明如下。
選擇SAE內置Nacos后,SAE通過自動注入相關環境變量以及借助于Java Agent修改字節碼的技術,支持自動修改程序的注冊中心地址。因此,您無需對程序做任何修改即可將其直接部署到SAE。
不適用于使用非Nacos注冊中心的程序,相關邏輯完全由您的程序控制。
該注冊中心適用于快速體驗或者小規模生產環境,如果您的微服務應用實例總數超過30個,推薦您使用自建注冊中心或者MSE注冊中心。
應用配置
應用配置如何生效,請參見使用SAE內置Nacos。
配置中心
使用說明
與注冊中心一樣,也提供了“Serverless”版的Nacos作為配置中心,適用于使用Nacos1.X和2.X客戶端的微服務應用。您可以參見在應用中配置SAE內置Nacos,使用SAE的配置中心。SAE配置中心的使用說明如下。
選擇SAE內置Nacos后,SAE通過自動注入相關環境變量以及借助于Java Agent修改字節碼的技術,支持自動修改程序的配置中心地址。因此,您無需對程序做任何修改即可將其直接部署到SAE。
不適用于使用非Nacos配置中心的程序,相關邏輯完全由您的程序控制。
該配置中心的控制臺由阿里云應用配置管理(Application Configuration Management,簡稱ACM)提供,雖然作為獨立產品,它已經進入下線狀態,但是在SAE中支持繼續使用。建議您直接使用MSE提供的Nacos 2.0配置服務。更多信息,請參見Nacos版本特性。
應用配置
應用配置如何生效,請參見使用SAE內置Nacos??刂婆_如何管理配置,請參見分布式配置管理。
微服務開發
IDE自動部署
相比于每次重新打包部署,IDE一鍵部署可以大大減少您的部署時間,并提升研發效率。
具體操作,請參見使用Alibaba Cloud Toolkit自動化部署微服務至SAE。
端云互聯
采用微服務架構后,您的應用數會增多。在極端情況下,本地開發聯調需要啟動所有相關的微服務應用。針對該痛點,您可以借助阿里云Cloud Toolkit插件提供的端云互聯能力。例如,讓您的本地Consumer直接連接到SAE中部署的Provider,從而無需在本地啟動Provider,大大減少開發調試成本。
具體操作,請參見使用Cloud Toolkit實現端云互聯(IntelliJ IDEA)。
服務治理
服務列表
對于使用內置Nacos的應用,SAE提供基礎的服務列表查詢能力。如果您使用自建注冊中心或者MSE注冊中心,可以登錄對應的控制臺查詢,無需在SAE控制臺查看。
具體操作,請參見查詢服務列表。
無損下線
因為Consumer客戶端存在緩存,無法及時收到微服務Provider的下線通知,所以通常需要從注冊中心摘除Provider實例,等待Consumer緩存刷新。針對上述情況,SAE借助MSE的無損下線將該功能做了產品化的集成。
關于該功能不適用的場景以及相比較于開源Spring Cloud和開源Dubbo優勢的更多信息,請參見配置無損下線。
在SAE中配置無損下線的具體操作,請參見設置微服務無損下線。
無損上線
微服務的Provider服務只要注冊到注冊中心即可被Consumer調用,但此時,Provider可能還需要更進一步的初始化,例如數據庫連接池的初始化等。因此,對于流量比較大的微服務應用,推薦您開啟無損上線功能。
具體操作,請參見設置微服務無損上線。
微服務灰度
SAE不僅支持應用生命周期托管,還提供了微服務應用發布態的灰度能力。
具體操作,請參見管理灰度規則(Java)和灰度發布微服務。
限流降級
無論是微服務應用還是單體應用,在面對一些突發流量,例如秒殺場景時,應用可能會突然崩潰。如果是微服務應用,可能還會造成雪崩效應,因此有必要去做一些保護措施。SAE集成阿里云應用高可用服務(Application High Availability Service,簡稱AHAS),能夠方便地配置和管理限流降級規則。
具體操作,請參見限流降級。
應用監控
微服務架構下,如果沒有配套的監控系統,不利于發現問題和診斷問題。SAE集成 應用實時監控服務 ARMS(Application Real-Time Monitoring Service),提供了應用大盤、JVM監控、慢調用監控、調用鏈分析和告警等能力,盡可能降低企業落地微服務架構的門檻。
更多信息,請參見應用監控。
多語言
PHP運行時支持
SAE支持以下部署方式。
鏡像:任意PHP架構應用。
PHP ZIP包:任意PHP-FPM結合Nginx架構的在線應用。
SAE默認提供PHP運行時環境。更多信息,請參見PHP運行環境說明。
靜態文件托管
借助NAS和OSS,SAE支持獨立托管靜態文件,對運行過程中的代碼、模板、上傳的文件進行持久化存儲,并實現跨實例共享文件。
遠程調試
借助SAE的不同功能,SAE支持多種調試能力。
PHP遠程調試
SAE內置Xdebug插件,可開啟遠程調試。
文件下載
SAE支持通過Webshell登錄實例,并借助SAE或OSS等功能下載文件。更多信息,請參見使用Webshell實現文件上傳下載。
文件上傳
SAE借助NAS和OSS,方便開發調試代碼。
日志
SAE集成了SLS和Kafka日志采集。SAE實時日志功能支持查看500行日志信息,如果您有更高的查閱需求,建議使用文件日志收集功能。SAE會將業務文件日志(容器內日志路徑)、容器標準輸出日志(stdout)收集并輸入SLS或Kafka中,實現無限制行數查看日志、自行聚合分析日志,方便業務日志對接。
文件日志
SAE集成了SLS日志采集,您只需在SAE控制臺開啟。與ECS時代手動維護采集的機器列表不同,在SAE配置好采集目錄或者采集文件后,后續每當部署、擴容時,SAE都會自動和SLS對接日志采集,支持在SLS控制臺根據關鍵字檢索日志。更多信息,請參見設置日志收集至SLS。
日志源支持通配符,例如/tmp/log/*.log表示采集/tmp/log目錄以及子目錄下所有以log
結尾的文件。
在不便使用SLS采集、RAM用戶(子賬號)無法查看SLS日志等情況下,您可以選擇將日志導入Kafka。在此基礎上,您可以結合自身的業務場景,將Kafka的數據投遞到例如Elasticsearch等其他持久化庫中,便于集中管理和分析日志。更多信息,請參見設置日志收集至Kafka和SAE日志導入Kafka最佳實踐。
同時,您還可以通過環境變量來設置Logtail啟動參數。更多信息,請參見設置環境變量提升Logtail采集性能。
實時日志
SAE會自動采集標準輸出的日志,保留最新的500條,并支持在SAE控制臺查看。更多信息,請參見日志管理。
如果您希望將標準輸出內容也采集到SLS,可以先將標準輸出到文件,再配置文件采集。參數如下圖所示。
存儲
SAE自帶20 GB的系統盤存儲,如果您有讀寫外部存儲需求,建議使用NAS和OSS。診斷SAE應用包括常規檢查和上傳日志兩種方式,其中上傳日志不僅可以使用OSS,也可以使用SAE內置的一鍵上傳與下載功能。
日志場景下,建議使用SLS,不建議使用NAS和OSS。更多信息,請參見設置日志收集至SLS。
NAS
SAE支持NAS存儲功能,解決了應用實例數據持久化和實例間數據分發的問題。NAS存儲只有掛載到ECS或者SAE才能訪問。更多信息,請參見設置NAS存儲。
OSS
OSS提供了便捷的工具以及控制臺,支持可視化地管理Bucket。OSS適合讀多寫少的場景,例如掛載配置文件或者前端靜態文件等。在SAE控制臺部署應用時配置了OSS存儲后,您可以通過OSS控制臺訪問數據。更多信息,請參見設置OSS存儲。
寫日志的場景下,無法使用ossfs工具。更多信息,請參見ossfs。
上傳下載文件
如果您希望將SAE內的文件下載到本地,您可以使用Webshell自帶的文件上傳下載功能。更多信息,請參見使用Webshell實現文件上傳下載。
除使用NAS或者OSS存儲外,您還可以使用ossutil工具。關于如何使用阿里云OSS服務進行日志上傳下載,請參見通過常規檢查診斷應用。
監控告警
SAE內置了基礎監控和ARMS業務監控(Java和PHP)。告警管理提供了可靠的告警收斂、通知、自動升級以及其他功能,幫助您快速檢測和修復業務告警。
基礎監控
基礎監控包含CPU、Load、MEM、磁盤、網絡和TCP連接等。更多信息,請參見基礎監控。當前基礎監控內置的是阿里云云監控產品,所以您也可以登錄云監控控制臺配置自定義的監控大盤。
業務監控
業務監控默認提供了ARMS基礎版,可以查看應用大盤、JVM監控、接口QPS RT、線程池和調用鏈分析等。更多信息,請參見應用詳情。
告警設置
SAE支持對以上各個監控項設置告警。更多信息,請參見應用監控報警。
高可用
將應用部署在SAE后,針對流量的優雅上線與下線,您可以使用健康檢查功能查看應用實例與業務運行是否正常,以便運行異常時定位問題。同時,SAE支持部署多vSwitch以應對機房級別的故障,支持使用AHAS實現Java應用的限流降級,全面保障應用的可用性。
多vSwitch部署
為了應對機房級的故障,建議您對生產級別的SAE應用配置多vSwitch。您可以選擇在創建應用時配置多vSwitch,或者在創建應用以后增加vSwitch。創建vSwitch時,建議您設計相對充足的IP地址數(建議100以上),如果IP地址不足則會出現無法創建或者彈性伸縮失敗的情況。更多信息,請參見切換vSwitch。
創建時選擇多vSwitch。
創建后增加vSwitch。
說明增加vSwitch時,要注意同步配置數據庫白名單。更多信息,請參見應用訪問阿里云數據庫。
優雅上下線
在SAE部署應用時,一般會經過先擴容再縮容的過程,但是對于流量的優雅上線與下線有以下兩大業務痛點。
新擴容的實例是否已經就緒能夠承接流量。
如何優雅銷毀老實例。
SAE基于Kubernetes,提供了兩種健康檢查方式,包括應用實例存活檢查(Liveness配置)和應用業務就緒檢查(Readiness配置)。針對上述兩大痛點,SAE支持配置健康檢查Readiness。Readiness探針會周期性地檢測實例是否就緒,新實例就緒后,SAE才會接入流量。如果檢測失敗,SAE不會引入流量。開始銷毀老實例前,會先從流量側摘除,并且銷毀實例前可以配置下線腳本以及等待時間。更多信息,請參見設置健康檢查。
健康檢查Liveness,也會周期性地檢測實例是否已經啟動。如果檢測失敗,SAE會自動重啟容器。該特性便于進行異常場景的自動化運維,但可能會造成現場丟失,無法排查失敗原因。您可以根據您的實際場景判斷是否需要配置Liveness。
除配置Readiness或者Liveness外,微服務場景還需要配置微服務的優雅下線,以解決注冊中心存在緩存的問題。更多信息,請參見設置微服務無損下線同時,在生產環境中,可能會出現因使用自動彈性伸縮、回滾升級等能力,而導致短時間內服務不可用、業務監控大量報錯等情況。針對上述痛點,SAE支持配置微服務的優雅上線。更多信息,請參見設置微服務無損上線。
限流降級
對于大流量場景,SAE集成了AHAS限流降級,保障應用的可用性。更多信息,請參見設置限流降級。
彈性(降本增效)
SAE支持手動擴縮、定時彈性、指標彈性、混合彈性和定時啟停等彈性策略。彈性作為云原生架構和應用的典型特點,從機器成本角度能夠幫您降低成本,從運維角度能夠幫您提升運維效率。
手動擴縮
手動擴縮適用于人工運維的場景。相較于ECS相對較復雜較慢的擴縮過程,SAE擴縮基于容器鏡像,更加快速。更多信息,請參見手動擴縮。
定時彈性
定時彈性適用于流量可預期的場景。例如,餐飲和教育行業每天存在明確的早晚業務高峰,則可以配置在不同的時間段運行不同的實例數,使服務器資源盡量貼合實際業務流量。更多信息,請參見配置彈性伸縮策略。
指標彈性
指標彈性適用于流量相對不可預期的場景,當前支持CPU、MEM、TCP連接數、QPS和RT等指標。更多信息,請參見配置彈性伸縮策略。
混合彈性
混合彈性適用于同時有突發流量和定時彈性訴求的場景,例如互聯網、教育和餐飲等行業,對已知的時段進行精細粒度的實例數調整。
例如,在工作日彈性的實例最大值配置為max
,最小值配置為min
,但是實際上在周末又不需要保持min
的實例數,則可以針對周末再配置一個實例數,減小min
。更多信息,請參見配置彈性伸縮策略。
定時啟停
定時啟停功能可以實現按命名空間定時批量啟停應用,例如定時啟停開發環境或測試環境的全部應用。假設對于開發測試環境,每天只需在08:00~20:00時使用,其余時間處于閑置狀態,則可以在SAE配置定時啟停,以降低成本。更多信息,請參見管理定時啟停規則。
實踐教程
針對各種業務需求,SAE提供了相關的最佳實踐。除本文涉及到的彈性、網絡、存儲和應用訪問阿里云數據庫等外,還包括鏡像、應用加速、JVM參數配置等。更多常見場景,請參見實踐教程。