自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Elasticsearch架构与基本原理

文章目录1. 简介2. 集群原理2.1 角色2.2 分片3. 分布式文档存取3.1 路由3.2 索引、新建、删除文档3.3 获取文档3.4 更新文档3.5 搜索文档4. 分片的内部原理4.1 分段存储4.2 延迟刷新4.3 事务日志4.4 段合并参考1. 简介Elasticsearch 是一个分布式、可扩展、实时的 搜索与数据分析引擎 。Elasticsearch 不仅仅只是全文搜索,还支持结构化搜索、数据分析、复杂的人类语言处理、地理位置和对象间关联关系等,天生具有良好的水平伸缩性。Elastics

2021-01-05 22:46:57 385

原创 ES 6 常用API

文章目录1. Cluster API1.1 查看集群健康1.2 查看索引2. Document API2.1 增2.1.1 单个文档2.1.2 批量2.2 删2.2.1 单个删除2.2.2 批量删除 delelte_by_query2.3 改2.3.1 单个修改2.3.2 批量修改 update_by_query2.3 查2.3.1 获取单个文档2.3.2 批量获取 mget2.4 批量操作Bulk3. 检索3.1 检索和过滤3.2 结构化检索3.2.1 精确匹配检索 term terms3.2.2 范围查

2021-01-05 22:45:55 392

原创 线上MySQL死锁分析——索引设置不当导致的死锁

文章目录1. 背景2. MySQL InnoDB的锁机制2.1 MySQL中的锁类型2.2 行锁的加锁规则2.3 死锁检测机制3. 本文案例分析3.1 分析InnoDB status日志3.2 Explain 死锁SQL、查看表的索引信息3.3 查看业务代码3.4 实验验证猜想3.5 问题解决4. 如何预防死锁参考1. 背景9月4号负责的系统接入了在线诊断分析平台,其中的运行时Java异常追踪工具能够捕获并上报线上异常。接入后发现系统会频繁的产生org.springframework.dao.Deadl

2020-11-27 17:25:47 2570 2

原创 运单状态机设计及全流程异常跟踪整体架构

文章目录1. 业务背景1. 需求1.2 难点2. 状态机简介2.1 定义2.2 举例3. 运单环节状态机实现4. 整体架构1. 业务背景1. 需求业务方希望能够对运单的揽收、干支运输、派送等各个环节的操作规范进行监控,同时将温湿监控、设备监控、配置监控等孤立的报警项映射到运单环节之上。运单环节由运单状态映射而得,譬如干支运输环节的典型状态区间是封车–>解封车。1.2 难点运单环节映射最大的难点在于,无论是在系统上还是运营上,运单的各个关键状态都不是严格齐全的、有序的,存在大量的漏操作、补操

2020-11-26 21:58:03 1058

原创 JVM的高效并发

文章目录1. 为什么要并发、并发导致了什么问题2. 内存模型2.1 可见性和有序性2.2 volatile2.3 Happens-Before3. 线程3.1 Java 线程的实现3.2 线程安全3.3 锁优化(synchronized)参考1. 为什么要并发、并发导致了什么问题CPU、内存、IO设备三者之间的速度差异一直是一个核心矛盾,为了解决缓解这一差异,计算机系统架构上作出了以下优化:CPU增加多级高速缓存,作为内存和CPU之间的缓冲,以缓解CPU和内存之间的速度差异;操作系统增加进程、线程

2020-11-19 00:02:56 320 5

原创 利用Redis 和 Reactor模式 实现的支持高频重置操作的延时队列

目前业务上需要对设备信号中断进行监控,在信号中断达到一定时间后进行报警,属于延迟任务范畴。但与典型的延迟任务不同的是,需要支持频繁的修改延迟时间——当设备上传新的信号时,顺延延迟时间。项目使用的调度框架并不支持这一特性,故研究了下延迟任务的常见解决方案。概念有别于定时任务的固定触发周期,延时任务通常是由一个事件触发,并在一定时间后,触发另一个事件。延时任务应用的业务场景很多:订单超时未支付、未被接单取消资源到期前提醒物联网设备的延时指令常见实现扫表将任务存储于数据库中,利用定时任务或者后

2020-11-04 23:02:53 421

原创 职责链

定义多个处理器收尾相连组成一个链条,依次对同一个请求进行处理。链条上的处理器各自承担各自的职责,所以叫做职责链模式。责任链模式的作用是:复用和扩展,降低代码复杂度。特别是在框架开发中,可以利用职责链提供框架的扩展点,在不改变源码的情况下,基于扩展点定制框架的功能。此外,利用职责链还可以灵活地配置组合处理器。GOF 定义:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。在GOF的定义中,如果链条

2020-11-03 22:07:44 368 2

原创 有限状态机

有限状态机在实际的软件开发中,状态机并不常用,但是在能够用得到的场景中,可以发挥出很大的作用。状态机常用在游戏、工作流引擎等系统开发中,其实现方式有分支逻辑法、查表法、状态模式等。1. 概念1.1 定义有限状态机(Finite State Machine,FSM)简称状态机。状态机有三个组成部分:状态(State)、事件(Event)、动作(Action),事件(转移条件)触发状态的转移和动作的执行。动作的执行不是必须的,可以只转移状态,不指定任何动作。总体而言,状态机是一种用以表示有限个状态以及这

2020-10-30 10:59:09 7566 2

原创 堆内存OOM分析

1. 背景7月6号系统应用频繁挂掉,UMP显示内存、CPU、GC次数短时间内飙升,日志java. lang. OutOfMemoryError: Java heap space显示JVM发生堆内存的OOM,并成功dump了内存快照。2. OOM的基本分析思路2.1 OOM的易发区域在《Java虚拟机规范里》中除程序计数器外,其它运行时内存区域都有可能发生OOM。具体到HotSopt,栈发生OOM的机率很小(不支持栈的动态扩展,除非在线程申请栈时就内存不足)。常见发生OOM的区域主要有两种:Jav

2020-10-28 21:39:56 1163

原创 JVM的内存自动管理

文章目录1. JVM的内存区域1.1 运行时数据区域1.1.1 栈1.1.1.1 虚拟机栈1.1.1.2 本地方法栈1.1.2 Java堆1.1.3 方法区1.1.4 直接内存1.2 对象1.2.1 对象的创建1.2.2 对象的内存布局1.2.3 对象的访问定位2. 垃圾收集器与内存分配策略2.1 关键技术点2.1.1 判断对象是否存活2.1.2 OoPMap2.1.3 安全点2.1.4 Rembered Set(记忆集)和 Card Table(卡表)2.1.5 写屏障2.1.6 三色标记2.1.7 引

2020-10-21 23:33:01 409

原创 ES文档字段删除与索引重建

背景FastJSON序列化文档删除字段elasticsearch删除字段mapping 不能删除字段,只能通过重建。文档删除字段,通过脚本更新,利用ctx._source.remove(‘fieldName’)删除。POST waybill_exception_report/_doc/_update_by_query{ "script": "ctx._source.remove('targetOperationLocation')", "query": { "bool

2020-09-28 19:47:48 6237 1

原创 8. MySQL的主从复制

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录1. MySQL主从复制的原理2. binlog的格式参考1. MySQL主从复制的原理MySQL的主库和从库之间通过binlog进行同步,是一种逻辑复制策略,主要涉及主库的binlog dump线程和从库的IO线程、SQL线程。主库的binlog dump 线程和从库的

2020-09-17 10:41:41 126

原创 7. MySQL InnoDB的事务原理与实现

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录7. MySQL InnoDB的事务原理与实现1. 概念1.1 ACID1.2 隔离性与隔离级别1.2.1 并发问题1.2.2 隔离级别1.3 分类1.4 事务的启动方式1.5 事务在InnoDB中的实现2 隔离性的实现2.1 版本2.2 视图2.3 当前读和快照读(一致性非锁定读

2020-09-17 10:39:44 464 2

原创 6. MySQL InnoDB的锁与算法

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录1. 什么是锁2. 全局锁3. 表级锁3.1 表锁3.2 元数据锁3.2.1 作用与加锁规则3.2.2 如何给表加字段4. 行锁4.1 行锁算法4.2 两阶段锁4.3 加锁规则4.3.1 规则4.3.2 例子4.4 死锁的检测与处理参考1. 什么是锁锁用于管理对共享资源的并

2020-09-17 10:15:21 324

原创 5. MySQL InnoDB的索引与优化

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录1. 索引与表的维护2. 使用自增主键3. 使用覆盖索引3.1 回表3.2 利用覆盖索引减少回表3.3 InnoDB对回表的优化3.3.1 MRR(Mutil-Range Read)3.3.2 索引下推(Index Condition Pushdown,ICP)4. 使用联合索引5

2020-09-17 10:08:52 1060

原创 4. InnoDB的索引与算法

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录4. MySQL InnoDB的索引与算法1. 常见的索引模型2. B+树索引2.1 B-Tree--有序数组+平衡多叉树2.2 B+Tree---有序数组+链表+平衡多叉树2.3 对比2.4 B+树的操作2.5 InnoDB为什么选择B+树3. 索引组织表3.1 聚簇索引3.2

2020-09-17 10:00:42 137

原创 3. InnoDB的表结构

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录1. 概述2. 逻辑存储结构2.1 表空间2.2 段2.3 区2.4 页2.4 行3. 数据页(索引页)结构4. 行记录格式4.1 Compact 行记录格式4.1.1 整体结构4.1.2 不同类型的数据如何存储4.2 Dynamic和Compressed行记录格式参考文档1

2020-09-16 23:34:25 349

原创 2. InnoDB的基础架构与关键技术

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录1. 整体架构1.1 内存结构1.1.1 缓存池 buffer pool1.1.2 change buffer 写缓存1.1.3 自适应哈希索引 AHI1.2.4 log buffer 日志缓存1.2 硬盘结构1.3 后台线程1.3.1 Master Thread1.3.2 IO

2020-09-16 23:25:38 167

原创 1. MySQL的基础架构

MySQL系列文章第一章 MySQL 基础架构文章目录MySQL系列文章1. MySQL的逻辑架构1.1 Server层1.2 存储引擎2. 并发控制2.1 读写锁2.2 锁粒度2.2.1 常见的锁策略2.3 死锁3. 事务3.1 事务概念3.2 事务日志4 MVCC多版本并发控制参考思维导图1. MySQL的逻辑架构与其它数据库相比,MySQL最大的优势在于其灵活性,这种灵活性来源其存储与计算分离的架构设计。MySQL将查询处理以及其它系统任务与存储/提取相分离,使得可以根据不同的使用场景,

2020-09-16 23:14:45 154

原创 Kafka-高性能

1. 架构分区Kafka的主题多分区机制,分区的副本、领导者副本一般均匀地分布在不同的Broker上,实现了并行处理,为Kafka提供了高伸缩性以及负载均衡能力。基于ISR的动态复制方案Kafka既不是完全的同步复制,也不是完全的异步复制,而是基于ISR实现了动态复制方案。同步副本是可变的,这样避免了较慢的副本拖慢整体速度,同时也兼顾了数据一致性。2. 磁盘2.1 零拷贝Kafka需要在磁盘和网络之间传输大量的数据,在传统的非零拷贝场景下,比如使用InputStream和OutputStrea

2020-06-21 00:19:19 334

原创 Kafka-可靠性

1. Kafka对可靠性的承诺1. 分区消息的有序性Kafka可以保证同一个分区消息的先入先出。生产者默认的分区策略是轮询+按键哈希映射,在分区数量不变的情况下,具有相同键的消息会被生产到同一个分区。但是需要注意的是,在max.in.flight大于1的情况下,重试可能会导致消息乱序。max.in.flight.requests.per.connection参数表示生产者在收到Broker上一个响应之前可以发送多少个消息批次。当该参数大于1时,重试就可能会导致分区消息乱序。譬如:第一个批次提交失败,第

2020-06-21 00:17:15 279

原创 Kafka-Broker

1. 集群成员Kafka使用Zookeeper来管理集群成员(Broker),Broker启动时通过创建临时节点将自己注册到在Zookeeper,Zookeeper会将Broker的变动信息通知给控制器。1.1 控制器控制器是一个Kafka集群中的一个Broker,其作用是在Zookeeper的帮助下管理和协调整个Kafka集群。Zookeeper概述Zookeeper是一个高可靠性的分布式协调框架,核心功能是提供了:文件系统+通知机制。ZK在内存中以树状目录结构存储数据,保证了高吞吐量和低延

2020-06-21 00:15:51 747

原创 Kafka-消费者

1. 消费者和消费者群组Kafka引入了消费者群组的概念:一是为了同时实现两种消息引擎模式:点对点的消息队列模式,和发布/订阅模式;二是为了能够横向伸缩消费者消费能力;三是为了构建高可用的消费者集群。群组内的消费者订阅同一个主题,每个分区的所有权只能被一个消费者持有,多余的消费者会处于idle状态。新版Kafka Customer采用了双线程设计:用户主线程和心跳线程,以解耦消息的处理逻辑和存活管理逻辑。消费者的消费请求必须发送给首领副本,否则会收到“非分区首领”的错误,此时消费者需要再次发

2020-06-21 00:12:02 400

原创 Kafka-生产者

1. 发送消息主要步骤ProduceRecord对象包含了目标主题和消息内容,也可以额外指定消息键或者分区。调用send()方法后,序列化器首先将消息和键序列化成字节数组,随后将数据传递给分区器。分区器的默认分区策略是:轮询+按键哈希映射。确认分区之后,消息被加入到该分区的一个批次之中,后台的Sender线程负责将消息批次依次发送到对应的Broker上。当消息被成功提交时,Broker会将其偏移量返回;否则,返回错误,生产者在收到错误之后可以选择进行重试。2. 发送消息生产者的生产请求必须发送给首领

2020-06-21 00:08:08 368

原创 Kafka-概念

1. Kafka是什么?Kafka是一款开源的消息引擎系统,也是一个分布式的流处理平台,官网对其定位为a distributed streaming platform。作为消息引擎,同时支持两种消息引擎模型:消息队列模型(点对点模型):消息只能被一个系统使用,即每个消息只能被处理一次。发布/订阅模型:存在多个发布者和多个订阅者,消息被广播给所有订阅者。消息引擎的主要作用在于:削峰填谷、系统解耦。作为流处理平台:提供Streams API用以对数据流进行实时计算因此,Kafka主要用于

2020-06-21 00:02:31 1006

原创 9. MySQL EXPLAIN解析

这里写自定义目录标题1.EXPLAIN简介2.EXPLAIN输出格式2.1 EXPLAIN 包含的列2.2 id列2.3 select_typeSIMPlEPRIMARYSUBQUERYDERIVEDDEPENDENT SUBQUERYUNION & UNION RESULT2.4 table2.5 type2.6 Extra3. 问答3.1 EXPLAIN不总是说出真相?3.2 EXPLAIN时MySQL不会执行查询?附录建表语句参考文献1.EXPLAIN简介EXPLAIN语句用来获取MySQ

2020-06-20 23:37:14 201

转载 编程的智慧

编程的智慧编程是一种创造性的工作,是一门艺术。精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋。然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获。反复推敲代码有些人喜欢炫耀自己写了多少多少万行的代码,仿佛代码的数量是...

2019-08-12 17:55:52 183

原创 LeetCode SQL 刷题

文章目录MySQL配置数据库准备1. 大国2. 换座位2.1 solution-12.2 solution-23. 交换工资solution-14. 有趣的电影solution5. 超过5名学生的课solution-1 group by + havingsolution-2 group by + 子查询6. 查找重复的电子邮箱7. 删除重复的电子邮箱solutionn-1 子查询solution-...

2019-08-04 15:58:27 956

原创 Java与编码

文章目录1. 常见字符集1.1 概念1.2 常见字符集1.3 优缺点2. Java IO 与编码2.1 Java内码2.2 I/O 操作中存在的编码2.3 内存中的编码2.4 Java 中如何编解码3. Java Web 与编码3.1 浏览器的编码3.1.1 直接访问3.1.2 通过页面跳转3.2 Tomcat的解码3.2.1 URL的解码3.2.2 QueryString 的解码3.3.3 HT...

2019-02-18 18:41:34 246

翻译 最长递增子序列(LIS)

给定一乱序整型数组,求其最长递增子序列。 例如: Input: [10,9,2,5,3,7,101,18] Output: 4 Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4注意: * 最长递增子序列可能不止一个,只需返回其长度即可。 ...

2018-06-21 20:37:20 1271

翻译 Reverse Proxy Guide翻译—Apache官网V2.4

概述一款合格的WEB服务器,应该能够为终端用户同时提供静态和动态内容,Apache httpd(大多数WEB服务器也一样)可以充当反向代理服务器使用。也常常被称作“网关”服务器。 在这种场景下,httpd不产生也不存储数据,而是从一个或多个后端服务器(backend servers)获取内容。后端服务器通常和外部网络没有直接的网络连接。httpd收到客户端请求后,将其提供给某一后端服务

2017-08-26 21:10:27 383

转载 JsonPath用法

Getting StartedJsonPath is available at the Central Maven Repository. Maven users add this to your POM.dependency> groupId>com.jayway.jsonpathgroupId> artifactId>json-pathartifactId>

2017-08-24 22:43:35 3299

空空如也

空空如也

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

TA关注的人

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