【问题标题】:Best way to store common system preferences in a microservices architecture (serverless application)在微服务架构(无服务器应用程序)中存储常见系统偏好的最佳方式
【发布时间】:2022-01-12 23:16:37
【问题描述】:

我们有一个带有无服务器后端的多租户应用程序,它是所有使用 API 网关、lambda、DDB、SQS、SNS、Cognito 等的微服务。

微服务都是关于将系统分解为单独的组件。但是,系统中的某些事物本质上似乎是集中的。我担心的是每个租户的设置/首选项,它们将通过应用程序 UI 上的首选项页面为每个租户设置设置(如单位、小数位等),并应用于该租户的所有用户,并且与不同部分有关每个系统都有自己的微服务。在微服务中为每个租户处理系统设置的最佳方法是什么,每个租户都有自己的数据库。

  1. 如果是用户偏好,我会将其存储在 Cognito 中,但它是租户范围的偏好(而不是用户偏好)。

  2. 我认为针对系统偏好的新微服务不是一个好方法,因为那样会导致大量跨服务通信。

解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: amazon-web-services microservices serverless


    【解决方案1】:

    如果你想存储系统设置,我建议将它们存储在SSM Parameter Store。

    您可以将值存储为纯文本或加密,您可以使用 IAM 角色和权限控制对参数的访问。

    【讨论】:

    • 感谢您的回复。这些是我们正在谈论的租户偏好,例如他们希望在查看的数字中保留多少小数点以及他们希望查看测量值的单位。这实际上是有道理的。既然你这么说,我们可以通过 middy 中间件向 SSM 发出请求,然后将其转发给我们的微服务,我理解你的意思吗?
    • 另外,这些设置实际上是租户管理员从应用程序 UI 中选择的,这不是系统配置。
    • 这些是租户管理员通过系统首选项屏幕设置的首选项,因此他们可以更改为“是”。不过不经常。但由于它们在运行时会发生变化,我猜想通过 middy 中间件加载会是理想的。我不确定的是 - 为什么在 DDB 读取速度更快时将它们存储在 SSM 中?为什么不拥有一个由中间件访问的公用表,并根据用户所属的租户为用户加载首选项,而不是通过 SSM 加载它们,这与 Dynamo 相比会增加更多延迟。有什么优势?
    • 如果他们可以改变没有任何优势。 DynamoDB 可能是一个更好的解决方案。 SSM 的优势在于您无需处理 DynamoDB 表的所有开销即可存储参数。 SSM 毕竟不是数据库,它不具备成熟数据库的所有属性。现在,您已经深入解释了您的情况,DynamoDB 对您来说会更好。
    猜你喜欢
    • 2019-08-05
    • 2020-01-15
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 2021-05-19
    • 2016-04-15
    • 2020-12-16
    • 2018-06-20
    相关资源
    最近更新 更多