登录系统的蜕变之路

sddtc 于 2021-03-28 发布

“破壳而出是小鸡的生命哲学,打破旧有的阻碍和桎梏,因而得以获得新生” 一来自网络

某房产领域的大型在线网站日增用户大概是五千,网站支持用户不需要登录就能搜索,浏览,分享自己心仪的房产。如果你需要咨询房屋的中介,则需要通过登录来完成一些定制化需求:填写申请租房信息, 申请租赁商铺,对自己正在出售的房屋进行数据观测等…

该网站运行了十年,它的登录系统面对日益增长的业务需求显得越来越心有余而力不足,于是在经历了思考,分析后认识到了新登录系统出现的必然性,最终在经历了设计,开发,测试,上线阶段之后, 新版本的登录系统势如破竹,如获新生。

登录系统的界面往往是用户使用一个网站的入口,为了让网站知道并记住 “我是谁”,进一步为我存储,展示,推荐更丰富的内容来满足我对于各种知识消费的需求。 一个简单的登录系界面可以是填写邮箱地址 + 密码来进行用户注册,之后用户可以使用这个凭证登录网站。

2021-04-03-jWaug8-tb1

那么登录系统的后台一般是什么样子呢?
一个后台系统,一个数据库。

后台系统用于处理用户填写的邮箱地址和密码的正确性和有效性。例如在注册时检查邮箱地址是否已经存在, 密码是否符合网站密码策略。 在登录时检查邮箱地址和密码是否匹配。在一些复杂场景中,后台系统还负责通过邮件服务发送欢迎邮件,通过手机运营商服务发送验证码信息。

数据库用于存储用户的信息。例如一张用户表会存储用户唯一的用户 ID,邮箱地址,加密之后的密码,手机号码等。

2021-04-03-BRii9Q-2

知道了这两个主要部分,我们需要知道另一个登录系统中重要的概念,令牌
在这篇文章中,令牌是后台系统通过用户登录网站生成的一个登录凭证,存放在 HTTP Cookie 中。在房产网站的上下文里,登录用户想要申请租房,在填写完租房信息后点击申请按钮, 那么登录凭证会和用户填写的租房信息一并发送到后台系统,后台系统首先验证登录凭证是否正确有效,如果正确有效则用户成功申请租房。

那么,该房产网站的登录系统为什么面对日益增长的业务需求显得越来越心有余而力不足呢?

一、登录页面

该企业拥有 ToBToC 的不同用户群体,有超过五个在线的网站和若干个内部系统。随着业务和(财力)的发展该企业还在收购公司,每个网站有不同的登录页面。 那么会有一个问题:这些网站都属于一个企业却无法带给用户统一的登录体验。用户在使用各个网站的同时感受不到在使用一个企业的不同产品。

二、登录系统后台

不同的网站对应了不同的成熟运行的登录后台。那么登录系统的后台系统同样面临了几个问题:

  1. 维护成本大。每个网站需要自己维护自己的登录系统。团队在日常实现新需求的同时还要解决各种登录相关的问题。
  2. 同一个用户超过三十二个身份。用户同时使用了该企业不同网站的产品,造成一个用户有多个身份出现在该企业生态中,而企业却无法识别出这些用户,进而更加无法在生态中为用户构造统一的用户画像。对推荐,用户行为分析等业务场景造成阻碍。 2021-04-03-0xTjuf-3
  3. 数据库和数据表需要改造。企业的大部分系统服务已经部署在云平台上,而企业其中一个主要的网站的用户表仍然存放并维护在物理服务器的数据库中,并有计划在一个合适的时机也迁移到云平台上。而这张用户表的设计也出现了一个些坏味道:
    • 用户登录表除了存放了邮箱地址,加密后的密码信息,还存放了一些用户个人信息字段,例如,昵称,性别,生日。用户身份验证信息(邮箱地址,密码) 和用户画像信息(性别,年龄,生日)耦合。
    • 用户登录表存放了一些标识位字段,例如,用户是否有效,用户是否已删除,用户是否是黑名单用户。用户权限(黑名单,是否有效)信息渗透到用户表中。
    • 用户登录表存放了一些用于找回密码,验证登录邮箱,甚至第三方登录需要的相关令牌。这些令牌有时效性。也和用户身份验证信息强耦合。

三、令牌

不同的网站维护着不同的令牌,我们以其中一个网站的令牌为例。我一直认为它的存在是企业最想解决的问题没有之一【完全站在技术的角度解读:

“打破旧有的阻碍和桎梏”

新的登录系统出现是为了解决旧系统遇到的这三大难题而出现的。

一、技术选型

基于企业的大部分系统服务均部署在 AWS 的云平台上,于是对于 AWS Cognito 服务产生了浓厚的兴趣。而它恰好有一些新系统需要拥有的特点:

新登录系统的架构基本如下:

4

二、用户迁移

什么是用户迁移呢?之前有说过其中一个网站的旧登录系统的所有用户都存储在物理服务器的数据库中,包括邮箱地址和密码。那么在新登录系统上线的时候,会出现几个问题:

之后我们使用了 AWS DynamoDB 服务做用户迁移。也在新登录系统的登录流程中通过强制用户修改密码的方式将用户存储在 AWS Cognito 服务中。

三、瑕疵

新的登录系统解决了很多问题,也产生了一些新的问题。就像人总会有优点和缺点,系统也一样:

尽管如此,我们仍在失败中学习,在痛点中进步。AWS Cognito 也不是银弹。我们只是体会到了它带来的巨大的便利,也承受了它带来的一些痛苦。

“获得新生”

上线之夜

事到如今,回想起新登录系统上线的夜晚依然使我热血澎湃。因为新登录系统有太多相对于旧登录系统的突破:

后记

小小的用户登录系统有着大大的复杂性。随着商业的发展,业务的激增,对于用户管理的需求也会在有限的交付中迅速扩张,导致登录系统的可用性和扩展性都面临着挑战。
不断的追求技术的最优解,追求符合业务模型的最优解是我在这次经历中感受很深的事。虽然还有很多未知的难题等着我们解决,作为程序员,抱着 “技术改变世界” 的热情,一定会创造出更多价值。