- 博客(223)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 3、Nio源码
简单来讲, Selector会不断地轮询注册在其上的Channel,如果某个Channel上面发生读或者写事件, 这个Channel就处于就绪状态,会被Selector轮询出来,然后通过SelectionKey可以获取就绪Channel的集合,进行后续的IO操作。通 道 与 流 的 不 同 之 处 在 于 通 道 是 双 向 的,流只是在一个方向上移 动( 一 个 流 必 须 是 Inputstream或者OutpulStream的子类),而通道可以用于读、写或者一者同时进行。我调试没有调试出结果。
2022-11-09 17:15:53
834
原创 2、linux IO模型分析
IO名词面对对象区别同步IO会阻塞用户进程进程触发IO操作是否会阻塞用户进程,用户的cup此时是否释放,所以同步异步针对的是用户进程异步IO不会阻塞用户进程阻塞用户进程需等待内核copy数据到用户空间的过程触发read()操作后,系统内核是否会立刻返回状态还是等待, 所以阻塞非阻塞是针对操作系统内核。非阻塞用户进程不需等待内核copy数据到用户空间的过程系统在读写的时候参与方可能有 cup、内存、硬盘、网卡、显卡等等外接设备,分析过程发现三个特点这个读写过程都有经过操作系统内核。
2022-11-09 17:06:17
615
原创 2、netty适合场景
Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性、可扩展性在同类框架中都是首屈一指的,它已经在很多项目、中间件实战得到证明,他们也是用netty构建异步通讯能力的程序。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等等,NIO编程的特点是功能开发相对容易,但是可靠性能力补齐工作量和难度都非常大;netty适合多对一场景,并发不是很高的场景,如果并发高通讯会被阻塞,被阻塞原因是客户端通讯是单线程模型。多客户端、一组服务端,客户端高并发通讯。
2022-11-09 17:00:25
400
原创 8、sql变更导致canal堵塞问题排查
一、场景描述20220120 15:50左右发布(发布单), dba采用rename方式变更表结构,导致变更时刻点,表名称和topic无法匹配上,导致canal爆找不到topic的错误,然后canal陷入死循环一直投递那个时刻点的日志(此现象已经在测试环境复现).//期望变更sqlALTER TABLE `ms_member_pay_order` ADD COLUMN `recycle_amount` decimal(12,2) DEFAULT NULL COMMENT '作废的余额金额',ADD
2022-03-03 16:51:50
889
3
原创 2、shardingjdbc工作原理分析
shardingjdbc在当前分库分表领域占有很大市场份额。可能和其宣传有关系,其文档突出自己的优点,对自己的缺点写的很少或者很不容易被注意到。所以,我们在使用shardingjdbc做业务的时候要关注他最终生成的sql是什么?是否符合我们的业务需求。这里不是黑shardingjdbc,不是shardingjdbc的问题,这是计算机行业难以跨越的问题。。
2021-11-26 10:26:20
2531
原创 2、shardingjdbc top n工作原理分析
一、shardingjdbc概述shardingjdbc在当前分库分表领域占有很大市场份额。可能和其宣传有关系,其文档突出自己的优点,对自己的缺点写的很少或者很不容易被注意到。所以,我们在使用shardingjdbc做业务的时候要关注他最终生成的sql是什么?是否符合我们的业务需求。这里不是黑shardingjdbc,不是shardingjdbc的问题,这是计算机行业难以跨越的问题。二、shardingjdbc SQL转义我们就拿一份按照季度的分库分表场景做演示吧。这里可以看出shardingjdbc
2021-11-26 10:03:34
704
原创 4、tcpip协议包结构分析
本文使用wireshark分析netty tcp通讯过程。一、3次握手抓包分析下图是wireshark 抓取 netty建立连接的3次握手tcp请求。//显示所有目标或源地址是192.168.1.1的数据包ip.addr == 192.168.1.1-logN
2021-08-03 19:39:12
233
原创 10、锁-锁分类及区别
一、单节点锁种类及使用场景2.1、公平锁 & 非公平锁锁是否按照先来后到的顺序排队获取。2.1.1、优点 & 缺点公平锁相对非公平锁不会导致线程饿死,cup无切换压力。由于其cup在队列等待整体并发要低于非公锁。2.1.2、常见案例2.1.2.1、常见公平锁ReentrantLock2.1.2.2、常见非公平锁大部分常见的锁都是非公平锁2.2、可重入锁 & 不可重入锁**不可重入锁:**比如线程执行lock_a()方法、lock_b()方法,当lock_a()
2021-08-03 19:38:50
444
原创 9、sysnchronized原理
一直就像研究下sysnchronized,由于没有空快拖一年了,本篇研究sysnchronized的维度就是实验+理论分析,找网上所有关于sysnchronized的分析做实验验证。一、与CAS锁性能比较本次测试场景是变量自增。最求的是准确所以cas锁的锁持有周期一定要包住方法的执行时间。锁类型短耗时方法10毫秒(tps)长耗时方法1000毫秒(tps)sysnchronized87.50.86CAS【ReentrantLock】86.7锁持有周期1秒0.
2021-08-03 19:34:50
355
原创 4、网关-内存-可用内存不足
最近2天发现网关有个节点出现可用内存不足告警。由于运维的jvm内存分配策略导致我们操作系统可用内存离告警只有382M的可用空间。jdk1.8一、节点内存使用监控从监控上我们可以看出来应用使用jvm内存没有发现有问题。但是此节点cup使用率比较高。1、物理内存、 Cached、Buffers、Free监控2、old、eden代内存使用3、Survivor、Metaspace区域4、线程数、cup使用 { // Copy entire entry from neighboring DS node int count = 0; for (int i = 0; ((i <
2021-08-03 19:12:36
418
原创 4、Ribbon-源码-客户端路由过程
本文主要分析springcloud路由主流程。springcloud路由主要使用Ribbon这个组件。 本文分析方法是看官方文档,网上查阅资料及源码调试。关于源码调试如何找到入口类?springcloud源码体系庞大,如果你要分析其源码不单要下载springcloud的源码而且要下载其依赖。springcloud源码只是冰山一角看他源码会一头雾水。可以通过debug日志、异常点切入进入核心流程源码。一、应用客户端路由过程分析springcloud应用端如何路由这点是本次分析的关键,大概流程有下面几步。
2021-08-03 19:11:57
257
原创 3、Eureka-源码-Eureka Server启动入口调试
springcloud eureka分为两个模块eureka-server、eureka-client。一、eureka入口分析经过下面的几步可以知道eureka的入口类是EurekaServerAutoConfiguration。@SpringBootApplication//1、关于eureka入口@EnableEurekaServerpublic class EurekaServerApplication { public static void main(String[] args)
2021-08-03 19:11:28
282
原创 2、Eureka-参数-客户端、服务端配置参数
一、Eureka Server配置参数#服务端开启自我保护模式,前面章节有介绍eureka.server.enable-self-preservation=true#扫描失效服务的间隔时间(单位毫秒,默认是60*1000)即60秒eureka.server.eviction-interval-timer-in-ms= 60000#间隔多长时间,清除过期的 delta 数据eureka.server.delta-retention-timer-interval-in-ms=0#请求频率限制器eu
2021-08-03 19:10:51
1572
原创 1、Eureka-源码-架构与部署
Eureka 是一种基于 REST(Representational State Transfer)的服务,以实现中间层服务器的负载平衡和故障转移。我们称这个服务为Eureka Server。Eureka 还附带了一个基于 Java 的客户端组件,即Eureka Client,这使得与服务的交互更加容易。客户端还有一个内置的负载均衡器,可以进行基本的循环负载均衡。在 Netflix,一个更复杂的负载均衡器包裹 Eureka 以提供基于流量、资源使用、错误条件等多个因素的加权负载均衡。一、eureka架构方
2021-08-03 19:09:44
341
原创 13、redis-分布式锁-redis分布式锁是否安全
我们在编程有很多场景使用本地锁和分布式锁,但是是否考虑这些锁的原理是什么?本篇讨论下实现分布式锁的常见办法及他们实现原理。一、使用锁的原则使用本地锁和分布式锁是为了解决并发导致脏数据的场景,使用锁的最高境界是通过流程设计避免使用锁,锁会牺牲掉系统性能为代价的。二、常见的分布式锁实现分布式锁总结:产品性能:redis>zookeeper>mysql,获取锁成功率:mysql悲观>zk>redis锁实现实现方式性能选型注意选择关注点mysql乐
2021-06-17 18:03:13
206
原创 1、Canal-源码-Canal启动入口类
学习中间件最好的方法是读源码,读源码最好的方式是调试一遍。调试第一步就是找中间件的入口。下面带着这几个问题找源码入口类及分析。后续的文章都是基于Canal 1.1.4版本做源码分析,咨询过Canal作者其核心代码几个版本都没有变化过。本文是笔者基于问题的启发式源码阅读技巧的展示,建议带着如下问题开始本文的阅读:如何找到Canal入口类?入口类CanalLauncher.class做了什么?Canal使用什么技术?一、如何找到Canal入口类在Canal的bin文件夹startup.sh下
2021-06-08 19:28:02
272
原创 7、Canal-性能测试-组件性能测试
以前根据Canal在测试环境中测试其产品性能,其测试报告如下。根据Canal性能测试结果,感觉不是很理想。和官方的测试报告偏差很大。根据官方的建议,用其测试类测试其各个Canal模块的性能出测试报告如下。测试canal版本1.1.4。一、测试环境环境测试版本类型配置官方环境疑是1.0.26MySQL AIntel® Xeon® CPU E5-2430 0 @ 2.20GHz (24core 96G) 日常业务库MySQL BIntel® Xeon® CPU
2021-06-07 19:50:32
1409
2
原创 6、Canal-linux-linux磁盘读写性能监控
1、iostat -m 硬盘读写性能[admin@vm-lw-barrelled-tms-performance-canal-t02 ~]$ iostat -mLinux 3.10.0-1062.el7.x86_64 (vm-lw-barrelled-tms-performance-canal-t02) 06/02/2021 _x86_64_ (4 CPU)avg-cpu: %user %nice %system %iowait %steal %idle 38.5
2021-06-07 19:49:56
653
原创 5、Canal-架构-Canal关于instance彻底独立思考
Canal架构binlog filter、消息发送配置都放在全局的存在,为什么不都instance中实现,Canal作为一个外部的容器存在,instance有自己的模型与实现逻辑? 这点Canal作者有什么考虑。比如:每个instance任务连接kafka、rocketMq、tcp有自己决定,干嘛受全局的canal配置干扰?目前的设计丢失instance灵活性。...
2021-06-07 19:49:13
253
原创 2、Canal-架构-Canal HA集群思考
集群目前可以分3类,高可用性集群(High Availability Cluster)HA、负载均衡集群(Load Balance Cluster)LB、高性能集群(High Performance Computing Cluster)HPC,这3类集群有什么区别呢?集群类别:一、高可用性集群HA一个集群只有一台主机,其他的节点都是从机的模型,从机可能什么活都不干,只负担主机的后备,也可能做一些任务型的工作,这部分工作不会关系数据的事务。 HA什么活都不干的集群:Canal,HA做部分活的集群:Ka
2021-06-07 19:47:56
363
原创 1、Canal-源码-Canal启动入口类
学习中间件最好的方法是读源码,读源码最好的方式是调试一遍。调试第一步就是找中间件的入口。下面带着这几个问题找源码入口类及分析。后续的文章都是基于Canal 1.1.4版本做源码分析,咨询过Canal作者其核心代码几个版本都没有变化过。本文是笔者基于问题的启发式源码阅读技巧的展示,建议带着如下问题开始本文的阅读:如何找到Canal入口类?入口类CanalLauncher.class做了什么?Canal使用什么技术?一、如何找到Canal入口类在Canal的bin文件夹startup.sh下
2021-06-07 19:46:32
271
原创 3、Canal-配置类-dynamicTopic详细解
这是Canal instance实例中的动态topic配置,这点在作者官方文档说明的不是很清楚网上的文档也比较乱七八糟尝试过几种配置都不行,我尝试通过代码调试的方式一点点摸索出规律,下面给总结下。#表过滤规则 格式:库\\..* 说明:过滤tms_0下面所有表,这个配置什么用?#应为binlog是mysql所有库实例共享的,换句人话就是你可以拉到别的库实例binlogcanal.instance.filter.regex=tms_0\\..*# mq config#默认topic就是匹配规则
2021-05-26 23:36:12
2919
2
原创 Canal-源码-Canal启动入口类
学习中间件最好的方法是读源码,读源码最好的方式是调试一遍。调试第一步就是找中间件的入口。下面带着这几个问题找源码入口类及分析。后续的文章都是基于Canal 1.1.4版本做源码分析,咨询过Canal作者其核心代码几个版本都没有变化过。本文是笔者基于问题的启发式源码阅读技巧的展示,建议带着如下问题开始本文的阅读:如何找到Canal入口类?入口类CanalLauncher.class做了什么?Canal使用什么技术?一、如何找到Canal入口类在Canal的bin文件夹startup.sh下
2021-05-24 01:30:17
528
原创 1、Canal-源码-Canal启动入口类
学习中间件最好的方法是读源码,读源码最好的方式是调试一遍。调试第一步就是找中间件的入口。下面带着这几个问题找源码入口类及分析。本文是笔者基于问题的启发式源码阅读技巧的展示,建议带着如下问题开始本文的阅读:如何找到Canal入口类? 入口类CanalLauncher.class做了什么?一、如何找到Canal入口类在Canal的bin文件夹startup.sh下我们发现有一个类com.alibaba.otter.canal.deployer.CanalLauncher好像是Canal的入口类.
2021-05-20 19:32:42
405
1
转载 1、Canal-Canal设计方案
https://blog.csdn.net/javazyw/article/details/103063669
2021-05-19 09:31:23
119
原创 4.Canal-Canal性能测试
最近项目需要需要变更数据,项目的数据链条Mysql(binlog)-->Canal-->RocketMq-->ES。由于以前生产环境出现Canal消费不及时导致堵塞发生故障,故本次在测试环境上测试Canal性能。本次压测的目的:第一个目的:测试出Canal的吞吐量,为生产环境数据切割做参考,第二个目的:找到导致Canal性能问题的原因,为后续的优化及项目架构做准备。一、硬件配置硬件环境 Canal节点环境 CPU 内存 磁盘读写速度 vm-lw-basic-
2021-05-18 17:35:02
2568
1
原创 3.apollo-apollo踩坑记录
2021 04:28 13:47:56 运维反馈我们有一个系统发布失败。打开日志发现大量的警告异常。2021-04-28 13:46:21,922 WARN [localhost-startStop-1] [AbstractConfigRepository.java:26] Sync config failed, will retry. Repository class com.ctrip.framework.apollo.internals.RemoteConfigRepository, reas
2021-05-17 15:18:44
4771
4
JVM堆数据结构&tcp如何从4次挥手状态分析出是客户端先断开还是服务端先断开
2021-05-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅