当前位置: 首页 > 后端技术 > Java

SpringBootServerless实战系列《架构》-Lightspeed函数计算入门

时间:2023-04-01 21:06:55 Java

:如何以Serverless方式运行SpringBoot应用?作者:细柳(阿里云函数计算专家)SpringBoot是基于JavaSpring框架的套件。它预装了一系列的Spring组件。开发人员只需要少量的配置就可以创建独立运行的应用程序。在云原生系统中,有大量的平台可以运行SpringBoot应用,比如虚拟机、容器等。但其中最吸引人的是以无服务器方式运行SpringBoot应用程序。我将通过《Spring Boot Serverless 实战》系列文章,从架构、部署、监控、性能、安全五个章节来分析在Serverless平台上运行SpringBoot应用的优缺点。为了让分析更具有代表性,我选择了Github上50k以上star的电商应用商城作为例子。这是本系列的第一篇文章。本文将从架构的角度分析SpringBoot的Serverless应用。商城架构介绍商城是一个电子商务系统,包括前端商城系统和后端管理系统,基于SpringBoot+MyBatis实现。前端商城系统包括首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客服、帮助中心等模块。后台管理系统包括产品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。Mall的架构如下图所示,分为网关层、应用层、数据存储层。请求首先通过网关到达SpringBoot应用服务。网关实现负载均衡、流量控制等功能。应用层包括3个SpringBoot应用和1个前端应用:mall-admin:后台商城管理系统mall-portal:前端商城系统mall-search:基于Elasticsearch的商品搜索系统Mall-admin-web:front-mall-admin的结尾表明基于Vue+Element的商城实现使用了MySQL、Redis、MongoDB、ElaisticSearch等数据库。主要业务数据存储在MySQL中,缓存数据存储在Redis中,用户行为分析数据存储在MongoDB中,搜索数据存储在ElasticSearch中。SpringBoot使用RabbitMQ进行应用程序服务之间的异步通信。Serverless计算平台——函数计算简介函数计算(FunctionCompute)是目前国内唯一入选Forrester领导者的Faas产品。它是一种事件驱动的完全托管的无服务器计算服务。开发人员无需管理服务器等基础设施。用户上传代码包或容器镜像后,函数计算会自动准备计算资源,弹性可靠地运行代码。函数计算的产品优势总结如下:高效免运维:专注于业务逻辑开发,无需关心服务器购买、自动伸缩等运维操作弹性高可用:预留实例系统不依赖自动回收,可永驻不销毁,消除冷启动需求带来的延迟毛刺成本低:按量付费模式按计算资源实际使用情况计费,资源利用率高,稳定可靠:FunctionCompute分布式集群部署支持多可用区FunctionCompute提供全面的可观察性和问题诊断能力,但其最突出的特点是内置了网关层能力,可以实现缩减为0和快速自动伸缩。函数计算的这些特性使其非常适合SpringBoot等Web应用。使用函数计算,开发者只需专注于SpringBoot应用逻辑的实现,而无需再为应用运行环境的搭建、部署、监控等杂活而烦恼。商城应用serverless架构概述商城是一个非常标准的3层架构的web应用,很容易将其转化为serverless架构,架构如下图。由于函数计算内置网关服务,自动拉取实例运行应用,开发者只需要上传应用代码即可。应用实例运行在函数计算平台上,可以自由访问其他服务,因此访问方式与MySQL、Redis、RabbitMQ等服务相同。函数计算内置日志收集和展示能力。开发者为函数计算指定阿里云日志服务的LogStore,发送到标准输出的日志将由日志服务自动采集并展示。开发者也可以将日志投递到自己的日志处理系统中,但是需要进行一些额外的配置。在这个例子中(见文末阿里云日志服务的URL),我们将使用阿里云日志服务来处理应用日志。函数计算还提供了一系列工具,帮助开发者通过JenkinsCICD工具发布应用。我们将在后续文章中进一步展示这一点。在函数计算平台上运行SpringBoot在演示Web应用在阿里云函数计算平台上的运行之前,先介绍一下几个概念:服务函数计算的服务资源对应于微服务。一个服务下可以创建多个函数,这些函数共享服务级别的配置,包括日志、权限、VPC网络访问配置等。一般来说,开发者会根据业务场景设计微服务架构,为每个微服务创建函数计算服务。然后根据需要,把微服务变成更细粒度的功能。例如,一些逻辑是计算密集型的。您可以将其拆分成另一个功能,配置不同的实例规格以满足性能需求和优化成本。按照微服务的理念,一个服务下的函数数量不宜过多。函数函数是运行开发者代码的基本单元。函数的粒度可以很细,比如对应一个API,也可以粗一点,对应一组API。不同的函数配置不同的实例类型。函数计算提供各种语言的运行时,以及自定义运行时/自定义容器和语言无关运行时。如果只是用函数计算来实现片段代码,可以使用相关语言的runtime。在我们的场景中,因为我们要无缝迁移SpringBoot应用,所以我们会选择自定义容器运行时。Mall项目已经支持将Mall应用自动打包成容器镜像,您只需将镜像上传到阿里云容器镜像仓库,并在功能上指定相关信息即可。HTTP触发器为函数配置HTTP触发器后,可以通过HTTP请求调用该函数。函数计算自带的ServerlessDevs工具会为HTTP触发器生成测试域名,方便开发者轻松调试和运行Web应用。原文链接本文为阿里云原创内容,未经许可不得转载。