将单体 Laravel 应用程序升级到微服务

Posted

技术标签:

【中文标题】将单体 Laravel 应用程序升级到微服务【英文标题】:Upgrade Monolithic Laravel Application to Microservices 【发布时间】:2021-11-15 17:06:28 【问题描述】:

我是微服务领域的新手,我研究过最佳实践以及如何从单体升级。我现在需要具体步骤才能继续前进。

我希望将单体 Laravel 项目升级到微服务。

我已经开始将应用程序分解为更小的应用程序。因此开发了多个 Laravel 项目,每个项目代表一个服务。为了简化问题:

认证应用:用于用户认证和注册 ToDo 应用:用于为特定用户创建包含任务的待办事项列表

所以现在我有了这两个应用程序,每个应用程序都有自己的 CRUD 操作(多个 API)。

问题是如何使用 Lambda 函数、API 网关和连接到 PostgreSQL (Aurora DB) 将这些应用程序迁移到 AWS 无服务器。

    首先我需要使用 SAM 模板还是 Bref 模板?以及如何处理 AWS Lamda 不支持 Laravel? 每个应用程序都有几个函数(第一个应用程序有注册、登录、重置密码...),那么每个应用程序都必须是独立的 Lambda 函数吗?如果是,这是否意味着每个项目都必须是一个新的 Laravel 项目,然后我将不得不提及 SAM 或 Bref 使用的相同资源,以具有使用相同数据库的不同功能。 Lambda 默认创建 API 网关?如果是,那么我是否应该创建一个可由用户侧访问的主 API 网关,它可以调用其他 API 网关? (主 API 网关过滤请求,如果与身份验证相关,它会重定向到可以与不同身份验证 Lambda 函数交互的身份验证网关?

我以后肯定会添加带有 SNS 排队支持的步进功能,但现在,我需要了解如何移动应用程序。

最后,您建议如何将 CI/CD 集成到项目中?

感谢您的帮助!

【问题讨论】:

进入微服务并不是升级。也不是降级。根据您的单体应用程序编写得有多糟糕,或者您在将其迁移到微服务方面的能力如何,您最终可能会拥有比当前系统更好或更差的系统。 【参考方案1】:

您可以按照Bref documentation 上的说明安装这两个软件包。

composer require bref/bref bref/laravel-bridge --update-with-dependencies

要回答您的第二个问题,您可以自行选择是将其分解为更小的单个 lambda 函数,还是将整个应用程序用作一个函数。两者都可以工作。您还可以在每个应用程序中包含多个函数,并使用 API 网关将特定请求路由到相应的 lambda。如果你决定只有一个函数,那么所有请求都必须路由到同一个 lambda。这是你的选择。

默认情况下,Lambda 不会创建 API 网关,如果您在 serverless.yaml 文件中包含以下行,则无服务器框架会为您创建。 事件: - httpApi: '*'

我建议您坚持使用一个 API 网关来进行更简单的路由配置。您可以配置 API Gateway 以将不同的请求路由到不同的服务。

最后,您可以使用管道实施 CI/CD,使用 Git 存储库作为触发器并配置 CodeBuild 以将您的应用部署到 Lambda。

【讨论】:

以上是关于将单体 Laravel 应用程序升级到微服务的主要内容,如果未能解决你的问题,请参考以下文章

微服务:我们需要从单体转到微服务吗?-

从单体迁移到微服务的几种模式

微服务实践:从单体式架构迁移到微服务架构

如何在从单体架构过渡到微服务架构之间管理多个暂存环境

微服务实践:从单体式架构迁移到微服务架构

用普通话说微服务系列 单体应用到微服务的进化