自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 在线DDL操作踩坑记录

使用ghost方式在线对mysql表进行ddl。

2023-06-18 16:47:06 376 1

原创 分布式事务

一、整体性业务,即:虽然有多库多表,但都在同一个部门下,或者是可控的情况采用TCC、seata分布式事务框架,实现分布式事务性能问题:事务采用mysql,进行分库分表解决性能问题,哪个步骤慢,就解决哪个步骤的性能https://www.cnblogs.com/jajian/p/10014145.html二、非整体性业务2.1:下游只提供接口,比较中心化的服务,比如积分服务,京豆服务等此时只能用记录日志的方式,记录整个事务的执行状态,并且记录每一步的执行日志,预留好回滚需要的数据.

2020-05-26 16:16:22 262

原创 全局事务ID在多应用中远程传递

代码原理来自seata的分布式事务中,全局事务ID在多应用中的传递:https://blog.csdn.net/f4761/article/details/89077400https://blog.csdn.net/yunqiinsight/article/details/88343096如果是HTTP协议,多应用直接无代码侵入,生成全局唯一ID,并且在远程调用时,此ID在多个应用间传递:1、发送http请求时,进行拦截,并且之前在生成ID时,将ID放入ThreadLocal中,..

2020-05-25 22:52:54 1350

原创 地理位置查找方式

一、其中一个是固定坐标,比如商场、商店等,指定位置查找1公里范围内的地标使用es的geo进行查找,将固定地标的经纬度存入es中,在输入经纬度,匹配范围搜索出200km内的酒店GET /hotel_app/hotels/_search{"query": {"bool": {"must": [{"match_all": {}}],"filter": {"geo_dis...

2020-05-25 16:39:34 2049

原创 消息队列数据有序性

一、生产过程同一个订单的所有业务都发送到同一个patition二、消费过程一个patition只有一个消费者,保证节点数大于等于patition的数量每个消费者再维护多个queue,相同的key进入同一个queue每个queue由一个线程去处理数据来提高并发,消费完确认ack,避免系统重启时queue中的数据没有处理...

2020-05-15 16:45:04 708

原创 raft算法

一、leader选举1、无其他节点发送过来请求情况下,先选择自己,并发出通知2、有三种情况:1、获得大多数节点反馈,成为leader,通知其他所有节点,其他节点成为follower;2、其他节点成为leader,收到通知,将自己变为follower;3、无任何节点获取过半选票,测试随机等待一个时间后发出选票,避免多次无人过半,有的先发出请求有的后发出,先发出容易获得选票成为leader避免脑裂:1、必须获取过半的选票才能成为leader2、每个节点只有一票二、数据同步过程1.

2020-05-13 00:52:28 208

原创 缓存穿透、击穿、雪崩

穿透:不存在的数据1、通天塔是将所有在线活动ID都加载到缓存中,先校验数据的有效性,再进行活动查询;2、还可以将不存在的数据的value值缓存为null,缓存时间视情况而定。击穿:缓存中没有,但数据库中有的数据1、通天塔中使用的策略是根据对应KEY值加分布式锁,获取到锁的节点去数据库中查询数据,然后写入redis缓存和本地缓存;2、其他节点或其他线程获取不到锁,则等待sleep...

2020-04-22 06:01:04 172

原创 Dubbo总结

服务暴露:大致可分为三个部分,第一部分是前置工作,主要用于检查参数,组装 URL:IP、端口、接口、方法、版本、注册中心类型registry://localhost:2181/com.alibaba.dubbo.registry.RegistryService?application=dubbo-provider&dubbo=2.6.2&export=dubbo://1...

2020-04-19 20:42:48 293

转载 Dubbo服务调用过程

1. 简介在前面的文章中,我们分析了 Dubbo SPI、服务导出与引入、以及集群容错方面的代码。经过前文的铺垫,本篇文章我们终于可以分析服务调用过程了。Dubbo 服务调用过程比较复杂,包含众多步骤,比如发送请求、编解码、服务降级、过滤器链处理、序列化、线程派发以及响应请求等步骤。限于篇幅原因,本篇文章无法对所有的步骤一一进行分析。本篇文章将会重点分析请求的发送与接收、编解码、线程派发以及响...

2020-04-19 15:22:38 845

转载 Dubbo服务LoadBalance

1.简介LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。负载均衡可分为软件负载均衡和硬件负载均衡。在我们日常开发中,一般很难接触到硬件负载均衡。但软件负载均衡...

2020-04-19 15:21:25 690

转载 Dubbo服务Cluster

1.简介为了避免单点故障,现在的应用通常至少会部署在两台服务器上。对于一些负载比较高的服务,会部署更多的服务器。这样,在同一环境下的服务提供者数量会大于1。对于服务消费者来说,同一环境下出现了多个服务提供者。这时会出现一个问题,服务消费者需要决定选择哪个服务提供者进行调用。另外服务调用失败时的处理措施也是需要考虑的,是重试呢,还是抛出异常,亦或是只打印异常等。为了处理这些问题,Dubbo 定义...

2020-04-19 15:20:43 350

转载 Dubbo服务Router

1. 简介上一篇文章分析了集群容错的第一部分 — 服务目录 Directory。服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由,筛选出符合路由规则的服务提供者。在详细分析服务路由的源码之前,先来介绍一下服务路由是什么。服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者。Dubbo 目前提供了三种服务路由实现,分...

2020-04-19 15:19:47 790

转载 Dubbo服务目录 Directory

1. 简介本篇文章,将开始分析 Dubbo 集群容错方面的源码。集群容错源码包含四个部分,分别是服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance。这几个部分的源码逻辑相对比较独立,我们将会分四篇文章进行分析。本篇文章作为集群容错的开篇文章,将和大家一起分析服务目录相关的源码。在进行深入分析之前,我们先来了解一下服务目录是什么。服务目...

2020-04-19 15:18:58 196

转载 Dubbo服务引用

1. 简介上一篇文章详细分析了服务导出的过程,本篇文章我们趁热打铁,继续分析服务引用过程。在 Dubbo 中,我们可以通过两种方式引用远程服务。第一种是使用服务直连的方式引用服务,第二种方式是基于注册中心进行引用。服务直连的方式仅适合在调试或测试服务的场景下使用,不适合在线上环境使用。因此,本文我将重点分析通过注册中心引用服务的过程。从注册中心中获取服务配置只是服务引用过程中的一环,除此之外,...

2020-04-19 13:51:39 167

转载 Dubbo服务暴露过程

1.简介本篇文章,我们来研究一下 Dubbo 导出服务的过程。Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑。整个逻辑大致可分为三个部分,第一部分是前置工作,主要用于检查参数,组装 URL。第二部分是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程。第三部分是向注册中心注册服务,用于服务发现。本篇文章将会对这三...

2020-04-19 13:49:32 338

原创 Dubbo中的概念URL、Invocation、Invoker、Protocol

URL:定义了调用的url如协议、协议、参数等信息public final class URL implements Serializable { private static final long serialVersionUID = -1985165475234910535L; private final String protocol; private f...

2020-04-17 16:03:07 2255

原创 Dubbo SPI机制示例

1、dubbo SPI区别于JDK SPI,根据指定的key值,获取接口对应的实现,具体由下面支付示例展示:订单支付接口,使用@SPI 注解标注,默认是阿里支付package spi;import com.alibaba.dubbo.common.extension.SPI;/** * @Author: zhangshaolong001 * @Date: 2020/4/...

2020-04-16 08:49:51 328

原创 kafka注意事项

每个patition可以有多个副本,但有且仅有一个作为Leader,并且所有的读写操作都在Leader上完成,Follower不提供读操作,只做主备,当Leader宕机时,出来参与选举成为LeaderLeader与Follower为主备关系,不是主从关系Leader宕机时,Broker Controller从Follower中选取一个新的主作为Leader,选举并不是由zk完成。Bro...

2020-04-01 15:19:34 696

原创 CMS GC日志分析

Young GC:GC (Allocation Failure) [ParNew...]2020-03-20T15:59:50.339+0800: 261.249: [GC (Allocation Failure) 2020-03-20T15:59:50.339+0800: 261.249: [ParNew: 674570K->11905K(707840K), 0.0206578 s...

2020-03-20 21:32:50 328

原创 jvm内存模型

程序计数器(Program Counter Register):是一块较小的内存空间,他可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成。虚拟机栈(Java Virtual Machine Stacks):描述的是java方法执行的内存...

2020-02-25 16:02:50 196

原创 JVM类加载机制

一、什么是类加载机制?虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。二、类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准(Preparation)、解析(Resolution)、初始化(...

2020-02-25 12:19:03 210

原创 RPC和servlet异步处理场景

同步情况下:只有一种线程,接到请求,并继续处理业务异步情况下:分成两部分线程,处理请求线程和工作线程同步模式下,当存在多种场景的业务时,有些业务处理时间较长或者IO等待时间长,比如远程调用,此时线程会被长时间占用,导致线程被占满,无法接收新请求;异步模式下,长时间IO由工作线程去处理,不影响请求的线程处理,当业务处理时间较短的业务请求过来时,处理请求线程任然可以继续处理这部分请求...

2020-01-14 12:26:40 603

原创 dubbo RPC调用超时处理--DefaultFuture

一、每次发起一次RPC调用,就创建一个Future对象,并将对象放入集合中//存放channel对象private static final Map<Long, Channel> CHANNELS = new ConcurrentHashMap<Long, Channel>();//存放Future对象private static final Map<Lo...

2020-01-13 18:37:30 934

原创 dubbo消费端调用过程

下方淡蓝背景( Consumer ):服务消费方使用的接口 上方淡绿色背景( Provider ):服务提供方使用的接口 中间粉色背景( Remoting ):通信部分的接口1、引用接口,此时可看到接口实现,为代理实现,handler是InvokerInvocationHandler2、进入InvokerInvocationHandler,执行invoke方法,进...

2020-01-13 18:15:57 505

原创 Apollo为什么用长轮询而不是长连接?

1、长连采用HTTP而非TCP的主要考虑点是多语言的适配;2、采用异步servlet,单机可以支撑1W个连接,也就是一万个客户端,一般10台服务器就能抗住一个中小型公司的连接数;...

2020-01-09 18:14:43 1628

原创 dubbo选javassist作为缺省动态代理原因

dubbo动态代理javassist和jdk区别:生成动态代理类:都可以根据字节码生成class文件,JAVAASSIST既可以通过动态代理也可以通过字节码生成class文件执行代理类的方法,javassist更快package proxySpeed;/** * @Author: zhangshaolong001 * @Date: 2019/12/3 8:19 PM ...

2019-12-03 20:42:19 1329 1

原创 dubbo标签的service与provider、reference与consumer的区别

<dubbo:service 与 <dubbo:provider是同一个级别provider是原始的服务提供方式:配置参数超级多,比较繁琐,学习成本大service是在provider的基础上给了很多默认值,用户使用时只需配置少量必需的值,大大降低学习成本。reference与consumer同理。...

2019-11-09 17:16:19 3865 1

原创 接口多实现优雅设计

那dubbo中cache功能举例,dubbo cache有jcache、lru、threadlocal三种缓存实现,具体要调用哪个,看dubbo协议cache参数,获取到cache参数后,获取对应的cache的实现;通过一个map集合,可先行将所有的实现都放入map中,key为cache参数的值,value为对应的实现或生产实现类的对应工厂。public abstract class Abs...

2019-11-09 16:58:57 209

原创 kafka消费端速度慢解决方案

一、增加patition数量, 有多少个patition就会启多少个消费者线程去消费,跟消费者服务节点的数量无关,只能patition有关。二、patition一样的情况下,改为批量消费,一次拉取多条数据,max.poll.records,利用多线程去处理数据,避免单线程处理批量数据时间过长,导致超时。提交方式问题:enable.auto.commit:1、默认为true,就...

2019-11-08 18:15:46 7786

原创 集群限流架构设计

一、单机版1、在本地进程中进行统计,使用常用限流方式2、Nginx中限流,使用lua脚本统计经过该Nginx的实例和接口量二、集群版A、B、C三个服务端节点组成集群,需要将某个接口限制TPS最大为1万;使用一个统计监控服务节点(主备方式做高可用),A、B、C三个节点每秒向统计节点发送每次统计结果数据:请求量、正确处理量、每次请求耗时等;统计监控服务节点每分钟统计一次,...

2019-10-30 22:54:08 671

转载 webSocket

WebSocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器。为什么传统的HTTP协议不能做到WebSocket实现的功能?这是因为HTTP协议是一个请求-响应协议,请求必须先由浏览器发给服务器,服务器才能响应这个请求,再把数据发送给浏览器。换句话说,浏览器不主动请求,服务器是没法主动发数据给浏览器的。...

2019-10-22 23:25:21 148

原创 Guava本地缓存

LoadingCache<String, Trie> localCache = Caffeine.newBuilder() .maximumSize(1000) .refreshAfterWrite(TIME_OUT, TimeUnit.SECONDS) .expireAfterWr...

2019-09-30 12:10:19 242

原创 springboot 自定义starter原理

总结:1、提供模块需要的配置2、使用需要的配置对模块需要的bean进行自动装配3、实例化一个Bean对象返回,依赖放就可以直接使用过程:1、新建配置类,写好配置项和默认的配置值,指明配置项前缀;2、新建自动装配类,使用@Configuration和@Bean来进行自动装配;3、新建spring.factories文件,指定Starter的自动装配类;一...

2019-09-20 12:42:41 655

原创 kafka根据offset查找消息原理

kafka消息文件有两个:索引文件和数据文件索引文件和数据文件对应关系1、一个partition包含多个segment文件,每个segment文件为1G左右;2、index文件:左边为本segment文件中的顺序编号,右边为数据文件中的实际物理地址,根据消息的长度地址偏移多少。3、log文件:消息数据文件,左边为该条消息在本segment文件中的实际物理地址偏移,右边为该...

2019-09-17 22:17:46 2284 4

原创 利用zk实现分布式锁

1、在zk上创建临时顺序节点2、获取路径下子节点列表3、用自己节点的序号对比最小的节点序号4、如果相等,则说明获取分布式锁成功,直接执行业务;执行完业务删除本节点;5、如果不相等,获取比自己小并且最靠近自己的节点(避免羊群效应,并不是所有比自己小的节点都需要监听,监听了也轮不到自己执行,只有最靠近自己的变动了才行),监听这个节点,如果此节点改变,重新获取列表,查看最小节点是不是等于...

2019-09-10 21:15:34 221

原创 客户端连接zk集群负载均衡策略

集群:zk1:2181,zk2:2181,zk3:2181zkClient采用轮询的方式连接集群节点,那么会不会都连接到zk1上,这样就达不到负载均衡的效果?zkClient配置好集群所有节点后,放在一个List中,使用Collections.shuffle(list);方法将list中的数据打乱,这样zkClient可以每次从index为0的下标开始尝试连接,连接不上就index++连接...

2019-09-04 22:39:33 1242

原创 redis的底层数据结构和五大数据类型底层实现原理

底层数据结构:https://www.cnblogs.com/ysocean/p/9080942.html五大数据类型底层实现原理:https://www.cnblogs.com/ysocean/p/9102811.html

2019-08-30 21:42:07 293

原创 zookeeper脑裂问题(无法自动解决,只能重启解决)

A、B、C三个节点,A为leader,BC为follower一、A和BC断开1、当B、C都与A断开时,A连接不到其他服务节点,认为其他节点都宕机了,此时A仍然认为自己是leader,继续提供服务,读服务没问题,可继续;当使用写服务时,由于提交事物无法获得过半保证,事物无法提交,所以不能提供写服务;2、而B、C是可以连通的,BC两个节点过半,可以重新选主,假如B选为leader,则B读写...

2019-08-30 21:12:31 479 1

原创 zookeeper数据同步

leader节点会为每个follower节点维护一个FIFO数据队列,更新数据时往队列中添加一、已提交的数据不能丢失节点1为leader节点2、3、4、5为follower节点1发起新的事物投票通过后,将事物保持在本地,然后同步给follower们,当节点2、3收到commit指令后,提交事物,4、5尚未收到commit指令,节点1宕机;此时需要重新选主,因为2、3...

2019-08-26 22:25:45 1044

原创 JVM解释器和即时编译器JIT

代码编译的过程就是把class字节码编译成机器语言,使机器能够直接运行的过程。JIT 编译器在运行程序时有两种编译模式可以选择,并且其会在运行时决定使用哪一种以达到最优性能。这两种编译模式的命名源自于命令行参数(eg: -client 或者 -server)。JVM Server 模式与 client 模式启动,最主要的差别在于:-server 模式启动时,速度较慢,但是一旦运...

2019-08-21 10:37:44 344

Servlet-API中文的385K

下了记得评论啊!!!!!!!!!!!!!!!!!!!!!!!

2009-10-16

空空如也

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

TA关注的人

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