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

如何在kafka-streams实现两次group操作

如何通过kafka-streams实现去重后再groupBy统计频率?
使用Kafka-Streams做流计算的大家想必知道,它本身提供了 groupBy 操作可以方便我们做一些聚合计算,比如统计每分钟内每个人发出的消息数量,这个时候就可以 groupBy 用户的uid去,统计用户间互动消息频率就可以使用groupBy 用户uid和他的互动用户uid即可。
但如果现在需求是:如何统计每分钟和任一用户互动消息超过某频率的用户?

Read More