高性能消息中间件Kafka实战
05-Redis缓存设计与性能优化5.1 多级缓存架构
5.2 缓存设计5.2.1 缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。
缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。
造成缓存穿透的基本原因有两个:
第一, 自身业务代码或者数据出现问题。
第二, 一些恶意攻击、 爬虫等造成大量空命中。
缓存穿透问题解决方案:
1、缓存空对象
123456789101112131415161718String get(String key) { // 从缓存中获取数据 String cacheValue = cache.get(key); // 缓存为空 if (StringUtils.isBlank(cacheValue)) { // 从存储中获取 String storageValue = storage.get(key); cache.set(key, storageVa ...
RDB和AOF的优缺点对比以及如何选择
一、RDB的优缺点1.1、RDB的优点(1)RDB文件是紧凑的二进制文件,比较适合做冷备,全量复制的场景。
RDB做会生成多个文件,每个文件都代表了某一个时刻的Redis完整的数据快照;
RDB这种多个数据文件的方式,非常适合做冷备,因为大量的一个个的文件,可以每隔一定的时间,复制出来;
可以将这种完整的数据文件发送到一些远程的云服务、分布式存储上进行安全的存储,以预定好的备份策略来定期备份Redis中的数据;
AOF也可以做冷备,只有一个文件,但是你可以写个脚本,每隔一定时间,去copy一份这个文件出来,相对比较麻烦,不推荐;
问题:RDB做冷备,优势在哪儿呢?
由Redis去控制固定时长生成快照文件的事情,比较方便;
AOF,还需要自己写一些脚本去做这个事情,各种定时;
RDB数据做冷备,在最坏的情况下,提供数据恢复的时候,速度比AOF快;
(2)相对于AOF持久化机制来说,直接基于RDB数据文件来重启和恢复Redis进程,更加快速;
问题:为什么恢复的时候RDB比AOF快?
AOF,存放的指令日志,做数据恢复的时候,其实是要回放和执行所有的指令日志,来恢复出 ...
Redis分布式锁
1. Redis实现分布式锁分布式锁演进-阶段一
多个客户端同时获取锁(setnx)
获取成功,执行业务逻辑,执行完成释放锁(del)
其他客户端等待重试
代码:
123456789101112131415161718192021222324252627public void testLock() { // 1. 从redis中获取锁,setnx Boolean lock = this.redisTemplate.opsForValue().setIfAbsent("lock", "111"); if (lock) { // 查询redis中的num值 String value = this.redisTemplate.opsForValue().get("num"); // 没有该值return if (StringUtils.isBlank(value)){ return ; ...
高性能消息中间件Kafka实战
Kafka设计原理详解
Kafka核心总控制器Controller在Kafka集群中会有一个或者多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态。
当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。
当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。
当使用kafka-topics.sh脚本为某个topic增加分区数量时,同样还是由控制器负责让新分区被其他节点感知到。
Controller选举机制在kafka集群启动的时候,会自动选举一台broker作为controller来管理整个集群,选举的过程是集群中每个broker都会尝试在zookeeper上创建一个 /controller 临时节点,zookeeper会保证有且仅有一个broker能创建成功,这个broker就会成为集群的总控器controller。
当这个controller角色的broker宕机了,此时zookeeper临时节点会消失,集群里其他 ...
高性能消息中间件Kafka实战
01-高性能消息中间件Kafka实战
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
1. Kafka的使用场景
日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
消息系统:解耦和生产者和消费者、缓存消息等。
用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中 ...
Kafka入门到精通
1. Kafka介绍 Kafka是最初由Linkedin公司开发,是⼀个分布式、⽀持分区的(partition)、多副本的 (replica),基于zookeeper协调的分布式消息系统,它的最⼤的特性就是可以实时的处理 ⼤量数据以满⾜各种需求场景:⽐如基于hadoop的批处理系统、低延迟的实时系统、 Storm/Spark流式处理引擎,web/nginx⽇志、访问⽇志,消息服务等等,⽤scala语⾔编 写,Linkedin于2010年贡献给了Apache基⾦会并成为顶级开源项⽬。
1.1 Kafka的使用场景
⽇志收集:⼀个公司可以⽤Kafka收集各种服务的log,通过kafka以统⼀接⼝服务的⽅式 开放给各种consumer,例如hadoop、Hbase、Solr等。
消息系统:解耦和⽣产者和消费者、缓存消息等。
⽤户活动跟踪:Kafka经常被⽤来记录web⽤户或者app⽤户的各种活动,如浏览⽹⻚、 搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过 订阅这些topic来做实时的监控分析,或者装载到had ...
3_ActiveMQ高级篇-集群与大厂面试题
ActiveMQ高级篇-集群与大厂面试题1. ActiveMQ的多节点集群面试题:引入消息中间件后如何保证其高可用
是什么:基于zookeeper和LevelDB搭建ActiveMQ集群。集群仅提供主备方式的高可用集群功能,避免单点故障。
1.1 zookeeper+replicated-leveldb-store的主从集群三种集群方式对比
基于shareFileSystem共享文件系统(KahaDB)
基于JDBC
基于可复制的LevelDB
12LevelDB,5.6版本之后推出了LecelDB的持久化引擎,它使用了自定义的索引代替常用的BTree索引,其持久化性能高于KahaDB,虽然默认的持久化方式还是KahaDB,但是LevelDB可能会是趋势。在5.9版本还提供了基于LevelDB和Zookeeper的数据复制方式,作为Master-Slave方式的首选数据复制方案。
1.2 本次案例采用ZK+Replicated LevelDB Store1. ShareFileSystem
2. 是什么123456从ActiveMQ5.9开始,ActiveMQ的集群实现方式 ...
2_ActiveMQ中级篇
ActiveMQ中级篇1. JMS规范和落地产品1.1 JavaEE是什么JavaEE是一套使用Java进行企业级应用开发的大家一致遵循的13个核心规范工业标准。JavaEE平台提供了一个基于组件的方法来加快设计,开发。装配及部署企业应用程序。
JDBC(Java Databease)数据库连接
JNDI(Java Naming and Directory Interfaces)Java的命令和目录接口
EJB(Enterprise JavaBean)
RMI(Remote Method Invoke)远程方法调用
Java IDL(Interface Description Language)/CORBA(Common Object Broker Architecture)接口定义语言/共用对象请求代理程序体系结构
JSP(Java Server Page)
Servlet
XML(Extensible Markup Language)可标记白标记语言
JMS(Java Message Service)Java消息服务
JTA(Java Transaction ...
1_ActiveMQ初级入门篇
ActiveMQ中级篇1. JMS规范和落地产品1.1 JavaEE是什么JavaEE是一套使用Java进行企业级应用开发的大家一致遵循的13个核心规范工业标准。JavaEE平台提供了一个基于组件的方法来加快设计,开发。装配及部署企业应用程序。
JDBC(Java Databease)数据库连接
JNDI(Java Naming and Directory Interfaces)Java的命令和目录接口
EJB(Enterprise JavaBean)
RMI(Remote Method Invoke)远程方法调用
Java IDL(Interface Description Language)/CORBA(Common Object Broker Architecture)接口定义语言/共用对象请求代理程序体系结构
JSP(Java Server Page)
Servlet
XML(Extensible Markup Language)可标记白标记语言
JMS(Java Message Service)Java消息服务
JTA(Java Transaction ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
1234567891011title: xxxxx # 标题date: xxxx/x/xx # 时间sticky: 1 # 置顶cover: https://xxxx/xxx # 图片categories: - web前端tags: - jQuery - 表格 - 表单验证
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo gen ...









