共计 2949 个字符,预计需要花费 8 分钟才能阅读完成。
作者 | 西流(阿里云函数计算专家)
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