技术阅读周刊,每周更新。
历史更新
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
。1 2 3 4
| 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
- 自动优化的基准测试
- 被转移的指针,日常开发中建议传值,速度会更快。
1 2 3 4 5 6 7 8 9
| loop: for { select { case <-ch: 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
- 用位移操作
- 多使用单例模式
- 减少锁的范围
- 尽量少使用全局变量
- 多使用基础数据类型
文章链接:
#Newletters