Go 语言项目开发实战
孔令飞
腾讯云专家工程师,前 Red Hat、联想云工程师
41031 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 61 讲
Go 语言项目开发实战
15
15
1.0x
00:00/00:00
登录|注册

31 | 数据流:通过iam-authz-server设计,看数据流服务的设计

课后练习
总结
iam-authz-server关键代码分析
iam-authz-server的代码实现
iam-authz-server使用方法介绍
github.com/ory/ladon包介绍
IAM数据流服务iam-authz-server的功能介绍
IAM数据流服务iam-authz-server的设计和实现

该思维导图由 AI 生成,仅供参考

你好,我是孔令飞。
28 讲29 讲 ,我介绍了 IAM 的控制流服务 iam-apiserver 的设计和实现。这一讲,我们再来看下 IAM 数据流服务 iam-authz-server 的设计和实现。
因为 iam-authz-server 是数据流服务,对性能要求较高,所以采用了一些机制来最大化 API 接口的性能。另外,为了提高开发效率,避免重复造轮子,iam-authz-server 和 iam-apiserver 共享了大部分的功能代码。接下来,我们就来看下,iam-authz-server 是如何跟 iam-apiserver 共享代码的,以及 iam-authz-server 是如何保证 API 接口性能的。

iam-authz-server 的功能介绍

iam-authz-server 目前的唯一功能,是通过提供 /v1/authz RESTful API 接口完成资源授权。 /v1/authz 接口是通过github.com/ory/ladon来完成资源授权的。
因为 iam-authz-server 承载了数据流的请求,需要确保 API 接口具有较高的性能。为了保证 API 接口的性能,iam-authz-server 在设计上使用了大量的缓存技术。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

IAM数据流服务iam-authz-server通过提供`/v1/authz` RESTful API接口完成资源授权,并采用了大量的缓存技术来保证API接口的性能。文章详细介绍了iam-authz-server的启动流程、RESTful API请求处理流程和代码架构,以及密钥和策略的缓存实现。另外,文章还介绍了iam-authz-server的授权日志缓存机制,通过将授权日志写入缓冲channel,再由多个worker进行批量投递,以降低日志转存的时延。整体而言,本文内容详实,涵盖了IAM数据流服务iam-authz-server的设计、实现和关键代码分析,对于想要深入了解该服务的读者来说,是一篇非常有价值的文章。 文章内容涵盖了IAM数据流服务iam-authz-server的设计和实现,包括RESTful API接口、启动流程、请求处理流程、代码架构、密钥和策略的缓存实现以及授权日志缓存机制。通过缓存技术和授权日志缓存机制,iam-authz-server提高了API接口的性能,保证了数据一致性。读者可以从中了解到IAM数据流服务iam-authz-server的核心功能和关键技术特点,对于想要深入了解该服务的读者来说,是一篇非常有价值的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • daz2yy
    老师,请问下,数据流和控制流这个怎么来理解呢,是从什么角度来定义的服务类型的?

    作者回复: 数据流承载核心业务功能。 控制流一般用来创建一些资源,供数据流使用。这些,资源一旦建成,控制流可以一直使用。所以这时候控制流挂了,资源还是存在的,数据流仍然能够正常运转,也就是不影响业务功能。

    2021-08-06
    8
  • hello
    老师,咨询您一个问题,使用GiN做WEB服务,微服务间通过gRPC通讯,如何选择配置注册中心,老师能否推荐几款比较流行开源的配置注册中心。

    作者回复: 网关可以使用,tyk:https://github.com/TykTechnologies/tyk。 tyk后端开源,前端闭源。你可以自己开发一套前端。 配置中心可以试试:https://github.com/apache/servicecomb-service-center servicecomb-service-center是华为开源的注册中心,基于etcd封装。该注册中心可以无缝对接华为开源的微服务框架go-chassis

    2021-08-05
    2
    5
  • Jarvis
    更新缓存时每次都 List 全部密钥/策略,数据量会不会太大了? Pub 时带上变化的策略/密钥 id, 只更新该 id 的内容是不是好一点?

    作者回复: 是的,最好是增量拉取

    2022-06-28归属地:广东
    3
  • 静心
    本地channel缓冲和redis缓存对于性能的提高效果会很明显,设计的比较好。但同时,这样的设计会导致多存储数据同步的问题。比如,如果服务突然宕机,本地缓冲中的数据就可能丢失。不知道老师有没有什么好的办法解决?

    作者回复: 这个地方最好的办法,就是做好优雅关停。 关停时获取终止信号,等待任务完成,并之后后续的清理,最后结束进程。 服务器宕机,任何高可用系统,都会存在多多少少的数据丢失。能做的是设计好时间窗口,确保服务器压力、性能都在可接受范围的情况下,及时提交、保存数据。

    2021-10-29
    3
  • yandongxiao
    总结: iam-authz-server 在数据流上工作,负责授权工作,对性能要求高。 authz也需要对请求进行认证工作,authz 的认证采用 cache 方式实现 jwt token 认证,即密钥已经缓存在内存中,通过同样的加密方案,确认token的合法性。 authz的认证工作主要交给了 landon 来完成。iam-apiserver 存储的授权策略符合landon的语法规范,iam-authz-server 接收的授权请求,也符合landon的语法规范。landon 通过接口的方式,暴露了manager、auditLogger、metric 等相关的接口。比如,我们需要为landon提供用户的 policy 列表,是否允许授权,由 landon 来做决策。 缓存设计

    作者回复: 6666

    2021-12-04
    2
  • dll
    每次从apiserver触发reload() 都是全量的拉去 s.cli.GetPolicies(),这样应该可能会产生性能问题吧 假如当Policies数量特别大的时候

    作者回复: 是的,最好的方式是增量拉取,老哥有兴趣可以实现下,提个PR

    2022-10-17归属地:广东
    1
  • 陈先生
    如果iam-authz-server挂了,是不是有audit log丢失的可能性?

    作者回复: 服务挂了,audit log是有丢失的可能,这个无法避免。只能尽可能规避

    2021-10-07
    1
  • helloworld
    在实际应用中,请求/v1/authz接口的参数体是网关根据用户实际请求的某个具体业务的api的参数、请求方法、path等,并根据提前定制的规则自动构造出来的吧,这样理解对吗

    作者回复: 是请求者自己指定的

    2021-08-16
    1
  • 岑惠韬
    老师请问Load的Start函数第二个协程的作用是什么呢?是主要起解耦作用吗?假如让PubSubLoop直接操作requeue切片,让reloadLoop每秒清空切片,仅考虑当前用法的话是不是也是能跑的?还是会有什么逻辑上的问题?

    作者回复: 1. 从 reloadQueue中读取回调,但是iam-authz-server中,其实没有用到回调功能; 2. 我觉得直接操作requeue没有什么问题

    2022-11-06归属地:广东
  • ꧁子华宝宝萌萌哒꧂
    preparedAuthzServer.Run 为啥需要一个 stopChan 来阻塞不让退出? 按我的理解这个 stopChan 没有写,这个进程永远就退不了, 直接 return s.genericAPIServer.Run() 不可以吗?

    作者回复: preparedAuthzServer.Run 没有stopChan

    2022-06-27归属地:广东
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部