Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
fun binary
note
提交
f567e6bc
N
note
项目概览
fun binary
/
note
通知
1
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
note
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
f567e6bc
编写于
5月 30, 2021
作者:
fun binary
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
111
上级
4d0400cb
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
55 addition
and
0 deletion
+55
-0
读书笔记/Go语言项目实战IAM系统/概述.md
读书笔记/Go语言项目实战IAM系统/概述.md
+55
-0
读书笔记/Go语言项目实战IAM系统/环境搭建.md
读书笔记/Go语言项目实战IAM系统/环境搭建.md
+0
-0
未找到文件。
读书笔记/Go语言项目实战IAM系统/概述.md
0 → 100644
浏览文件 @
f567e6bc
Github:https://github.com/marmotedu/iam
# 一、GO 项目实战技能点
![
img
](
https://develop-1301758814.cos.ap-nanjing.myqcloud.com/c4a4bdfc103f193d292b54e44510f28c.jpg
)
# 二、IAM系统架构
1.
IAM(Identity and Access Management,身份识别与访问管理)系统是用 Go 语言编写的一个 Web 服务,用于给第三方用户提供访问控制服务。
2.
IAM 系统可以帮用户解决的问题是:在特定的条件下,谁能够 / 不能够对哪些资源做哪些操作(Who is able to do what on something given some context),也即完成资源授权功能。
3.
IAM资源授权流程
![
img
](
https://develop-1301758814.cos.ap-nanjing.myqcloud.com/eed75fcd91d6e726ca74315d65193150.jpg
)
4.
IAM架构
!
[
img
](
https://develop-1301758814.cos.ap-nanjing.myqcloud.com/0a5f6fd67af1eda1c690c8216dc5e042.jpg
)
5.
IAM系统包括9大组件和3大数据库,核心组件:iam-apiserver、iam-authz-server、iam-pump、marmotedu-sdk-go和iamctl。
!
[
img
](
https://develop-1301758814.cos.ap-nanjing.myqcloud.com/6cdbde36255c7fb2d4f2e718c9077a71.jpeg
)![
img
](
https://develop-1301758814.cos.ap-nanjing.myqcloud.com/e68c21e1991c74becc4b8a6a8bf5a8f2.jpeg
)
# 三、IAM流程
1.
创建平台资源:用户通过 iam-webconsole(RESTful API)或 iamctl(sdk marmotedu-sdk-go)客户端请求 iam-apiserver 提供的 RESTful API 接口完成用户、密钥、授权策略的增删改查,iam-apiserver 会将这些资源数据持久化存储在 MySQL 数据库中。而且,为了确保通信安全,客服端访问服务端都是通过 HTTPS 协议来访问的。
2.
请求API完成资源授权:用户可以通过请求 iam-authz-server 提供的 /v1/authz 接口进行资源授权,请求 /v1/authz 接口需要通过密钥认证,认证通过后 /v1/authz 接口会查询授权策略,从而决定资源请求是否被允许。为了提高 /v1/authz 接口的性能,iam-authz-server 将密钥和策略信息缓存在内存中,以便实现快速查询。那密钥和策略信息是如何实现缓存的呢?首先,iam-authz-server 通过调用 iam-apiserver 提供的 gRPC 接口,将密钥和授权策略信息缓存到内存中。同时,为了使内存中的缓存信息和 iam-apiserver 中的信息保持一致,当 iam-apiserver 中有密钥或策略被更新时,iam-apiserver 会往特定的 Redis Channel(iam-authz-server 也会订阅该 Channel)中发送 PolicyChanged 和 SecretChanged 消息。这样一来,当 iam-authz-server 监听到有新消息时就会获取并解析消息,根据消息内容判断是否需要重新调用 gRPC 接来获取密钥和授权策略信息,再更新到内存中。
3.
授权日志分析:iam-authz-server 会将授权日志上报到 Redis 高速缓存中,然后 iam-pump 组件会异步消费这些授权日志,再把清理后的数据保存在 MongoDB 中,供运营系统 iam-operating-system 查询。这里还有一点你要注意:iam-authz-server 将授权日志保存在 Redis 高性能 key-value 数据库中,可以最大化减少写入延时。不保存在内存中是因为授权日志量我们没法预测,当授权日志量很大时,很可能会将内存耗尽,造成服务中断。
4.
运营平台授权数据展示: iam-operating-system 是 IAM 的运营系统,它可以通过查询 MongoDB 获取并展示运营数据,比如某个用户的授权 / 失败次数、授权失败时的授权信息等。此外,我们也可以通过 iam-operating-system 调用 iam-apiserver 服务来做些运营管理工作。比如,以上帝视角查看某个用户的授权策略供排障使用,或者调整用户可创建密钥的最大个数,再或者通过白名单的方式,让某个用户不受密钥个数限制的影响等等。
# 四、前后端分离架构
![
img
](
https://develop-1301758814.cos.ap-nanjing.myqcloud.com/a2e1f1cc135debd86611yya1f221c476.jpg
)
采用了前后端分离架构之后,当你通过浏览器请求前端 ops-webconsole 时,ops-webconsole 会先请求静态文件服务器加载静态文件,比如 HTML、CSS 和 JavaScript,然后它会执行 JavaScript,通过负载均衡请求后端数据,最后把后端返回的数据渲染到前端页面中。
## 4.1 前后端分离优势
1.
可以让前、后端人员各自专注在自己业务的功能开发上,让专业的人做专业的事,来提高代码质量和开发效率
2.
前后端可并行开发和发布,这也能提高开发和发布效率,加快产品迭代速度
3.
前后端组件、代码分开,职责分明,可以增加代码的维护性和可读性,减少代码改动引起的 Bug 概率,同时也能快速定位 Bug
4.
前端 JavaScript 可以处理后台的数据,减少对后台服务器的压力
5.
可根据需要选择性水平扩容前端或者后端来节约成本
# 五、MVC架构
如果运营系统功能比较少,采用前后端分离框架的弊反而大于利,比如前后端分离要同时维护 2 个组件会导致部署更复杂,并且前后端分离将人员也分开了,这会增加一定程度的沟通成本。同时,因为代码中也需要实现前后端交互的逻辑,所以会引入一定的开发量。这时候可以采用MVC架构。
![
img
](
https://develop-1301758814.cos.ap-nanjing.myqcloud.com/a23b8ba92705710c694fd7cb99812feb.jpg
)
-
View(视图):提供给用户的操作界面,用来处理数据的显示。
-
Controller(控制器):根据用户从 View 层输入的指令,选取 Model 层中的数据,然后对其进行相应的操作,产生最终结果。
-
Model(模型):应用程序中用于处理数据逻辑的部分。
MVC 架构的好处是通过控制器层将视图层和模型层分离之后,当更改视图层代码后时,我们就不需要重新编译控制器层和模型层的代码了。同样,如果业务流程发生改变也只需要变更模型层的代码就可以。在实际开发中为了更好的 UI 效果,视图层需要经常变更,但是通过 MVC 架构,在变更视图层时,我们根本不需要对业务逻辑层的代码做任何变化,这不仅减少了风险还能提高代码变更和发布的效率。
除此之外,还有一种跟 MVC 比较相似的软件开发架构叫三层架构,它包括 UI 层、BLL 层和 DAL 层。其中,UI 层表示用户界面,BLL 层表示业务逻辑,DAL 层表示数据访问。在实际开发中很多人将 MVC 当成三层架构在用,比如说,很多人喜欢把软件的业务逻辑放在 Controller 层里,将数据库访问操作的代码放在 Model 层里,软件最终的代码放在 View 层里,就这样硬生生将 MVC 架构变成了伪三层架构。
\ No newline at end of file
读书笔记/Go语言项目实战IAM系统/环境搭建.md
0 → 100644
浏览文件 @
f567e6bc
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录