自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (1)
  • 收藏
  • 关注

原创 字节码增强技术系列-1

字节码修改是什么?java开发人员都了解,java代码是需要经过javac编译成字节码,最后经过jvm的加载、连接、初始化,才最终被运行。这三个环节的主要工作如下:加载: 从网络、磁盘等存储中读取class文件到内存,并通过类加载器加载成class对象连接: class的验证、静态变量的存储空间准备、常量池中的符号解析成真实的引用初始化: 静态变量的初始化、静态代码块的执行了解这些后,我们可以思考下,如果要动态修改已经编译好的class文件,然后通知jvm重新加载,该怎么做呢?这就是字节码修改

2020-11-07 17:31:17 300

原创 在java应用中使用es简单介绍-1

索引模板设置ES提供索引新文档时自动自动新增索引的能力,但是由于其动态映射的结果可能不符合预期, 因此采用设置映射模板,通过索引名匹配进行映射设置。分片设置主分片:默认为5,直接采用副分片:提供故障转移能力、读能力,设置成1,过大回到只写效率较低编写模板template:用于匹配indexsettings:由于设置索引的分片等信息mapping:用于设置映射,关于类型type,由于es6之后不再推荐多type设置,默认写_doc即可doc_values:代表是否用于聚合,会生

2020-11-07 12:56:32 4988

原创 分布式事务框架Seata的实现原理

介绍分布式事务相关概念事务: 并发控制的单元,是用户定义的一组操作序列,需要满足ACID属性。 本地事务:事务由本地资源管理器管理。 分布式事务:事务的操作位于不同的节点。 分支事务:在分布式事务中,由资源管理器管理的本地事务。 全局事务:一次性操作多个资源管理器完成的事务,由一组分支事务组成。分布式事务实现规范对于本地事务,可以借助DBMS系统来实现事务的管理,但是对于分布式事务,它就无能为力了。对于分布式事务,目前主要有2种思路:XA协议的强一致规范以及柔性事务的最终一致性规范。

2020-10-12 21:48:42 1345

原创 花几分钟看懂logback

前言我们开发项目过程中,日志是必不可少的,但是我们一直在使用,却很少考虑其原理,本文就是填补此项空白。目录介绍日志框架通常采用门面模式来设计,也就是说开发在使用时直接使用api,而不关心具体实现细节,在java项目中,主要有以下对应产品:门面实现jcl/SLF4j/jboss-loggingLog4j JUL(java.util.logging) Log4j2 Logback本文主要介绍slf4j+logback这个主流的日志搭档。使用slf4j-api上文我们说

2020-09-23 20:23:06 407

原创 mysql索引之b+树解读

前言在今天的互联网企业中,mysql是必须掌握的技能,可能维护mysql的技能都已经交给dba或者直接采用相关云服务,但是了解其中的原理还是很重要的。例如mysql中的存储引擎、事务管理、binlog日志、主从同步等等,这篇文章主要记录下对mysql的b+树的学习总结,如果对此概念已经比较了解,就可以不用在阅读了。mysql的b+树索引的数据结构mysql的InnoDB常用的索引数据结构有2种,hash和b+树。hashhash就是建立hash表,根据hash算法,建立索引键和数据的映射关系,h

2020-09-17 13:50:56 319

原创 阅读《es权威指南》的要点学习&总结

分片均衡算法

2020-09-16 23:36:04 222

原创 流量回放repeater的原理分析二:repeater源码分析

前言在上文中我们分析了sandbox-jvm(以下简称sandbox)的核心源码,了解了sandbox实现类增强的原理。并且了解了sandbox的模块化加载能力,repeater作为一个独立的模块,其基于sandbox的能力实现了流量的录制和回放。下面我们从repeater的软件结构、录制过程、回放过程三个方面来分析其源码。软件结构代码角度jvm-sandbox-repeater  hessian-lite: 序列化服务  repeater-aide: 辅助工具  repeater-clien

2020-09-13 23:17:25 2247 1

原创 流量回放repeater的原理分析一:sandbox源码分析

目录先说下sandbox-jvm实现字节码增强的原理启动模块加载增强的完成再来看看repeater通过增强的功能实现录制与回放先说下sandbox-jvm实现字节码增强的原理启动我们知道启动分为attach模式和javaagent模式,其过程基本相同,入口都在AgentLauncher中,分别对应着agentmain和premain,它们都调用了install方法,以agentmain为例:public static void agentmain(String featureString, Inst

2020-09-08 00:00:26 2828

原创 什么是流量回放?有哪些方案可以借鉴?

前言做开发的人都知道自动化测试,自动化测试不需要人为去触发一个个行为,系统自动运行测试用例。价值不言而喻,但是如果自动化测试用例的缺失部分导致系统没完整测试回归可能会给系统带来风险。这里就是流量回放的价值:通过记录线上流量,在开发或者测试环境回放,来发现系统是否能够正常运行,降低代码变动整体系统带来的风险。原理参考...

2020-08-24 21:26:27 21295

原创 rocketmq-各模块-实现原理(简化的实现思想构建高效的系统)

设计理念追求简单和速度NameServer简化,减少复杂度,提高速度;高效的io存储,简化系统,不保证消息只被消费一次,需要消费者自己做幂等;核心模块NameServerNameServer采用了极简设计,节点之间不进行数据同步,因为即使NameServer不是强一致性,客户端也会通过重试避免故障。整体工作流程如下:broker向所有NameServer注册路由元数据,每30秒更新一次NameServer每10秒发送一次心跳检测,如果超过120秒未收到反馈则移除该broker相

2020-08-18 20:17:24 257

原创 序列化与反序列化编码原理

分类目前序列化方案中主要有以下2类自解析型序列化后的内容包含着field-value所有的信息,此类序列化方案有很好的兼容性,增加、删除字段可以很容易兼容例如: xml/json/java serializable半解析型丢弃field名称信息,通过index(通常用id+type)来代替,此类序列化对于兼容性有一定的限制例如:protobuf/thrift我们先简单介绍下各个序列化的原理,然后进行一些对比原理了解序列化的编码原理,才能有性能对比的理论性。那么我们一次来了解其大概。

2020-08-08 22:25:16 690

原创 mysql高可用之orchestrator的作用

mysql高可用的方案MHA在每个mysql节点部署mha node节点,上报mysql信息给mha manager节点,完成故障切换MGRmysql5.7之后官方支持的基于paxos协议实现的mysql集群PXC非mysql官方的mysql集群方案orchestrator的用武之地在mha方案中,mha manager并不是一个完善的分布式方案,存在单点问题。orchestrator类似于mha方案中分布式的mha manager的角色。基于raft协议,orchestrator实现了

2020-07-30 16:19:33 1735

原创 raft算法核心点

介绍raft是一种共识协议,被广泛应用于分布式系统中,相当于Paxos,它的状态更加简单、算法实现更加容易。核心点状态followers响应candidates和leaders的rpc请求;在选举定时器结束时,如果没有接收到有效的AppendEntries rpc或者没对candidate投票,就会变成candidate;candidates自增term,为自己投票;向其他peer发送rpc,如果收到大部分投票,则成为leader,如果收到来自AppendEntiries r

2020-07-28 21:29:46 216

原创 go语言指南-阅读重点笔记

与其他语言的交互在go中可通过cgo工具进行使用c语言的库函数,其原理没看懂, 这里有个说明后期有空在看看;局部变量赋值特殊方式package mainvar a = "G"func main() { n() m() n()}func n() { print(a)}func m() { a = "O" print(a)}输出: GOG字符串每个字符占用字节不固定1-4个字节,跟java全部是2个字节不一样,但是省去了需要进行utf-.

2020-07-27 17:51:43 128

原创 Guava整体功能介绍

基本工具避免使用null预校验流式比较器Ordering对象公共方法其中ComparisonChain链式比较器可以减少很多冗余代码,例如 public int compareTo(Foo that) { return ComparisonChain.start() .compare(this.aString, that.aString) .compare(this.anInt, that.anInt) .compare(thi

2020-07-09 17:20:58 1061

原创 初步了解云原生-service mesh

service mesh背景在分布式系统开发过程中,服务之间的调用是应用的核心逻辑之一,目前服务的提供者提供客户端,消费者使用客户端与服务端通信。这种传统的模式,有很多弊端,例如:客户端升级,需要消费者配合,例如配置中心的客户端升级,就很费劲;不同语言的消费者需要不同客户端;客户端和业务耦合在一起,造成系统更加复杂;服务通信的可控制能力以及服务通信的监控可视化能力弱;架构这里就是service mesh的作用,其如何解决呢?负责远程通信的模块作为sidecar和业务应用合并部署在一台机

2020-06-05 17:15:37 528

原创 数据结构-BitSet的实现原理-java.util.BitSet

今天看es看到,es使用bitset来标记一个文档是否匹配,于是就看了下java.util中的BitSet实现原理,记录一下该数据结构能够实现什么void set(int id):设置id存在boolean get(int id): 查看id是否存在容易想到用bit位的1或者0来代表, 那么一个long的长度8字节(64位),能存储64个位置的状态,对于id来说需要多少个long才能存储所...

2020-04-30 13:55:35 242

原创 一文简单记录-计算机编码

ascill计算机早期,为了满足128个英文符号的编码,使用单字节(8位bit)进行编码,0-127代表了128个字符;随着其他国家发展,欧洲的一些语言符号该字符集不能满足,于是在ascill上做扩展,但是依旧是单字节;但是单字节最多只能表示256个字符,对于中文来说远远不够,于是gb2312出场了;gb2312采用2字节,也就是256*256=65536个字符,但是对于中文超过10w...

2020-04-26 17:45:11 116

原创 redlock的大佬互撕 & 观后感

Martin Kleppmann 的质疑贴:http://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.htmlAntirez 的反击贴 :http://antirez.com/news/101

2020-04-10 22:14:00 1548

原创 mysql-表分区的种类:range&list&hash&key

分区的目的当单表的数据量较大,需要进行定期的数据归档删除时,或者提高查询性能,都可以采用分区分区的种类range分区list分区hash分区key分区range分区区间分区,常用与跟日期相关的,例如:create table table_demo ( id int, create_date datetime )partition by range (to_days(...

2020-04-10 14:19:52 995

原创 prometheus-4种metric类型说明

前提了解prometheus中存储的数据都是时序型,其数据模型都是如下:metric_name{label=value,…} value timestamp下文中说的数据类型只是客户端的封装prometheus 的4种metricprometheus的客户端中提供了4种metric,对于服务端来说并没有使用这些metric,服务端只是简单当成是独立的时序数据来使用Counter:计数...

2020-04-01 16:17:30 5768

原创 原生canal简单使用测试

mysql上创建database、创建table、插入数据use test; CREATE TABLE `canal_test` ( `id` bigint(20) unsigned zerofill NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL COMMENT '姓名', PRIMARY KEY (`id`) )...

2020-03-27 18:25:10 639

原创 springboot项目中使用mvc:annotation-driven问题

背景在一次无意的观察中,发现应用A(一个springboot应用)中的拦截器没有生效,该拦截器通过WebMvcConfigurerAdapter::addInterceptors注册定位分析了一圈代码没有发现异常的情况下,和其他拦截器生效的应用对比,发现唯一的区别在于A使用了mvc:annotation-driven注解该注解会自动生成3个Bean,其中一个bean为RequestMap...

2020-03-26 20:18:57 2761

原创 DataBus-入门介绍-1

背景在it存储系统中,可以分为OLTP/OLAP方案,其中OLTP用于主系统,OLAP用于离线分析系统;但是在追求实时性的系统中OLAP很难满足业务的需求;因此我们需要OLTP的系统数据变更实时的同步到OLAP存储中;方案可以通过业务双写,同时写入2个存储中事务控制复杂通过数据库日志同步介绍通过拉取、解析database的变更日志形成事件缓存在环形buffer中,实现客...

2020-03-23 15:02:48 3276 1

原创 简单介绍canal,从binlog说起

binlog对于Mqsql的主从复制能力实现是通过binlog来实现,其工作原理如下:主数据库叫做master,从数据叫做slavemaster 操作日志-save-> binlog (binlog有保留时间,所以是一种增量日志)slave -request-> master 获取binlogslave binlog-save-> relay log(中继日志)sl...

2020-03-17 11:21:20 693

原创 NoSql数据库:几款key-value数据库

redisc语言实现都知道redis是非常强大的内存数据库, 由于所有的数据都存储在内存中,其操作非常的快。但是由于内存比较昂贵,不可能把所有的数据都放到内存中,因此往往redis都用来做缓存。这带来什么问题呢,缓存的有效性如何保证,在持久化存储的更新发生时,需要同步更新缓存,在高并发的情况下,很可能带来不一致性的问题。(当然得有一定的并发量)如果redis可以把持久化存储的工作干了,是不...

2020-03-16 14:11:12 2606

原创 SpringCloud Stream

用于构建高度可扩展的事件驱动型微服务这句话听起来很拗口,实际上就是用于简化我们的应用程序对接MQ中间件的。为啥需要它假设我们现在使用的mq是rabbit,现在要切换到kafka,我们可能需要修改很多生产者和消费者的代码SpringCloud Stream就是为了将应用程序和MQ进行解耦来出现的,看下官网的图binder 提供与MQ中间件集成能力inputs和outputs是Sp...

2020-03-03 23:48:33 59

原创 SpringCloud zuul & gateway

介绍这2个组件都是SpringCloud生态中的网关组件zuul由Nexflix开源,SpringCloud做了 集成,但是后期SpringCloud推出了自己的gateway后,就不继续集成zuul 2.x了作用这里主要介绍SpringCloud gateway架构request请求到SpringCloud gatewayGateway Handler Mapping决定由哪...

2020-03-03 22:02:48 169

原创 SpringCloud Hystrix

背景基础服务的故障容易导致级联故障,引起雪崩工作原理为请求构造command执行command检查缓存中是否有对应的response检查断路器状态检查线程池或者信号量是否已满下游服务调用断路器状态计算fallback处理返回response特性断路器fallback资源隔离使用demo已经上传到gitee...

2020-03-03 10:52:31 66

原创 SpringCloud Consul

介绍上一篇说的Eureka是java语言开发,本篇介绍的该注册中心采用的语言是Go由HashiCorp公司开源,被SpringCloud集成关于Consul的介绍,之前已经写过,consulcap原则中支持cp,其中consul client会缓存一部分数据,因此其可用性相对较高支持多数据中心sidecar模式友好支持提供http/dns接口访问使用启动consulcon...

2020-03-03 01:24:22 203

原创 SpringCloud Eurak

Eureka介绍服务注册中心,由Netflix开源,SpringCloud对其做了集成,但是只开源到1.X版本服务中心需要具备的能力,它都具备服务注册能力服务发现能力服务健康监控能力负载均衡能力结构Eureka server集群中会进行复制以达到最终一致性满足cap原则的ap,不保证一致性...

2020-03-03 00:18:05 160

原创 SpringCloud-Bus 消息总线

作用在上文中提到,SpringCloud config配置更新无法通知应用进行更新,需要借助额外的系统,SpringCloud Bus就是为此而生。结构特点config-server通过依赖Bus,启动时会自动连接MQclient应用通过依赖Bus,启动时会自动连接MQgit pus会出发webhook,调用config-server的刷新api,发送消息到MQ,通知应用更新配置,...

2020-03-02 23:50:38 130

原创 SpringCloud Config

配置中心&消息总线整体结构SpringCloud Config特点spring-cloud-config采用git/svn作为其存储git push后,通过钩子发送通知到消息总线,其他应用通过监听消息总线进行配置更新缺点其性能依赖git/svn仓库,远远不如国内阿波罗等项目系统有点复杂,其配置更新需要依赖额外的系统,例如以zk作为存储的配置中心,可以通过客户端添加w...

2020-03-02 21:51:12 87

原创 从云原生谈到微服务

与云原生的关系在之前一位同事分享的云原生架构中,我们了解到了云原生架构中有4个重要组成部分微服务应用可以被独立的部署、更新、重启、水平扩容应用之间通过RESTful api进行通信DevOpsCICD工具、自动化发布帮助开发和运维快速发布应用持续交付频繁发布、快速发布、较低发布风险容器微服务的载体微服务架构的集大成者SpringClou...

2020-03-02 15:30:40 638

原创 consul-集群安装

consul集群安装指南安装准备安装包consul支持3以下几种安装方式编译好的二进制包源码安装在kubernetes上安装我们这次采用第一种安装方式,安装包下载安装组网consul采用3个节点的集群模式安装安装开始环境检查consul运行会占用以下端口 8600、8500、8301、8302、8300执行安装创建用户groupadd consuluserad...

2020-02-26 14:26:52 175

原创 consul-入门

争取最小篇幅完成 consul的介绍与使用介绍什么是Consul一种网格服务解决方案,提供服务发现、配置、分割能力。特性服务发现client 可以向Consul注册一个服务,其他client可以发现服务的提供者。client可以使用dns或者http协议健康检查client想consul提供检查的服务,运营人员可以使用consul实现client集群的健康检查key...

2020-02-15 20:30:10 189

原创 jvm的gc相关介绍

jvm内存区域如何识别垃圾回收算法回收器参考jvm内存区域一起看下内存区域:虚拟机栈线程私有,方法被执行时创建栈帧,主要保存方法中的局部变量表、操作数栈、动态链接、方法返回地址。方法调用时入栈,方法返回是出栈清除,不需要GC本地方法栈与虚拟机栈类似, 不过本地方法栈服务于本地方法调用程序计数器线程私有,线程获得处理器时间片执行时,从程序计数器...

2020-02-15 14:47:10 258

原创 prometheus-服务发现

名词定义 target:被监控的目标节点 概念已经知道prometheus是基于pull形式进行数据采集,prometheus可以通过静态配置更新监控的目标,但这样势必带来巨大的运维开销。如何实现服务的自动发现,这就需要引入中间人(服务注册中心),这就是服务发现:基于文件的服务发现通过创建target.json文件,将所有的target配置在target.json,在需...

2020-02-14 14:31:04 858

原创 prometheus-概念与架构解析

争取最小篇幅说明prometheus的全部内容,方便读者了解prometheus的整体概念概念定义开源的监控、告警解决方案何时使用时序化的指标监控,如系统性能指标、请求耗时、时间区间的请求数等等主要特性多维数据存储 PromQL强大的查询功能 强大的可视化工具 开箱自带浏览器可视化工具 可与grafana集成,利用grafana强大的可视化能力 高效的存...

2020-02-13 16:59:31 636

原创 hbase随笔

定义hbase是hadoop的分布式、可伸缩、列式存储的数据库,常用于非结构化数据的存储,提供海量数据的实时查询功能。其原理跟Google的Bigtable一致。运行在hadoop生态的HDFS之上,相对应的Bigtable运行在GFS(Google File System)之上。何时使用当数据量达到千万以上的时候才应该考虑使用hbase,否则数据分布在集群的一个节点,无法利用集群的高...

2020-02-12 20:25:11 179

《Redis深度历险 核心原理与应用实践》_钱文品.pdf

本书作者在掌阅维护着上千个 Redis 实例的集群; 他在 Redis 持久化,缓存,消息队列的各类实战经验,都毫无保留的凝聚到了这本小册子里,阅读后会对redis有更深入的认识; 本书在介绍原理性的知识时使用图来进行描述,非常的直观,例如: 跳表的介绍,逐步介绍跳表的查找与插入步骤;位图的介绍,通过签到场景的应用逐步介绍; 应用的示例非常多,例如: 线程可重入的分布式锁;heperloglog用于统计uv;bloomfilter用于过滤老数据;geohash用于计算地理位置信息; 我能列举的只是九牛一毛,其内容全面而且详细,强推。

2019-07-08

空空如也

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

TA关注的人

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