【问题标题】:microservices structure in Laravel with aws lambdaLaravel 中的微服务结构与 aws lambda
【发布时间】:2021-05-19 17:14:26
【问题描述】:

我是微服务新手,我只知道理论,开发了一些本地示例,并将它们部署到 AWS,但仅此而已,我有一个项目必须使用微服务完成,但我的问题是关于结构。

例如,我打算做以下事情:

  • AWS S3 中前端商店的 Vuejs SPA - 这将向 Laravel 主应用程序发出请求
  • 用于管理授权(登录、注册、密码恢复)的 Laravel 主应用
  • 当用户登录时,被重定向到“帖子”页面并且该页面加载所有帖子,您可以创建新帖子,删除它们,添加 cmets 等。这将是另一个 Laravel 应用程序,另一个微服务
  • 然后我有另一个用于用户个人资料的 Laravel 应用程序,用户可以在其中更新他们的信息并通过给定选项通过他们的帖子获利

所以,这是我的计划:

  • 存储在 S3 中的 SPA
  • 用于处理授权的主应用程序的微服务,这将存储在 lambda 中
  • 帖子的微服务,这将存储在 lambda 中
  • 用于货币化的微服务,将存储在 lambda 中

我打算使用无服务器,所以我有点困惑。

  • SPA 或主应用程序中的 AWS API 网关应该在哪里?或者我该如何配置它
  • 我应该只使用一个数据库,每个微服务都连接到它吗?
  • 我应该使用不同的数据库吗?如果是这样,我可以如何同步它们
  • 如果用户登录到主应用程序,它会生成一个带有 sanctum 或护照的令牌,然后将此令牌在标头请求中发送到帖子或货币化微服务,这种方法可以吗?
  • 我应该安装 Sanctum 还是护照?
  • 我应该在所有微服务中还是仅在主应用中安装 Sanctum 或 Passport?

我能做什么?谢谢。

【问题讨论】:

    标签: php laravel amazon-web-services microservices


    【解决方案1】:

    如果我理解正确,您有一个 UI 与后端的多个微服务进行通信。

    由于您使用的是无服务器,因此微服务可能是围绕一个功能部署在一起的一组功能。完全没问题。

    通常,您会希望为每个微服务拥有一个单独的存储区域。如果它们在物理上是不同的数据库,在云环境中不会有很大的不同,因为您可以随时根据需要进行更改。重要的一点是存储区域是由服务封装的。这可能意味着每个微服务在数据库中都有一个其他人无法访问的区域。

    这也意味着您必须使用接口来获取其他微服务的数据。基本上有两种方法:

    • 同步 API 使用其他微服务来检索数据。
    • 通过消息总线进行异步数据复制(事件驱动架构)。

    对于基于令牌的身份验证:您的主应用程序将使用包含用户信息(如电子邮件等)的私钥创建加密的 JWT 令牌。此令牌必须存储在客户端中,并通过每个请求的标头发送到其他微服务.他们可以使用解密机制来确保令牌的有效性,并且为此需要主应用程序的公钥。您可能会考虑 enter link description hereAWS Cognito 库,因为它们可以为您完成这项工作

    一般来说,您应该过度考虑使用微服务,因为它们不是灵丹妙药。你应该问自己以下两个问题:

    • 我需要扩展开发吗? (例如 50 名开发人员 +)
    • 我需要独立部署/服务演进吗?

    如果这些问题的答案是“否”,您可能会考虑使用微服务的一些最佳实践,但我建议不要引入微服务的全部开销。你也可以让一些无服务器函数在一个通用数据库上运行。

    【讨论】:

    • 感谢您的回答,关于数据库,我在 laravel youtube.com/watch?v=SzsPe_QX__c 找到了一个关于微服务的教程,其中每个微服务都有不同的数据库,并且这些数据库与 rabbitMQ 同步,这种方法可以吗?但正如你提到的,我将首先尝试一些无服务器功能,在一个公共数据库上工作。然后我可以迁移到微服务的复杂性。谢谢
    • 我刚刚注意到,即使我尝试了不太复杂的方法,仍然必须使用 AWS cognito 来允许主应用程序访问其他 lambda 函数(帖子、货币化),所以它会是 1 个 api 网关和 3 个 lambda 函数吗?
    • 我对 AWS 的细节不太熟悉,但你可以看看 AWS Amplify,它为你简化了很多这些事情,比如身份验证、数据库、lambdas、托管和路由:aws.amazon.com/amplify
    • 我会尝试这种方法,谢谢
    猜你喜欢
    • 2021-07-21
    • 2017-12-29
    • 2018-04-08
    • 2021-06-15
    • 2018-05-07
    • 2020-10-11
    • 2018-01-11
    • 2020-04-11
    • 1970-01-01
    相关资源
    最近更新 更多