自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 微服务-微服务Spring Security OAuth 2实战

OAuth 2.0 (Open Authorization)是一种开放标准的授权协议,允许用户授权第三方应用访问其在某个服务提供者上的受保护资源,而无需将其实际的凭证(如用户名和密码)分享给第三方应用。这种方式可以增加安全性,同时允许用户更好地控制其数据的访问权限。

2024-02-25 22:58:20 1382

原创 微服务-微服务Spring Security6实战

使用 Spring Security 时经常会看见 403(无权限)。Spring Security 支持自定义权限受限处理,需要实现 AccessDeniedHandler接口@Overrideresponse.getWriter().write("没有访问权限");在配置类中设置访问受限后交给BussinessAccessDeniedHandler处理//访问受限后的异常处理方法授权:基于注解的访问控制。

2024-02-24 22:14:10 1335

原创 微服务-微服务链路追踪组件Skywalking实战

pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。● OAP(Observability Analysis Platform)- 进行度量分析和调用链分析的后端平台,并支持将数据存储到各种数据库中,如:ElasticSearch,MySQL,InfluxDB等。准备一个springboot程序,打成可执行jar包,写一个shell脚本,在启动项目的Shell脚本上,通过 -javaagent 参数进行配置SkyWalking Agent来追踪微服务;

2024-02-23 23:35:07 1138

原创 微服务-微服务API网关Spring-clould-gateway实战

Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式,并基于 Filter 的方式提供网关的基本功能,例如说安全认证、监控、限流等等。Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。

2024-02-22 23:42:42 2650

原创 微服务-Alibaba微服务nacos实战

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

2024-02-20 23:26:45 1151

原创 微服务-微服务Nacos配置中心

因此当单台机器保存完毕配置之后,需要通知其他机器刷新内存和本地磁盘中的文件内容,因此它会发布一个名为 ConfigDataChangeEvent 的事件,这个事件会通过grpc调用通知所有集群节点(包括自身),触发本地文件和内存的刷新。增量 dump 就是捞取最近六小时的新增配置(包括更新的和删除的),先按照这批数据刷新一遍内存和文件,再根据内存里所有的数据全量去比对一遍数据库,如果有改变的再同步一次,相比于全量 dump 的话会减少一定的数据库 IO 和磁盘 IO 次数。

2024-02-19 23:05:57 1149 1

原创 微服务-微服务Alibaba-Nacos-grpcServer启动剖析

Nacos 2.X grpcServer启动剖析

2024-02-12 23:50:06 414

原创 微服务-微服务Alibaba-Nacos 源码分析 (源码流程图)-2.0.1

客户端注册临时实例,GRPC处理

2024-02-05 23:56:55 947

原创 微服务-微服务Alibaba-Nacos 源码分析 (源码流程图)

客户端流程

2024-01-31 21:58:19 729

原创 微服务-微服务Alibaba-Nacos 源码分析(上)

服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存。Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。直接运行console模块里的 com.alibaba.nacos.Nacos.java。

2024-01-29 23:29:12 1081

原创 微服务-微服务Spring-cloud-open-feign

Feign是Netflix开发的声明式、模板化的HTTP客户端,Feign可帮助我们更加便捷、优雅地调用HTTP API。Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。

2024-01-28 16:46:00 1447

原创 微服务-微服务Alibaba-Nacos注册中心实现

在整个系 统中,一定会存在非常多类似的共享业务的场景,这些业务场景的逻辑肯定会被重复创建,从而产生 非常多冗余的业务代码,这些冗余代码的维护成本会随着时间的推移越来越高,能不能够把这些共享 业务逻辑抽离出来形成可重用的服务呢?比如,你需要更新服务 C,然后是B,最后才是A,幸运的是,许多改变一般只影响一个服务,需要协调多服务的改变很少。微服务架构主要的目的是实现业务服务的解耦。调用端不需要关心目标服务的位置,从而使得服务 之间的交互是动态的,这样做的好处是实现了服务的调用者和服务的提供者之间的高度解耦。

2024-01-26 23:55:17 1155

原创 SpringBoot-SpringBoot自动配置底层源码解析

2.AnnotatedTypeMetadata:表示当前正在进行条件判断的Bean所对应的类信息,或方法信息(比如@Bean定 义的一个Bean),可以通过AnnotatedTypeMetadata获取到当前类或方法相关的信息,从而就可以拿到条件注 解的信息,当然如果一个Bean上使用了多个条件注解,那么在解析过程中都可以获取到,同时也能获取Bean上定义的其他注解信息。2.同理,Spring在解析某个@Bean的方法时,也会先判断方法上是否有条件注解,然后进行解析,如果不满足条件,则该Bean不会生效。

2024-01-24 23:56:03 1023

原创 SpringBoot-SpringBoot启动解析

顾名思义,ApplicationContextInitializer是用来初始化Spring容器ApplicationContext对象的,比如可以利用 ApplicationContextInitializer来向Spring容器中添加ApplicationListener。默认情况下会利用EventPublishingRunListener发布一个ApplicationContextInitializedEvent事件, 默认情况下暂时没有ApplicationListener消费了这个事件。

2024-01-22 21:01:52 905

原创 SpringBoot - SpringBoot手写模拟SpringBoot启动过程

MyApplication是Spring的一个配置类,但是MyApplication是我们传递给SpringBoot,从而添加到 Spring容器中去的,而WebServiceAutoConfiguration就需要SpringBoot去自动发现,而不需要程 序员做任何配置才能把它添加到Spring容器中去,而且要注意的是,Spring容器扫描也是扫描不到 WebServiceAutoConfiguration这个类的,因为我们的扫描路径是"com.zhouyu.user",而。

2024-01-21 23:27:48 863

原创 Netty-Netty源码分析流程图

netty服务端流程图

2024-01-18 23:43:12 651

原创 Netty-Netty源码分析

Netty的NioEventLoop读取到消息之后,直接调用ChannelPipeline的fireChannelRead(Object msg),只要用户不主动切换线程,一直会由NioEventLoop调用到用户的Handler,期间不进行线程切换,这种串行化处理方式避免了多线程操作导致的锁的竞争,从性能角度看是最优的。在java虚拟机实现上,本地IO一般会直接操作直接内存(直接内存=>系统调用=>硬盘/网卡),而非直接内存则需要二次拷贝(堆内存=>直接内存=>系统调用=>硬盘/网卡)。

2024-01-16 23:52:56 985

原创 Netty-Netty实现自己的通信框架

客户首先与根服务器之一联系,它将返回顶级域名 com 的 TLD 服务器的 IP 地址。最后,该 客户与 baidu.com 权威服务器之一联系,它为主机名 www.baidu.com 返回其 IP 地址。有另一类重要的 DNS 服务器,称为本地 DNS 服务器( local DNS server)。根 DNS 服务器。DNS 一个由分层的服务系统,大致说来,有 3 种类型的 DNS 服务器:根 DNS 服务器、顶。当主机发出 DNS 请求时,该请求被发往本地 DNS 服务器,它起着代理的作用,并将该请。

2024-01-14 22:19:44 1070

原创 Netty-Netty组件了解

EventLoop和回想一下我们在 NIO中是如何处理我们关心的事件的?在一个while循环中select出事件,然后依次处理每种事件。我们可以把它称为事件循环,这就是EventLoop。interface定义了Netty的核心抽象,用于处理网络连接的生命周期中所发生的事件。io.netty.util.concurrent 包构建在JDK的包上。一个EventLoop将由一个永远都不会改变的Thread驱动,同时任务(Runnable或者。

2024-01-11 21:09:53 1092

原创 Netty-Netty基础应用与了解

Netty的优势1、API使用简单,开发门槛低;2、功能强大,预置了多种编解码功能,支持多种主流协议;3、定制能力强,可以通过对通信框架进行灵活地扩展;4、性能高,通过与其他业界主流的NIO框架对比,Netty的综合性能最优;5、成熟、稳定,Netty修复了已经发现的所有,业务开发人员不需要再为 NIO 的BUG而烦恼;6、社区活跃,版本迭代周期短,发现的BUG可以被及时修复,同时,更多的新功能会加入;7、经历了大规模的商业应用考验,质量得到验证。为什么不用。

2024-01-10 23:40:42 853

原创 Zookeeper-Zookeeper分布式一致性协议ZAB源码分析(流程图)

流程图ZAB责任链模式

2024-01-03 21:16:14 533

原创 Zookeeper-Zookeeper分布式一致性协议ZAB源码解析

ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper 并没有使用 Paxos ,而是采用了 ZAB 协议,ZAB是Paxos算法的一种简化实现。ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持 崩溃恢复 和 原子广播 的协议。下面我们会重点讲这两个东西。

2024-01-02 23:49:00 694

原创 Zookeeper-Zookeeper选举源码

3、画图做笔记:总结框架的一些核心功能点,从这些功能点入手深入到源码的细节,边看源码边画源码走向图,并对关键源码的理解做笔记,把源码里的闪光点都记录下来,后续借鉴到工作项目中,理解能力强的可以直接看静态源码,也可以边看源码边debug源码执行过程,观察一些关键变量的值。2、抓主线:找一个demo入手,顺藤摸瓜快速静态看一遍框架的主线源码,画出源码主流程图,切勿一开始就陷入源码的细枝末节,否则会把自己绕晕,凭经验猜。1、先使用:先看官方文档快速掌握框架的基本使用。分别运行每个节点,集群启动完毕!

2024-01-01 22:49:41 1333

原创 Zookeeper-Zookeeper应用场景实战(二)

在实际的开发中,如果需要使用到分布式锁,不建议去自己“重复造轮子”,而建议直接使用Curator客户端中的各种官方实现的分布式锁,例如其中的InterProcessMutex可重入锁。如果所有的锁请求者都 watch 锁持有者,当代表锁持有者的 znode 被删除以后,所有的锁请求者都会通知到,但是只有一个锁请求者能拿到锁。一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题,这种跨机器的锁就是分布式锁。性,因此在并发量不是太高的应用场景中,还是推荐使用ZooKeeper的分布式锁。

2023-12-31 22:23:02 1306

原创 Zookeeper-Zookeeper应用场景实战

一个分布式系统通常会由很多的节点组成,节点的数量不是固定的,而是不断动态变化的。而一旦流量洪峰过去了, 就需要下线大量的节点。5. MongoDb的ObjectId:MongoDB是一个分布式的非结构化NoSQL数据库,每插入一条记录会自动生成全局唯 一的一个“_id”字段值,它是一个12字节的字符串,可以作为分布式系统中全局唯一的ID。创建节点的方式如下面的代码所示,回顾我们之前课程中讲到的内容,描述一个节点要包括节点的类 型,即临时节点还是持久节点、节点的数据信息、节点是否是有序节点等属性和性质。

2023-12-30 22:08:22 1144

原创 Zookeeper-Zookeeper特性与节点数据类型详解

和持久节点的区别是 ZK 服务端启动后,会有一个单独的线程去扫描,所有的容器节点,当发现容器节点的子节点数量为0时,会自动删除该节点。pZxid:表示该节点的子节点列表最后一次修改的事务1D,添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID注意: 只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid)。数据发布订阅的一个常见的场景是配置中心,发布者把数据发布到 ZooKeeper 的一个或一系列的节点上,供订阅者进行数据订阅,达到动态获取数据的目的。

2023-12-28 21:27:16 2270

原创 网络通信-Linux 对网络通信的实现

同步和异步同步:同步的意思就是调用方需要主动等待结果的返回异步:异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如,状态通知,回调函数等。阻塞和非阻塞阻塞:是指结果返回之前,当前线程被挂起,不做任何事非阻塞:是指结果在返回之前,线程可以做一些其他事,不会被挂起。两者的组合1.同步阻塞:同步阻塞基本也是编程中最常见的模型,打个比方你去商店买衣服,你去了之后发现衣服卖完了,那你就在店里面一直等,期间不做任何事(包括看手机),等着商家进货,直到有货为止,这个效率很低。

2023-12-26 21:37:33 1028

原创 网络协议-BIO实战和NIO编程

flip 方法将 Buffer 从写模式切换到读模式。调用 flip0)方法会将 position 设回 0,并将 limit设置成之前 position 的值。put 方法有很多版本,允许你以不同的方式把数据写入到 Buffer 中。例如, 写到一个指定的位置,或者把一个字节数组写入到 Buffer。put(byte b) 相对写,向 position 的位置写入一个 byte,并将 postion+1,为下次读写作准备。从 Channel 写到 Buffer 的例子。原生JDK网络编程-BIO。

2023-12-23 23:30:20 719

原创 网络通信--深入理解网络和TCP / IP协议

在TCP协议和UDP协议中有报文头里面有专门的字段(2个字节)来存放端口号,即2的16次方减一 等于65535个。(端口0表示所有的端口)因为端口只有65535个,所以一台主机只能保持最多65535个TCP连接,对么?TCP / IP 网络传输中的数据术语。

2023-12-21 23:52:10 539

原创 Kafka--Kafka日志索引详解以及生产常见问题分析与总结

​ Kafka的设计重点是在网络不稳定,服务也不稳定的复杂分布式环境下,如何保持高性能,高可用,高可扩展的三高架构。在这方面,Kafka的设计是很复杂也很完善的,是业内公认的老大哥。因此网上的解读文章也是最多的。但是这些解读的文章如果没有一条主线串起来,那永远都只是一些零散的,过目既忘的东西。​ 在这几期的课程中,一直在尝试以可见的方式去深入理解Kafka的各种主要设计思想。内容非常多,节奏也非常紧凑,但是梳理出了客户端、Zookeeper数据、Log日志三条可以看得见的数据主线。

2023-12-20 23:47:40 1672

原创 Kafka--从Zookeeper数据理解Kafka集群工作机制

​ Kafka其实天生就是为了集群而生,即使单个节点运行Kafka,他其实也是作为一个集群运行的。而Kafka为了保证在各种网络抽风,服务器不稳定等复杂情况下,保证集群的高性能,高可用,高可扩展三高,做了非常多的设计。而这一章节,其实是从可见的Zookeeper注册信息为入口,理解Kafka的核心集群机制。回头来看今天总结的这些集群机制,其实核心都是为了保持整个集群中Partition内的数据一致性。有了这一系列的数据一致性保证,Kafka集群才能在复杂运行环境下保持高性能、高可用、高可扩展三高特性。

2023-12-18 23:05:42 1248

原创 Kafka-Kafka核心参数详解

Kafka的HighLevel API使用是非常简单的,所以梳理模型时也要尽量简单化,主线清晰,细节慢慢扩展。Kafka提供了两套客户端API,HighLevel API和LowLevel API。HighLevel API封装了kafka的运行细节,使用起来比较简单,是企业开发过程中最常用的客户端API。而LowLevel API则需要客户端自己管理Kafka的运行细节,Partition,Offset这些数据都由客户端自行管理。这层API功能更灵活,但是使用起来非常复杂,也更容易出错。

2023-12-16 23:42:18 1037

原创 Kafka-Kafka基本原理与集群快速搭建(实践)

如下:从partition 0 中的偏移量为4的记录开始消费。

2023-12-15 23:48:51 531

原创 Kafka-Kafka基本原理与集群快速搭建

​ ChatGPT对于Apache Kafka的介绍:Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。Kafka是一个分布式的发布-订阅消息系统,可以快速地处理高吞吐量的数据流,并将数据实时地分发到多个消费者中。Kafka消息系统由多个broker(服务器)组成,这些broker可以在多个数据中心之间分布式部署,以提供高可用性和容错性。Kafka的基本架构由生产者、消费者和主题(topic)组成。

2023-12-14 23:37:31 1073

原创 RocketMQ-RocketMQ常见问题与总结

​ 完整分析过后,整个RocketMQ消息零丢失的方案其实挺简单。

2023-12-12 23:23:07 925

原创 RocketMQ-RocketMQ高性能核心原理--(零拷贝)

但是,在后期的不断改进过程中,sendfile优化了实现机制,在拷贝过程中,并不直接拷贝文件的内容,而是只拷贝一个带有文件位置和长度等信息的文件描述符FD,这样就大大减少了需要传递的数据。txt表示运行程序的指令。​ 而mmap文件映射的方式,就是在用户态不再保存文件的内容,而只保存文件的映射,包括文件的内存起始地址,文件大小等。而这些操作,原本都是需要由CPU来进行任务的分配、调度等管理步骤的,早先这些IO接口都是由CPU独立负责,所以当发生大规模的数据读写操作时,CPU的占用率会非常高。

2023-12-12 23:21:48 968

原创 RocketMQ-RocketMQ高性能核心原理节点(流程图)

NamesrvServer启动流程图:namesrvServer启动简图:Broker服务启动过程流程图Broker服务启动过程流程简图

2023-12-10 23:52:18 556

原创 RocketMQ-RocketMQ高性能核心原理与源码剖析(下)

而RocketMQ的这种快速落盘的方式,在多Topic的场景下,优势就比较明显了。如果是这样的话,那显然会极大的浪费网络带宽以及服务器的性能,并且,当有新的消息进来时,RocketMQ也没有办法尽快通知客户端,而只能等客户端下一次来拉取消息了。​ 在executeOnTimeup方法中,就会去扫描SCHEDULE_TOPIC_XXXX这个Topic下的所有messageQueue,然后扫描这些MessageQueue对应的ConsumeQueue文件,找到没有处理过的消息,计算他们的延迟时间。

2023-12-09 23:53:20 890

原创 RocketMQ-RocketMQ高性能核心原理(流程图)

1.NamesrvStartup2.BrokerStartup3. DefualtMQProducer4.DefaultMQPushConsumer

2023-12-08 23:55:28 644

原创 RocketMQ-RocketMQ高性能核心原理与源码剖析(中)

​ 从之前Producer发送消息的过程以及Conmer拉取消息的过程,我们可以抽象出RocketMQ中一个消息分配的管理模型。这个模型是我们在使用RocketMQ时,很重要的进行性能优化的依据。

2023-12-07 23:45:13 903

order for demo

order for demo

2024-02-22

nacos-aes加密版使用

nacos-aes加密版使用

2024-02-20

空空如也

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

TA关注的人

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