自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(17)
  • 收藏
  • 关注

原创 Redis高可用架构

高可用(High Availability,即HA),指的是通过尽量缩短日常维护操作和突发的系统崩溃所导致的停机时间,以提高系统和应用的可用性。高可用一般来说有两个含义:一是数据尽量不丢失,二是保证服务尽可能可用。单个节点的系统缺点明显,一旦发生故障会导致服务不可用。而且,单个节点处理所有的请求,吞吐量有限,容量也有限。,,。

2022-11-13 19:03:48 1462 1

原创 Redis的IO多路复用原理

阻塞非阻塞指的是在获取结果上是否会阻塞等待结果完成同步异步指的是是否会参与IO读写,或者是等待读写成功的回调。

2022-11-13 19:02:28 5371

原创 Redis单机功能及其原理

上一张介绍了redis的数据类型和底层实现,本章将会着重介绍redis的单机数据库的底层细节,包括客户端,服务端,数据过期,持久化,过期键等实现细节。

2022-11-13 19:01:26 578

原创 Redis的底层数据结构

要搞懂redis,首先得了解他的常用的数据类型,以及对应的底层的存储结构,看看它到底是如何实现如此高效且多样的数据结构,今天就用着一篇文章来揭开redis的面纱。

2022-11-13 19:00:17 503

原创 Dubbo全文索引

《我的Dubbo学习计划》《Dubbo框架整体设计》《框架基石,DubboSPI机制》《​​​​​​Dubbo服务暴露原理》《Dubbo服务引用原理》《Dubbo服务调用过程》《Dubbo集群容错》《Dubbo过滤链Filter》《Dubbo八股文,查缺补漏》...

2022-05-22 13:58:17 277

转载 Dubbo八股文,查缺补漏

恭喜大家看完了dubbo源码,但是这些问题你能回答的上来么?快看看dubbo相关的八股文,给自己做一个总结,并查缺补漏吧!1.Dubbo是什么?RPC又是什么?2. Dubbo能做什么?3.能说下Dubbo的总体的调用过程吗?4.说说Dubbo 支持哪些协议,每种协议的应用场景和优缺点5.Dubbo中都用到哪些设计模式?6.如果Dubbo中provider提供的服务由多个版本怎么办?7.服务暴露的流程是怎么样的?8.服务引用的流程是怎么样的?9.Dubbo的注册中心有哪些?10.聊聊Dubbo SPI机制

2022-05-22 13:50:33 435

原创 Dubbo过滤链Filter

dubbo的过滤器是运行在远程调用invoke的过程。它的注入时机,是通过dubbo的wrapper包装机制,通过ProtocolFilterWrapper类组装过滤链条,也就是责任链模式。来看看有多少dubbo自带过滤器:以及每个过滤器的作用:具体的组装逻辑和每个过滤器的作用,自行看源码源码阅读《深度解析dubbo过滤器Filter》《深度解析dubbo过滤器之回声测试》《深度解析dubbo过滤器之ContextFilter》《深度解析dubbo过滤器之TimeoutFilter》《

2022-05-22 13:49:28 300

原创 Dubbo集群容错

本篇文章,将开始分析 Dubbo 集群容错方面的源码。集群容错源码包含四个部分,分别是服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance。集群容错体现在我们的客户端调用中,通过invoker屏蔽了底层的细节,看看调用invoker会发生啥:在服务消费者初始化期间,集群 Cluster 实现类为服务消费者创建 Cluster Invoker 实例,即上图中的 merge 操作。在服务消费者进行远程调用时。以 FailoverClusterI

2022-05-22 13:48:53 246

原创 Dubbo服务调用过程

服务调用过程由于 Invoker 是 Dubbo 领域模型中非常重要的一个概念,很多设计思路都是向它靠拢。这就使得 Invoker 渗透在整个实现代码里,对于刚开始接触 Dubbo 的人,确实容易给搞混了。 下面我们用一个精简的图来说明最重要的两种 Invoker——服务提供 Invoker 和服务消费 Invoker:贴一张服务调用的整体过程图这张图可以看出大致的整理流程,然而一些集群,重试,负载均衡等步骤会专门抽出一节来讲。本章更注重服务端和消费端具体的通信细节,线程模型等。客户端调用客

2022-05-22 13:48:19 3042 1

原创 Dubbo服务引用原理

服务引用细节在整体上看,Dubbo框架做服务消费也分为两大部分,第一步通过持有远程服务实例生成Invoker,这个Invoker在客户端是核心的远程代理对象。第二步会把Invoker通过动态代理转换成实现用户接口的动态代理引用。这里的Invoker承载了网络连接、服务调用和重试等功能,在客户端,它可能是一个远程的实现,也可能是一个集群实现。这个图实际上说的并不好,实际上我们是在RegistryProtocol(注册中心)refer到了RegistryDirectory(服务提供者的动态刷新类)然后被我

2022-05-22 13:47:49 321

原创 Dubbo服务暴露原理

服务暴露就是provider将对应接口的实现类,转换为可调用的invoker,并且导出为exporter的过程。具体的暴露时序图如下:我们可以通过编写api模式的服务暴露,从export作为入口,查看源码。public static void main(String[] args) throws Exception { ServiceConfig<DemoServiceImpl> service = new ServiceConfig<DemoServiceImpl

2022-05-22 13:47:05 1025

原创 框架基石,DubboSPI机制

Dubbo良好的扩展性与两个方面是密不可分的,一是整 个框架中针对不同的场景,恰到好处地使用了各种设计模式,二就是本章要介绍的加载机制。基于DubboSPI加载机制,让整个框架的接口和具体实现完全解耦,从而奠定了整个框架良好可扩展性的基础。dubbo的扩展核心类ExtensionLoader可谓框架的基石。可以看到源码中大量引入的ExtensionLoader相关的扩展机制,了解了扩展机制是阅读后续源码的大前提。ExtensionLoader.getExtensionLoader(Cluster.cla

2022-05-22 13:46:28 373

原创 Dubbo框架整体设计

dubbo调用关系dubbo的调用关系主要由四部分组成:一、Provider: 暴露服务的服务提供方Protocol:协议, 负责提供者和消费者之间协议交互数据Service:服务,真实的业务服务信息,可以理解为接口和实现Container:容器,dubbo的运行环境二、Consumer:调用远程服务的服务消费方Protocol:协议,负责提供者和消费者之间协议交互数据Cluster:集群,感知提供者端的列表信息Proxy:代理,可以理解为提供者的服务调用代理类,由它接管Consu

2022-05-22 13:45:35 323

原创 我的Dubbo学习计划

大家好,我是阿斌。从今天开始,我们就要开始学习一个优秀的RPC框架-Dubbo了。从大致的使用流程,再到深入探究源码,预计的学习时间是在三周左右。开始学习在学习之前,我们可以先了解一下,一个优秀的RPC框架能够提供什么样的能力?远程调用动态代理序列化网络通信编码对调用方来说,只需要调用一个接口,而接口最终的实现,是一个屏蔽了底层细节的proxy。proxy会帮助我们将参数序列化,编码,网络传输给远程服务。在提供者端,会统一解析请求,根据映射关系找到具体的接口实现,并返回结果。在网络传

2022-05-22 13:44:32 1440 2

原创 分库分表,我只说一次

随着互联网的高速发展,很多公司的单表数据量在短短几年甚至几个月就达到了系统瓶颈。这时候为了解决单表的查询性能,需要应用上分库分表。而由于一开始的设计问题,和对分库分表方案的思考不全面,很容易引起后期扩展与维护的灾难。作为一位合格的程序员,无论公司当前是否有需要用到分库分表,我们都有必要了解整体的设计与方案,以备不时之需。为什么需要分库分表当单表的数据量过大时,对于表结构的修改,会引起长时间的锁等待,进而撑爆线程数。 单表数据量过大,会导致b+树的层级变高,大于3层后甚至会影响索引的查询性能 同库

2022-04-04 01:06:41 1905

原创 SpringBean的生命周期

网络上对于spring生命周期的总结很多,对初学者来说看起来眼花缭乱,实际上Spring Bean的生命周期只有四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段。在这四步之间穿插的各种扩展点,稍后会讲。实例化 Instantiation 属性赋值 Populate 初始化 Initializati

2022-04-04 01:01:58 25462 1

原创 为什么学习spring

为什么要学spring源码为什么要学spring源码?相信很多人心里有过这样的疑惑,甚至还有读者说他在工作中用的都是springboot从来没用过spring这样的笑话。实际上,对于JAVA程序员,我们的工作开展基本不可能离开spring。学习spring源码有不少好处:spring的框架涵盖大量经典的设计模式,在阅读的过程中可以吸取优秀的编程思想,提高我们的编码素养,设计能力。 在工作中经常需要封装一些公共SDK组件,沉淀一些通用方法,这也是一个程序员进阶的体现。这时候基本离不开和spr

2022-04-04 00:57:37 1261

空空如也

空空如也

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

TA关注的人

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