用户系统的架构设计与实现策略(一)

发布于:2025-07-01 ⋅ 阅读:(18) ⋅ 点赞:(0)

用户系统

作为用户系统的一部分,以下核心模块是必不可少且不容忽视的:

  • 用户注册
  • 用户登录与登出
  • 用户管理

设计可复用的用户系统

几乎每个应用都需要一个用户系统,而为每个新项目从头开始重新实现一个显然是低效的——甚至可以说是不切实际的。这样做会导致重复劳动,并在不同系统之间产生不一致的实现。

因此,自然的做法是设计一个可在多个应用中复用的用户模块。那么关键问题就变成了:这样的系统应采用哪种架构方式?

常见的策略有两种:

用户 SDK 方式

将用户系统作为一个 SDK(软件开发工具包)提供,可以直接集成到每个应用程序中。在这种模式下:

  • 每个应用程序独立管理用户数据,或与一个中央数据源共享。
  • 身份验证和用户管理逻辑封装在 SDK 内部。
  • 此方法提供了紧密集成和灵活性,尤其适用于不同应用对用户需求略有差异的情况。

用户中心(集中式服务)方式

设计一个独立运行的用户中心,它独立于任何特定的应用程序:

  • 它作为一个单独的服务运行,拥有自己的用户数据存储,但对外呈现统一的数据视图。
  • 应用通过标准化接口(如 HTTP API 或 RPC 调用)访问用户相关功能。
  • 这种方式将用户管理从业务应用中解耦出来,实现了集中控制、统一认证以及更易于扩展。

在使用 SDK 方式时,实现单点登录(SSO)可能会面临挑战,因为用户数据通常由各个应用独立管理。这种分散性使得在各服务之间维护统一的身份变得困难。另一方面,大多数现代用户系统都是以集中式服务的形式实现的,这为用户数据和身份验证提供了单一的真实来源。基于这一观察,我们决定在我们的用户系统中采用集中式服务的方式。当然,这并不意味着 SDK 方式没有其优势。 在某些模块,例如访问控制或权限管理方面,基于 SDK 的解决方案可能仍然是更好的选择,具体取决于系统的架构和集成需求。

在接下来的章节中,我们将详细讨论这些模块及相关组件如何与 AJ-IAM 集成。

用户注册

用户注册是指为应用程序创建新用户账户的过程。在一个集中式的用户中心架构中,应用程序本身并不存储用户名、邮箱、手机号或密码等核心用户数据。这些数据完全由用户中心进行管理和存储。

用户中心负责处理用户注册、身份验证(登录)和访问控制。它会验证用户是否合法,并将该信息返回给应用程序。然而,当用户中心的数据库结构无法满足应用程序的具体需求时,常常会出现一个常见问题。由于用户中心数据库的结构通常是固定的,可能无法灵活地调整或扩展字段以匹配应用程序的需求。

一种可能的解决办法是在用户表中添加一个 JSON 类型的字段,用于存储任意数据。虽然这对于非结构化或动态数据是有用的,但对于结构化数据来说并不是理想的选择,因为它牺牲了查询性能、类型安全性和可维护性。

推荐方案

更好的做法是,在用户完成用户中心注册之后,将应用专属的用户信息本地存储在应用自己的数据库中。为了将本地用户数据与中心用户记录关联起来,可以添加一个类似 iam_id 的字段,用来引用用户中心中的用户 ID。

这样做的好处包括:

  • 核心身份和认证仍由用户中心掌控。
  • 应用可以存储和管理符合自身业务需求的扩展用户属性。由于核心用户信息可以轻松获取,因此无需频繁调用用户中心。
  • 实现了身份管理与应用特定数据之间的清晰分离。

网站公告

今日签到

点亮在社区的每一天
去签到