对限频限流的思考

intro1:限流的常见实现方式及常见开源限流组件有注意点
intro2: 你真的理解了漏桶和令牌桶限流算法吗,划分/区分二者科学吗
intro2: 你知道限流保障服务可用时也可能导致其他服务不可用吗

早先看到朋友圈分享限频限流的文章,从中有些收获,不过笔者不打算赘述,想进一步探讨下限频限流,以及限频限流使用时可能遇到的问题,同时也是对前一篇博文的回应,或许看完本文你会对Guava令牌桶算法有不一样的理解。

Read More

Spring Cloud RedisRateLimit限频存在的几个问题

本文主要讨论Spring Cloud Gateway的基于Redis分布式限频存在的失效/不准确的可能性及解决方法,同时适用于所有参考request_rate_limiter.lua实现的基于redis限频组件.

阅读本文不需要了解Spring Cloud Gateway(下简称SCG)怎么使用或具体实现,本文只是基于限频角度讨论下常规的组件使用问题。
主要讨论SCG提供的基于Redis分布式限频存在的失效/不准确的可能性及解决方法,同时适用于所有参考request_rate_limiter.lua实现的基于redis限频组件,其次也讨论该方案其他不足。如果你对SCG RedisRateLimit有所了解或已知道其存在的几个问题或觉得TLDR;,可以直接跳到本文最后

Read More

Unix Time 的几个冷门知识点

intro1:一文搞懂unix time、unix epoch、utc时间、gmt时间
intro2: 大部分人对unix time的误解

本计划对上一篇文章做点补充,不过今天来点简单的。

unix time

许多人对 unix time有误解,只知其是相对世界时/格林威治时1970年1月1号0点0分0秒整的时间差,有的人可能还记得是0时区。
但这些认识是不对的。而一些文档如Java API Doc里写的并不全,或没有明确使阅读者明确理解。

Read More

新一年的技术叨叨

intro1:kafk异常io图,kafka rebalance和reassigne区别
intro2: kafka真的只能从leader partition读写吗
intro3: 一个不太正常的elasticsaerch分片分布场景下的扩容

从一些系统监控图能看到些什么

最近在排查线上问题时,留意到几台Kafka机器的基础的zabbix io/cpu监控,图一所示平稳读操作中夹杂一些尖峰,图二是之前放大的图

Read More

海量数据计数的一个方法分析

intro1:如何存储以及计算一份资源的累积UV/PV?
intro2: 使用 hyperloglog 究竟有多节省内存呢?

现象和问题:

接一需求,一顿抽丝剥茧去干扰取核心后才弄清楚原始的需求:即时的计算资源累积UV,即对uid去重后进行计数,超阈值则上报。

方案

自然想到了Redis的 Hyperloglog[以下简称HLL] 数据结构计数。

Redis的HyperLogLog 每Key只需要12kB就可以统计大到 2^64个的用户,而保持0.81%的误差率。

Read More

Maven Profile的两个技巧和一个注意事项

现象和问题:
写了个 xx-service 的基于maven项目,借助spring配置文件可执行,现在有需求是希望将该项目以SDk方式打包到maven仓库以便使用其中某些service类(暂不论合理与否),如何通过maven profile实现在编辑器里不同开发人员默认用不同的 active profile?
实现不同的 active profile是希望双方在开发的时候,一个可以直接package出来 不含配置文件的纯 SDK 包,而我这边使用eclipse时可以默认生成需要的配置文件(local profile)到classpath下,免于命令行切换,提高开发/测试效率。

Read More

Https模式下Nginx+SpringSecurity+SSO的一个交互问题

现象和问题:
有一个基于SpringBoot+Spring Security和CAS SSO的应用A,端口是8080,前端为Nginx,Nginx对外为https,即443端口,nginx内部反向代理到A就是常规的http协议了,应用A配置了正确的SSO login url和service url,历史原因,Nginx混乱的逻辑,没有配置80(http)强转443(https)。
问题来了:服务A本身运行正常,但是开启nginx前端代理时候,发现通过https进入系统A时,第一次(sso登录验证成功)通过url1总是跳转到 80端口(http)的服务,而不是443端口(https)的A应用,但是第二次再通过url1就能正常访问A应用。

Read More