自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tinysakura的博客

每一次离散,都是为了下一次重聚。

转载 SSL/TLS协议运行机制的概述

转载自阮一峰的博客

2020-08-06 19:57:34 6

转载 Arthas redefine原理

转载自studyidea.cn的博客前言arthas可以热部署已经被虚拟机加载的类,这其实是借助Instrumentation的redefineClasses能力实现的,Instrumentation可以借助preMain和agentMain的方式分别在程序启动前和运行中获取jvm的信息,进行类的更改和替换,而arthas很明显,是通过agentMain的方式做到在程序运行时做的redefine。Attach ApiAttach API 位于 tools.jar 包,可以用来连接目标 JVM。Att

2020-08-05 11:54:04 20

转载 深入理解JDK中的Reference原理和源码实现

转载自throwable的博客前提这篇文章主要基于JDK11的源码和最近翻看的《深入理解Java虚拟机-2nd》一书的部分内容,对JDK11中的Reference(引用)做一些总结。值得注意的是,通过笔者对比一下JDK11和JDK8对于java.lang.ref包的相关实现,发现代码变化比较大,因此本文的源码分析可能并不适合于JDK11之外的JDK版本。Reference的简介和分类在JDK1.2之前,Java中的引用的定义是十分传统的:如果reference类型的数据中存储的数值代表的是另一块内存

2020-07-23 11:11:33 37

原创 ByteBuddy使用入坑

ByteBuddy官方文档ByteBuddy 介绍首先需要了解ByteBuddy是什么,ByteBuddy是一款java字节码增强框架,可以动态的生成java字节码文件,比起我们自己进行字节码文件的生成,它屏蔽了底层细节,提供一套统一易上手的Api,简化了字节码增强的学习难度。为什么需要字节码增强技术?ByteBuddy官方文档已经给出了答案The Java language comes with a comparatively strict type system. Java requires

2020-07-09 18:14:09 298

转载 JAVA SE 6新特性:Instrumentation

转载自IBM社区Instrumentation 简介利用 Java 代码,即 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为

2020-05-27 13:56:06 71

转载 @ConfigurationProperties注解使用

转载自博客在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或 application.yml 文件中,通过 @ConfigurationProperties 注解,我们可以方便的获取这些参数值使用 @ConfigurationProperties 配置模块假设我们正在搭建一个发送邮件的模块。在本地测试,我们不想该模块真的发送邮件,所以我们需要一个参数来「开关」 disab

2020-05-14 20:04:58 112

转载 aspectj与spring aop的区别

转载自Mythsman的个人博客这篇文章介绍了aspectj的原生使用方式(编译时织入,编译后织入,加载时织入),类增强织入和代理方式的区别,spring aop使用是织入还是代理?spring aop和aspectj的关系,值得一读...

2020-05-06 20:03:10 111

原创 springboot内嵌tomcat

tomcat有两种启动模式,除了独立启动外也可以内嵌进应用中启动,tomcat内嵌最有名的例子就是spring boot了,下面阅读源码:首先是springboot的启动入口org.springframework.boot.SpringApplication#run(java.lang.Object, java.lang.String…)public ConfigurableApplicati...

2020-04-30 14:26:22 79

原创 tomcat coyote模块请求处理流程

以Http2.0协议,io方式为nio为例时序图Connector启动时,启动其持有的EndPoint实例(NioEndPoint),EndPoint通过其持有的Acceptor轮询监听端口接收请求 protected class Acceptor extends AbstractEndpoint.Acceptor { @Override public...

2020-04-29 20:20:17 63

原创 tomcat catalina模块请求处理过程

请求处理CoyoteAdapter复制沟通Connector和Container组件,扮演的是Service的角色,tomcat处理请求的入口在CoyoteAdapter的service方法,当Connector接收到请求后根据协议进行转换后地调用CoyoteAdapter#service处理,主要处理过程如下根据connector转换的request和response创建Servlet的...

2020-04-27 16:41:46 78

原创 tomcat web应用加载

web应用加载时序图Hosthost加载web应用(context)的入口有两个在catalina解析Server.xml构造Server实例时,若配置文件的Host元素存在Context子元素,则将解析出的context作为子元素添加HostConfig自动扫描部署目录,创建Context实例并启动HostConfig对于Context的部署默认情况下,server.xml中...

2020-04-27 13:33:00 72

原创 tomcat基础架构

tomcat基础组件组件说明Server表示整个servlet容器,整个tomcat运行时只有一个server实例ServiceService表示一个或多个connector的集合,这些connector共享一个containner来处理加工过的请求,一个tomcat实例中可能有多个service,彼此独立Connector链接器,用于监听并转换Socket...

2020-04-27 10:30:02 132

原创 tomcat类加载器

Common: tomcat服务器顶层公用类加载器,默认加载$CATALINA_HOME/lib下的包Catalina: 加载tomcat应用服务器的类加载器,功能和common一致,默认为空(此时使用common加载服务器公共类)Shared:所有web应用的父加载器,默认为空Web App:web应用加载器,加载/WEB-INF/classes目录下的类,加载的类只对当前web应用可...

2020-04-27 10:07:44 47

转载 HttpClient模拟带Cookie的登录请求

转载自AndyWei123的博客模拟登陆首先是模拟登录,一般在一些防爬网站需要携带一些基础http头模拟成浏览器登录,一般只需要User-agent使用火狐浏览器,这里就不涉及了,登录通常是把用户名和密码加密发送给后台,当服务器收到HTTP请求时,服务器可以在响应头里面添加一个Set-Cookie选项。浏览器收到响应后通常会保存下Cookie,之后对该服务器每一次请求中都通过Cookie请求头...

2020-04-09 10:40:00 189

转载 了解分布式事务

转载自掘金前言不知道你是否遇到过这样的情况,去小卖铺买东西,付了钱,但是店主因为处理了一些其他事,居然忘记你付了钱,又叫你重新付。又或者在网上购物明明已经扣款,但是却告诉我没有发生交易。这一系列情况都是因为没有事务导致的。这说明了事务在生活中的一些重要性。有了事务,你去小卖铺买东西,那就是一手交钱一手交货。有了事务,你去网上购物,扣款即产生订单交易。事务的具体定义事务提供一种机制将一个活...

2020-03-29 16:01:59 74

转载 redis被bgsave与bgrewiteaof命令阻塞

转载自jbaowei2000的博客Redis 是一个性能非常高效的内存 Key-Value 存储服务, 同时它还具有两个非常重要的特性: 1. 持久化; 2. Value 数据结构. 这两个特性让它在不少场景轻松击败了 Memcached 和 Casandra 等.Redis 的持久化在两种方式: Snapshotting(快照) 和 Append-only file(aof). 在一个采用了...

2020-03-12 09:50:29 73

转载 MySQL间隙锁

转载自crazyYong的博客MySQL间隙锁你需要知道的之前我们介绍了排他锁,其实innodb下的记录锁(也叫行锁),间隙锁,next-key锁统统属于排他锁。行锁记录锁其实很好理解,对表中的记录加锁,叫做记录锁,简称行锁。生活中的间隙锁编程的思想源于生活,生活中的例子能帮助我们更好的理解一些编程中的思想。生活中排队的场景,小明,小红,小花三个人依次站成一排,此时,如何让新来...

2020-02-24 16:08:02 65

转载 Base64原理

转载自二师兄-公众号-程序新视界的博客Base64的由来目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,Base64到底起到什么作用呢?在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此...

2020-01-19 12:02:51 63

原创 sha1withrsa算法

转载自西门打扫雪的博客、别人眼中的过客的博客浅谈加密与签名我们一般的加密主要分2种。对称加密。非对称加密。顾名思义。对称加密就是秘钥是一样的。通过同一个秘钥加密解密。这一类的加密算法有DES,3DES,AES等。而非对称加密即使用公钥和秘钥2个。公钥进行加密,而私钥进行解密。这一类的加密算法主要RSA数字签名并不是加密。他只是将传递的参数进行签名。服务器端可以验签。主要作用有2个:1.保证数...

2019-12-13 11:36:09 170

原创 sentinel dashboard扩展

前言在前面的系列博文里我们已经介绍过了sentinel的dashboard的基础用法,使用dashboard可以详细的监控被保护资源的实际访问统计情况,与为不同服务配置的限流规则。sentinel dashboard的功能显然不止于此,官方留了很多功能的入口供使用者自行扩展,本篇博客抛砖引玉。对dashboard流控数据统计持久化与dashboard动态配置限流规则两方面进行扩展。其它功能入口都...

2019-11-11 20:00:35 205

原创 sentinel集成网关流控

简介使用网关代理服务请求是微服务架构下常见的做法,相比于对被网关代理的各个服务做限流服务,在网关进行统一的限流操作似乎是更好的做法,sentinel对java应用常用的两款网关框架spring-cloud-gateway和zuul1都做了适配。本文将以zuul为例,说明zuul网关接入senrtinel流控能力的步骤并对源码做简单解读网关限流模块分析sentinel中对应网关限流规则的实体...

2019-11-06 19:43:42 1404

原创 sentinel context组件源码分析

前言Context组件在sentinel中扮演的是一种什么样的角色呢?借用原作者的注释:This class holds metadata of current invocation其实就是保存一次资源访问链路元数据的类,链路的各个节点都能通过获取链路绑定的context来获取一些信息进行相应的处理。很多涉及链路的框架都会有类似设计,例如netty的ChannelHandlerConte...

2019-10-29 16:34:48 117

原创 sentinel限流相关指标统计源码分析

前言Sentinel 可以通过并发线程数模式的流量控制来提供信号量隔离的功能。并且结合基于响应时间的熔断降级模式,可以在不稳定资源的平均响应时间比较高的时候自动降级,防止过多的慢调用占满并发数,影响整个系统。sentinel的限流是基于信号量机制的,因此必定在底层维护了一套限流相关指标的信号量,下面从源码的角度分析一个请求进入被sentinel保护的资源,sentinel是如何记录信号量,...

2019-10-29 13:13:38 451

转载 使用线程安全的原子数组AtomicReferenceArray

转载自易百教程AtomicReferenceArrayjava.util.concurrent.atomic.AtomicReferenceArray类提供了可以原子读取和写入的底层引用数组的操作,并且还包含高级原子操作。 AtomicReferenceArray支持对底层引用数组变量的原子操作。 它具有获取和设置方法,如在变量上的读取和写入。 也就是说,一个集合与同一变量上的任何后续获取相关...

2019-10-28 14:24:02 170

原创 sentinel整合dubbo实现统一降级

统一降级策略在我们之前的博客里介绍了dubbo如何整合sentinel进行限流。既然用到了限流,那么每次让被限流的服务都抛一个异常让调用端自己处理显然不是优雅的解决方案,在者一些带有业务含义的降级策略只有在服务提供方才能完成,这时候我们就需要引入sentinel的降级能力。sentinel官方文档推荐的做法是使用注解。这种方法比较灵活但缺点是降级的代码比较分散,代码量也比较多,这时候我们需要一种...

2019-10-24 14:36:12 1246 4

转载 理解linux的系统负荷

转载自阮一峰的博客一、查看系统负荷如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了。在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行)。(另外,它们在苹果公司的Mac电脑上也适用。)你在终端窗口键入uptime,系统会返回一行信息。这行信息的后半部分,显示"load average",它的意思是"系统的平均负荷",里面有三个数字,我们可以从中判断系统...

2019-10-22 20:40:41 39

转载 linux split命令

转载自ball球的博客基本用法:split [-bl] file [prefix]参数说明:-b, --bytes=SIZE:对file进行切分,每个小文件大小为SIZE。可以指定单位b,k,m。-l, --lines=NUMBER:对file进行切分,每个文件有NUMBER行。prefix:分割后产生的文件名前缀。示例:假设要切分的文件为test.2012-08-16_17,大小...

2019-10-22 15:02:04 45

原创 sentinel整合dubbo加入热点参数流控能力

热点参数维度流控何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以...

2019-10-21 20:58:22 295

原创 阿里sentinel流控框架初探

netflix的hystrix作为业界使用最广泛的流控框架,sentinel的开发团队自然少不了对其的学习与改进,这里有一篇开发团队写的两者的对比,总结起来就是sentinel的实现更加轻量,进行流控的维度也更多样。使用sentinel的另一个理由就是其与国内广泛使用的各大微服务框架都做了集成,接入sentinel更加方便。这里是sentinel集成的其它框架的接入文档。下面我们以国内使用最为...

2019-10-12 17:40:10 546

转载 zuul2架构简析

上图是Zuul2的架构,和Zuul1没有本质区别,两点变化:前端用Netty Server代替Servlet,目的是支持前端异步。后端用Netty Client代替Http Client,目的是支持后端异步。过滤器换了一下名字,用Inbound Filters代替Pre-routing Filters,用Endpoint Filter代替Routing Filter,用Outbound F...

2019-10-09 18:01:50 546

转载 zookeeper核心概念

转载自Snailclimb的博客一 什么是 ZooKeeperZooKeeper 的由来下面这段内容摘自《从Paxos到Zookeeper 》第四章第一节的某段内容,推荐大家阅读以下:Zookeeper最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就试图...

2019-09-30 17:12:39 41

转载 kafka设计原理

转载自李克华的博客kafka的设计初衷是希望作为一个统一的信息收集平台,能够实时的收集反馈信息,并需要能够支撑较大的数据量,且具备良好的容错能力.1、持久性kafka使用文件存储消息,这就直接决定kafka在性能上严重依赖文件系统的本身特性.且无论任何OS下,对文件系统本身的优化几乎没有可能.文件缓存/直接内存映射等是常用的手段.因为kafka是对日志文件进行append操作,因此磁盘检索的...

2019-09-30 11:38:00 30

转载 java堆分析工具MAT使用教程

MAT简介MAT 全称 Eclipse Memory Analysis Tools 是一个分析 Java堆数据的专业工具,可以计算出内存中对象的实例数量、占用空间大小、引用关系等,看看是谁阻止了垃圾收集器的回收工作,从而定位内存泄漏的原因。什么时候会用到MAT?a) OutOfMemoryError的时候,触发full gc,但空间却回收不了,引发内存泄露b)java服务器系统异常,比如l...

2019-09-29 16:19:11 1003

转载 kafka核心概念

转载自happy19870612的博客一 Broker(代理)一台kafka服务器就可以称之为broker.一个集群由多个broker组成,一个broker可以有多个topic二 Topic(主题)每一条发送到kafka集群的消息都可以有一个类别,这个类别叫做topic,不同的消息会进行分开存储,如果topic很大,可以分布到多个broker上也可以这样理解:topic被认为是一个队列,...

2019-09-24 19:09:06 47

转载 logback配置指定类日志输出到指定日志文件

转载自里奥leo的博客打印日志package com.duke.api;@Controllerpublic class demo {private static final Logger logger = LoggerFactory.getLogger(demo.class); @RequestMapping("/test") public void testD...

2019-09-24 16:34:16 2250

转载 开源数据收集引擎Logstash

转载自狂乱的贵公子的博客Logstash介绍Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。集中、转换和存储你的数据Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”。(当然,我们最喜欢的是Elasticsea...

2019-09-24 14:54:02 107

转载 kibana日志收集

一、Kibana安装Kibana 是为 Elasticsearch 设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图表的形式展现出来。kiabana下载地址:https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0...

2019-09-24 13:10:29 1575

转载 go etcd客户端简单使用

转载自我的饭卡呢的博客获取etcd client首先获取clientv3:go get go.etcd.io/etcd/clientv3连接etcd:config := clientv3.Config{ Endpoints:[]string{"192.168.50.250:2379","172.16.196.129:2379"}, DialTimeout:10*ti...

2019-09-08 17:22:57 363

转载 Mac安装单节点etcd

转载自Mistra丶的博客安装etcd用brew安装非常方便,没安装的自行安装Homebrewbrew search etcd可以看到候选安装包brew install etcd安装执行etcd即可启动服务etcd可以看到以下信息:2018-11-26 17:35:02.659194 I | etcdmain: etcd Version: 3.3.102018-11-2...

2019-09-08 16:07:54 387

转载 etcdctl使用

转载自胡伟煌的博客使用etcdctl指令可以操作etcd集群,检查集群状态等环境变量设置使用etcdctlv3的版本时,需设置环境变量ETCDCTL_API=3。export ETCDCTL_API=3或者在/etc/profile`文件中添加环境变量vi /etc/profile...ETCDCTL_API=3...source /etc/profile查看当前etcd...

2019-09-08 16:00:55 376

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