如安在亚马逊云科技上消除无服务器网页应用冷启动时间(下篇)

[复制链接]
发表于 2025-11-7 20:41:14 | 显示全部楼层 |阅读模式
配景

我们在云端搭建无服务器(serverless)开发架构时,常常会被冷启动(cold start)带来的应用延长所困扰。冷启动是指当无服务器资源在一段时间内未被调用,或须要扩展以处理处罚新哀求时,体系须要初始化一个新的实验情况,这个过程会引入额外的延长。通常造成冷启动的缘故因由是无服务器资源初始化函数所耗费的时间,这里包罗加载函数代码、启动运行情况以及初始化函数代码的过程。
这种冷启动给开发者的一样平常开发带来了诸多的未便,最重要的就是应用访问延长带来用户体验差,函数相应时间大概从从平常的毫秒级增长到数百毫秒乃至数秒。其次,由于冷启动的时间是不确定的而且难以控制,造成大规模体系中的应用步伐的性能大概会出现颠簸,特殊是在对相应时间敏感的应用。
在本系列的下篇中,我将和各人分享怎样消除电商应用的无服务器架构冷启动时间。同时学习怎样将本地Java应用,举行无服务器云原生改造迁移到亚马逊云科技的Lambda上。该无服务器电商网页应用架构如下:

方案所需知识

1. Lambda:无服务器盘算的核心

AWS Lambda 是一种无服务器盘算服务,可让开发者无需管理根本办法,按需运行代码。Lambda 的实验模子基于变乱触发,支持多种编程语言,并与 AWS 服务无缝集成。开发者只需专注于业务逻辑,别的资源管理、扩展和高可用性由亚马逊云科技主动处理处罚。
上风:开发者可以显着低沉运维本钱,实现更高的开发服从,同时按现实运行时间付费,经济高效。

2. Lambda Web Adapter:简化传统 Web 应用迁移

Lambda Web Adapter 是 亚马逊云科技提供的官方开源工具,用于资助开发者将传统的 Java Web 应用快速迁移到无服务器架构。通过适配器,开发者可以继续利用现有的 Web 框架(如 Spring Boot、Javalin 等),无需对代码举行大规模改动。
上风:Web Adapter桥接了传统应用和无服务器架构之间的差距,让开发者轻松实现应用当代化,同时生存已有的技能栈。

3. Amazon Lambda SnapStart:显着优化冷启动性能

Amazon Lambda SnapStart 是 AWS 提供的功能,用于优化函数的启动性能。Lambda 会对已初始化的[实验情况]的内存和磁盘状态创建Firecracker microVM 快照、加密该快照并对其举行缓存以实现低延长访问。在现实调用大概无服务器资源纵向扩展时快速加载快照,从而显着淘汰冷启动延长,尤其对 Java 等须要较长初始化时间的语言效果显着。
上风:SnapStart 能将冷启动时间淘汰高达 90%,使 Java 应用在无服务器架构中具备更快的相应速率,为延长敏感型应用提供了理想办理方案。

本文实用人群

软件开发工程师(Java)、DevOps、亚马逊云科技运维、云原生开发者等。


本项目实践包罗的内容 

1. 相识亚马逊云科技上的云原生无服务器Serverless架构操持,和亚马逊云科技无服务器服务(如Lambda、API Gateway、Aurora Serverless、OpenSearch Serverless等)

2. 利用Lambda web apdater工具将电阛阓景下的传统springboot应用,从本地迁移到Lambda,实现Java应用云原生当代化改造。

3. 通过Lambda Snapshot功能低沉无服务器开发服务的冷启动时间(启动性能提升10倍以上)。


项目实操步调

本地运行后端服务

在本系列上篇中,我们已经利用Maven编译好了电商平台的java应用。
1)下面我们在 litemall-all 目次下找到 Application.java 文件,它是后端步伐的入口。然后点击 Run 运行后端步伐。

如果正确运行,控制台会出现如下图的字样:

2)接下来访问下方的测试URL来验证后端 API. 打开一个新的 terminal,运行以下下令。
背景管理API:http://localhost:8081/admin/index/index
  1. curl -sS http://localhost:8081/admin/index/index | jq
复制代码
商城API:http://localhost:8081/wx/index/index
  1. curl -sS http://localhost:8081/wx/index/index | jq
复制代码
3)若运行上述的2个curl下令,相应中出现 JSON 数据,则表现litemall-all 模块运行正常。

 将本地Java步伐摆设到Lambda无服务器盘算服务中

4)我们通常利用Amazon SAM Template脚原来设置 Lambda 函数和相干的资源。项目根目次下的 template.yaml 就是 SAM 的 template。这个 template 已经预先设置好,包罗 Lambda Web Adapter 和 SnapStart,template内容如下:
  1. AWSTemplateFormatVersion: '2010-09-09'
  2. Transform: AWS::Serverless-2016-10-31
  3. Description: >
  4.   litemall
  5.   litemall backend
  6. Globals:
  7.   Function:
  8.     Timeout: 29
  9. Resources:
  10.   # create api-gateway resource:https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-httpapi.html
  11.   FunctionApiGateway:
  12.     Type: AWS::Serverless::HttpApi
  13.     Properties:
  14.       Description: aws lambda's api gateway
  15.       Name: lambda-gateway
  16.       CorsConfiguration:
  17.         AllowOrigins:
  18.           - "https://*"
  19.           - "http://*"
  20.         AllowHeaders:
  21.           - "Content-Type"
  22.           - "X-Litemall-Admin-Token"
  23.         AllowMethods:
  24.           - "*"
  25.         AllowCredentials: true
  26.   litemallFunction:
  27.     Type: AWS::Serverless::Function
  28.     Properties:
  29.       Tracing: Active
  30.       VpcConfig:
  31.         SecurityGroupIds:
  32.           - '{{resolve:ssm:/litemall/prod/vpc/application-security-group}}'
  33.         SubnetIds:
  34.           - '{{resolve:ssm:/litemall/prod/vpc/private-subnet-one}}'
  35.           - '{{resolve:ssm:/litemall/prod/vpc/private-subnet-two}}'
  36.       MemorySize: 2048
  37.       Handler: run.sh
  38.       CodeUri: litemall-all/
  39.       Runtime: java17
  40.       AutoPublishAlias: live
  41.       SnapStart:
  42.         ApplyOn: PublishedVersions
  43.       Environment:
  44.         Variables:
  45.           RUST_LOG: info
  46.           READINESS_CHECK_PATH: /admin/index/index
  47.           AWS_LAMBDA_EXEC_WRAPPER: /opt/bootstrap
  48.           JAVA_TOOL_OPTIONS: -XX:+TieredCompilation -XX:TieredStopAtLevel=4 -XX:+UseParallelGC
  49.           PORT: 8081
  50.           DB_CLUSTER_ENDPOINT: '{{resolve:ssm:/litemall/prod/db/cluster-endpoint}}'
  51.           DB_MASTER_USERNAME: '{{resolve:ssm:/litemall/prod/db/master-username}}'
  52.           DB_MASTER_PASSWORD: '{{resolve:ssm:/litemall/prod/db/master-password}}'
  53.           REDIS_CACHE_ENDPOINT: '{{resolve:ssm:/litemall/prod/redis/endpoint}}'
  54.       Policies:
  55.         - SSMParameterReadPolicy:
  56.             ParameterName: /litemall/prod/*
  57.         - AWSXRayDaemonWriteAccess
  58.       Layers:
  59.         - !Sub arn:aws:lambda:us-west-2:753240598075:layer:LambdaAdapterLayerX86:21
  60.       Events:
  61.         litemallApi:
  62.           Type: HttpApi
  63.           Properties:
  64.             ApiId:
  65.               Ref: FunctionApiGateway
  66.             Path: /{proxy+}
  67.             Method: ANY
  68. Outputs:
  69.   MobielMallSite:
  70.     Description: "Moble Mall Site URL"
  71.     Value: !Sub "https://${FunctionApiGateway}.execute-api.${AWS::Region}.${AWS::URLSuffix}/index.html"
  72.   AdminWebHomepage:
  73.     Description: "Admin Web Homepage URL"
  74.     Value: !Sub "https://${FunctionApiGateway}.execute-api.${AWS::Region}.${AWS::URLSuffix}/mgmt/index.html"
  75.   AdminApiURL:
  76.     Description: "Admin endpoint API URL"
  77.     Value: !Sub "https://${FunctionApiGateway}.execute-api.${AWS::Region}.${AWS::URLSuffix}/admin/index/index"
复制代码
5)实验如下SAM下令对电商平台应用举行打包
  1. sam build
复制代码
 sam build下令会将Java代码打包成可以在云端Lambda中运行的资源包,运行乐成的截图如下:

6)实验如下SAM下令对打包好的Lambda函数资源包举行摆设
  1. sam deploy --region us-west-2
复制代码
摆设下令乐成乐成后返回的截图如下:

摆设完成后,会输出3个 URL,分别是管理背景 API,背景管理和移动端商城。
7)进入这三个URL举行测试验证,查察是否可以正常打开
起首打开 Mobile Mall Site URL 访问店肆商城端,正确页面体现如下:

 再打开 Admin Web Homepage URL 访问管理员端:

开启SnapStart低沉冷启动延长

8) 我们在上一步通过SAM template创建的Lambda函数已经开启了SnapStart功能。接下来我们新建一个未开启SnapStart的函数对比冷启动延长低沉的效果。
我们修改template.yaml 文件,将SnapStart:ApplyOnublishedVersions字段解释掉。

9)重复打包和摆设过程。当摆设完成后,通过应用性能延长追踪服务X-Ray的数据查察开启SnapStart前后的对比,可以得到相对于第一张图中未开启SnapStart,在第二张图中开启SnapStart摆设lambda时,冷启动具备更短的运行时间(第一张图为未开启,第二张图为开启)。



以上就是亚马逊云科技上消除电阛阓景下的无服务器应用架构的冷启动时间的全部内容,在本篇中我们先容了如安在亚马逊云科技上利用Lambda web adapter对本地Java电商应用举行云上迁移,并利用Lambda SnapStart低沉无服务器服务冷启动时间的方案。欢迎各人关注小李哥和本系列的下篇,不要错过未来更多国际前沿的AWS云开发/云架构方案。 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表