共 179 篇文章
gRPC HTTP Transcoding 注解详解
背景问题
gRPC 以其高效的二进制序列化(Protocol Buffers)和强大的流式通信能力,已成为微服务间通信的主流选择。但在实际项目中,我们常常面临一个尴尬的局面:
- 内部服务用 gRPC 通信,高性能
- 对外开放 API 需要提供 HTTP/RESTful 接口,方便前端和其他语言调用
- 维护两套服务成本太高
有没有一种方式,可以让 同一个 gRPC 服务同时支持 gRPC 协议和 HTTP/RESTful 调用?
这就是 gRPC HTTP Transcoding 要解决的问题。
英语里那些"哑巴"字母
学英语时,你可能发现过一件奇怪的事:knife 里的 k 不发音,lamb 里的 b 不发音,write 里的 w 不发音……拼写与发音之间存在一条奇怪的鸿沟。英语里大约 60% 的单词都有不发音的字母,这在主要语言里算是相当高的比例了。这是为什么?
MacBook Pro 自行更换电池记录
给两台 MacBook Pro 更换电池,折腾了一番,终于成功换好了。😄
一台是公司的 MacBook Pro 归个人,电池废了,续航只有半个小时;一台是自用好多年的 MacBook Pro,突然发现底部怎么放不平了,原来是电池老化鼓包了。
DDD 分层架构的依赖关系
DDD(领域驱动设计)架构中,Infrastructure 层可以依赖 Domain 层吗?
答案是:可以,而且在现代 DDD 架构实践中,Infrastructure 依赖 Domain 是推荐的做法。
但这需要区分两种不同的分层架构模型来理解。
深入理解 Redis 事务与原子性
Redis 事务是一组命令的集合,通过 MULTI 和 EXEC 命令来执行。事务中的所有命令都会序列化,按顺序串行执行,不会被其他命令插入。本文深入解析 Redis 事务的特性和原子性问题。
Laravel Redis::throttle 限流组件解析
在调用第三方 API 时,经常会遇到 QPS 限制。如果请求频率超过限制,API 会返回错误。此时我们需要限流 + 重试机制来保护下游服务。
本文详细介绍 Laravel 中 Redis::throttle 的实现原理。需要注意的是:Laravel 的实现实际上是固定窗口计数器,而非标准的令牌桶算法。
本周阅读清单 20191130
Uber 的 Go 指导规范
https://github.com/uber-go/guide/blob/master/style.md使用 JWT 保证服务间通信的安全
https://abekthink.github.io/backend/json-web-token/MySQL 查询对大小写不敏感
https://www.jianshu.com/p/408daf82ac71服务流量限制(漏桶、令牌桶)
https://chai2010.cn/advanced-go-programming-book/ch5-web/ch5-06-ratelimit.html为什么推荐 InnoDB 引擎使用自增主键?
https://blog.csdn.net/zheng0518/article/details/76302167MySQL 唯一性索引与 NULL 字段
https://yemengying.com/2017/05/18/mysql-unique-key-null/
本周阅读清单 20190808
PHP 正则 preg_match 匹配长度限制
https://learnku.com/articles/7193/php-regular-preg-match-matching-length-limit深悉正则(pcre)最大回溯/递归限制
http://www.laruence.com/2010/06/08/1579.htmlRedis 的内存优化
https://cachecloud.github.io/2017/02/16/Redis内存优化Content-Disposition 的 filename 与 filename 区别*
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-DispositionRedis Scan 命令原理
https://segmentfault.com/a/1190000018218584Redis 字典的遍历 dictScan 算法
http://www.langdebuqing.com/redis%20notebook/redis源码解读:字典的遍历dictScan.html