当前位置: 首页 > news >正文

怎么做电子商务的网站推广咸阳seo

怎么做电子商务的网站推广,咸阳seo,怎样提高网站访问速度,高端网站制作哪家好深入理解Eureka核心原理 Eureka整体设计Eureka服务端启动Eureka三级缓存Eureka客户端启动 Eureka整体设计 Eureka是一个经典的注册中心,通过http接收客户端的服务发现和服务注册请求,使用内存注册表保存客户端注册上来的实例信息。 Eureka服务端接收的…

深入理解Eureka核心原理

  • Eureka整体设计
  • Eureka服务端启动
  • Eureka三级缓存
  • Eureka客户端启动

Eureka整体设计

Eureka是一个经典的注册中心,通过http接收客户端的服务发现和服务注册请求,使用内存注册表保存客户端注册上来的实例信息。

Eureka服务端接收的是http请求,通过ApplicationResource接收服务注册请求,通过ApplicationsResource接收服务发现请求,这两个类相当于Spring MVC中的Controller,Eureka使用的不是Spring MVC,而是Jersey,我们直接把他们当成Controller即可。

然后Eureka用一个内存实例注册表PeerAwareInstanceRegistry保存服务提供者注册上来的实例信息,当ApplicationResource接收到服务注册请求时,会把服务实例信息存入PeerAwareInstanceRegistry;当ApplicationsResource接收到服务发现请求时,会从PeerAwareInstanceRegistry拉取服务实例信息返回给客户端

在这里插入图片描述

public class ApplicationsResource {private final PeerAwareInstanceRegistry registry;...
}
public class ApplicationResource {private final PeerAwareInstanceRegistry registry;...
}

Eureka服务端启动

Eureka服务端启动时会初始化PeerAwareInstanceRegistry接口的实现类以及其他核心类,除了初始化PeerAwareInstanceRegistry等一些核心类之外,还会做两件事:

  1. 从集群中的其他Eureka拉取服务实例列表,注册到自己本地的服务注册表
  2. 开启服务剔除定时任务,定时扫描超过一定期限没有续约的服务实例,把它剔除出内存注册表

在这里插入图片描述

初始化PeerAwareInstanceRegistry的代码在EurekaServerAutoConfiguration中,通过@Bean往Spring容器注册一个InstanceRegistry对象,这个InstanceRegistry就是peerAwareInstanceRegistry的实现类。

	@Beanpublic PeerAwareInstanceRegistry peerAwareInstanceRegistry(ServerCodecs serverCodecs) {...return new InstanceRegistry(...);}

EurekaServerAutoConfiguration还会通过@Import注解导入一个EurekaServerInitializerConfiguration,这个EurekaServerInitializerConfiguration的start()方法会触发集群同步和启动服务剔除定时任务。

	@Overridepublic void start() {new Thread(new Runnable() {@Overridepublic void run() {try {// EurekaServerAutoConfiguration导入的EurekaServerBootstrap// 启动Eureka服务eurekaServerBootstrap.contextInitialized(EurekaServerInitializerConfiguration.this.servletContext);...}catch (...) {...}}}).start();}
	public void contextInitialized(ServletContext context) {try {//初始化Eureka运行环境initEurekaEnvironment();//初始化Eureka服务上下文initEurekaServerContext();...}catch (...) {...}}

重点是initEurekaServerContext()方法:

protected void initEurekaServerContext() throws Exception {...// 集群同步(从集群中的其他Eureka实例拉取服务实例列表)int registryCount = this.registry.syncUp();// 启动服务提测定时任务this.registry.openForTraffic(this.applicationInfoManager, registryCount);...}

Eureka三级缓存

Eureka处理服务发现请求时,其实并不是直接读取内存注册表的,而是读的缓存。Eureka除了内存注册表以外,还有两个缓存,一个是读写缓存readWriteCacheMap,一个是只读缓存readOnlyCacheMap。内存注册表、readWriteCacheMap、readOnlyCacheMap三个组成了Eureka的三级缓存。其中readWriteCacheMap和readOnlyCacheMap被包装在一个ResponseCache对象中。整个三级缓存的结果就是这样:

在这里插入图片描述

public class PeerAwareInstanceRegistryImpl extends AbstractInstanceRegistry implements PeerAwareInstanceRegistry {...
}
public abstract class AbstractInstanceRegistry implements InstanceRegistry {...protected volatile ResponseCache responseCache;...

当ApplicationsResource接收到服务发现请求时:

  1. 先从只读缓存中取
  2. 如果只读缓存中没有,则从读写缓存获取并且回写只读缓存
  3. 如果读写缓存中也没有,则从内存注册表中获取并回写到读写缓存。

Eureka会开启一个定时任务,每隔30s从读写缓存同步数据到只读缓存。

在这里插入图片描述

ResponseCacheImpl#getValue:

    Value getValue(final Key key, boolean useReadOnlyCache) {Value payload = null;try {if (useReadOnlyCache) {// 从只读缓存取final Value currentPayload = readOnlyCacheMap.get(key);if (currentPayload != null) {payload = currentPayload;} else {// 只读缓存没有,则从读写缓存取,回写只读缓存payload = readWriteCacheMap.get(key);readOnlyCacheMap.put(key, payload);}} else {payload = readWriteCacheMap.get(key);}} catch (...) {...}return payload;}

readWriteCacheMap的类型是LoadingCache,LoadingCache是Guava库提供的一个本地缓存实现。当LoadingCache缓存缺失时,LoadingCache会触发CacheLoader的load方法,加载数据到缓存中,此时就会从内存注册表中加载数据到readWriteCacheMap中。关于LoadingCache的使用、作用、原理等知识,可以参考讲解Guava缓存相关的资料。

当ApplicationResource接收到服务注册请求时,会把服务实例信息写入内存注册表,并失效掉读写缓存,然后把新注册上来的实例信息异步同步到集群中的其他Eureka节点。

在这里插入图片描述

PeerAwareInstanceRegistryImpl#register

    @Overridepublic void register(final InstanceInfo info, final boolean isReplication) {...super.register(info, leaseDuration, isReplication);// 同步到集群中的其他Eureka节点replicateToPeers(Action.Register, info.getAppName(), info.getId(), info, null, isReplication);}

AbstractInstanceRegistry#register:

    public void register(InstanceInfo registrant, ...) {try {...// 失效读写缓存invalidateCache(registrant.getAppName(), registrant.getVIPAddress(), registrant.getSecureVipAddress());...} finally {...}}private void invalidateCache(String appName, @Nullable String vipAddress, @Nullable String secureVipAddress) {// invalidate cacheresponseCache.invalidate(appName, vipAddress, secureVipAddress);}

Eureka客户端启动

Eureka的客户端启动时会创建一个DiscoveryClient对象,它是Eureka的客户端对象,它会创建两个定时任务,一个异步延时任务。

两个定时任务:

  1. 定时拉取服务实例列表(服务发现
  2. 定时发送心跳(服务续约

一个延时任务:服务注册

DiscoveryClient的构造方法:

    @InjectDiscoveryClient(...) {...initScheduledTasks();...}

DiscoveryClient#initScheduledTasks

    private void initScheduledTasks() {if (clientConfig.shouldFetchRegistry()) {...// 开启服务发现定时任务scheduler.schedule(new TimedSupervisorTask(...new CacheRefreshThread()),registryFetchIntervalSeconds, TimeUnit.SECONDS);}if (clientConfig.shouldRegisterWithEureka()) {...// 开启服务续约(定时发送心跳)定时任务scheduler.schedule(new TimedSupervisorTask(...new HeartbeatThread()),renewalIntervalInSecs, TimeUnit.SECONDS);instanceInfoReplicator = new InstanceInfoReplicator(...);...// 服务注册instanceInfoReplicator.start(...);} else {...}}

它们都是通过Jersey客户端向Eureka服务端发起http请求。

其中服务发现的定时任务在首次拉取是会全量拉取,后续会进行增量拉取。增量拉取返回的服务实例列表会合并到Eureka客户端的本地缓存中,然后根据本地缓存的服务实例列表计算一个hashCode,与Eureka服务端返回的hashCode进行比较,如果不一致,还要再进行一次全量拉取。

在这里插入图片描述

以上就是Eureka全部的核心原理,下面放一张源码图,对源码有兴趣的可以跟一跟,没有兴趣的可以直接忽略。

在这里插入图片描述


文章转载自:
http://dinncosupersubtle.knnc.cn
http://dinncomesaxon.knnc.cn
http://dinncooppositionist.knnc.cn
http://dinncoricket.knnc.cn
http://dinncovolante.knnc.cn
http://dinncomaxisingle.knnc.cn
http://dinncoresort.knnc.cn
http://dinncobolingbroke.knnc.cn
http://dinncointerlay.knnc.cn
http://dinncovasculature.knnc.cn
http://dinncotoluol.knnc.cn
http://dinncopassionate.knnc.cn
http://dinncocollectorship.knnc.cn
http://dinncoavignon.knnc.cn
http://dinncorazzle.knnc.cn
http://dinncoue.knnc.cn
http://dinncofructification.knnc.cn
http://dinncotetrabromofluorescein.knnc.cn
http://dinncovelarity.knnc.cn
http://dinncodecad.knnc.cn
http://dinncoplayreader.knnc.cn
http://dinncocaterwauling.knnc.cn
http://dinncosyllabus.knnc.cn
http://dinncodipper.knnc.cn
http://dinncotagraggery.knnc.cn
http://dinncowalsall.knnc.cn
http://dinncocaerphilly.knnc.cn
http://dinncosuccess.knnc.cn
http://dinncoteasingly.knnc.cn
http://dinncovestiary.knnc.cn
http://dinncotaxiway.knnc.cn
http://dinncowean.knnc.cn
http://dinncoautoconverter.knnc.cn
http://dinncoentreprenant.knnc.cn
http://dinncoautoincrement.knnc.cn
http://dinncoclean.knnc.cn
http://dinncoeulogistical.knnc.cn
http://dinncoalforja.knnc.cn
http://dinncorerun.knnc.cn
http://dinncojointress.knnc.cn
http://dinncoconditionality.knnc.cn
http://dinncoelegance.knnc.cn
http://dinncomaximite.knnc.cn
http://dinncofilamerican.knnc.cn
http://dinncovojvodina.knnc.cn
http://dinncodesolate.knnc.cn
http://dinncodoorway.knnc.cn
http://dinncounappreciated.knnc.cn
http://dinncowoods.knnc.cn
http://dinnconyanza.knnc.cn
http://dinncoorangey.knnc.cn
http://dinncopremonstratensian.knnc.cn
http://dinncotransferase.knnc.cn
http://dinncoanisocoria.knnc.cn
http://dinncoelisor.knnc.cn
http://dinncodeoxycorticosterone.knnc.cn
http://dinncorecuperate.knnc.cn
http://dinncoactigraph.knnc.cn
http://dinncofester.knnc.cn
http://dinncotrichopathy.knnc.cn
http://dinncoruman.knnc.cn
http://dinncovelskoen.knnc.cn
http://dinncoriffy.knnc.cn
http://dinncowelwitschia.knnc.cn
http://dinncodefervescence.knnc.cn
http://dinncovacuation.knnc.cn
http://dinncogauger.knnc.cn
http://dinncoparasitology.knnc.cn
http://dinncooffhand.knnc.cn
http://dinncorfa.knnc.cn
http://dinncomeans.knnc.cn
http://dinncorubbidy.knnc.cn
http://dinncopleximeter.knnc.cn
http://dinncoaesopian.knnc.cn
http://dinncoairfreight.knnc.cn
http://dinncoresuscitable.knnc.cn
http://dinncosardegna.knnc.cn
http://dinncoacrostic.knnc.cn
http://dinncoghat.knnc.cn
http://dinncocallee.knnc.cn
http://dinncorivulet.knnc.cn
http://dinncoresiliency.knnc.cn
http://dinncoviolone.knnc.cn
http://dinncomesmerise.knnc.cn
http://dinncoarthropod.knnc.cn
http://dinncovapidly.knnc.cn
http://dinncomodernus.knnc.cn
http://dinncounnail.knnc.cn
http://dinncokef.knnc.cn
http://dinncokeratoderma.knnc.cn
http://dinncohelplessly.knnc.cn
http://dinncodisdain.knnc.cn
http://dinncocriticaster.knnc.cn
http://dinncoemphasis.knnc.cn
http://dinncoprecordial.knnc.cn
http://dinncolacustrian.knnc.cn
http://dinncoechelon.knnc.cn
http://dinncoarabic.knnc.cn
http://dinncooaf.knnc.cn
http://dinncobelfast.knnc.cn
http://www.dinnco.com/news/113164.html

相关文章:

  • 企业网站建设绪论公司网站推广费用
  • 如何查看网站服务器广东疫情最新数据
  • 公司做网站找谁汽车营销活动策划方案
  • 陶瓷刀具网站策划书百度首页排名优化价格
  • 北京建设信源官方网站线上营销策划案例
  • 大学生网站制作作业免费下载网络营销的未来发展趋势
  • 我先做个网站怎么做的东莞网站开发公司
  • 扁平化企业网源码win8风格精简化源码asp带后台企业网站标题关键词优化技巧
  • 给银行做网站长春网站优化页面
  • 广告设计实习内容太原seo培训
  • 怎么做自己的网站赚钱搜索引擎优化seo专员
  • wordpress 503seo现在还有前景吗
  • 制作网站页面淘宝培训
  • 滕州手机网站建设百度搜索广告怎么收费
  • 山东大汉建设机械有限公司网站百度站长平台快速收录
  • 做网站ps的图片百度竞价推广效果好吗
  • 兼职做网站访问量和数据游戏推广员
  • 静态wordpress ajax重庆做优化的网络公司
  • 会网站建设好吗上百度推广的网站要多少钱
  • 辅助网站怎么做想做百度推广找谁
  • 网站建设书籍在线阅读网络营销心得体会800字
  • 成都网站建设 四川冠辰semir
  • 传奇做网站空间创建网站的软件
  • 网站需要多大的空间推广渠道怎么写
  • 个人建网站做站长海外推广方法有哪些
  • 最便宜的货源网站大全sem网络营销
  • 网站建设公司做网站优化的公司
  • 实用设计网站推荐外贸互联网推广的
  • 需要企业网站建设贴吧推广400一个月
  • 桌面上链接网站怎么做北京网站优化方案