自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux性能优化实战学习笔记-(1)CPU性能分析工具与套路

版权归Linux性能优化实战 作者倪鹏飞,本文主要是为学习、整理相关知识点,请勿用作商用,侵删。linux性能分析工具下图来自:Brendan D. Gregg http://www.brendangregg.com/相关slide: http://www.brendangregg.com/Slides/Velocity2015_LinuxPerfTools.pdf概念说明什么是平均负载?正确定义:单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。错误定义:单位时间内的cpu使

2021-04-22 11:37:49 905

原创 乱码对照表

下图具体出处不知道,侵删。

2021-04-15 19:29:11 7894

原创 soul源码分析总结篇之数据同步

如果没有看之前文章的朋友,请至少先看阅读源码准备与soul基础本文将包括如下内容:soul中数据同步的基本设计思路soul中数据同步各种方式的总结与对比本文内容参考了官方文档 数据同步设计 (这篇必读!!!),以及这篇文章 soul源码解读(十一)-- 数据同步总结基本设计思路首先,soul-admin将各种数据变更同步给soul-bootstrap时,按照我的个人理解,需要做到:高可用例如要考虑断线重连配置修改能立即生效,不必重启服务应提供多种选择,方便不同环境下部署使用

2021-02-09 15:06:19 584 1

原创 soul源码分析(5)Hystrix插件

说明本文代码基于soul 2021.2.8 master分支版本。准备请先阅读soul官方用户文档 -> Hystrix插件,选择器规则详解目标本文将包括如下内容:如何使用Hystrix插件分析soul相关源码如何使用Hystrix?这一点官方文档写的很清楚,要在soul中使用Hystrix插件,需要:在soul-admin中:插件管理 -> hystrix,设置为开启。插件管理 -> hystrix 中添加selector、rule,此处务必阅读官方文档

2021-02-09 13:45:51 283

原创 soul源码分析(4)divide插件如何实现负载均衡与探活

说明本文代码基于soul 2021.2.4 master分支版本。准备请先阅读soul官方用户文档 -> HTTP代理, 并事先使用过divide插件,阅读过divide插件源码,源码分析可以参考我之前写过的文章:soul源码分析(1)http插件的使用与soul插件工作流程分析目标本文将包括如下内容:divide插件如何实现负载均衡divide插件如何实现端口探活divide插件如何实现负载均衡?看过的divide插件源码的童鞋知道,该插件主要逻辑在DividePlugin中:

2021-02-08 17:39:05 216

原创 soul源码分析数据同步篇之HTTP长轮询同步流程

说明本文代码基于soul 2021.2.4 master分支版本。准备请先阅读soul官方文档 数据同步原理,对soul数据同步原理有个基本的了解。如何开启HTTP同步策略这个小节主要引自soul官网 使用不同的数据同步策略soul-admin的配置application.yml中添加如下配置,或是在启动参数中添加--soul.sync.http='',然后重启服务:soul: sync: http: enabled: truesoul-bootstrap的

2021-02-08 15:58:21 285

原创 【转载】docker 搭建 mysql 5.7 主从复制

下文引自一位学友分享的材料,出处暂时找不到,留在博客中做个备份,侵删。docker 搭建 mysql 5.7 主从复制安装docker,docker-compose, 一般安装了docker都会安装docker-compose,可以使用docker-compose -verison查看是否安装docker pull mysql:5.7, 拉取mysql5.7镜像编写docker-compose文件version: '2' networks: byfn: .

2021-02-07 17:10:04 127

原创 soul源码分析数据同步篇之zookeeper同步流程

说明本文代码基于soul 2021.2.4 master分支版本。准备请先阅读soul官方文档 数据同步原理,对soul数据同步原理有个基本的了解。如何开启zookeeper同步策略soul-admin的配置application.yml中添加如下配置,或是在启动参数中添加--soul.sync.zookeeper.url=你的zk地址,然后重启服务:soul: sync: zookeeper: url: localhost:2181 session

2021-02-06 15:32:53 203

原创 soul源码分析数据同步篇之WebSocket同步流程

说明本文代码基于soul 2021.1.27 版本。准备请先阅读soul官方文档 数据同步原理,对soul数据同步原理有个基本的了解。WebSocket同步流程1. soul-bootstrap WebSocket客户端处理逻辑soul-admin启动日志有关WebSocket的就一句:2021-01-27 19:54:29.694 INFO 30448 --- [0.0-9095-exec-1] o.d.s.a.l.WebSocket.WebSocketCollector : WebS

2021-01-28 13:33:13 229

原创 soul源码分析(3)SpringCloud服务如何接入soul以及SpringCloud插件分析

soul源码分析(3)SpringCloud服务如何接入soul以及SpringCloud插件分析说明本文将包括如下内容:如何将SpringCloud服务接入soulsoul的SpringCloud插件源码分析本文将以2021.1.25的soul源码进行分析。1. 如何将SpringCloud服务接入soul1.1 配置soul网关、soul-admin(1)启动soul-admin后台,操作步骤可以参考本系列第一篇文章阅读源码准备与soul基础(2)在soul-admin后台

2021-01-27 17:55:51 230

原创 soul源码分析(2)dubbo服务如何接入soul以及dubbo插件分析

说明本文将包括如下内容:如何将dubbo服务接入soulsoul的dubbo插件源码分析以soul2021.1.25代码做分析。apache dubbo与alibaba dubbo类似,本文只会分析apache dubbo。1. 如何将dubbo服务接入soul1.1 配置soul网关、soul-admin(1)启动soul-admin后台,操作步骤可以参考本系列第一篇文章阅读源码准备与soul基础(2)在soul-admin后台将dubbo插件打开路径:System Ma

2021-01-26 16:49:01 420

原创 soul源码分析总结篇之插件化设计

soul源码分析总结篇之插件化设计说明如果没有看之前文章的朋友,请至少先看阅读源码准备与soul基础本文将包括如下内容:soul用插件实现了哪些功能?soul如何实现插件化设计?Soul用插件实现了哪些功能?插件是Soul的灵魂。从架构图上就可以看出,soul主要功能都是通过插件来实现的,比如监控、各种请求的转发(HTTP、Dubbo、SpringCloud、Sofa等)、限流与熔断、WAF等等,用户也可以自定义插件来扩展soul。截止到2021.1.26,目前支持的插件如下(参

2021-01-26 15:04:41 356

原创 soul源码分析(1)http插件的使用与soul插件工作流程分析

目标演示soul网关HTTP插件的使用分析soul插件的整体工作流程,1. HTTP插件的使用1.1 在soul-bootstrap项目中引入如下插件,然后重新启动soul网关,启动步骤参见 soul源码分析_0_阅读源码准备与soul基础 <!--if you use http proxy start this--> <dependency> <groupId>org.dromara</groupId> &l

2021-01-22 19:45:19 355 1

原创 源码分析之JDBC实现原理与SPI机制

JDBC实现原理与SPI机制JDBC实现原理分析JDBC常见的代码一般是这么写:String url = "jdbc:mysql:///consult?serverTimezone=UTC";String user = "root";String password = "root";Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection(url, user, pass

2021-01-22 15:47:59 316

原创 源码分析之Spring Cloud Gateway中actuator是如何工作的?

本文目标预计介绍如下内容:在SCG中如何使用actuator?SCG中的actuator能做什么?在代码层面上,SCG如何实现actuator?如何基于SCG的actuator进行监控?1、在SCG中如何使用actuator?参见 https://docs.spring.io/spring-cloud-gateway/docs/2.2.5.RELEASE/reference/html/#actuator-api只需要在配置中开启如下配置(以properties配置方式为例,YAML方式属

2021-01-22 15:40:24 832

原创 源码分析之Spring Cloud Gateway中filter是如何工作的

简单起见,直接使用Spring Cloud Gateway(以下简称SCG)框架自带的spring-cloud-gateway-sample模块进行源码分析。目标分析如何添加filter,filter如何排序,filter如何执行事先准备参见源码分析之spring_cloud_gateway中请求被路由的过程解析 中的“准备工作”部分。分析过程SCG如何添加一个filter我们回到最开始,本文示例代码中添加filter的代码如下: @Bean public RouteLocator myR

2021-01-22 15:36:56 249

原创 源码分析之Spring Cloud Gateway中请求被处理的全过程解析

简单起见,直接使用Spring Cloud Gateway(以下简称SCG)框架自带的spring-cloud-gateway-sample模块进行源码分析。目标走一遍一个请求在SCG中被解析、路由的主流程,了解整体框架。各种细节部分会留到后面再写文章解析。准备工作可以做如下改造:1、修改yaml文件test.uri的值修改为:http://httpbin.org:80即test: # hostport: httpbin.org:80 # hostport: localhost

2021-01-22 15:33:51 1273

原创 soul源码分析(0)阅读源码准备与soul基础

soul源码分析(0)阅读源码的准备与预备知识目标fork代码本地编译成功启动网关soul基础fork代码github fork到自己的repo,然后在本地:git clone https://github.com/evasnowind/soulcd soulgit branch --set-upstream-to=origin/master由于目前master分支在不断迭代、开发中,个人建议可以先拉取一个稳定的版本,方便阅读。git fetch origin 2.2.1:

2021-01-21 15:23:09 329 1

原创 编译时报java.lang.NoClassDefFoundError: org/w3c/dom/ls/DocumentLS

我在编译soul源码时遇到这问题,错误很明显,缺少某一个类DocumentLS,但其实是JDK版本问题,选用JDK 8即可。比如我用的IDEA,打开Project Structure,需要留意下图中的两个地方,都改成JDK 8才可以。...

2021-01-19 19:46:16 2415

原创 EIP, ESB,API网关学习笔记

EIP、ESB、API网关学习笔记目标说明EIP、ESB、API网关:基本概念相互之间的区别与联系使用场景常见框架主要是知识整理,做个笔记,摘抄内容会给出出处。预备知识SOA在聊EIP ESB这些知识前,首先要了解什么是SOA。SOA是面向服务架构,是一种建设企业IT生态系统的架构指导思想。SOA的关注点是服务。服务最基本的业务功能单元,由平台中立性的接口契约来定义。通过将业务系统服务化,可以将不同模块解耦,各种异构系统间可以轻松实现服务调用、消息交换和资源共享。借用一

2021-01-14 19:21:10 1718 1

原创 如何部署activemq以及部署时遇到的相关问题

部署以centos为例,下载jar包,tar -zxvf xxx解压后,进入activemq解压文件夹,执行./bin/activemq console即可在shell前端启动,想后台运行的话执行./bin/activemq start即可。官方文档在这里,很简单:http://activemq.apache.org/getting-started遇到的问题1、activemq启动失败,报错报错信息如下:Caused by: java.lang.IllegalStateException: Be

2021-01-11 16:41:40 195

原创 spring cloud gateway基础

spring cloud gateway(后续简称SCG)本身就是spring cloud体系的一员,在对于java技术栈的系统使用起来比较方便,此外,SCG扩展性比较好,适合作为业务网关的基础、根据自身需求进行二次开发。关键组成部分谓词 predicate: 将请求匹配到对应的route上路由 route: 网关的基本构建块。它由ID,目标URI,谓词集合和过滤器集合定义过滤器 filter: 由特定工厂构造生成工作过程SCG接收客户端请求。请求与谓词匹配,获得对应的路

2020-12-28 20:00:23 192

原创 maven编译大型项目时简化编译过程的命令

如果项目较大,需要尽可能跳过无关痛痒的环节(比如自己本地编译、使用的话,可能没必要编译javadoc)、只要最终jar的时候,可以用下面命令mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true...

2020-12-10 18:11:23 425 2

原创 centos下如何启动mysql多实例

mysql安装有多种方式:具体详细参考官网 (https://dev.mysql.com/doc/refman/5.7/en/installing.html)mysql的安装方法有多种,如二进制安装、源码编译安装、yum安装;yum安装都是默认路径,不利于后期维护,安装相对简单;源码安装编译的过程比较长,若没有对源码进行修改且要求使用mysql较高版本;建议使用二进制安装,比较方便后期维护。本文就是采用这种方式启动多个实例。本文在centos 7.5下进行操作。准备工作下载mysql

2020-12-02 17:57:08 162

原创 使用sysbench对mysql进行基准测试

文章目录测试环境说明硬件软件测试过程1. 测试innodb 100w条记录的读写性能1.1 生成100w数据1.2 进行读写测试1.2.1 第一次直接执行100w次读写1.2.2 第二次执行100w次读写1.2.3 第三次执行100w次读写1.3 清理数据2. 测试myisam 100w条记录的读写性能2.1 生成100w数据2.2 进行读写测试2.2.1 第一次执行100w次读写2.2.2 第二次执行100w次读写2.2.3 第三次执行100w次读写2.3 清理数据测试总结分析纵向对比横向对比其他图形化遇

2020-11-27 15:55:55 717

原创 spring中加注解方法被同一个类内部方法调用导致AOP失效的解决方案(如@Transactional失效)

现象示例:public class A { //...... @Transactional public void serviceA() { ...... } public void serviceB() { ...... serviceA() ...... }}大概多数人都会遇到这么一个坑,如果使用spring的@Transactional给A类中的某个业务方法servi

2020-11-25 17:11:25 1722

原创 spring 自定义注解时使用AliasFor注解别名时 默认值无法被覆盖

事情是这样子的:我想自定义一个缓存注解,用来缓存方法返回值,并且支持自定义缓存超时时间,注解定义是这样:@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)@Inheritedpublic @interface MyCache { @AliasFor("value") int expireTime() default 60; @AliasFor("expireTime") int value

2020-11-20 18:19:53 3610

原创 分布式一致性与共识之(一)Raft

Raft基础在raft中,服务器节点共有3种状态(或者说角色):leader负责client交互和log复制,同一时刻系统中最多存在1个。follower节点的初始状态就是follower,follower只能被动响应请求RPC,从不主动发起请求RPC。如果follower在一定时间范围(后面会讲,这个叫election timeout)内没有收到leader的请求,则follower可以转变成candidate(If followers don’t hear from a leade

2020-10-22 16:43:39 572

原创 消息队列进阶之二常见消息队列rabbitmq,rocketmq,kafka的优缺点

常见消息队列比较产品优点不足RabbitMQ轻量级、易部署;支持灵活的路由配置;兼容性好;管理后台使用方便对消息堆积的支持并不好;与RocketMQ、Kafka相比,性能相对较差(每秒处理几万-几十万);实现语言是Erlang,学习曲线较为陡峭,不利于扩展或是二次开发Kafka设计初衷:处理海量的日志;与周边生态系统的兼容性非常好,尤其在大数据和流计算领域;Kafka 的性能,尤其是异步收发的性能,在RabbitMQ/Kafka/RocketMQ中是最好的,但与 Rock

2020-10-21 19:36:53 246 1

原创 elasticsearch的安装与配置

elasticsearch 安装与配置按照官网说明 https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html 解压后,启动程序,一般我们都需要后台启动,所以我使用这条命令启动:./bin/elasticsearch -d -p pid问题1:测试后发现,本地可以访问,但不能使用ip访问。即curl localhost:9200可以正常返回,但服务器ip:9200则访问不到。一开始觉得可能是防火墙问题,但试

2020-10-19 20:12:55 255

原创 mybatis xml常用写法-使用like关键字

需求:xml中需要在where中拼接like语句方法1:concat<where> <trim suffixOverrides="," > <if test="id != null and id != ''" > and id = #{id} </if> <if test="name != null and name != ''" > a

2020-10-19 20:10:46 6724

原创 源码分析之RocketMQ发送消息与接收消息

说明本文主要是本人学习、整理的笔记,涉及的内容可能来自网上,我会尽量注明来源。我本人阅读的rocketmq代码版本为4.7.1。producer发送消息有关producer生产消息,之前参考极客时间 消息队列高手课,写过一篇学习笔记,参考这里源码分析之RocketMQ Producer生产消息的实现及其设计模式分析此处再给出一些参考图片与资料producer发送消息总体过程此图来自:http://www.iocoder.cn/RocketMQ/message-send-and-receive

2020-10-13 20:08:40 554

原创 源码分析之Eureka服务端源码解析

文章目录说明eureka server基本功能启动eureka-server注册相关bean开启eureka server开启注册注册表管理核心类 InstanceRegistrycom.netflix.eureka.registry.InstanceRegistry是euraka server中注册表管理的核心接口。职责是在内存中管理注册到Eureka Server中的服务实例信息。实现类有PeerAwareInstanceRegistryImpl。服务注册接收服务心跳请求服务剔除剔除的限制剔除服务的定时

2020-09-29 17:52:25 533

原创 源码分析之Eureka客户端源码解析

文章目录说明预备知识一些注解的说明@ConfigurationProperties("eureka.instance")@ConditionalOnBean/@ConditionalOnClass@ImplementedBy@Singletoneureka架构eureka客户端源码eureka客户端工作流程DiscoverClientDiscoveryClient构造方法小结拉取注册表过程全量拉取 getAndStoreFullRegistry()增量拉取getAndUpdateDelta(applicat

2020-09-22 16:42:34 292

原创 源码分析之Java线程池ThreadPoolExecutor

文章目录0. 源码注释中的关键点1. 常用变量的解释2. 构造方法3. 提交执行task的过程4. addworker源码解析5. 线程池worker任务单元6. 核心线程执行逻辑-runworker参考资料我个人觉得,学习源码的姿势,首先是需要知道想学习的框架/工具如何使用,然后接下来再去看源码注释,看看当时代码作者是如何阐述代码的,再去看代码怎么编写,效果才最佳。同样的,接下来要分析的线程池,首先用途自不必说,不管有没有用过,ThreadPoolExecutor的运行机制、传说中的7个参数(核心线程

2020-09-21 20:48:11 90

原创 源码分析之Spring Boot如何利用Spring Factories机制进行自动注入

前言本文所涉及spring/spring boot代码,请参考spring boot 2.2.6对应版本。我们在刚学习spring boot时,有没有一个困惑:spring boot能够自动实例化很多第三方的依赖库?比如eureka、druid等。这个就涉及到spring boot的扩展机制spring factories。简单来将,spring factories类似与Java SPI机制,利用该机制,我们能够自定义实现一些SDK或是spring boot starter,其实例化过程由我们来实现,

2020-09-17 16:42:00 1266

原创 源码分析之Kafka Consumer消费消息的过程

源码分析之Kafka Consumer消费消息的过程文章目录源码分析之Kafka Consumer消费消息的过程说明Consumer如何使用?代码示例主要流程订阅主题的过程是如何实现的?经典思路:主动检测不支持的情况并抛出异常,避免系统产生不可预期的行为有关元数据更新拉取消息的过程是如何实现的?updateAssignmentMetadataIfNeeded() 更新元数据Coordinator#poll() 维持心跳,更新元数据ConsumerNetworkClient#poll() 封装所有网络通信

2020-09-11 14:58:01 1000

原创 源码分析之RocketMQ Producer生产消息的实现及其设计模式分析

说明本文所涉及的RocketMQ版本为4.7.1。类关系RocketMQ Producer的核心类、接口关系如下:引自:极客时间-消息队列高手课 https://time.geekbang.org/column/article/132889此处的设计使用了门面模式(Facade Pattern),接口 MQProducer 就是这个模式中的门面。类 DefaultMQProducer 实现了接口 MQProducer,它里面的方法实现大多没有任何的业务逻辑,只是封装了对其他实现类的方法调用;

2020-09-10 10:58:55 556

原创 源码分析之Netty线程模型

不得不说的Reactor模式提到Netty,就必须先说一下Reactor模式,源头应该是Doug Lea大神(学java的如果不知道这位神的请自己反思一下……)的Scalable IO in Java所提出的Multiple Reactors模式,参见下图如果想知道为何出现Reactor模式,需要将IO发展过程,都说一下可能才会比较清晰,此处就不一一展开,有兴趣的童鞋可以参考这篇帖子:Reactor模式那么,什么是Reactor模式呢?Reactor模式是事件驱动模型,有一个或多个并发输入源,有

2020-09-09 10:47:15 136

原创 Guava RateLimiter 源码分析

Guava RateLimiter基本使用学东西时我们应该尽量去看官网、看源码、看官方给出的单元测试。比如Guava RateLimiter,从RateLimiter类的源码注释中可以看到,官方给出的典型应用场景与使用:As an example, imagine that we have a list of tasks to execute, but we don't want to submit more than 2 per second: final RateLimiter rateLi

2020-09-02 16:31:08 128

空空如也

空空如也

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

TA关注的人

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