技术阅读周刊,每周更新。
历史更新
20231013:第一期
20231022:第二期
20231027:第三期
20231103:第四期
20231107:第五期
20231117:第六期
What is a JWT? Understanding JSON Web Tokens
URL: https://supertokens.com/blog/what-is-jwt
本文主要讲了一些 JWT 的基本原理,以及优缺点
JWT 的生成规则
<header>.<body>.<signature>
使用证书+签名算法创建签名 Key
将 header 和 body 的空格换行都去掉后进行 base64,然后使用
.
拼接起来。将刚才拼接的字符串使用
Base64 + HMACSHA256
生成签名。最终将
<header>.<body>.<signature>
拼接成JWT
。
Base64URLSafe( HMACSHA256("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJhYmNkMTIzIiwiZXhwaXJ5IjoxNjQ2NjM1NjExMzAxfQ", "NTNv7j0TuYARvmNMmWXo6fKvM4o6nv/aUi9ryX38ZH+L1bkrnD1ObOQ8JAUmHCBq7Iy7otZcyAagBLHVKvvYaIpmMuxmARQ97jUVG16Jkpkp1wXOPsrF9zwew6TpczyHkHgX5EuLg2MeBuiT/qJACs1J0apruOOJCg/gOtkjB4c=")
)
Results in:
3Thp81rDFrKXr3WrY1MyMnNK8kKoZBX9lg-JwFznR-M
验证 JWT
先获取 header,校验头里的签名类型和算法
获取 body,然后按照之前的方式
Base64 + HMACSHA256
生成签名判断两者签名是否相同,不同则验证失败
判断过期时间是否过期
JWT 的优点
安全性:使用非对称加密保证数据不被篡改
高效,无状态:不需要单独使用数据库存储数据,只使用算法就能验证
缺点
因为他的独立性和无状态,除非是 token 过期了,不然很难撤销
依赖于第一步里生成的签名 Key,一旦这个 Key 被泄露就会被伪造。
Go 开发中的十大常见陷阱[译]
URL: https://tomotoes.com/blog/the-top-10-most-common-mistakes-ive-seen-in-go-projects/
最近在 Reddit 上看到一个帖子,让推荐一本 Go 相关的书籍,大部分都是推荐的 “100 Go Mistakes and How to Avoid Them”,目前还没有中译版本,不过作者之前写过一个十个错误的博客,也可以预先看看。
未知的枚举值,将枚举的未知值设置为 0
自动优化的基准测试
被转移的指针,日常开发中建议传值,速度会更快。
loop: for { select { case <-ch: // Do something case <-ctx.Done(): break loop } }
出乎意料的 break,在 select 语句中想要退出 for 循环,可以使用标签。
正确传递错误上下文,使用 https://github.com/pkg/errors
扩容切片有性能损耗,如果知道长度可以在初始化时指定长度。
正确使用 context
做好函数抽象,可以参考
io.Reader/io.Writer
在 goroutine 中使用循环调用的时候需要额外赋值,这个在 1.22 已经修复了。
Dapr: A Portable, Event-Driven Runtime for Building Distributed Applications | by Seifeddine Rajhi | Nov, 2023 | Medium
URL: https://medium.com/@seifeddinerajhi/dapr-a-portable-event-driven-runtime-for-building-distributed-applications-c2ea8254406c
本文介绍了 Dapr 是什么,以及给了一个入门示例
Dapr 是 Distributed Application Runtime 的简称,翻译过来就是分布式应用运行时。
你可以使用任何语言,任何框架、运行在任何地方构建你的分布式应用程序
Dapr 抽象了我们应用开发中所需要的大部分 API,所有与这些 API 交互的 SDK 都是由 Dapr 提供,所以我们不需要关系他的底层是什么。
3 years managing Kubernetes clusters, my 10 lessons. | by Herve Khg | Nov, 2023 | Medium
URL: https://hervekhg.medium.com/3-years-managing-kubernetes-clusters-my-10-lessons-b565a5509f0e
作者描述他三年的 kubernetes 集群管理的十条经验
在云环境使用 kubernetes,这会比自己维护要简单很多,即便是自己维护也不会让自己的业务能力得到成长,或者收益性价比不高
使用代码来部署应用,避免直接在控制台用命令操作,这样难以记录操作。
避免过度使用 helm,同时要对充分理解其中的配置项;这个也很重要。
不要直接迁移应用到 kubernetes,往往需要做相关的适配。
非必要不要使用 Mesh
避免过多的使用管理工具,
kubernetes
的管理工具有很多,但大部分操作就靠kubectl
就够用了。一定要记得定义资源的限制(内存和 CPU),避免程序 bug 导致 kubernetes 集群出现问题
尽量不要在 Pod 中存储数据,推荐使用 NAS、云存储
配置 HPA,可以根据负载自动扩容 Pod
不要畏惧改变,每年需要对
kubernetes
进行升级,升级前需要充分阅读ReleaseNote
.
Ten Optimization Tricks to Make Your Java Application Run Faster | by lance | Javarevisited | Medium
URL: https://medium.com/javarevisited/ten-optimization-tricks-to-make-your-java-application-run-faster-9742f568ed6f
十个优化让 Java 应用更快
循环拼接字符串使用 StringBuilder
线程池代替自定义线程
容器类预先分配大小
用枚举代替常量
用 NIO 代替传统 IO
用位移操作
多使用单例模式
减少锁的范围
尽量少使用全局变量
多使用基础数据类型
文章链接:
https://supertokens.com/blog/what-is-jwt
https://tomotoes.com/blog/the-top-10-most-common-mistakes-ive-seen-in-go-projects/
https://medium.com/@seifeddinerajhi/dapr-a-portable-event-driven-runtime-for-building-distributed-applications-c2ea8254406c
https://hervekhg.medium.com/3-years-managing-kubernetes-clusters-my-10-lessons-b565a5509f0e
https://medium.com/javarevisited/ten-optimization-tricks-to-make-your-java-application-run-faster-9742f568ed6f
PS:最近也在更新视频号,也会有一些技术干货,动动小手帮主播点播关注
往期推荐
升级到 Pulsar3.0 后深入了解 JWT 鉴权
五分钟k8s实战-Istio 网关
k8s-服务网格实战-配置 Mesh(灰度发布)
k8s-服务网格实战-入门Istio
如何优雅重启 kubernetes 的 Pod
点分享
点收藏
点点赞
点在看