小编red*_*guy的帖子

在微服务之间传递用户身份和授权

我很困惑 - 在微服务之间以异步方式传递用户身份(授权信息)的最佳方式是什么?

假设我已经有了处理身份验证和颁发 JWT 令牌的入口点(api 网关)。然后用户使用此令牌调用某个 API 端点。到此为止,一切都清楚了。现在 - 此端点需要与另一个微服务通信。该微服务必须获得授权信息(角色等)。此外 - 该通道是异步的(JMS/Kafka),这意味着处理可能会延迟......

我也在考虑其他情况:我们有两个服务 A 和 B。它们都公开了可能被外部用户访问的 API(JWT 令牌身份验证),但它们也需要异步协作(通过 JMS)。他们都需要用户身份上下文。再次 - 如何通过它?

我可以:

  1. 将 JWT 令牌与队列消息一起传递 - 安全吗?如果令牌在目标服务开始处理之前过期怎么办?
  2. 转换来自 JWT 令牌的信息并将其作为 HTTP 标头传递 - 如果目标服务返回信息怎么办 - 我需要从该响应中重新获得授权上下文(它仍然必须在特定用户的上下文中进行处理),但这使我可以处理两种类型的授权:JWT 和从异步进程返回的那个...
  3. ……?

他们对我都有缺点,我找不到通用的解决方案......

- 编辑

考虑案例:有产品目录服务和订购服务。两者都公开公共 API。用户下订单,它排队等待处理。第一步是验证产品是否正常以及是否允许用户订购。处理可能会调用产品目录服务,但必须传递用户上下文。这就是我要说的部分。

authorization oauth jwt microservices

6
推荐指数
1
解决办法
2476
查看次数

调整 kafka 流以提高速度

我有两个流:

[topicA] -> processingA -> [topicB] -> processingB -> [topicC]

通过登录我的应用程序,我注意到在将输出从 processingA 发送到 topicB 和从 topicB 为 processingB 挑选消息之间,每次需要超过 100 毫秒(而不是 150 毫秒)。它可能不多,但它会累积,最后相当简单的级联处理几乎需要秒。

我可以调整 kafka 以使这些延迟尽可能接近零吗?哪些配置参数对这些延迟有影响?

我主要是默认配置。是 commit.interval.ms 导致延迟吗?我已经将它从更高的默认值更改了...

StreamsConfig values: 
    application.id = app
    application.server = 
    bootstrap.servers = [localhost:9092]
    buffered.records.per.partition = 1000
    cache.max.bytes.buffering = 10485760
    client.id = 
    commit.interval.ms = 100
    connections.max.idle.ms = 540000
    default.deserialization.exception.handler = class org.apache.kafka.streams.errors.LogAndContinueExceptionHandler
    default.key.serde = class org.apache.kafka.common.serialization.Serdes$StringSerde
    default.production.exception.handler = class org.apache.kafka.streams.errors.DefaultProductionExceptionHandler
    default.timestamp.extractor = class org.apache.kafka.streams.processor.FailOnInvalidTimestamp
    default.value.serde = class org.apache.kafka.common.serialization.Serdes$StringSerde
    metadata.max.age.ms = 300000
    metric.reporters = []
    metrics.num.samples …
Run Code Online (Sandbox Code Playgroud)

apache-kafka apache-kafka-streams

5
推荐指数
1
解决办法
1519
查看次数

postgresql 多租户模式与数据库

我们设计了一个多租户系统(假设有数百个租户,而不是数千个)。没有共享数据。数据库是PostgreSQL。为每个租户或架构创建一个单独的数据库是否更好?

优缺点都有什么?对文件系统、数据库引擎表/视图(如锁、对象权限等)有何影响?在多模式解决方案中它们会更大吗?单独的数据库应该更容易备份/恢复。

我知道有很多类似的问题,但大多数都与共享数据的情况有关,这是多个数据库的主要缺点,而我们没有这样的要求。

database postgresql database-design multi-tenant database-schema

4
推荐指数
1
解决办法
4027
查看次数