分布式记录

本文深入探讨分布式系统核心组件,如Zookeeper、Redis、Hadoop的原理与应用,涵盖选举算法、集群通讯、缓存策略、数据同步等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 分布式

    七.zookeeper:

    1)zookeeper是什么;分布式的、开源的分布式应用程序协调服务,

    2)zookeeper哪里用到;Hadoop、HBase的一个重要组件Dubbo

    3)zookeeper的选主过程;

    Zk的选举算法使用ZAB协议:

    1. 选举线程由当前Server发起选举的线程担任,其主要功能是对投票结果进行统计,并选出推荐的Server;
    2. 选举线程首先向所有Server发起一次询问(包括自己);
    3. 选举线程收到回复后,验证是否是自己发起的询问(验证zxid是否一致),然后获取对方的id(myid),并存储到当前询问对象列表中,最后获取对方提议的leader相关信息(id,zxid),并将这些信息存储到当次选举的投票记录表中;
    4. 收到所有Server回复以后,就计算出zxid最大的那个Server,并将这个Server相关信息设置成下一次要投票的Server;
    5. 线程将当前zxid最大的Server设置为当前Server要推荐的Leader,如果此时获胜的Server获得n/2 + 1的Server票数, 设置当前推荐的leader为获胜的Server,将根据获胜的Server相关信息设置自己的状态,否则,继续这个过程,直到leader被选举出来。

    4)zookeeper集群之间如何通讯;

    Storm:定期扫描

    PtBalancer:节点监听

    5)你们的zookeeper的节点加密是用的什么方式;

    6)分布式锁的实现过程;

    算法思路: 利用名称唯一性,加锁操作时,只需要所有客户端一起创建/test/Lock节点,只有一个创建成功,成功者获得锁。解锁时,只需删除/test/Lock节点,其余客户端再次进入竞争创建节点,直到所有客户端都获得锁。

    zk脑裂

    在slaver切换的时候不在检查到老的master出现问题后马上切换,而是在休眠一段足够的时间,确保老的master已经获知变更并且做了相关的shutdown清理工作了然后再注册成为master就能避免这类问题了,这个休眠时间一般定义为与Zookeeper定义的超时时间就够了,但是这段时间内系统不可用了。

    Redis

    1.Redis与Memorycache的区别?

    1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。

    2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。

    3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘

    4、过期策略–memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10

    5、分布式–设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从

    6、存储数据安全–memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)

    7、灾难恢复–memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复

    8、Redis支持数据的备份,即master-slave模式的数据备份。

    3.渐进式rehash过程?

    • 为 ht[1] 分配空间, 让字典同时持有 ht[0] 和 ht[1] 两个哈希表。
    • 在字典中维持一个索引计数器变量 rehashidx , 并将它的值设置为 0 , 表示 rehash 工作正式开始。
    • 在 rehash 进行期间, 每次对字典执行添加、删除、查找或者更新操作时, 程序除了执行指定的操作以外, 还会顺带将 ht[0] 哈希表在 rehashidx 索引上的所有键值对 rehash 到 ht[1] , 当 rehash 工作完成之后, 程序将 rehashidx 属性的值增一。
    • 随着字典操作的不断执行, 最终在某个时间点上, ht[0] 的所有键值对都会被 rehash 至 ht[1] , 这时程序将 rehashidx 属性的值设为 -1 , 表示 rehash 操作已完成。

    渐进式 rehash 的好处在于它采取分而治之的方式, 将 rehash 键值对所需的计算工作均滩到对字典的每个添加、删除、查找和更新操作上, 从而避免了集中式 rehash 而带来的庞大计算量。

    4.rehash源码?

    5.持久化机制

    6.reaof源码?

    7.事务与事件

    8.主从复制

    9.启动过程

    10.集群

    11.Redis的6种数据淘汰策略

    12.redis的并发竞争问题?

    Hadoop

    1.HDFS的特点?

    2.客户端从HDFS中读写数据过程?

    3.HDFS的文件目录结构?

    4.NameNode的内存结构?

    5.NameNode的重启优化?

    6.Git的使用?

    7.Maven的使用

    如何避免浏览器缓存?

    • HTTP信息头中包含Cache-Control:no-cache,pragma:no-cache,或Cache-Control:max-age=0等设置浏览器不用缓存请求。
    • 需要根据Cookie,认证信息等决定输入内容的动态请求是不能被缓存的。
    • 经过HTTPS安全加密的请求不能被缓存。
    • HTTP响应头中不包含Last-Modified/Etag,也不包含Cache-Control/Expires的请求无法被缓存 。

    如何防止缓存雪崩?

    原因:

    缓存雪崩可能是因为数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。

    对应解决:

    • 采用加锁计数,或者使用合理的队列数量来避免缓存失效时对数据库造成太大的压力。这种办法虽然能缓解数据库的压力,但是同时又降低了系统的吞吐量。
    • 分析用户行为,尽量让失效时间点均匀分布。避免缓存雪崩的出现。
    • 如果是因为某台缓存服务器宕机,可以考虑做主备,比如:redis主备,但是双缓存涉及到更新事务的问题,update可能读到脏数据,需要好好解决。

    cookie和session的区别,分布式环境怎么保存用户状态

    1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

    2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。

    3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。

    4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

    分布式环境下的session(举例两种):

    服务器session复制

    原理:任何一个服务器上的session发生改变(增删改),该节点会把这个 session的所有内容序列化,然后广播给所有其它节点,不管其他服务器需不需要session,以此来保证Session同步。

    优点:可容错,各个服务器间session能够实时响应。

    缺点:会对网络负荷造成一定压力,如果session量大的话可能会造成网络堵塞,拖慢服务器性能。

    session共享机制

    使用分布式缓存方案比如memcached、redis,但是要求Memcached或Redis必须是集群。

    大体回答如上,类似文章请移驾:

    Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    nosql相关(主要是redis):

    1)redis和memcache的区别;

    2)用redis做过什么;

    3)redis是如何持久化的:rdb和aof;

    4)redis集群如何同步;

    5)redis的数据添加过程是怎样的:哈希槽;

    6)redis的淘汰策略有哪些;

    7)redis有哪些数据结构;

    对Redis、MongoDB、Memcached要有一定的使用经验

    6,Redis有哪些数据结构(新版本redis不止五种)?以及每种结构的使用场景,redis分布式锁的实现(setnx、getset…)

    string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

    7,Redis参数配置,哪些可以优化?

    8,Redis主从、哨兵、集群的原理?如何扩容

    9,说一下线上Redis遇到的问题,如何排查的(我说了个主从模式下主宕机后重启遇到的问题以及解决思路)?

    10,Redis如何保证缓存的是热点数据(6种内存淘汰机制)?

    • noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。
    • allkeys-lru:在主键空间中,优先移除最近未使用的key。
    • volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。
    • allkeys-random:在主键空间中,随机移除某个key。
    • volatile-random:置了过期时间的键空间中,随机移除某个key在设。
    • volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。

    分布式缓存

    1、redis和memcheched 什么区别为什么单线程的redis比多线程的memched效率要高啊?

    2、redis有什么数据类型都在哪些场景下使用啊?

    3、reids的主从复制是怎么实现的redis的集群模式是如何实现的呢redis的key是如何寻址的啊?

    4、使用redis如何设计分布式锁?使用zk可以吗?如何实现啊这两种哪个效率更高啊??

    5、知道redis的持久化吗都有什么缺点优点啊? ?具体底层实现呢?

    6、redis过期策略都有哪些LRU 写一下java版本的代码吧??

    分布式服务框架

    1、说一下dubbo的实现过程注册中心挂了可以继续通信吗??

    2、zk原理知道吗zk都可以干什么Paxos算法知道吗?说一下原理和实现??

    3、dubbo支持哪些序列化协议?hessian 说一下hessian的数据结构PB知道吗为啥PB效率是最高的啊??

    4、知道netty吗’netty可以干嘛呀NIO,BIO,AIO 都是什么啊有什么区别啊?

    5、dubbo复制均衡策略和高可用策略都有哪些啊动态代理策略呢?

    6、为什么要进行系统拆分啊拆分不用dubbo可以吗’dubbo和thrift什么区别啊?

    分布式消息队列

    1、为什么使用消息队列啊消息队列有什么优点和缺点啊?

    2、如何保证消息队列的高可用啊如何保证消息不被重复消费啊

    3、kafka ,activemq,rabbitmq ,rocketmq都有什么优点,缺点啊???

    4、如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路

    分布式搜索引擎

    1、es的工作过程实现是如何的?如何实现分布式的啊

    2、es在数据量很大的情况下( 数十亿级别)如何提高查询效率啊?

    3、es的查询是一个怎么的工作过程?底层的lucence介绍一下呗倒排索引知道吗?es和mongdb什么区别啊都在什么场景下使用啊?

    高并发高可用架构设计

    1、如何设计一个高并发高可用系统

    2、如何限流?工程中怎么做的,说一下具体实现

    3、缓存如何使用的缓存使用不当会造成什么后果?

    4、如何熔断啊?熔断框架都有哪些?具体实现原理知道吗?

    5、如何降级如何进行系统拆分,如何数据库拆分???

设计模式
知道常用设计模式的优缺点。
能画出常用设计模式的UML图。
熟悉面向对象编程、常见设计模式、互联网和web应用的相关开发技术,深入理解常用开发框架(Spring等)的原理

设计与思想:
1)重构过代码没有?说说经验;
2)一千万的用户实时排名如何实现;
3)五万人并发抢票怎么实现;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值