kafka


KafKa 架构和实战

KafKa 介绍

Kafka 是一个分布式,分区的,多副本,多生产者,多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志,访问日志, 消息服务等等,主要应用场景是:日志收集系统和消息系统。

kafka 主要设计目标:

  1. 以时间复杂度o(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证正常时间的访问性能。
  2. 高吞吐率,最低一般也是每秒100k条消息的传递
  3. 支持kafka server键的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输
  4. 同时支持离线数据处理和实施数据处理
  5. 支持在线水

Read more

redis 一些常见问题


缓存问题

缓存穿透

查询不存在的key,会穿透缓存查询数据库,高并发的情况下,给数据库带来压力而宕机

解决方案

  1. 对查询结果为空的情况也进行缓存,混存ttl设置短一点,或者key 对应的数据insert 之后清理缓存,问题是:缓存太多空值占用了更多的空间
  2. 使用布隆过滤器,在缓存之前在加一层布隆过滤器,在查询的时候先去布隆过滤器查询key是否存在如果不存在就直接返回,存在再查缓存和DB

缓存雪崩

当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统比如DB 带来很大压力 突然间大量的key失效或者redis 重启,大量访问数据库,数据库崩溃

解决方案

  1. key

Read more

Redis 高可用


高可用方案

主从复制

redis支持主从复制,可以通过执行slaveof(redis5 以后改为replicaof)或者在配置文件中设置slaveof(replicaof)来开启复制功能。 住对外从对内,主可写从不可写,主挂了,从不可以为主

主从配置

主redis 配置

无需特殊配置

从Redis 配置

修改从服务器上的redis.conf 文件: # slaveof replicaof 127.0.0.1 6379

作用

读写分离

  1. 一主多从,主从同步
  2. 主负责写,从负责读
  3. 提升redis的性能和吞吐量
  4. 主从的数据一致性问题

数据容灾

  1. 从机是主机的备份
  2. 主机宕

Read more

redis 拓展


事务

redis 事务

  1. redis的事务是通过multi,exec,discard 和watch这四个命令来完成的
  2. redis的单个命令都是原子性的,所以这里需要确保事务性的对象是命令集合,不能保证时时一致性,只能是最终一致性
  3. redis将命令集合序列化并确保处于同一事务的命令集合连续且不被打断的执行
  4. redis 不支持回滚操作, redis持久化但不保证数据的完整性

事务命令

multi: 用于标记事务块的开始,redis 会讲后续的命令逐个放入队列中,然后使用exec原子化地执行这个命令队列
exec:执行命令队列
discard:清除命令队列
watch:监视key
unwatch:

Read more

redis RDB 和AOF


redis 持久化

Redis 是内存数据库,关机后数据会消失,重启后如果需要快速恢复数据,需要提供持久化机制 当然,redis 持久化是为了快速恢复数据不是为了存储数据,redis有两种持久化方式RDB 和 AOF

当然 Redis持久化不保证数据的完整性,当redis 用作DB,DB数据要完整,所以一定要有一个完整的数据源(文件,mysql)
在系统启动时,从这个完整的数据源中将数据load到redis中
数据量较小,不易该表,比如:字典库,可以通过info 命令可以查看关于持久化的信息

RDB

rdb(redis database) 是redis默认的存储方式,RDB方式是通过快

Read more