背景
用户身份权益体系(或会员权益体系)几乎是各大成熟app的标配,用户身份权益体系通过对用户赋予身份(会员、等级)的方式,提供不同级别的产品权限给不同的用户,是用户活跃度运营以及商业化的重要工具。同时,用户身份也是用于区分用户影响力、优质程度等关键能力的重要标记(如微博的大v),对于不论是电商类还是社交类产品,都有着非常关键的作用。
本文将从技术实现的视角,以闲鱼app的用户身份权益体系为例,介绍如何设计一个具有良好扩展性的用户身份权益体系。
问题与挑战
- 【身份权益的管理】在常见身份权益管理场景中,用户可以同时获得多个不同的身份、多个身份可能持有重叠的权益、相同的权益可能存在内容上的差异(如数量大小)、权益重复时需要处理权益的合并策略。如何对身份、权益的概念进行抽象设计,是整个系统最核心需要解决的问题。
- 【身份的透出】当用户获得了一个身份,不论是大v标记还是会员等级,都希望在app上进行显示,以传递身份特有的心智,不同身份可能有同样的标签(例:闲鱼的领域卖家、会玩达人都显示v标),同一身份可能有不同的个性化标签内容(例:某某领域达人),如何统一管理用户身份在app全链路的透出,也是身份权益体系需要解决的一个问题。
- 【身份的赋予】不同的产品中,身份的赋予方式各不相同,常见的有付费购买、积分升级、认证、运营加白等等,在赋予过程中还会加入丰富的升级路线(等级体系等),同一产品中多见的会同时具备多种赋予的方式。如何支持多元的身份赋予途径,以及如何支持不同身份的扩展,也是技术上需要解决的一个重要问题。
本文将以闲鱼的身份权益体系为例,针对身份权益体系中的身份权益的定义、管理,身份的透出进行了详细的介绍,同时以闲鱼的用户认证流程为例,介绍了如何解耦身份管理与身份赋予两个过程,并在身份赋予过程中做到身份的可扩展。
技术实现
概念梳理
- 身份是指,用户满足某些准入条件后,被授予的一个身份标记。一个身份在技术实现上,是一个和用户关联的记录/系统标签。
- 权益是指,用户因为具有某个身份,而获得的在现有的一些业务中的一些特权。我们用一个键值对表示一条权益,key表示的是权益,value表示的是权益的值,这个值可以是一个数字、boolean、一个带占位符的文本等,权益的提供方根据这个权益的值提供具体的权益。
- 透标标签是指,根据某个身份外显权益而获得的一个基于用户的可展示的描述符,这个描述符可以在客户端和前端页面进行渲染,从而实现身份的外显。一个标签的描述可以是:一个文本、一个图片url、一组客户端可以识别的元素等,客户端根据这个标签的内容进行渲染。
- 认证是指,用户因希望获得某个身份而发起的一个认证申请,认证后会获得一个身份。一个认证在技术实现上是一条认证记录,包括了认证的状态、这次认证所关联的信息(包括提交的表单,审核的结果等)。
注:认证是获得身份方式的一种,本文以认证流程为例,介绍如何实现一个身份赋予的过程。值得注意的是,在我们的设计中,身份的透出,作为一种权益进行设计。
系统拆分
我们对应的将系统拆分为三个独立的模块:身份权益服务、用户标签服务、认证服务(以认证服务为代表的身份赋予模块)。
对于三个系统的功能和边界定义如下:
- 【身份权益服务】:管理用户的身份以及身份-权益的关系,运营可以通过系统配置身份对应的权益,系统能够对用户的权益进行计算、合并,权益提供方可以通过身份权益服务查询用户的权益。
- 【用户标签服务】:根据用户的权益、个性化数据以及其他外部服务等,按规则向全链路下发用户的透标标签。全链路的各个场景可以用不同规则查询当前场景可渲染的用户标签,标签系统对不同的规则可以有差异化的定制,做到不同场景按需订阅、扩展。
- 【认证服务】:管理用户的认证流程,用户通过认证服务发起申请,系统对用户的准入和表单进行校验,将表单转发给运营审核,并对审核结果进行处理。认证通过后,通过身份权益服务接口对用户进行身份添加。同理,不论是积分、白名单还是用户等级体系,均可以以这种方式进行接入。
基于上述的设计,用户通过认证服务获得身份,权益提供方根据身份权益服务查询相应的权益提供特权,用户标签服务对其中的透标权益进行支持,在app侧渲染用户的身份,从而实现身份外显,完整的满足了用户身份认证-透标的能力。
下面展开介绍各个系统分别是如何实现的。
【身份权益服务】实现
【身份权益服务】基于身份权益配置和用户标签系统(集团中台的用户标签服务)实现。我们将身份权益的配置,写入到身份权益配置表,编辑完成后,通过配置中心,发布到各个服务器的内存中。
另一方面,用户认证流程、白名单等服务通过身份服务接口将身份写入到UIC的标签系统中,标签系统是集团实现的用户-标签的管理系统,可以基于缓存快速查询用户是否具有某个标签,一个身份由一个标签表示(没有标签系统的话也可以用数据库+缓存的方式实现)。
在权益提供方查询用户权益时,我们快速从用户标签系统中读取用户的全部身份标,根据内存中身份-权益的配置,通过一个身份-权益计算函数(输入身份标和权益配置schema,输出权益),对权益进行合并、择优去重后(不同权益的合并方式按权益配置,如逻辑或、最大值、字符连接等),将计算结果(权益)返回给权益提供方。
【用户标签服务】实现
【用户标签服务】实现了用户维度的标签透出。服务可以基于身份权益服务、用户个性化数据、外部服务等,返回用户需要透出的标签,标签的描述包括但不限于图片url,文本,复杂结构等。服务支持通过规则id进行定制,不同的规则id,可以定制需要透出的标签的组合,各个场景根据需要展示的标签,选用合适的规则id进行订阅,在原规则id不适用的情况下,可以定义新的规则id进行支持。
【认证服务】实现
【认证服务】定义了一套标准的认证流程,统一对认证的状态进行管理,同时通过扩展接口,让不同认证流程的业务对扩展接口进行实现,从而实现流程标准化,内容可扩展。
认证服务的整体流程分为认证查询、表单提交、审核结果处理三个阶段,在认证流程中,系统维护了未认证、审核中、审核未通过、审核通过四个不同的状态,不同的认证流程具有相同的状态流转,由认证服务统一维护。
在认证查询中,不同的认证流程具有不同的准入条件;在表单提交过程中,不同的认证流程具有不同的表单字段和合法性要求;在审核结果中,针对审核结果不同认证流程有不同的处理方式。因此,认证流程提供了三个扩展接口,第一个扩展接口用于实现获取用户的准入条件判定和表单渲染;第二个扩展接口用于用户表单的校验,同时生成审核用的数据表单;第三个扩展接口用于对审核结果进行处理。于是在我们的认证服务上,只需要实现上述三个扩展接口,就能完成一套新的认证流程的接入。
结语
本文以闲鱼的身份权益体系实现为例,介绍了如何对身份权益体系进行概念定义、模块拆解、技术实现,同时以闲鱼的身份认证流程为例介绍了如何实现、接入不同的身份赋予渠道,希望对大家系统中的身份权益设计起到一些参考作用。