面试问题记录 五/四 - redis 集群
Redis 集群Redis的哨兵模式基本实现了读写分离+高可用。
但是只有1个master的话,存储会有性能的瓶颈。如果要支持更大数据量的缓存,那就横向扩容更多的master节点即可。假如假如1个master节点可以支持存放32GB内存。30台左右差不多就是1个T的内存啦。
Redis Cluster是一种服务器 Sharding 技术,3.0版本开始正式提供。它实现了Redis的分布式存储,也就有说每台Redis节点上存储不同的数据。
集群的数据分片Redis 集群没有使用一致性 hash,而是引入了哈希槽【hash slot】的概念。Hash槽共有16384(2的14次方)个槽,每台服务器分管一部分。假设有三台服务器,第一台服务器负责【0,5460】这个范围,第二台服务器负责【5461,10992】这个范围,第三台服务器负责【10923,16383】这个范围。采用CRC16算法先对key产生一个整数值,再对16384求余数,即CRC16(key)%16384。也就是通过Hash槽分发数据。增加新的服务器需要对key进行迁移,即从一台服务器搬到另一台服务器。
特点
使用Redis c ...
面试问题记录 九 - Kafka
Kafka 是什么Kafka是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由LinkedIn公司开发,使用Scala语言编写,目前是Apache的开源项目。
broker: Kafka服务器,负责消息存储和转发
topic:消息类别,Kafka按照topic来分类消息
partition: topic的分区,一个topic可以包含多个partition, topic 消息保存在各个partition上4. offset:消息在日志中的位置,可以理解是消息在partition上的偏移量,也是代表该消息的唯一序号
Producer:消息生产者
Consumer:消息消费者
Consumer Group:消费者分组,每个Consumer必须属于一个group
Zookeeper:保存着集群 broker、 topic、 partition等meta 数据;另外,还负责broker故障发现, partition leader选举,负载均衡等功能
partition的数据文件partition中的每条Message包含了以下三个属性: offset,MessageSize,data, ...
面试问题记录 八 - ZooKeeper
ZooKeeper 是什么ZooKeeper 是一个开源的分布式协调服务。它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
Zookeeper 保证了如下分布式一致性特性:
顺序一致性
原子性
单一视图
可靠性
实时性(最终一致性)
客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了监听器,这个监听器也是由所连接的 zookeeper 机器来处理。对于写请求,这些请求会同时发给其他 zookeeper 机器并且达成一致后,请求才会返回成功。因此,随着 zookeeper 的集群机器增多,读请求的吞吐会提高但是写请求的吞吐会下降。
有序性是 zookeeper 中非常重要的一个特性,所有的更新都是全局有序的,每个更新都有一个唯一的时间戳,这个时间戳称为 zxid(Zookeeper Tr ...
nginx内置变量表
内置变量存放在 ngx_http_core_module模块中,变量的命名方式和apache服务器变量是一致的。总而言之,这些变量代表着客户端请求头的内容,例如$http_user_agent,$http_cookie,等等。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354$args #请求中的参数值$query_string #同 $args$arg_NAME #GET请求中NAME的值$is_args #如果请求中有参数,值为"?",否则为空字符串$uri #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如" ...
面试问题记录 五 - redis
什么是 Redis?Redis 是一个使用 C 语言写成的,开源的高性能key-value非关系缓存数据库。它支持存储的value 类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和 hash(哈希类型)。Redis的数据都基于缓存的,所以很快,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。Redis也可以实现数据写入磁盘中,保证了数据的安全不丢 失,而且Redis的操作是原子性的。
Redis 的数据类型Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String(字符串)string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型, ...