63

密码管理EasyPass开发笔记(第2篇)

 5 years ago
source link: https://studygolang.com/articles/15207?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

EasyPass的后端框架

EasyPass采用golang作为后端语言。作为近今年比较火爆的语言,golang以它的高并发和开发快吸引了一大批优秀的开发者,EasyPass也正是看中了它的简洁、高效和高性能。后端存储EasyPass采用mongo,mongo是nosql的佼佼者,支持各种复杂的查询,特别是4.0支持了事务后,发展迅猛。

EasyPass的后端主要负责加密数据的存储,架构也是相对简单,如下所示:

AvMBJra.png!web

EasyPass后端架构图

网关层负责借口的限流和鉴权,业务层是具体业务逻辑,底层存储是用的mongodb。

EasyPass的表结构

用户的每一个密码对于mongodb里的一条数据,具体的数据结构如下所示:

{
  "id": "数据的ID",
  "account": "数据所有者的帐号",
  “encrypted_data": "加密的数据",
  "version": "数据的版本号",
  "last_modify_time": "最后修改时间",
  "is_deleted": false, // 是否被删除
}

其中,encrypted_data即为加密的数据,解密后是个json字符串,它保存了用户的一条账户密码数据。version是数据的版本号,每次用户修改主密码,这个值都会加一。

EasyPass后端保证用户数据不丢失

为了保证用户数据的不丢失,EasyPass后端有两大设计:1、数据软删除;2、数据回滚技术;3、异地多活技术。

数据软删除

根据数据的表结构,数据的删除其实就是把is_deleted字段设置为true,如果用户不小心删除了密码,可以给EasyPass发邮件,技术人员可以帮用户恢复密码。

数据回滚技术

用户信息的表结构如下所示:

{
  "account": "用户帐号",
  "version": "版本号",
  ... // 其它字段
}

其中,版本号对应了用户数据的版本号。因此每次取数据的过程如下:

ZvqEjej.png!web

取数据的过程

修改主密码的过程如下:

iIVf6zI.png!web

修改主密码流程

数据回滚的过程如下:

iuQJzuA.png!web

回滚数据流程

由此可知,用户主密码的历史数据都是保留的,如果忘记密码,用户可以给EasyPass发邮件,将主密码回滚到以前的某个版本。值得注意的是,数据回滚后,新主密码下创建的密码信息就会失效(但是数据库中任会保留),因此用户在回滚请求数据的时候需要谨慎。

异地多活技术

传统的单数据中心部署是不可靠的,因为如果硬盘损坏会带来不可挽回的损失,EasyPass致力于保护用户数据的100%可靠,引进了异地多活技术。目前EasyPass有华东和美西两个节点,两地数据异步同步、互为主备。这不仅使得用户数据不丢失,还使得无论用户在国内还是国外,都能流畅自如地使用EasyPass。

EasyPass的原理是每次用户增加或者修改数据后,都会启动一个异步任务。异步任务会快速地将用户数据向其它数据中心转发,异步任务的表结构如下:

{
  "id": "任务ID",
  "account": "用户帐号",
  "method": "接口名称",
  "req": "请求数据",
  "user_info": "用户信息",
  ...
}

异步任务的原理是模拟用户请求去依次调用其它数据中心节点的接口,从而实现了用户数据的异地同步。

广告时间(哈哈,允许我推广一下我的密码管理工具)

简单专业的密码管理EasyPass

官网地址: https://www.easypass.tech

官方邮箱: [email protected]

6jEbqyy.png!web

EasyPass官网


Recommend

  • 37
    • www.v2ex.com 4 years ago
    • Cache

    老生常谈的密码管理问题

    程序员 - @googlehub - 如题,请问下大家日常密码管理这一块,是如何规避忘记密码,或者密码记错,记不住等问题。

  • 38
    • 微信 mp.weixin.qq.com 3 years ago
    • Cache

    推荐一款密码管理神器

    之前我在公众号分享了1Password这个密码管理神器, 这儿我说下我重申下他的优点: 电脑手机都支持,通过WIFI本地同步十分安全,第三方同...

  • 21
    • zhuanlan.zhihu.com 3 years ago
    • Cache

    Tengine 支持 AML、RK NPU 第2篇-A311D

    背景 2020年风云变幻,原本以为嵌入式端侧 AI 芯片“大菊已定”。 但国内最大智能电视芯片厂商——晶晨半导体(Amlogic...

  • 5

    鸠摩3天前本文将详细介绍在Ubuntu16.04 LTS上对OpenJDK8进行编译,为了方便大家快速搭建起OpenJDK8的调试开发环境,我还录制了对应的视频放到了B站上,大家可...

  • 1

    第2篇-Java虚拟机这样来调用Java主类的main()方法 | HeapDump性能社区文章>第2篇-Java虚拟机这样来调用Java主类的main()方法第2篇-Java虚拟机这样来调用Java主类的main()方法

  • 2

    Django开发密码管理表实例【附源码】 文章及代码比较基础,适合初、中级人员,高手略过 阅读此篇文章你可以: 获取一个Django实现增删改查的案例源码 了解数据加密的使用场景和方法...

  • 4

    Go Quiz: 从Go面试题看defer的注意事项第2篇发布于 今天 13:58 这是Go Quiz系列的第5篇,是考察Go语言的defer语义,也是defer语义的第2...

  • 5

    在这篇文章中,我们来重点关注Scratch静态资源相关的API, 了解这些资源是如何被存储以及如何被加载的。 关注的静态资源包括: Scratch project 中的静态资源 项目缩略图 Scratch pr...

  • 2

    Reentrant 2 前两篇写完了后我自己研究了下,还有有很多疑惑和问题,这篇就继续以自问自答的方式写 如果没看过第1篇的可以先看看那个https://www.cnblogs.com/sunankang/p/16458795.html

  • 2

    【原子样式实践】第2篇 原子样式分类和定义 精选 原创 1.1 布局分类页面元素的显示方式主要分为外部显示和内部...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK