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

简介: 如何以 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 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
4月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
811 3
|
2月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
2月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
444 2
|
3月前
|
消息中间件 Ubuntu Java
SpringBoot整合MQTT实战:基于EMQX实现双向设备通信
本教程指导在Ubuntu上部署EMQX 5.9.0并集成Spring Boot实现MQTT双向通信,涵盖服务器搭建、客户端配置及生产实践,助您快速构建企业级物联网消息系统。
1486 1
|
3月前
|
Java 数据库 数据安全/隐私保护
Spring Boot四层架构深度解析
本文详解Spring Boot四层架构(Controller-Service-DAO-Database)的核心思想与实战应用,涵盖职责划分、代码结构、依赖注入、事务管理及常见问题解决方案,助力构建高内聚、低耦合的企业级应用。
914 1
|
3月前
|
Kubernetes Java 微服务
Spring Cloud 微服务架构技术解析与实践指南
本文档全面介绍 Spring Cloud 微服务架构的核心组件、设计理念和实现方案。作为构建分布式系统的综合工具箱,Spring Cloud 为微服务架构提供了服务发现、配置管理、负载均衡、熔断器等关键功能的标准化实现。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
461 0
|
5月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
459 0
|
2月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路

热门文章

最新文章

相关产品

  • 函数计算