架构设计:多个系统如何共享用户信息?
如果有多个系统要共享用户信息,该如何设计?
比如,阿里巴巴有支付宝、淘宝、天猫、阿里云等等一系列产品系统,但是只要你注册了其中任何一个产品,就可以在其它产品中也可以用该账号进行登录,而且你的收货地址、个人详细信息之类的也都会保留。
那么,这种系统是怎么设计的?
我想到两种方案:
方案1:
所有产品的后端共用一个数据库(这个太傻了,肯定不会这样设计)
方案2:
将用户验证、用户信息查询单独抽离成一个独立的项目(包括数据库和代码全部独立),供其它系统调用。
这样做的确可以让所有系统的用户信息实现共享,这样你在支付宝里面修改了收货地址,打开淘宝会发现淘宝里的收货地址也已经更新。
但是这样有个很大的弊端,就是跨表查询起来太麻烦了。比如我要搜索某个时间段的包括用户收货信息的订单详情,要不停地跨表联查。
问题
多个系统要共享用户信息,有没有好的解决方案呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
OAuth2
了解一下。你说的这几个系统基本都提供oauth2接口方案2是没问题的,但是楼主似乎是觉得跨库联查太麻烦,想用join查询?也不是不可以,你自己本地再存一份用户数据就好了,每次用户登录的时候更新用户数据,唯一的不好的地方就是用户如果在淘宝改了东西,不会马上知道,只有在重新登录的时候才更新
楼主的方案2是跨库查询吧,这个方案在分库分表的情况下效率也不高吧。这种关联查询其实可以放到应用层级去完成吧,user系统相当于一个微服务,调它的接口去完成用户信息的查询之类的操作吧。而用户验证之类的操作,可以通过oauth2,或者单点登录系统来完成吧。