
文章图片

文章图片

文章图片

文章图片

文章图片
SpringBoot 是基于 Java Spring 框架的套件 , 它预装了 Spring 的一系列组件 , 让开发者只需要很少的配置就可以创建独立运行的应用程序 。 在云原生的世界 , 有大量的平台可以运行 SpringBoot 应用 , 例如虚拟机 , 容器等 。 但其中最有吸引力的 , 是以 Serverless 的方式运行 SpringBoot 应用 。 我将通过一系列文章 , 从架构 , 部署 , 监控、性能、安全等5个方面来分析 Serverless 平台运行 SpringBoot 应用的优劣 。 为了让分析更有代表性 , 我选择了 github 上 star 数超过 50k 的电商应用 mall 作为示例 。 这是系列文章的第四篇 ,向大家展示如何对 Serverless 应用性能调优 。
实例启动速度优化 在之前的文章实战教程中 , 相信大家都感受到 Serverless 的便捷之美 , 只需上传代码包和镜像就能够轻松上线一个弹性高可用的 Web 应用 。 但是它仍存在首次启动“冷启动延时”的问题 , Mall 应用实例的启动大约 30 秒左右 , 用户会感受较长时间的冷启动延时 , 在这个“即时时代”应用程序响应慢多少会有些瑕不掩瑜 。 (“冷启动”是指函数服务于特定调用请求时的状态 , 当一段时间没有请求后 , Serverless 平台则会回收函数实例;等到下一次再有请求时 , 系统会再次实时拉起实例 , 这个过程称之为冷启动 。 )
在优化冷启动之前 , 我们先要分析清楚冷启动各个阶段的耗时 。 首先在函数计算(FC) 控制台的服务配置界面 , 开启链路追踪功能 。
对 mall-admin 服务发起请求 , 成功后查看 FC 控制台 , 我们能够看到相应的请求信息 。 注意关闭“仅查看函数错误” , 这样才会显示所有请求 。 指标监控和调用链路数据收集会存在一定延时 , 如果没有显示 , 请等待一会再刷新 。 找到冷启动标记的请求 , 点击 “更多” 下的 “请求详情” 。
调用链路会显示冷启动各个环节的耗时 。 冷启动包含以下几个环节:
代码准备(PrepareCode):主要是下载代码包或者镜像 。 由于我们已经启用了镜像加速功能 , 不需要下载全部的镜像 , 因此这一步的延时非常短 。运行时初始化(RuntimeInitialization):从启动函数开始 , 到函数计算(FC)系统探测到应用端口就绪为止 。 这中间包含了应用启动时间 。 在命令行执行 s mall-admin logs 查看相应的日志时间 , 我们也能看到 Spring Boot 应用的启动需要花大量的时间 。应用初始化(Initialization):函数计算提供了 Initializer 接口 , 用户可以将一些初始化逻辑放在 initializer 中执行 。调用延时(Invocation):处理请求的延时 , 这个延时非常短 。
从上述链路追踪图来看 , 实例启动时间是瓶颈 , 我们可以采取多种方式来优化 。
1.1. 使用预留实例
Java 类应用普遍启动较慢 。 应用在初始化时 , 也需要和很多外部服务交互 , 耗时较长 。 这类流程是业务逻辑需要的 , 很难优化延时 。 因此函数计算提供了预留实例功能 。 预留实例的起停由用户自己控制 , 没有请求也会常驻在那 , 因此不会有冷启动的问题 , 当然用户需要为整个实例的运行付费 , 即便实例没有处理任何请求 。
- spring|纯白ITX来了,还支持GEAR 1高频内存!新款七彩虹B660迷你主板测试
- spring|iPhone14系列再次被确认:配色、屏幕、电池容量、价格基本清晰了
- spring|安全管理框架,用Shiro还是用Spring Security?
- spring|这价格值得抢!锐龙7-6800H游戏本,配满血RTX3060高分屏6999元
- spring|微软明星产品Internet Explorer, IE浏览器在26岁时停止了更新
- spring|全面发展不偏科 OPPO Reno8 Pro+或成轻旗舰新标杆
- spring|隐藏在直播平台背后的陷阱
- spring|父亲节不知道送什么?看看这些“适老化”的华为智能穿戴产品
- spring|从4999元跌至3499元,5000万三摄+IP68,顶级防水旗舰618跌至新低
- spring|iQOO性价比旗舰下跌600元,骁龙870+144Hz,真香千元机诞生
