中间件
文章平均质量分 93
GaleZhang
这个作者很懒,什么都没留下…
展开
-
zookeeper知识点扫盲
最近在看ClickHouse的相关内容,发现也要用到zookeeper。太多的中间件用到了zk,对zk的了解又太少,有必要好好整理一下=-=原创 2022-09-03 13:23:30 · 865 阅读 · 1 评论 -
基于Redis的分布式限流器Java实现
限流、熔断与降级是系统应对海量并发时进行自我保护的三大“神器”。其中限流作为常见的业务场景,在一些小型系统中也是存在一定的需求。对于Java而言,常见的开源限流组件,如Guava RateLimiter,通过线程同步实现限流,仅适用于单机应用,而像阿里的Sentinel等,对小型应用来说又未免过重。本文通过Redis实现了分布式限流器,支持加载不同的脚本进行简单计数器、滑动窗口以及漏桶限流方案,并通过注解的方式对接口进行限流,既实现了对业务代码的极低侵入,又可以定制化限流逻辑。在这里与各位同学分享,也希望大原创 2022-08-23 21:13:47 · 3223 阅读 · 0 评论 -
实现Kafka的优先级消费
优先级消费是业务中经常碰到的场景。对于同一类消息,消息内容可能由于其业务上的属性不同,而具有不同的“重要程度”,比如在一个消息推送系统中,一条告警消息显然比一条营销消息重要的多,我们希望即使队列中已经有了大量消息的情形下,优先级更高的消息,仍能够实现“插队”的优先消费,以保证更重要的消息不回被低优先级的消息阻塞。原创 2022-08-23 21:09:17 · 4637 阅读 · 0 评论 -
ClickHouse为什么那么快
为啥他能这么快呢?设计如此=-=原创 2022-08-23 21:01:41 · 481 阅读 · 0 评论 -
一个有意思的面试问题:分布式系统下,缓存失效后如何保证所有不同机器只有一个线程去读取DB更新缓存?
先来分析一下这个问题:实际上是缓存击穿问题的拓展版,如果一个很热的key失效了,瞬间又有大量的请求落到这个key上,导致请求击穿到DB,发生事故。对于单机的情况,我们可以加个锁来解决这个事情,并做一个双重校验,来保证只有一个线程去更新这个key,大致逻辑如下:public String get(String key) { if(existInRedis(key)) { return getValueFromRedis(key); // 实际上这里要搞成原子的,存在直接返回 } else {原创 2020-08-31 19:39:14 · 371 阅读 · 0 评论 -
一个可实际用于生产环境的秒杀系统究竟该如何设计?
前言原创 2020-08-31 17:52:22 · 179 阅读 · 0 评论 -
ES多个字段的查询底层是如何实现的,原理是什么?
前言在MySQL中,在where条件中有多个字段,如果多个字段有索引,MySQL会自动选择selective的字段作为索引去查询,如果是联合索引,会去走联合索引。我们知道ES建立的是倒排索引,倒排索引是建立在一个字段上的,当我们以多个字段作为查询条件时,这多个字段的结果如何合并呢?更具体来说,每个字段的查询结果是一个list,记录着相关文档的id及相关性等数据,ES是如何将这多个list进行合并的呢?有两种实现方式。使用 skip list 数据结构前提是ES中文档的list是有序的,多个lis原创 2020-08-29 18:23:29 · 1616 阅读 · 0 评论 -
ES为什么那么快?除了倒排索引还有哪些原因?
前言原创 2020-08-29 18:36:01 · 6207 阅读 · 1 评论 -
面试进阶:如何设计一个MQ
前言如何设计一个XXX?在面试时我们经常遇到这样的问题原创 2020-08-24 18:41:17 · 1120 阅读 · 0 评论 -
kafka基础——架构及两种消息模式
Producer:Producer 即生产者,消息的产生者,是消息的入口。Kafka Cluster: Broker:Broker 是 Kafka 实例,每个服务器上有一个或多个 Kafka 的实例,我们姑且认为每个 Broker 对应一台服务器。 每个 Kafka 集群内的 Broker 都有一个不重复的编号,如图中的 Broker-0、Broker-1 等…… Topic:消息的主题,可以理解为消息的分类,Kafka 的数据就保存在 Topic。在每个 Broker 上都可以创建多个 Topic。..原创 2020-05-26 17:56:06 · 461 阅读 · 0 评论