Spring Boot Serverless 实战系列“架构篇” 首发 | 光速入门函数计算

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: 如何以 Serverless 的方式运行 Spring Boot 应用?

技术专题banner.png

作者 | 西流(阿里云函数计算专家)


Spring Boot 是基于 Java Spring 框架的套件,它预装了 Spring 一系列的组件,开发者只需要很少的配置即可创建独立运行的应用程序。


在云原生体系中,有大量的平台都可以运行 Spring Boot 应用,例如虚拟机、容器等。但其中最有吸引力的,是以 Serverless 的方式运行 Spring Boot 应用。我将通过《Spring Boot Serverless 实战》系列文章,从架构,部署,监控、性能、安全等 5 个篇章来分析 Serverless 平台运行 SpringBoot 应用的优劣。


为了让分析更有代表性,我选择了 Github 上 star 数超过 50k 的电商应用 Mall 作为示例。这是该系列文章的第一篇,本文会从架构角度对 Spring Boot 应用的 Serverless 化进行分析。


Mall 架构简介


Mall 是一套电商系统,包括前台商城系统及后台管理系统,基于 Spring Boot + MyBatis 实现。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。


Mall 的架构如下图所示,分为网关层,应用层,数据存储层。请求首先通过网关到达 Spring Boot 应用服务。网关实现负载均衡,流量控制等功能。应用层包含 3 个 Spring Boot 应用和1个前端应用:



  • mall-admin:后台商城管理系统
  • mall-portal:前台商城系统
  • mall-search:于Elasticsearch的商品搜索系统
  • Mall-admin-web:mall-admin 的前端展示,基于 Vue+Element 实现


Mall 使用了 MySQL,Redis,MongoDB,ElaisticSearch 等多种数据库。主要业务数据存储在 MySQL,缓存数据存储在 Redis,用户行为分析数据存储在 MongoDB,搜索数据存储在 ElasticSearch 中。Spring Boot 应用服务间使用 RabbitMQ 实现异步通信。


Serverless 计算平台-函数计算简介


函数计算(Function Compute)是目前国内唯一入选 Forrester 领导者现象的 Faas 产品,是一项事件驱动的全托管 Serverless 计算服务。开发者无需管理服务器等基础设施,用户在上传好代码包或者容器镜像后,函数计算会自动准备好计算资源,并且以弹性、可靠的方式运行代码。


函数计算的产品优势总结为:


  • 高效免运维:聚焦业务逻辑开发,无需关心服务器购买、自动伸缩等运维操    作;
  • 弹性高可用:预留实例系统不自动回收,可长驻不销毁,消除冷启动带来的延时毛刺;
  • 按需低成本:按量付费模型按实际使用计算资源计费、资源利用率高;
  • 稳定高可靠:函数计算分布式集群化部署,支持多可用区;


函数计算提供全面的可观测和问题诊断能力,但是其最突出的特点还是内置了网关层能力,能够实现缩容到 0,快速的自动伸缩。


函数计算的这些特点,使其很适合 Spring Boot 这类 Web 应用。使用函数计算,开发者只需要专注于 SpringBoot 应用逻辑的实现,而不再费心应用运行环境的搭建、部署、监控等无差别的工作。


Mall 应用 Serverless 架构总览


Mall 是一个非常标准的 3 层架构 Web 应用,改造为 Serverless 架构非常容易,架构如下所示。由于函数计算内置了网关服务,自动拉起实例运行应用,因此开发者只需要上传应用代码即可。



应用实例在函数计算平台上运行,能够自由的访问其他服务,因此和 MySQL,Redis,RabbitMQ 等服务的访问方式相同。


函数计算内置了日志收集和展示能力。开发者为函数计算指定阿里云日志服务的 LogStore,打到标准输出的日志会自动收集到日志服务查询、展示。开发者也可将日志投递到自己的日志处理系统中,但需要做一些额外的配置。在本次示例中(见文末阿里云日志服务网址),我们会采用阿里云日志服务来处理应用日志。


函数计算也提供了一系列工具,帮助开发者通过 Jenkins CICD 工具发布应用。我们将在后续的文章中进一步展示。


在函数计算平台运行 Spring Boot


在演示阿里云函数计算平台上运行 Web 应用前,先为大家介绍以下几个概念:


1、服务


函数计算的服务资源对应微服务。一个服务下可以创建多个函数,这些函数共享服务级别的配置,包括日志、权限、VPC 网络访问配置等等。一般来说,开发者根据业务场景设计微服务架构,为每一个微服务创建函数计算的服务。然后再根据需求,将微服务变为更细粒度的函数。比如有些逻辑是计算密集型的,可以将它拆分为另一个函数,配置不同的实例规格,既满足性能要求,又优化了成本。按照微服务的理念,一个服务下的函数个数不宜太多。


2、函数


函数是运行开发者代码的基本单位。函数的粒度可以很细,比如对应 1 个 API,也可以较粗,对应一组 API。不同的函数配置不同的实例规格。函数计算提供了各种语言的运行时,也提供 custom runtime/custom container 和语言无关的运行时。如果只是用函数计算实现片段代码,可以使用相关语言的运行时。在我们的场景下,因为要无缝迁移 SpringBoot 应用,我们会选择 custom container 运行时。Mall 项目已经支持了将 Mall 应用自动打包为容器镜像,因此只需要将镜像上传至阿里云容器镜像仓库,并在函数上指定相关信息即可。


3、HTTP 触发器


为函数配置 HTTP 触发器后,函数可通过 HTTP 请求的方式调用。函数计算配套的 Serverless Devs 工具会为 HTTP 触发器生成测试域名,开发者可以方便的调试和运行 Web 应用。

 

至此,阅读本篇后,相信大家已经对 Mall 应用架构以及 Serverless 平台已经有了一个基本的了解。关注“Serverless”公众号,订阅 Spring Boot Serverless 实战系列话题,我们将在下一篇的《 Spring Boot on FC - 部署篇》中为各位详解如何将 Mall 应用部署到函数计算平台上。


文中涉及链接汇总


Sring Boot:https://spring.io/projects/spring-boot

Mall:https://github.com/macrozheng/mall

函数计算:https://help.aliyun.com/product/50980.html

阿里云日志服务:https://help.aliyun.com/product/28958.html

服务:https://help.aliyun.com/document_detail/74925.htm

函数:https://help.aliyun.com/document_detail/52077.html

HTTP 触发器概述:https://help.aliyun.com/document_detail/71229.html

Serverless Devs:http://www.serverless-devs.com/

函数计算FC: https://www.aliyun.com/product/fc



相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
3月前
|
消息中间件 存储 Kafka
一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
本文详细介绍了分布式消息中间件RocketMQ的核心概念、部署方式及使用方法。RocketMQ由阿里研发并开源,具有高性能、高可靠性和分布式特性,广泛应用于金融、互联网等领域。文章从环境搭建到消息类型的实战(普通消息、延迟消息、顺序消息和事务消息)进行了全面解析,并对比了三种消费者类型(PushConsumer、SimpleConsumer和PullConsumer)的特点与适用场景。最后总结了使用RocketMQ时的关键注意事项,如Topic和Tag的设计、监控告警的重要性以及性能与可靠性的平衡。通过学习本文,读者可掌握RocketMQ的使用精髓并灵活应用于实际项目中。
1843 8
 一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
|
2月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
223 0
|
6月前
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
472 79
|
4月前
|
监控 Java 调度
SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战
本文对比分析了SpringBoot中的`@Scheduled`与Quartz定时任务框架。`@Scheduled`轻量易用,适合单机简单场景,但存在多实例重复执行、无持久化等缺陷;Quartz功能强大,支持分布式调度、任务持久化、动态调整和失败重试,适用于复杂企业级需求。文章通过特性对比、代码示例及常见问题解答,帮助开发者理解两者差异,合理选择方案。记住口诀:单机简单用注解,多节点上Quartz;若是任务要可靠,持久化配置不能少。
459 4
|
4月前
|
Java 开发者 Spring
Spring框架 - 深度揭秘Spring框架的基础架构与工作原理
所以,当你进入这个Spring的世界,看似一片混乱,但细看之下,你会发现这里有个牢固的结构支撑,一切皆有可能。不论你要建设的是一座宏大的城堡,还是个小巧的花园,只要你的工具箱里有Spring,你就能轻松搞定。
184 9
|
3月前
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
468 0
|
5月前
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
490 5
|
7月前
|
Java Spring
SpringBoot 实战 不同参数调用不同实现
本文介绍了如何在实际工作中根据不同的入参调用不同的实现,采用`map+enum`的方式实现优雅且严谨的解决方案。通过Spring Boot框架中的工厂模式或策略模式,避免了使用冗长的`if...else...`语句。文中详细展示了定义接口、实现类、枚举类以及控制器调用的代码示例,确保用户输入的合法性并简化了代码逻辑。
177 1
SpringBoot 实战 不同参数调用不同实现
|
6月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
215 0
深入实践springboot实战 蓄势待发 我不是雷锋 我是知识搬运工
springboot,说白了就是一个集合了功能的大类库,包括springMVC,spring,spring data,spring security等等,并且提供了很多和可以和其他常用框架,插件完美整合的接口(只能说是一些常用框架,基本在github上能排上名次的都有完美整合,但如果是自己写的一个框架就无法实现快速整合)。

相关产品

  • 函数计算