9.4 使用 Redis 进行分布式会话管理

在前面的章节中,我经常强调云原生应用程序应该是无状态的。我们对其进行扩展,如果它们不是无状态的,每次实例关闭时我们都会丢失状态。某些状态需要保存,否则应用程序可能毫无用处。例如,Catalog Service 和 Order Service 是无状态的,但它们依赖于有状态服务(PostgreSQL 数据库)来永久存储有关书籍和订单的数据。即使应用程序关闭,数据也会保留并可供所有应用程序实例使用。

Edge Service 不处理任何需要存储的业务实体,但它仍然需要一个有状态服务(Redis)来存储与 RequestRateLimiter 过滤器相关的状态。当 Edge Service 被复制时,跟踪在超过阈值之前剩余多少请求非常重要。使用 Redis,可以保证限流功能的一致性和安全性。

此外,在第 11 章中,你将扩展 Edge Service 以添加认证和授权。由于它是 Polar Bookshop 系统的入口点,在那里对用户进行身份验证是有意义的。经过身份验证的会话数据必须保存在应用程序外部,原因与限流器信息相同。如果不是这样,用户可能每次请求到达不同的 Edge Service 实例时都需要重新进行身份验证。

基本思想是保持应用程序无状态,并使用数据服务来存储状态。正如你在第 5 章中学到的,数据服务需要保证高可用性、复制和持久性。在本地环境中,你可以忽略这一点,但在生产环境中,你将依赖云提供商提供的数据服务,包括 PostgreSQL 和 Redis。

下一节将介绍如何使用 Spring Session Data Redis 建立分布式会话管理。

results matching ""

    No results matching ""