将单体 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 应用程序升级到微服务的主要内容,如果未能解决你的问题,请参考以下文章