集群与分布式


1、什么是Zookeeper
    ZoKeperp是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby的一个开源的实现,是Hadoop和Hbase 的重要组件。它是一个为分布式应用提供致一致性服务的软件,提供的功能包括:配置维护、城名服务、分布式同步、组服务等。

    ZoKeeperp的目标就是封装好复杂易出错的关键服务,将简单易用的按口和性能高效、功能稳定的系统提供给用户。
    ZooKeeper包含一个简单的原语集,[1]提供 Java和C的接口。


2、写出你对zookeeper的理解

    随着大数据的快速发展,多机器的协调工作,避免主要机器单点故障的问题,于是就引入管理机器的一个软件,他就是zookeeper来协助机器正常的运行。

    Zookeeper有两个角色分别是leader 与follower,其中leader是主节点,其他的是副节点,在安装配置上-定要注意配置奇数个的机器上,便于zookeeper快速切换选举其他的机器。

    在其他的软件执行任务时在zookeeper注册时会在zookeeper下生成相对应的目录,以便zookeeper去管理机器。


3、zookeeper 的搭建过程

    主要是配置文件zoo.cfg配置dataDir的路径-句dataLogDir 的路径以及myid的配置以及server的配置,心跳端口与选举端口。

4、ThreadLocal内存漏问题,如何防止?

    ThreadLocal的实现是这样的:每个Thread维护一个ThreadLocalMap 映射表,这个映射表的key 是ThreadLocal实例本身,value 是真正需要存储的Object。
    也就是说ThreadLocal 本身并不存储值,它只是作为一个key 来让线程从ThreadLocalMap获取value。 值得注意的是图中的虚线,表示ThreadLocalMap 是使用ThreadLocal的弱引用作为Key的,弱引用的对象在GC时会被回收。
    ThreadLocal内存泄漏的根源是:由于ThreadLocalMap的生命周期跟Thead一样长,如果没有手动删除对应key就会导致内存泄漏,而不是因为弱引用。

    综合上面的分析,我们可以理解ThreadLocal内存泄漏的前因后果,那么怎么避免内在洲漏呢?

    每次使用完ThreaLocal,都调用它的remove(方法,清除数据。

    在使用线程池的情况下,没有及时清理ThreadLocal, 不仅是内存泄漏的问题,更严重的是可能导致业务逻辑出现问题。所以,使用ThreadLocal就跟加锁完要解锁-一样,用完就清理。


5、简述高可用。

    高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响。停止服务的原因可能由于网卡、路由器、机房、CPU 负载过高、内存溢出、自然灾害等不可预期的原因导致,在很多时候也称单点问题。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐