您仅需将代码或镜像上传到SAE,即可部署应用服务。SAE会代您管理底层的计算资源,通过简单配置即可实现根据访问量自动扩缩容、跨可用区部署。
方案概览
您将部署一组微服务应用,实现服务的注册与发现、服务之间的方法调用,并且通过公网来访问应用。示例应用的架构如下:
尽管本文以Java微服务应用为例,但SAE对应用的技术栈语言和架构没有限制,能够适配多种业务场景,例如静态网站、前后端分离的网站、单体应用、微服务应用。
为实现本方案,您将:
- 部署应用:使用示例镜像部署provider应用与consumer应用。通过SAE内置的Nacos实现服务注册与发现,使得consumer应用可以调用provider应用提供的服务。 
- 通过公网访问应用: 为consumer应用配置公网访问地址并访问应用。 
准备工作
操作指引
SAE支持控制台、saectl工具(兼容kubectl)等多种操作方式,从中选择您熟悉的方式来完成本教程。
控制台
1. 部署应用
- 部署provider应用:登录SAE控制台,在左侧选择,在顶部选择应用部署的地域(本文以杭州为例),点击创建应用。配置以下参数,其余保持默认。点击一键创建应用(跳过高级设置)。 - 如果导航栏中没有,请选择。 - 如果提示选择应用版本,请选择标准版。轻量版和专业版目前处于邀约测试阶段。完成本教程无需考虑应用版本间的差异。 - 自定义应用名称,例如 - provider。
- 设置命名空间类型为 - 系统创建,表示应用将会创建于当前地域的默认命名空间,且自动创建并关联VPC、交换机、安全组等网络资源,无需用户关注。
- 设置应用部署方式为 - 选择镜像部署。点击设置镜像,在Demo镜像标签页,找到微服务应用-提供者,选择镜像版本为- microservice-java-provider-v1.0,点击确定。
- 在容量设置区域,自定义单实例规格和实例数,这决定了应用初始运行的实例数量、系统为每个实例分配多少计算资源。 
 
- 部署consumer应用:重复上述步骤并调整以下参数来部署Consumer应用。 - 自定义应用名称,例如 - consumer。
- 设置镜像时,找到微服务应用-消费者,选择镜像版本为 - microservice-java-consumer-v1.0。
 
- 查看应用部署结果:请耐心等待应用创建完成,大约需要1分钟。 - 您可以在应用列表中查看已创建的应用,点击其中某个应用可以进入其详情页面。 
- 在左侧导航栏选择基础信息,在实例列表页签中,可以查看已创建的应用实例。 
 
2. 通过公网访问应用
为了实现从公网访问consumer应用,一种简便的方式是为该应用绑定公网CLB实例。
- 为consumer应用绑定公网CLB实例:进入consumer应用的详情页面。在应用信息页签中,在应用访问设置区域选择基于CLB访问。点击添加公网CLB访问,配置如下参数,然后点击确定。  - 在CLB实例中,选择新建CLB实例。 
- 在HTTP协议页签中,设置HTTP端口为 - 80,容器端口为- 18082。
 
- 验证结果:SAE将为您代购一个CLB实例并绑定到当前应用。等待创建完成,控制台将显示应用的公网访问地址。  - 通过浏览器访问 - http://<公网访问地址>/consumer-echo/hello(其中- <公网访问地址>需要替换为实际值),验证能够通过公网来访问应用。 
- 在中,您可以查看consumer应用调用provider应用的拓扑视图。  
 
3. 清理资源
在完成本教程后,建议清理相关资源,避免持续产生费用。
- 删除应用:进入provider应用和consumer应用的详情页面,点击,并按照指引操作来删除上述应用。 - SAE代购的CLB实例将随应用删除而自动释放。 
- (可选)删除网络资源:在部署应用的过程中,系统自动创建了VPC、交换机、安全组。 - 查看VPC:在左侧导航栏选择,点击默认,在基础信息页面查看VPC,点击链接跳转到VPC详情页。 
- 查看交换机、安全组:在VPC的资源管理标签页点击链接跳转到相应资源的详情页。 
- 在各资源的详情页执行删除操作。 
 
saectl工具
1. 安装与配置saectl工具
2. 部署应用
- 创建资源配置文件:在同一路径中创建以下文件。注意:将配置文件中的 - image: ...cn-hangzhou...替换为您的应用部署地域。- deployment-provider.yaml用于配置provider应用:- apiVersion: apps/v1 kind: Deployment metadata: annotations: sae.aliyun.com/new-sae-version: std # 选择应用版本,std表示标准版。轻量版和专业版目前处于邀约测试阶段。完成本教程无需考虑应用版本间的差异。 name: provider # 应用名称可自定义 namespace: default # 选择系统创建的默认命名空间,自动创建并关联VPC、交换机、安全组等网络资源,无需用户关注。 spec: replicas: 2 # 应用实例的数量 selector: matchLabels: sae.aliyun.com/app-name: provider # 必须与metadata中定义的应用名称保持一致 template: metadata: labels: sae.aliyun.com/app-name: provider # 必须与metadata中定义的应用名称保持一致 spec: containers: - name: main # 建议将containers的名称固定设置为main,避免冲突。 image: registry.cn-hangzhou.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-provider-v1.0 # 使用provider应用的示例镜像,其中,cn-hangzhou需要替换为您部署应用的地域。 resources: # 单个应用实例的规格。limits和requests需要保持相同的配置。 limits: cpu: "2" memory: 4Gi requests: cpu: "2" memory: 4Gi
- deployment-consumer.yaml用于配置consumer应用:- apiVersion: apps/v1 kind: Deployment metadata: annotations: sae.aliyun.com/new-sae-version: std # 选择应用版本,std表示标准版。轻量版和专业版目前处于邀约测试阶段。完成本教程无需考虑应用版本间的差异。 name: consumer # 应用名称可自定义 namespace: default # 选择系统创建的默认命名空间,自动创建并关联VPC、交换机、安全组等网络资源,无需用户关注。 spec: replicas: 2 # 应用实例的数量 selector: matchLabels: sae.aliyun.com/app-name: consumer # 必须与metadata中定义的应用名称保持一致 template: metadata: labels: sae.aliyun.com/app-name: consumer # 必须与metadata中定义的应用名称保持一致 spec: containers: - name: main # 建议将containers的名称固定设置为main,避免冲突。 image: registry.cn-hangzhou.aliyuncs.com/sae-serverless-demo/sae-demo:microservice-java-consumer-v1.0 # 使用consumer应用的示例镜像,其中,cn-hangzhou需要替换为您部署应用的地域。 resources: # 单个应用实例的规格。limits和requests需要保持相同的配置。 limits: cpu: "2" memory: 4Gi requests: cpu: "2" memory: 4Gi
 
- 执行部署:在上述配置文件所在路径执行 - saectl apply -f deployment-provider.yaml -f deployment-consumer.yaml。
- 验证结果: - 查看应用:执行 - saectl get deployments -n default。其中,- -n default表示查询默认命名空间。返回结果中:- STATE字段显示- RUNNING表示应用正常运行;如果显示- PUBLISHING表示应用正在部署,请等待部署完成后再查看。
- READY字段显示- n/m代表- 已就绪的实例数/期望部署的实例数。
 
- 查看应用实例:执行 - saectl get pods -n default。返回结果中:- STATUS字段显示- RUNNING表示实例中的容器正常运行;如果显示- ContainerCreating表示容器正在创建,请等待创建完成后再查看。
- READY字段显示- n/m代表- 已就绪的容器数/总容器数。
 
 
3. 通过公网访问应用
为了实现从公网访问consumer应用,一种简便的方式是为该应用绑定公网CLB实例。
- 创建资源配置文件:创建 - svc.yaml用于配置Service,即通过为consumer应用绑定公网CLB对外提供服务:- apiVersion: v1 kind: Service metadata: annotations: sae.aliyun.com/loadbalancer-address-type: internet # 公网或私网类型, internet表示公网类型,intranet表示私网类型。 name: internet-consumer # 固定格式 ${公网或私网类型}-${应用名} spec: ports: - name: port-80 # 固定格式 port-${对外端口} port: 80 protocol: HTTP targetPort: 18082 # consumer应用的容器端口 selector: sae.aliyun.com/app-name: consumer # 应用名称 type: LoadBalancer
- 执行部署:在上述配置文件所在路径执行 - saectl apply -f svc.yaml。
- 验证结果: - 查看服务:执行 - saectl get services -n default。返回结果中:- EXTERNAL-IP字段显示访问应用的公网IP;如果显示- <pending>表示服务正在创建,请等待创建完成后再查看。
- PORT(S)字段显示您配置的应用访问端口。
 
- 从公网访问应用:执行 - curl http://<公网访问地址>:<访问端口>/consumer-echo/hello(其中- <公网访问地址>、- <访问端口>需要替换为实际值)。从返回结果中,能够看到consumer应用通过调用provider应用来处理请求的过程。
 
4. 清理资源
在完成本教程后,建议清理相关资源,避免持续产生费用。
删除应用:执行saectl delete -f deployment-provider.yaml -f deployment-consumer.yaml。
SAE代购的CLB实例将随应用删除而自动释放。
后续步骤
- 您已通过Demo镜像体验了部署应用的流程。SAE为您提供以下方式来部署实际的应用: - 使用镜像部署应用(推荐):您可以将任何应用制作成镜像,然后将其推送到镜像仓库,最后将其部署到SAE。 
- 使用代码包部署应用:SAE提供Java、PHP、Python、.NET Core特定版本的运行环境,如果与您的代码兼容,则可以使用代码包部署应用。您需要先制作符合SAE要求的代码包,然后将其部署到SAE。 
 
- 本示例通过SAE内置Nacos实现了服务注册与发现,使得consumer应用能够访问provider应用并调用其方法。SAE还提供以下方式来实现应用间的互访,您可以根据实际情况灵活选取: - 使用MSE的Nacos注册中心(推荐):如果您不希望自建服务注册中心,且追求注册中心的性能、扩展性、高可用性等方面,建议使用MSE的Nacos注册中心。 
- 使用自建服务注册中心:如果您当前已部署了自建的服务注册中心(例如Nacos、Zookeeper等),且已能够满足使用需求,在您部署应用到SAE后,可以继续使用自建的服务注册中心。前提是确保应用和注册中心之间的网络联通性,并且需要手动在程序中配置注册中心的地址。 
- 基于K8s ServiceName配置应用服务访问:在SAE集群内,为应用配置一个可以供其他应用访问的固定域名。 
 
- 本示例通过为应用绑定CLB实例实现了从外部访问应用。您也可以通过为应用绑定NLB实例或配置网关路由来实现从外部访问应用。如果需要应用主动访问外部的资源和服务,则需要配置NAT网关或者为应用实例绑定EIP。 
- 本示例使用系统创建的默认命名空间来部署应用。您也可以通过自定义命名空间来实现不同应用之间、开发/测试/生产环境之间的隔离。每个命名空间需要绑定一个VPC。部署应用时,需要为应用实例绑定该VPC中的交换机,选择不同可用区的交换机即可实现应用的跨可用区部署。 
- 创建应用后,可以手动调整实例数量与实例规格,或通过配置弹性伸缩策略实现根据访问量、资源使用情况自动调整实例数量。还可以通过开启闲置模式来降低成本。