自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 JVM之总结篇

Java发展至今,已经远不是一种语言,而是一个标准。只要能够写出满足JVM规范的class文件,就可以丢到JVM虚拟机执行。通过JVM虚拟机,屏蔽了上层各种开发语言的差距,同时也屏蔽了下层各种操作系统的区别。一次编写,多次执行。JDK体系结构​你有没有试过在一个项目里同时用Java和Scala进行开发?

2024-10-31 19:39:48 905

原创 Mysql之总结篇

数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题这些问题的本质都是数据库的多事务并发问题为了解决多事务并发问题,数据库设计事务隔离机制、锁机制、MVCC多版本并发控制隔离机制,用一整套机制来解决多事务并发问题。

2024-10-31 17:59:06 356

原创 Redis之总结篇

所谓冷数据:我们不常点击,不常使用的数据。例如美团APP,用户个人信息,就是冷数据;所谓热数据:我们常点击,常使用的数据。还是美团APP。首页推广信息肯定是热数据,无论谁点开美团APP首页,显示的数据就是那些。如果这些数据每次都从数据库拿,那得多伤数据库,对于热点数据,每次拿完数据都刷新一下缓存,尽量让他长期留在缓存中。比如服务降级,我们可以针对不同的数据采取不同的处理方式。

2024-10-31 17:53:19 300

原创 RocketMQ之总结篇

在JDK的NIO包中,java.nio.HeapByteBuffer映射的就是JVM的一块堆内内存,在HeapByteBuffer中,会由一个byte数组来缓存数据内容,所有的读写操作也是先操作这个byte数组。但是,在后期的不断改进过程中,sendfile优化了实现机制,在拷贝过程中,并不直接拷贝文件的内容,而是只拷贝一个带有文件位置和长度等信息的文件描述符FD,这样就大大减少了需要传递的数据。引入DMA拷贝之后,在读写请求的过程中,CPU不再需要参与具体的工作,DMA可以独立完成数据在系统内部的复制。

2024-10-31 17:45:17 638

原创 12. Nacos客户端-监听远程配置

可能有小伙伴没了解过长轮询,可以理解为:客户端发一个长轮询请求给服务端,并指定超时时间,服务端可以选择立马返回结果,也可以不立马返回,只要在超时时间范围内返回即可,上面方法中也是这样的逻辑,如果本地配置和传过来的客户端配置信息不一致,立马返回结果,否则通过ClientLongPolling线程异步处理,只要超时时间范围内,本地配置发生改变就返回结果。当配置中心的配置发生变更,nacos客户端可以做到动态感知,并更新到本地,怎么实现的,本章和大家一起来探讨一番 ~~

2023-12-03 15:54:08 1509

原创 11. Nacos客户端-启动获取远程配置

配置文件,后面加载的会覆盖前面加载的配置,即优先级更高,这里我们就看。中 属性注入会拿到 Spring 容器所有。文件加载到 Spring容器 生成bean。获取结果后经过一层层返回,处理,最终回到。,该类通过读取配置中心依赖包中的。而 Nacos配置中心提供了。类型的 bean,设置到。接口,因此会调用它的。综上所述,最终会调用。的 locate 方法。如何获取远程配置,在。而现在容器中会有一个。

2023-12-03 15:52:39 789

原创 10. Nacos服务端-集群同步状态

要互相同步状态,以便及时感知集群中的节点状态情况,前面几章中很多地方有。的初始化方法中,有两个线程会执行,分别是。的判断,就需要用到节点的数量。搭建集群时,集群中的每个。再看看调用的这个接口,在。

2023-12-03 15:12:15 597

原创 09. Nacos服务端-定时发送实例状态至其他server

可以发现这个机制是挂羊头卖狗肉,还是让其他 server 来自己server 这边查询service一个个实例的状态,然后更新到其他server。本功能笔者觉得没有什么必要,因为前面三篇文章已经有很多 server 之间同步数据的方式了,但是既然有这个机制,可能是某些特殊情况,笔者没有考虑到吧。队列中,看到这里可能有读者立马想到 “肯定有一个线程会异步处理这个队列”线程类,就是从队列中poll元素,处理其他。的这个接口做了什么处理。

2023-12-03 15:06:43 527

原创 08. Nacos服务端-定时发送校验数据至其他server

方法,传入一个空的List,updateIps方法我们之前看过,最终会将本地注册表中的临时实例集合 和 持久实例集合覆盖掉,不就是删除吗!不为空,发送HTTP请求 至 远程发送数据的server 查询这些key对应的服务实例数据,更新到本地。该方法我们之前在《Nacos服务端-启动拉取其他server的服务列表》已经看过,就是先存缓存,再调用。上一篇文章讲到到 Server 在启动时会主动拉取其他Server的服务列表,其中的入口在。这个接口比较简单就是返回缓存中这些key的值,非常简单就不看了…

2023-12-03 15:02:59 471

原创 07. Nacos服务端-启动拉取其他server的服务列表

引言:上一篇文章讲到,当 Nacos-server 集群中的某一个 server 节点收到注册实例、删除实例请求时,都会将实例数据同步到其他 server 节点,并且同步失败还会进行重试操作,一定程度上保证了server集群的数据一致性,但是当某一个server节点是新加入集群的,或者它之前宕机了,需要重新启动,那它本地就没有任何实例数据,不可能等其他server有实例新增或删除时再同步过来,那样太过于被动,于是有这样一个机制,当。如果是 Springboot 项目,可以实现。的构造方法中,执行了该操作。

2023-12-03 14:56:00 845

原创 06. Nacos服务端-同步服务实例

喜闻乐见的是,果然为了提升性能,采用了异步处理方式,将任务添加到一个 tasks中,后续再处理,但是大家可能这时候会疑惑,我怎么知道在哪里会处理?告诉大家一个经验,一般来说这种异步处理逻辑,在哪个类里面添加的任务,该类中。上面方法的逻辑就是取出所有的任务key 进行遍历,然后获取 NacosTaskProcessor,调用。进行处理,如果处理失败或者发生异常,就将任务重新添加到Tasks,这里的关键逻辑肯定是。上面方法就是调用 task.run(),而 task 就是前面将任务进行转换过后的。

2023-12-03 14:48:38 563

原创 05. Nacos服务端-实例变更推送至客户端

hostReactor.processServiceJson 处理结果数据,之前在客户端拉取服务列表中看过,可以自行查看《02. Nacos客户端-服务发现原理》ClientBeatCheckTask 类的 run 方法(怎么进到这个方法请参考《4. Nacos服务端-注册实例、心跳健康检测》)Service类的 updateIPs 方法(怎么进到这个方法请参考《4. Nacos服务端-注册实例、心跳健康检测》)客户端 PushReceiver 是一个线程类。

2023-12-03 14:34:06 848

原创 04. Nacos服务端-注册实例、心跳健康检测

至此服务注册流程完成,最值得借鉴的就是它的异步处理思想,先将数据写入缓存、放到队列,开发人员可能担心后续逻辑比较多,比较耗时,因此用一个Notifier线程进行异步处理。继续看 addInstance 方法,这里面比较关键的逻辑在 addIpAddress方法 和 consistencyService.put方法,我们一个个来看。其中 createEmptyService 方法的逻辑也比较重要,它主要是创建一个空的service,如果某服务没有实例注册过,就会创建一个空的service。

2023-12-03 14:18:01 476

原创 03. Nacos客户端-心跳续约

服务端收到心跳预约请求,就是各种判断,然后将最后一次心跳时间设置为当前时间,如果非健康状态,则改为健康。可以发现Nacos 在很多地方用到了异步处理的方式,这种思想值得借鉴。

2023-12-03 14:08:19 453

原创 02. Nacos客户端-服务发现原理

2、判断是否有新增实例、修改实例、删除实例,如果有就发布实例变更事件(该事件会触发 InstancesChangeNotifier 的 onEvent 方法,然后再将事件,转为NamingEvent事件,最终调用到 NacosWatch类 start 方法里的 EventListener 监听器的onEvent方法,判断如果本实例的Meta信息和server端的不一样,更新本地的meta信息)3、如果有修改实例,更新本地的心跳信息(本地会定时发送心跳请求给nacos-server)接口,获取一次服务列表。

2023-12-03 13:06:46 469

原创 01. Nacos客户端-自动注册原理

后面就是构建请求参数、请求头等内容,不过多赘述,最终调用nacos-server的 /v1/ns/instance。从它的类继承关系图,可以看出它是一个 ApplicationListener,即监听器。它监听的事件类型为:WebServerInitializedEvent。经过一系列调用,最终调用到。

2023-12-03 13:00:29 524 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除