2021-05-10

  1. spring cloud eureka 的服务 注册发现原理。
    (1)eureka client 更新注册表原理
    eureka client 第一次启动的时候,会加载全量的注册表。
    之后运行过程中会定时 增量取注册表
    eureka.client.registry-fetch-interval-seconds=30

    每次获取增量数据时,也会把全量的注册表的hash值返回过来。
    将取到的增量注册表和本地的注册表合并,之后和eureka server上的注册表进行hashcode比对,如果不一致需要全量更新。

    注册表包含服务的全部信息,例如ip 、端口、服务状态。

    (2) 注册到eureka上的服务,通过发送心跳,进行续约。
    服务端有2级缓存 readWriteCacheMap 、readOnlyCacheMap

    主动刷新 :应用注册、状态更新和删除、下线时都会刷新到readWriteCacheMap
    被动刷新 :默认每隔30s 将readWriteCacheMap 刷新到一级缓存readOnlyCacheMap中。
    定时刷新:默认180s刷新readWriteCacheMap。

(3)eureka的自我保护机制
默认情况下,当收不到客户端的心跳,会自动移除。但是可能服务本身是正常的,至少由于网络通信原因,无法给eureka发送心跳。
自我保护机制下,如果15分钟内超过85%的客户端,就会进入到自我保护机制。
a. 不会移除长时间不发心跳的服务。
b. 仍然接受新的注册信息,但不会同步到其他节点上。
c. 当网络稳定时会将新的注册信息同步到其他节点上。

2 . java IO
包含 字节流和字符流
字节流 :InputStream : FileInputStream 、ObjectInputStream、FilterInputStream(BufferedInputStream/DataInputStream/PushBakInputStream) 、ByteArrayInputStream、StringBufferInputStream、
PipedInputStream、ByteArrayInputStram、SequenceInputStream.
OutputStream:.....(同InputStream)
字符流 : Reader : InputStreamReader(FileReader) 、BufferedReader 、StringReader、ByteArrayReader、PipedReader、FilterReader ......
Writer : ....(同Writer)

字节流和字符流的区别
a. 字符流是字节流的包装。
b. 一个字符是2个字节

  1. bit byte char
    bit 是最小的二进制单位,取值0或1
    byte 是计算机操作数据的最小单位,8为bit ,取值范围-128 ~127
    Char 是用户可读写的最小单位,java里面由16位bit组成

  2. BIO 同步阻塞 jdk 1.4之前,服务器端会针对客户端的一个请求建立一堆线程等待,客户端发送请求时先咨询有没有可用线程,如果没有会一直等待或遭到拒绝,如果有的话会一直等待请求结束后才进行后续操作。

NIO 同步非阻塞,jdk1.4之后 ,引用的多路复用器,当连接创建后会注册到多路复用器上,所有的连接只需要一个线程就可以,当多路复用器进行轮询时发现连接上有请求时,就开启一个新的线程去执行,

AIO 异步非阻塞, jdk1.7之后 ,采用了事件的回调机制,操作系统内核线程处理完后通知进程线程拿结果,期间进程线程可以操作其他事情。

IO面向流,NIO面向缓冲区,IO流是阻塞的,NIO是非阻塞

你可能感兴趣的:(2021-05-10)