知识整理

  1. Eureka服务注册和发现原理
  2. Hystrix怎么实现熔断机制

    Hystrix包括服务降级服务熔断, 线程合信号隔离请求缓存, 请求合并服务监控

  • hystrix对于依赖服务采用依赖隔离的方式主要有线程隔离合信号量隔离
    • 线程隔离:卫每个依赖服务创建一个独立的线程,性能上低于信号量隔离
    • 信号量隔离:用信号量控制单个依赖服务,开销小于线程隔离,但无法异步和设置超时。
  • 定义服务降级
    • fallback是实现服务降级的后备方法。只要在fallbackmethod属性指定的对应的方法就可。
  • 异常处理
    • 忽略异常:对某个异常,不调用fallback操作,而是抛出
    @HystrixCommand(ignoreExceptions = {需要忽略的异常类.class})
    • 异常分类降级:根据不同的异常,采用不同的降级处理
  • 请求缓存
    • @CacheResult:标记请求命令的结果应该被缓存,必须和@HystrixCommand注解结合使用,所用属性有:cacheKeyMethod
    /*
    代码中CacheResult代表开启缓存功能,当调用结果返回后Hystrix缓存,缓存的key值不指定就使用该方法中的所有参数,
    */
    @CacheResult(cacheKeyMethod = "getNameByidCacheKey")
    @HystrixCommand(fallbackMethod = "hiFallback")
    public String hiService(String name) {
        return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);
    }
    
    private Long getNameByidCacheKey(Long id) {
        return id;
    }
    • 删除缓存:标记请求命令的缓存失效,失效的缓存根据定义的Key决定,常用属性 :command、cacheKeyMethod
    @CacheResult
    @HystrixCommand(fallbackMethod = "hiFallback")
    public String hiService(@CacheKey("name") String name) {
        return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);
    }
    
    @CacheRemove(commandKey = "hiService")
    public void update(@CacheKey("name")User user){
    
        restTemplate.getForObject("http://USER-SERVICE/users",user,User.class);
    
    }
  1. redis数据类型,底层是什么。

    String

  2. redis集群原理,怎么实现高可用,一致性hash算法。
  3. redis怎么实现主从同步的。

  4. dubbo工作原理,生产者、服务者之间是怎么通信的。
  5. dubbo容错,服务治理
  6. hashmap为什么线程不安全
  7. 服务隔离
  8. 垃圾回收算法有哪些,优点和不足

  • 标记-清除(mark swap)
    • 将标记成垃圾的对象清除出内存,容易造成内存空间的不连续性,在分配打对象的时候,由于连续空间的不足而频繁触发内存回收;
    • 适用于老年代,对象存活时间长的内存区域
  • 复制
    • 将内存块等分成相同大小的内存块。一块用于对象存储。当垃圾回收的时候,将未被标记回收的内存复制到另一块 内存块,然后剩下的就全部是要回收的内存
    • 缺点:只有一半的内存被使用
    • 优点:未回收的内存块还是连续的
    • 适用于新生代:朝生暮死的区域。在新生代中,又被分为Eden,survivor区,Eden区分配的对象都是朝生暮死;eden与survivor的比例时8:1;在Eden区,使用的回收算法是复制算法
  • 标记-整理
    • 标记-清除的升级版本。将不用回收的内存区域移到一起,然后再集中处理需要回收的区域
  1. 在dubbo中,如果zookeeper不工作的话,消费者能否调用到服务者 a. 能调用到,zookeeper不工作的时候,消费者能取得本地缓存的地址列表直接调用服务者 b. 消费者能绕过zk来直接发起调用,在使用url标签,直接指定哪个提供者
  2. 为什么要用分布式锁分布式锁有哪些,怎么实现
  3. jvm内存模型,各个模型存储的是什么。
  4. redis与memcache的相互比较
    • redis和memcache都是将数据放置到内存中,memcache还能存放图片、视频等数据;
    • redis除了K/V类型数据,还支持List,Set,Zset,List,Hash这些数据类型
    • 在redis中,当内存存满数据后,它会将不常用的value写到磁盘中;
    • 过期策略-memcache在set时就指定。redis可以只用expire来设定
    • 集群-memcache利用magent做一主多从;redis可以做医助多从,一可以做一主多从;
    • 安全性-memcache挂掉后,所有的数据就没了;redis可以定期持久化到磁盘中
    • 容灾恢复-memcache挂掉后,数据不可恢复,redis可以通过aof恢复
    • redis支持数据的备份,即master-slave模式数据备份
    • redis与memcache的异同点
      • 存储方式
      • 数据类型
      • 底层模型
      • 运行环境
  5. redis主从备份
    主从同步流程图

    slave发送sync指定,此时master执行bgsave命令进行全量备份,并缓存所有的写命令;等bgsave执行完后,将rbd发送给slave,然后slave将数据写入;写入完所有快照后,master再发送缓存的写指定到slave,slave就写相应的数据,之后的增量的同步的方式同步master数据

猜你喜欢

转载自www.cnblogs.com/KevinStark/p/10469305.html