简介:如何以 Serverless 的方式运行 Spring Boot 应用?

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

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 应用前,先为大家介绍以下几个概念:

服务

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

函数

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

HTTP 触发器

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

原文链接

本文为阿里云原创内容,未经允许不得转载。

Spring Boot Serverless 实战系列“架构篇” | 光速入门函数计算的更多相关文章

  1. 学习 Spring Boot 知识看这一篇就够了

    从2016年因为工作原因开始研究 Spring Boot ,先后写了很多关于 Spring Boot 的文章,发表在技术社区.我的博客和我的公号内.粗略的统计了一下总共的文章加起来大概有六十多篇了,其 ...

  2. Spring Boot 2.x 系列教程:WebFlux 系列教程大纲(一)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! WebFlux 系列教程大纲 一.背景 大家都知道,Sprin ...

  3. 【建议收藏】缺少 Vue3 和 Spring Boot 的实战项目经验?我这儿有啊!

    缺少 Vue3 和 Spring Boot 的实战项目经验?缺少学习项目和练手项目?我这儿有啊! 从 2019 年到 2021 年,空闲时间里陆陆续续做了一些开源项目,推荐给大家啊!记得点赞和收藏噢! ...

  4. 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事

    微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...

  5. Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本文内容 为什么要全局异常处理? WebFlux REST 全 ...

  6. Spring Boot 项目实战(五)集成 Dubbo

    一.前言 上篇介绍了 Redis 的集成过程,可用于解决热点数据访问的性能问题.随着业务复杂度的提高,单体应用越来越庞大,就好比一个类的代码行数越来越多,分而治之,切成多个类应该是更好的解决方法,所以 ...

  7. Spring Boot、微服务架构和大数据

    一文读懂 Spring Boot.微服务架构和大数据治理三者之间的故事 https://www.cnblogs.com/ityouknow/p/9034377.html 微服务架构 微服务的诞生并非偶 ...

  8. Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/ 项目结构 结构分析: Spring-boot-pr ...

  9. Spring Boot 2.0系列文章(七):SpringApplication 深入探索

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/30/springboot_SpringApplication/ 前言 在 Spring B ...

  10. “Spring Boot+Marklogic实战应用(1)”

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议.本文链接:http://www.blbk.info Spring Boot+Marklogic应用 摘要: 在前一节的介绍,相信 ...

随机推荐

  1. C++中虚表是什么

    虚函数表,以及虚函数指针是实现多态性(Polymorphism)的关键机制.多态性允许我们通过基类的指针或引用来调用派生类的函数 定义 虚函数(Virtual Function) 定义:类中使用vir ...

  2. django(cookie与session、中间件、auth模块)

    一 cookie与session 1 发展史及简介 """ 发展史 1.网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的 eg:新闻.博客.文章 2.出现了 ...

  3. Snackbar源码分析

    目录介绍 1.最简单创造方法 1.1 Snackbar作用 1.2 最简单的创建 1.3 Snackbar消失的几种方式 2.源码分析 2.1 Snackbar的make方法源码分析 2.2 对Sna ...

  4. SnapHelper源码深度解析

    目录介绍 01.SnapHelper简单介绍 1.1 SnapHelper作用 1.2 SnapHelper类分析 1.3 LinearSnapHelper类分析 1.4 PagerSnapHelpe ...

  5. C# 通用OCR识别 文字识别 中文识别

    软件说明 基于以下两个开源项目,做了再次封装 https://github.com/paddlepaddle/PaddleOCR PaddleOCRSharp: 本项目是一个基于PaddleOCR的C ...

  6. Nancy一个轻量级用于构建基于 HTTP 的 Web 服务

    记录一下: Nancy官网地址:http://nancyfx.org/ GitHub文档地址:https://github.com/NancyFx/Nancy/wiki/Documentation 有 ...

  7. fs.1.10 ON CENTOS7 docker镜像制作

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. centos7 docker上编译安装fs1.10版本的流程记录. 环境 docker engine:Version 24.0.6 ...

  8. 简单c++构建第一人称

    本文内容为UE4.27的文档教程 GameMode确定 新建的项目会自动生成GameMode,如果有更改,而不是使用默认的GameMode类,就需要在引擎的设置中更改 角色的实现 前后左右移动 //前 ...

  9. DevSecOps 中的漏洞管理(下)

    建立漏洞管理程序以支持DevSecOps 在讨论DevSecOps及DevOps模型中包含安全性的重要性时,建立有效的漏洞管理实践是非常重要的.这可以通过将漏洞管理设置为程序来实现. 我们可以开始对I ...

  10. #笛卡尔树,构造#洛谷 7726 天体探测仪(Astral Detector)

    题目传送门 分析 考虑每个数字一定会影响一定的范围, 那么可以记录每个数影响的最长区间和产生的个数, 那么通过这个可以解方程求出对于这个最长区间这个数的所在位置, 可以发现它可以满足一个树形结构,直接 ...