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

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

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个前端运用:

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

  • 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 架构十分简单,架构如下所示。由于函数核算内置了网关服务,主动拉起实例运转运用,因而开发者只需要上传运用代码即可。

Spring Boot 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 运用。

至此,阅览本篇后,信任我们现已对 Mall 运用架构以及 Serverless 渠道现已有了一个基本的了解。下周同一时间,咱们将在下一篇的《 Spring Boot on FC – 布置篇》中为各位详解如何将 Mall 运用布置到函数核算渠道上。

相关链接

1)SpringBoot:​​https://spring.io/projects/spring-boot​​

2)Mall:​​https://github.com/macrozheng/mall​​

3)函数核算:​​https://help.aliyun.com/product/50980.html​​

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

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

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

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

8)Serverless Devs:​​http://www.serverless-devs.com/ ​​

点击​​此处​​,即可查看更多函数核算信息!