整理之前的笔记,发现有一些内容没有发出来,陆续发出来。。。
Eureka的配置包括三个部分,eureka.instance、eureka.server和eureka.client。eureka.instance是公共配置,eureka.server配置server的行为,eureka.client配置client的行为。
Eureka Server集群,Eureka Client集群
运行时
Eureka Server集群可能添加或者移除实例
Eureka Client集群可能添加或者移除实例
在所有场景的下,Eureka都有相关的配置
Eureka Server是分zone的,默认是defaultZone,默认的EurekaServer service-url是localhost:8761/eureka/;
Eureka里面的概念:
一个Eureka Server是一个Peer,一个Eureka Server或者一个Eureka Client叫一个Instance,一个Eureka Client就是一个Eureka Client。
EIP = Elastic IP 弹性公网IP
Application的概念:一个Application包含多个InstanceInfo
AppGroup的概念
peer-aware模式,就是指的高可用模式,可以和其他的Eureka server相互复制注册信息,从而对外提供负载均衡和弹性(即服务的持续可用性)
Eureka提供了三种可选选择,Netflix, Amazon, MyOwn,默认是MyOwn,使用MyDataCenterInfo类的对象,对自家的Amazon做了特殊的支持AmazonInfo,没有对Netflix做单独的支持,估计是netflix公司自己用的,这部分没开源。
delta change代表了一时间窗口内注册信息的变化,这个时间窗口的大小可以通过eureka.server.RetentionTimeInMSInDeltaQueue来设置。注册信息可能发生的变化包括,注册、取消注册、状态变化、实例过期;通常,对于生产环境,这些变化比较少,所以配置Eureka Client只获取delta change会比获取全部的注册信息高效的多。
Eureka Zone、Eureka region:一个region有多个zone;
地域(Region)和可用区(AZ:Available Zone)
Available Zone阿里云翻译成可用区
region阿里云翻译成地域
不同region:不同城,不同region的内网是不通的
不同zone,同城不同机房,同一个地域内的不同可用区之间,内网是连通的,但是网络的响应时间会有差异。
参考:
Spring Cloud源码分析(一)Eureka
云端中间层负载均衡工具 Eureka
微服务基础设施之服务注册中心: Spring Cloud Eureka(好)
Region和Available Zone的区别
注意:
region 和 Available Zone在阿里云上都有对应的概念,后面可以根据Eureka的相关配置,配置一个多zone的版本,测试一下。
AbstractInstanceRegistry
private final ConcurrentHashMap>> registry
= new ConcurrentHashMap>>();
这就是Eureka 的文档里到处说的registry。
Eureka server和client之间每隔30秒会进行一次心跳通信,告诉server,client还活着。由此引出两个名词:
Renews threshold:server期望在每分钟中收到的心跳次数
Renews (last min):上一分钟内收到的心跳次数。
Renews threshold的计算方法:
阈值(threshold)是1,client个数为n,阈值为1+2n,自注册的话,是2+2n
Renews (last min):2*n(n是所有application的实例个数,有的application有多个实例,都要算在里面)
参考:spring cloud 学习笔记-Eureka
spring cloud eureka:架构讲解,值得读。
DiscoveryClient包含了所有client和Instance的相关属性的应用;
一共34个配置。包括了
几个控制全局的信息。
enabled:true
fetchRegistry:true=首先配置client是否从Eureka Server上拉取注册信息
registerWithEureka:true=自己是否注册到Eureka Server
eurekaServerURLContext
eurekaServerPort
eurekaServerDNSName
registryRefreshSingleVipAddress:这个再看!
serviceUrl:eureka server的地址列表
registryFetchIntervalSeconds:30
instanceInfoReplicationIntervalSeconds:30=Eureka实例的变更多久可以复制到Eureka Server
initialInstanceInfoReplicationIntervalSeconds:40=Eureka实例启动之后多久复制信息到Eureka Server
eurekaServiceUrlPollIntervalSeconds:5x60=Eureka Client多久主动心跳一次Eureka Server,如果有Eureka Server 实例添加或者移除,Eureka Client将在下一次心跳Eureka Server的时候感知到。
eurekaServerReadTimeoutSeconds:主动请求Eureka Server时,多久算超时
eurekaServerConnectTimeoutSeconds:建立链接时的超时时间,跟上一个区别在于使用地方不同?
backupRegistryImpl:这个再看!
filterOnlyUpInstances:true=只拉取状态为UP的instance
eurekaServerTotalConnections:200
eurekaServerTotalConnectionsPerHost:50
eurekaConnectionIdleTimeoutSeconds:30
gZipContent:true=从eureka server返回的信息是否必须被压缩
useDnsForFetchingServiceUrls:false=是否使用DNS,service-url
dollarReplacement
escapeCharReplacement
allowRedirects:false
onDemandUpdateStatusChange
heartbeatExecutorThreadPoolSize:2=心跳执行器线程池大小
heartbeatExecutorExponentialBackOffBound:10=心跳间隔算法,指数退避算法的递增倍数
cacheRefreshExecutorThreadPoolSize:2=刷新本地缓存的线程池的大小
cacheRefreshExecutorExponentialBackOffBound:10=
proxyPort
proxyHost
proxyUserName
proxyPassword
availabilityZones:
preferSameZoneEureka:true=是否首先尝试同一个zone内的Eureka Server集群上拉取服务注册信息
logDeltaDiff:
fetchRemoteRegionsRegistry:
Renew:服务续约
aWSAccessId
aWSSecretKey
eIPBindRebindRetries
eIPBindingRetryIntervalMs
eIPBindingRetryIntervalMsWhenUnbound
aSGQueryTimeoutMs
aSGUpdateIntervalMs
aSGCacheExpiryTimeoutMs
primeAwsReplicaConnections
Renewal:服务续约具体的操作就是服务心跳
enableSelfPreservation:eureka server是否开启自我保护
RenewalPercentThreshold:进入自我保护的最小阀值,实际收到的心跳/期望收到的心跳比值大于这个值,就不会进入自我保护状态
RenewalThresholdUpdateIntervalMs: 阈值更新的时间间隔。所以一个Eureka Server的新注册和移除的Eureka Client,15内才会被感知到。
PeerEurekaNodesUpdateIntervalMs:Eureka Server定时更新自己的配置,利用DNS机制或者Archaius提供的动态配置的能力动态更新自己的配置
numberOfReplicationRetries:peer之前复制信息尝试的次数,这个信息可以在运行时被更新
peerEurekaStatusRefreshTimeIntervalMs:一个peer(Eureka Server)的状态信息的刷新间隔
waitTimeInMsWhenSyncEmpty:Eureka Server刚启动的时候,互相之间没必要同步信息,因为都是空的,都没有接收Eurekaclient的注册,这个时间就是设置这个等待时间的。过了这段时间之后,各个Eureka Server之间才开始同步注册信息
peerNodeConnectTimeoutMs:
peerNodeReadTimeoutMs
peerNodeTotalConnections
peerNodeTotalConnectionsPerHost
peerNodeConnectionIdleTimeoutSeconds
retentionTimeInMSInDeltaQueue:delta information保存的时间,默认3分钟
evictionIntervalTimerInMs:清理注册的客户端的时间间隔
disableDelta
responseCacheAutoExpirationInSeconds:当注册表信息被改变时,则其被保存在缓存中不失效的时间,默认为180秒
responseCacheUpdateIntervalMs:缓存的过期时间,客户端的有效负载缓存应该更新的时间间隔,默认为30 * 1000毫秒
useReadOnlyResponseCache
syncWhenTimestampDiffers:是否与Eureka client 同步时间戳
rateLimiterEnabled
rateLimiterThrottleStandardClients
rateLimiterPrivilegedClients
rateLimiterBurstSize
rateLimiterRegistryFetchAverageRate
rateLimiterFullFetchAverageRate
maxIdleThreadInMinutesAgeForStatusReplication
minThreadsForStatusReplication
maxThreadsForStatusReplication
maxElementsInStatusReplicationPool
registrySyncRetries:Eureka Server启动阶段尝试从其他的Eureka Server获取注册信息的次数
registrySyncRetryWaitMs
maxIdleThreadAgeInMinutesForPeerReplication
minThreadsForPeerReplication
maxThreadsForPeerReplication
maxTimeForReplication
batchReplication:
disableDeltaForRemoteRegions
remoteRegionConnectTimeoutMs
remoteRegionReadTimeoutMs
remoteRegionTotalConnections
remoteRegionTotalConnectionsPerHost
remoteRegionConnectionIdleTimeoutSeconds
gZipContentFromRemoteRegion
remoteRegionUrlsWithName
remoteRegionUrls
remoteRegionAppWhitelist
remoteRegionRegistryFetchInterval
remoteRegionFetchThreadPoolSize
remoteRegionTrustStore
remoteRegionTrustStorePassword
disableTransparentFallbackToOtherRegion
LeaseRenewalIntervalInSeconds:eureka客户需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认为30 秒。租约续约间隔。(完美)
VirtualHostName
SecureVirtualHostName
HostName
MetadataMap:这个map里的信息,会被发送给Eureka Server,并且可以被其他的Instance使用
IpAddress
DefaultAddressResolutionOrder:获取实例的网络地址,默认为[]
StatusPageUrlPath
StatusPageUrl
HomePageUrlPath
HomePageUrl
HealthCheckUrlPath
HealthCheckUrl
SecureHealthCheckUrl