作者简介
Scai,携程高级研发经理,多年深耕于账号中台,持续推进中台的技术架构演进及性能优化。
一、前言
在互联网早期时代,账号系统的功能非常广泛,包括账号管理、登录认证相关能力以及维护各类用户信息,比如头像、昵称、积分、等级等。随着业务的发展,每个功能逐渐分化出自己的需求和架构侧重点,独立出各自的领域服务也成了业界共识。
本文分享的账号系统,指的是提供用户账号管理、登录认证相关能力的系统。介绍了携程在不断发展的过程中,账号系统在领域化、中台化和多Region化方向上的演进、探索和一些思考。
二、领域化
微服务迅猛发展阶段,账号系统分裂出了很多应用。比如,专门支持三方登录的应用,专门保存账号实名信息的应用,针对不同平台的接入应用。一开始确实可以满足迅速开发上线的需求,当应用裂变到几十个的时候,应用分层不合理,领域逻辑不内聚带来的问题逐渐显现出来:
1)用户请求会经历多个应用之间的RPC调用,性能和稳定性受影响。
2)操作无法原子性,易出现脏数据。
3)应用过多,开发、运维、测试范围大,影响效率。
领域化是对账号系统的全面重构,有以下两个目标:
1)合理划分领域,逻辑内聚。
2)改造需要对业务透明。
2.1 全面梳理,重新划分领域
账号系统功能主要分为3个类型:
1)核心功能:负责管理和维护账号系统的核心功能和数据。由于涉及到用户的核心数据,相关插入、变更接口只可暴露给业务BFF层。
账号领域:包括账号信息查询;账号注册/注销;手机、邮箱、三方等数据的绑定/解绑;openid的生成;密码的管理和认证等功能。
登录态领域:负责登录态生成、验证、续期、踢出、过期删除等功能。
日志监控领域:负责记录账号相关业务埋点和日志。
2)辅助功能:不仅可以被账号相关业务依赖,也可以开放出去供类似业务场景的接入。
Token(临时凭证)领域:负责Token的生成、验证、过期删除等功能。
验证码领域:负责验证码生成、发送、验证等功能。
3)接入功能:负责账号相关的业务功能接入,包括端上接入和内网服务接入。
BFF层:主要负责各类业务逻辑的组合(注册、登录、改绑手机等)以及接入方权限的控制。
前端UI、SDK:前端显示UI以及提供出去供业务接入的SDK。直接对接BFF层。
其他一些业务中必须依赖的模块,如风控模块,依赖公司相应团队提供的能力即可。
2.2 读写对比,透明改造
账号系统非常核心,上游是公司的各类业务,依赖方非常多,牵一发而动全身。同