自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 6、NacosDistro协议

DistroVerifyTimedTask 执行定时任务,定期发送心跳用于数据验证,心跳包含客户端的元信息,如果某个节点的数据与本地数据不一致,则会发送客户端全量的数据将数据补齐‌。DistroLoadDataTask 执行数据的同步任务,遍历集群的节点发送同步数据请求拉取全量数据,响应成功则不发送给所有节点。新Nacos节点加入集群,启动数据校验定时任务,默认间隔5秒,启动数据同步任务,拉取全量临时实例数据更新到本地缓存。全量拉取操作完成之后,每个Nacos节点上都持有当前的所有建立连接的客户端数据。

2024-12-06 15:21:32 388

原创 5、Nacos一致性协议

假设 A 向 B、C分别发送撤退的消息, B 向 A、C 分别发送进攻的消息,如果 C 是叛徒,C 向A发送撤退 ,向B发送进攻的消息。不存在恶意节点或伪造消息场景下的共识问题,强一致性协议: Paxos、ZAB、Raft,弱一致性协议:Gossip、Distro。假设有三位拜占庭军队的将军,分别为 A、B、C,以少数服从多数的原则投票,举例投票情况:A、B 投票进攻,C 投票撤退。Candidate候选人:向其他节点发送投票请求,通知其他节点来投票,如果赢得了大多数选票,就晋升当领导者。

2024-11-15 14:43:26 908

原创 4、Nacos事件机制

NotifyCenter 事件通知中心,订阅者注册到指定的发布者 EventPublisher,事件发布通过事件类型获取发布者进行发布事件。事件发布将事件添加到阻塞队列,发布者启动单独的线程从阻塞队列获取发布的事件,通过事件类型获取对应的订阅者执行通知。DefaultPublisher 使用集合保存所有订阅者,通过循环判断事件与订阅者是否匹配,存在一些损耗。EventPublisher 接口定义发布事件,添加订阅者,通知订阅者,移除订阅者等方法。注册事件订阅者,同时注册事件对应的发布者。

2024-11-01 11:56:32 365

原创 3、Nacos建立连接

ServerMemberManager 存储 Nacos 集群成员节点信息,提供了针对成员节点的增删改查操作,并维护了 MemberLookup 支持动态切换 Nacos 成员节点,动态感知节点变更支持。GrpcClient 创建一元RPC服务和双向流式RPC服务长连接,双向流式RPC服务可以接收服务端推送的变更数据,服务端和客户端会通过连接ID进行关联。ClusterRpcClientProxy 初始化时与 Nacos 集群节点建立连接,监听变更事件与 Nacos 集群节点建立连接。

2024-09-09 18:09:42 431

原创 2、Nacos通信gRPC

gRPC由 Google 开源的高性能 RPC 框架支持异构系统通讯,默认使用ProtoBuf () 协议,云原生体系下和其它组件广泛结合。主要利用gRPC高性能通信能力,结合云原生容器化、微服务架构和弹性伸缩等特性,实现高效、灵活和可扩展的云原生应用开发。nacos_grpc_service.proto 文件定义消息结构和服务的RPC方法,描述应用程序的通信方式。// 版本限定// 导入文件// 生成Java源文件个数// 生成Java类的路径// 定义消息请求头。

2024-09-03 18:59:27 1500

原创 1、Nacos客户端启动

​ 自动注册配置方式 spring.cloud.service-registry.auto-registration.enabled=true,@EnableDiscoveryClient(autoRegister = true)。​ 使用spring.factories SPI机制加载, NacosServiceRegistryAutoConfiguration 自动配置服务注册相关的功能。​ NacosAutoServiceRegistration 实现自动注册服务实例到 Nacos 服务器。

2024-07-05 15:16:17 461

原创 MySQL存储碎片

MySQL存储碎片

2023-12-19 09:06:37 619

原创 Druid10-ZK动态配置数据源

1、ZooKeeper 注册数据源​ 通过创建 ZooKeeper 的临时节点,以此实现节点发现和下线,实现动态变更数据源信息,使用案例。 private void register() { //创建注册对象 ZookeeperNodeRegister register1 = new ZookeeperNodeRegister(); register1.setZkConnectString("127.0.0.1:2181"); reg

2022-05-20 21:23:09 680

原创 Druid09-选择器

1、选择器实例化​ HighAvailableDataSource 通过选择器进行切换数据源,使用枚举维护了选择器,并且封装了反射实例化选择器。 public static DataSourceSelector getSelector(String name, HighAvailableDataSource dataSource) { for (DataSourceSelectorEnum e : DataSourceSelectorEnum.values()) {

2022-05-19 18:14:23 342

原创 Druid08-高可用数据源

1、初始化​ HighAvailableDataSource 数据源的初始化,通过Double Check避免重复初始化。 public void init() { if (inited) { return; } synchronized (this) { if (inited) { return; } //dataSour

2022-05-18 19:47:34 333

原创 Druid07-高可用案例

1、简介​ 当系统并发越来高时数据库服务器的压力也是越来越大,最终成为性能的瓶颈,可以采用缓存、读写分离、分库分表等技术来降低服务器压力,Druid 提供了高可用数据源 ( HighAvailableDataSource ) 是基于Druid数据源之上进行了二次封装,通过名称选择数据源的高可用数据源配置。 @Bean(name = "masterDataSource", initMethod = "init", destroyMethod = "close") public DataSourc

2022-05-17 20:35:14 631

原创 Druid06-SQL执行

1、连接对象的封装​ 如果没有配置Filter 则生成具体的连接对象返回,否则将Connection对象包装成 ConnectionProxyImpl。 public Connection createPhysicalConnection(String url, Properties info) throws SQLException { Connection conn; if (getProxyFilters().isEmpty()) {

2022-05-16 21:29:47 1892

原创 Druid05-连接关闭

1、连接关闭​ 连接对象通过DruidPooledConnection 进行了包装,获取连接后都会进行连接的关闭或回收,如使用了类似 Mybatis、JPA 等开源框架通常会调用close方法,连接对象 DruidPooledConnection 重写了close()方法。public void close() throws SQLException { //已关闭状态 if (this.disable) { return; } DruidConnecti

2022-05-14 16:14:28 4116

原创 Druid04-获取连接

1、获取连接​ 获取连接的时候也会先去检查一下连接池是否已经初始化,如果没有初始化则先进行初始化。 public DruidPooledConnection getConnection(long maxWaitMillis) throws SQLException { //maxWaitMillis 从连接池获取连接最大等待时间(默认-1 一直等待) init(); if (filters.size() > 0) {

2022-05-13 14:05:55 1533

原创 Druid03-守护线程

1、CreateConnectionThread 线程1.1 线程创建​ Druid连接池运行后,该线程大部分情况下都处于WAITING状态,通过 jstack -l PID 查看。protected void createAndStartCreatorThread() { if (createScheduler == null) { String threadName = "Druid-ConnectionPool-Create-" + System.identityHash

2022-05-12 20:56:32 451

原创 Druid02-初始化

1、初始化​ Druid的初始化过程,使用都是创建DruidDataSource对象进行配置参数之后,调用init方法进行初始化。​ 方式一:Spring 配置初始化方法 @Bean(name = "dataSource", initMethod = "init", destroyMethod = "close") @Primary public DataSource dataSource() { DruidDataSource dataSource = new DruidD

2022-05-11 19:15:27 1219

原创 Druid01-简介

1、简介JAVA常用的连接池有dbcp、c3p0、tomcat-jdbc、druid和HiKariCP。dbcp、c3p0、tomcat-jdbc是第一代连接池,druid和HiKariCP是第二代连接池, 第一代连接池一般采用单线程同步的架构设计,第二代采用多线程异步架构,目前的大部分工程会使用Druid或HiKariCP。2、连接池​ 数据库连接池基于池化思想,实现了对连接资源灵活的管控。如果每次操作都需要 打开连接,操作,关闭连接,那么创建和销毁 会消耗大量的系统资源。可以通过复用创建好的连接池

2022-05-10 14:50:25 414

原创 临时存放图片

2022-03-17 13:38:58 423

原创 RSA加解密

RSA加解密可用于微信小程序支付可用于微信小程序支付@Slf4jpublic class RSAUtil { private static final String ENCODING = "UTF-8"; private static final String SIGNATURE_ALGORITHM = "SHA256withRSA"; public static String sign256(String data, PrivateKey privateKey) throw

2021-08-19 11:14:04 247

原创 Soul网关源码学习07

Soul网关源码学习07文章目录Soul网关源码学习07ZookeeperZAB协议选举机制Soul数据同步Zookeeperzookeezper 是一个分布式数据一致性的解决方案,基于它可以实现如数据发布/订阅、分布式协调、集群管理、分布式锁、分布式队列等功能,数据模型=文件系统+通知机制。实现了类似文件系统的树结构,每个节点被称为znode。znode可看做是文件系统的中文件夹+文件。说它是文件夹,因为它下面可以放子节点;说它是文件,因为它本身存储了数据。ZAB协议ZAB协议是为zookeez

2021-01-22 01:45:29 160

原创 Soul网关源码学习06

Soul网关源码学习06文章目录Soul网关源码学习06Soul插件SoulConfigurationSoulPluginSoulWebHandlerSoul插件在soul网关中每个请求,都会通过责任链的方式执行相匹配的插件,所以插件也是soul网关的核心,soul网关的插件是可插拔的,并且是插件之间依赖关系是松耦合且插件的功能实现高聚合,其次用户可根据需求定制插件满足自己的需求。SoulConfigurationsoul插件配置类,使用 spring.factories 加载该配置。@Bean

2021-01-21 01:10:40 379 5

原创 Soul网关源码学习05

Soul网关源码学习05文章目录Soul网关源码学习05soul-web 处理流程ChannelOperationsHandlersoul-web 处理流程soul-web基于webflux 可以使用Netty作为应用服务器,Netty是事件驱动的,事件分为两大类 inboud 和 outbound,分别由ChannelInboundHandler 和ChannelOutboundHandler 负责处理,inbound和outbound 是指事件类型。Inbound:事件是由外部触发的,可以认为并

2021-01-20 01:16:19 271 2

原创 Soul网关源码学习04

Soul网关源码学习04文章目录Soul网关源码学习04soul-client 数据同步SoulSpringMvcClientSoulSpringMvcClientConfigurationSpringMvcClientBeanPostProcessorsoul-client 数据同步soul-client 将元数据进行同步到soul-admin,支持dubbo、springMVC、springCloud、sofa等协议。SoulSpringMvcClient@SoulSpringMvcClien

2021-01-19 02:20:22 201

原创 Soul网关源码学习03

Soul网关源码学习03文章目录Soul网关源码学习03soul-admin数据同步DataSyncConfigurationWebsocketCollectorDataChangedEventDispatchersoul-admin数据同步soul-admin 使用 websocket 的方式实现数据同步,会保存与客户端的 session 信息在集合中,数据的更新以广播的方式进行通知。DataSyncConfiguration数据同步的方式,支持多种的配置,先看配置 websocket 的方式。

2021-01-17 02:25:20 302 1

原创 Soul网关源码学习02

Soul网关源码学习02文章目录Soul网关源码学习02数据同步websocket 同步soul-web 客户端数据同步soul网关中路由规则、插件管理、负载均衡策略、限流熔断等配置,都是支持动态变更,数据的同步做到秒级同步。配置变更导致数据的同步支持 websocket、http、zookeeper、nacos 等多种方式,实现soul-admin和soul-web的数据同步。websocket 同步soul-web 启动时与 soul-admin 建立 websocket 连接,之后soul-

2021-01-16 02:57:13 401 1

原创 Soul网关源码学习01

Soul网关源码学习01文章目录Soul网关源码学习01简介准备工作简单测试简介Soul经过不断迭代已经成为高性能、响应式、可扩展的网关一整套解决方案;它参考了Kong、Spring-Cloud-Gateway等优秀的网关,并在此基础上聚合了一系列微服务领域的企业级功能。支持各种语言(http协议),支持 Dubbo,SpringCloud协议。插件化设计思想,插件热插拔,易扩展。灵活的流量筛选,能满足各种流量控制。内置丰富的插件支持,鉴权,限流,熔断,防火墙等等。流量配

2021-01-15 02:07:24 254

空空如也

空空如也

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

TA关注的人

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