自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HW 和 LEO是如何运行的?

由上图可以知道 由于有节点落后,导致HW一直无法更新,并且kafka针对HW也有规定, 只有HW标识前的数据才能被读取, 也就是说HW=1 作为消费者来说只能看到0 和 1 的数据。相信大家在上一篇文章已经知道啦,HW 就是高水位的意思,也就是收到消息反馈的标识, LEO 末尾数据标识, 也就是代表着下一个需要发送的数据,或者消费者下一个需要消费的数据。上述图中, 由于小欣同学出差导致了落后了, 这时候影响了HW的运行,导致了整体数据的堵塞,那么该怎么办呢?紧接着,快递员小苏开始将这些广告邮件开始派送了~

2024-04-10 16:22:31 750

原创 你了解过副本机制么?ISR是什么?

💡副本机制简单来说就进行数据的拷贝,比如由kafka中间件来说,我们一开始可能考虑不周到,所以将数据进行单节点存储。单节点同步一开始非常的开心,部署简单,使用简单,还满足了高峰期大流量对数据库的压力,小苏同学沾沾自喜,随之时间延长,系统出现了硬件故障,由于硬盘坏了,从而导致kafka服务不可用了,高峰期数据库一度处于宕机边缘。怎么办呢?小苏同学一度陷入混乱中,那么我们应该怎么避免这种场景出现呢?💡副本机制的作用这时候, 为了避免这种问题,保证系统的高可用,当然是加多一

2024-04-09 17:50:06 618

原创 提升数据传输效率的杀手锏“零拷贝技术“

传统磁盘发送数据流程关于零拷贝主要实现的技术有mmap+write ,sendfile ,splice 等几种方式。接着我们一起来探讨主流的mmap 以及sendFile模式吧。

2024-03-28 15:10:44 978

原创 kafka为什么可以做到单机每秒几十万的消息写入?

首先,操作系统层面的缓存利用率会更高,因为存储的都是紧凑的字节结构而不是独立的对象。再者,即使服务进程重启,系统缓存依然不会消失,避免了in-process cache重建缓存的过程,防止数据的丢失,提供了高可用性。意思就是页缓存主要采用的LRU缓存淘汰的策略方式进行的,也就是访问多的留下,少得则面临回收淘汰。由上图可知,内存顺序的读写速度可以说是最快的,所以可以采取这种中转的方式 , 让数据先留存在内存中, 然后在定时的刷新到硬盘中,以此解决这种突发流量的问题。简而言之存储元素变小了,空间利用率提高了。

2024-03-25 15:23:09 770

原创 你知道吞吐量和延迟吗?

针对本次话题,首先我们先确认什么是吞吐量?吞吐量就像净水过滤器一样,单位时间内,进去多少废水,排出多少净水, 比如 净水器 1毫秒可以处理 0.01ml 的废水 那么1 s 就可以处理10ml的废水 那么净水器的吞吐量 每秒处理 10ml 的废水​​​​​​​。

2024-03-21 11:42:15 286

原创 你知道什么是pull模型吗?什么是push模型吗?

如果为了降低延迟来提升Pull的执行频率,可能在没有消息的时候产生大量的Pull请求(消息中间件是完全解耦的,Broker和Consumer无法预测下一条消息在什么时候产生);如果频率低了,那延迟自然就大了。举例说明,还是利用饭堂的例子,场景是订餐场景,约定好,饭堂叔叔,你的菜炒出来就立马给你进行送餐,保证菜品的新鲜程度,但是菜式和饭量是按照周期由饭堂订,作为用户的你无法进行选择。试下一下,我们在完全不知道厨房叔叔什么时候出菜的情况下,同学们集体根据自己喜欢的菜式 每隔一会一个个去问,叔叔我要的菜好了么?

2024-03-20 10:46:35 539

原创 kafka,你了解他吗?

举例来说就是 你下单点个外卖, 手机下完单就可以了, 不需要等待商家回复,也无需站在门口等,静静等待外卖骑手给你送过来就行了,这里就是很经典的发布订阅模型, 你发布一个订单, 商家进行接单 骑手进行派单, 你在进行接收外卖, 过程中没有直接的交互 , 也不需要一直等待商家的回复确认 这个过程也叫解耦 ,意思就是我不和你强绑定关系 我可以点A商家的外卖 也可以点B商家的外卖 互相没有强依赖关系。那么这个频道就是对应的topic ,你订阅了此频道, 有新出的音乐我们后续通知你.首先问一下,什么是中间件呢?

2024-03-19 17:02:13 563

原创 Kafka是如何实现单机每秒几十万消息写入的?

如上图,由于机械硬盘采用传统的磁头探针结构,顺序读写是不需要进行频繁的转动磁头和探针,随机读的话则相反,并且调整这些位置是十分耗时的,这就严重影响了磁盘的寻址速度,从而导致了性能下降.并且经过测试顺序读是随机读性能的400倍以上。顺序读能达到84MB/S顺序写是随机读性能的100倍以上。顺序写性能能达到79M/S。

2023-07-30 15:37:46 128

原创 分布式锁的运行原理你都知道吗?

分布式锁原理揭秘

2022-08-21 23:01:31 253

原创 leaf -segment分布式ID获取方式源码图解

分布式Id leaf源码解析.

2022-07-26 16:12:27 309

原创 Eureka源码-double check单例模式运用

double check,也叫双重检测,主要利用两次的判断进行校验当前单例的创建情况。如下面的代码 首先第一层是instance == null , 他主要的作用是减少synchornized锁竞争的压力,避免在大量线程访问的情况下,导致锁升级为重量级锁,从而导致线程之间互斥而进行长时间堵塞,严重的甚至可能导致OOM的情况。所以加第一层可以有效的阻挡部分已经获取单例的线程再次进入,减少线程间锁的竞争压力。 第二层: 主要是保证在获取锁后的线程确保实例是空的情况下在进行创建,保证了单例仅创建了一次。

2022-06-18 15:27:09 363 2

原创 什么是微服务?为什么需要微服务?你真的知道吗?

什么是微服务?为什么需要微服务?你真的知道吗?

2022-06-16 11:16:39 248

原创 Ribbon源码轮询负载均衡算法你知道吗?

1.首先我们需要找到负载均衡算法的源头在哪里,那么就必须要先找到他的入口ZoneAwareLoadBalancer里面的chooseServer(Object key) @Override public Server chooseServer(Object key) { if (!ENABLED.get() || getLoadBalancerStats().getAvailableZones().size() <= 1) { logger.deb

2022-03-25 12:23:11 178

原创 Eureka初始化配置源码解读(二)-面向接口动态配置

首先如同初始化配置源码解读(一)一样的路径eureka-core项目下com.netflix.eureka包下的EurekaBootStrap类@Override public void contextInitialized(ServletContextEvent event) { try { initEurekaEnvironment(); //初始化配置 initEurekaServerConte..

2022-03-21 12:00:10 501

原创 Eureka初始化配置源码解读(一)

Eureka初始化入口-EurekaBootStrap1.首先找到eureka-core项目下com.netflix.eureka包下的EurekaBootStrap类下的contextInitialized方法.@Override public void contextInitialized(ServletContextEvent event) { try { //初始化Eureka环境 initEurekaEnvironment();

2022-03-21 11:51:18 225

原创 Eureka服务发现与注册原理

Eureka说白了就是简单的一个注册中心.主要用来记录需要被调用机器的ip地址,端口号等信息,具体如下图所示:pruduct端分别有两台机器执行者一样的服务,分别注册在注册中心里面,等待消费端进行消费对应的服务然后发起访问.整体如下图所示:这个就是简单的Eureka的服务发现与注册的原理,ServerA发起注册请求,将信息注册到注册中心里面,有调用端进行分发现,去注册中心进行拉去最新的注册信息,然后发起访问的过程,就是简单的Eureka服务发现与注册的原理....

2022-03-21 10:57:37 727

原创 你知道大型电商网站是如何均衡分流的吗?

你们有好奇过为啥大型电商网站一般情况下是如何抵挡住大型的流量的吗?展开话题之前,我们先来看看一般网站的部署结构:首先是用户发起访问,访问的是静态页面,静态页面中的变量数据是基于模板向后端数据库发起进行修改的.优点: 访问速度快,响应快.缺点: 页面模板会成为瓶颈,每次后端修改数据的时候,总需要用户主动点击进行刷新,那么在并发量大的情况下,数据库压力增加,就会导致数据加载慢的情况.当然如上的模型是基于最简单的单库支撑,但是在大型的电商环境下,都是多库,多服务的,形成一种微服务架构,例如如下

2022-03-18 17:43:31 777

原创 redis挂了怎么办?数据怎么恢复呢?

前言:1.线上的redis挂了,丢失的数据怎么办?如何恢复呢?都有哪种恢复方法呢?该如何恢复呢? 首先线上我们的redis一般都会做redis的数据持久化,以防止redis挂了导致缓存数据不可用的问题.那我们先来了解一下redis的存储方式 AOF和 RDB吧redis的存储快照之RDB概念:RDB持久化机制,会周期的性的对redis缓存的数据进行持久化,默认每隔5分钟会保存一次RDB快照.场景如下: 开始我们找了路人甲 帅哥乙 和工人丁 一起拍了和照片这就叫快照A...

2021-04-01 10:55:02 3496

原创 Spring 技术内幕笔录(一)

Spring Framewok(Core):包含IOC容器设计,依赖控制反转模式实现,同时集成AOP功能,另外包含MVC,JDBC事务处理模块.Spring Web Flow:Spring MVC基础上的Web工作流引擎Spring的设计理念:面向接口开发而不是依赖于具体的产品实现SpringIOC的作用:通过IOC容器实现依赖反转,把依赖关系的管理从Java对象中解放出来,交给IOC容器进行管理,从而实现对象直接关系的解耦Spring IOC:包含了最为基本的IOC容器..

2020-08-26 23:40:23 137

原创 HashMap 底层原理?面试官你尽管来,你看看我是否挡的住

1.HashMap你了解吧?说一下他的特点HashMap是以数组+链表以K-V的形式去存储数据的,带有下标索引值,因此HashMap查询块的特点,查询复杂度为O(1),又因为基于hash碰撞得出的链表使得插入的复杂度也为O(1).所以HashMap是数组和链表优点合体的一种数据模式2.1.7和1.8的HashMap有什么区别?1.7HashMap采用的是头插法,数组+链表的形式,1.8采用的是尾插法,数组+链表+红黑树3.那你说说他的数组+链表是如何实现的呢?每当put一个元素的时候,.

2020-08-13 01:01:15 184

原创 JVM-面试复习记录

1.JVM了解吗?可以和我说说他都有什么吗?JVM分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面,class类信息常量池等放在方法区里面,程序计数器进行记录线程执行行号.2.你可以和我说说压栈的过程吗?栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面有局部变量表,操作数栈,方法出口等信息,局部变量表存放的是8大基础类型加上一个应用类型,压栈过程遵循先进后出原则.3.你可说说JVM哪一个区域是不会发生OOM(内存溢出)的么?程序计数器,他是唯一不会发生内存溢出的区域

2020-08-09 17:34:48 114

原创 synchronized原理你知道吗?

1.概念synchronized 是利用锁的机制来实现同步的,而锁的机制有两种特性:a.互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程种的协调机制,这样在同一时间内只有一个线程对需同步的代码块进行访问,互斥操作往往也被叫做原子操作,具有原子性.b.可见性:必须确保在锁被释放之前,对共享变量锁做的修改,对于随后的获得该锁的另一个线程是可见的,可见底层是采用内存屏障去强行刷到主存或者高速缓存中的.2.synchronized的用法1.同步方法Public sy

2020-08-08 00:38:10 271

原创 多线程基础你知道吗?面试必备!

1.线程与进程的区别是什么?进程是所有线程的集合,每一个线程是线程中的一条执行路径.2.为什么要使用多线程?主要多线程可以提高程序运行效率.3.多线程创建方式是?a.继承Thread类,重写run方法b.实现Runnable接口,重写run方法c.使用匿名内部类Thread thread = new Thread(new Runnable(){ public void run(){ //执行线程需要的逻辑 }})4.继承Thread类好还是实现Runn

2020-08-04 15:44:30 101

原创 线程与进程的区别?

进程是所有线程的集合,每一个线程是进程中的一条执行路径.这下你明白进程和线程的区别了吧.

2020-08-04 09:36:06 115

转载 Date转化为XMLGregorianCalendar并格式化为yyyy-mm-DD HH:ss:mm

/** * Date转化为XMLGregorianCalendar * @param date * @return */public XMLGregorianCalendar convertToXMLGregorianCalendar(Date date) { GregorianCalendar cal = new GregorianCalendar(); cal.setTime(date); XMLGregorianCalendar ...

2020-05-11 10:23:02 750

原创 多线程复习

一. 线程与进程的区别总结: 进程是所有线程的集合, 每一个线程是进程中的一条执行路劲多线程优点: 提高程序效率应用场景: 分批发送短信二 多线程创建方式1.继承Thread类 , 重写run方法class CreateThread extends Thread {// run方法中编写 多线程需要执行的代码publicvoid run() {for (i...

2019-11-14 11:44:27 110

原创 线程堵塞

# 线程堵塞一个线程可以有种状态:1 新(new):线程对象已经创建,但尚未启动,所以不可运行.2 可运行(Runnable):意味着一旦时间分片机制有空余的cpu周期提供给一个线程,那个线程便可立即开始运行.因此线程可能在运行,也可能还没有运行,一旦条件成立,没有什么可以阻挡它运行,它即没有死掉,也没有被'堵塞'3 死(dead):从自己的run()方法中返回后,一个线程便已死掉....

2019-08-26 16:45:17 216

原创 数据结构和算法绪论

# 数据结构和算法绪论数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题程序设计 = 数据结构 + 算法简单说,数据结构就是关系,数据元素相互之间存在的一种 或多种特定关系的集合数据结构分为 逻辑结构 和物理结构逻辑结构:是指数据对象中数据元素直接的相互关系,也就是我们今后最需要关注和讨论的问题物理结构: 是只数据的逻辑结构在计算机中的存...

2019-08-26 16:42:42 92

原创 数据结构之链表

# 链表单链表简介编辑概念介绍链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。以“结点的序列”表示线性表称作线性链表(单链表),单链表是链式存取的结构。链接存储方法链接方式存储的线性表简称为链表(Linked List)。链表的具体存储表示为:① 用一组任意的存储单...

2019-08-26 16:42:09 157

原创 Java内存模型与线程

Java内存模型与线程Amdahl定律: 通过系统中的并行化与串行化的比重来描述多处理器系统能获得的运算加速能力:摩尔定律则用于描述处理晶体管数量与运行效率之间的发展关系设计系统:大部分计算机的运算速度与他的存储子系统速度的差距太大,大部分时间分花在了磁盘I/O>网络通信和数据库方法访问上,如果不希望大部分时间都花在等待其他资源的状态,就必须使用一些手段去吧处理器的运算能力"压榨"出来...

2019-08-26 16:39:02 103

原创 什么叫同步? 什么叫异步?

首先想要明白同步与异步的概念,就先明白同步就是共享,如果不是需要共享资源,那么就没必要进行同步,所以同步就是共享,相反异步就是独立,相互间互补干扰,而同步的目的是为了保证线程安全(保证了原子性,可见性)....

2018-11-15 17:35:36 2570

原创 锁竞争?

当线程进行了synchronized(同步)操作,线程获取了synchronized线程进行了lock, 其他线程则进行竞争,当锁释放的时候就会形成多个线程抢一把锁的问题 简称锁竞争,锁竞争的缺点回到是cpud的使用率增高...

2018-11-15 17:29:52 1541

转载 线程安全

 一 , 什么是线程安全?  当多个线程同时访问一个类的时候,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步及在调用方式代码不必做其他的协调,这个类行为仍是正确的,那么称这个类是线程安全的...

2018-11-15 17:25:59 71

原创 个人笔记 ---Netty编解码技术

编解码技术,就是java序列化技术,序列化的目的:第一个进行网络传输,第二个对象持久化虽然可以使用java进行对象序列化,netty去传输,但是java序列化的硬伤太多,比如java序列化没法跨语言,序列化后码流太大,序列化性能太低主流的解编码框架:JBoss的Marshalling包goole的Protobuf基于protobuf的KyroMessagePack框架JBoss的...

2018-08-08 17:03:42 140

原创 个人笔记 Socket网络编程(3)--netty框架

Netty实现通信的步骤:1.创建两个NIO线程组,一个专门用于网络事件处理(接受客户端的连接),另一个则进行网络通信读写.2.创建一个ServerBootstrap对象,配置Netty的一系列参数,例如接受传出数据的缓存大小等3.创建一个实际处理数据的类Channellnitializer,进行初始化的工作准备,比如设置接受传出数据的字符集,格式,已经实际处理数据的接口4.绑定端口,执行...

2018-08-08 16:59:08 176

原创 个人笔记--socket网络编程(2)

2.2 BufferBuffer是一个对象,它包含一些要写入或者要读取的数据.在NIO类库中加入Buffer对象,体现了新库与原IO的一个重要的区别.在面向流的IO中,可以将数据直接写入或读取到Stream对象中.在NIO库中,所有数据都是用缓冲区处理的.缓存区实质上是一个数组,通常它是一个字节数组(ByteBuffer),也可以使用其他类型的数组,这个数组为缓冲区,这个数值为缓存区提供了数据访...

2018-08-08 16:56:59 249

原创 个人笔记--socket网络编程(1基本介绍)

socket 网络基本编程 Serversocket 服务器端 Socket 客户端 又称"套接字" ,应用程序通常通过"套接字"向网络发出或者应答请求. 位置: java.net包 socket 是建立网络连接时使用的,在连接成功时,应用程序两端都会产生一个socket实例,操作这个实例,完成所需会话,他们之间的回话是平等的,不管Socket还是ServerSocket它们的工作都是通过Sock...

2018-08-08 16:54:47 154

原创 线程安全总结(复习专用)

1 线程安全定义:当过个线程同时访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步及在调用方式代码不必做其他的协调,这个类行为仍是正确的,那么称这个类是线程安全的;2 锁竞争:当线程进行了synchronized 操作 线程获取了synchronized 线程进行Lock 其他线程进行竞争 形成锁竞争问题(尽量避免多线程抢一把锁的问题) cause : 锁竞...

2018-08-08 11:33:04 108

原创 对象内存分配

1 对象优先在eden 分配注意Minor GC 和Full GC 区别新生代GC(Minor GC) :指发生在新生代的垃圾回收动作 ,因为java大多数对象都具有朝生夕灭的特点,所以Minor GC 非常频繁 ,回收效率也比较快老年代GC(Full GC/Major GC) :指发生在老年代的垃圾回收动作,一旦出现了MajorGC 通常带有一次的MinorGC (但不一定绝对) . ...

2018-08-08 10:50:29 313

空空如也

空空如也

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

TA关注的人

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