自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tianyaleixiaowu的专栏

世界上有10种人,一种懂2进制,一种不懂2进制

原创 任意组合、编排的多线程并发框架,支持任意阻塞、等待、串并行组合,回调、超时、默认值等

并发场景可能存在的需求之——任意编排 1 多个执行单元的串行请求 2 多个执行单元的并行请求 3 阻塞等待,串行的后面跟多个并行 4 阻塞等待,多个并行的执行完毕后才执行某个 5 串并行相互依赖 6 复杂场景 并发场景可能存在的需求之——每...

2019-12-25 16:29:53 451 0

原创 基于各服务注解方式,在网关zuul中对所有下游服务权限做控制,覆盖到所有接口,权限控制到角色、菜单、按钮、方法

开源地址:https://gitee.com/tianyalei/zuulauth 在单体应用架构下,常见的用户-角色-菜单权限控制模式,譬如shiro,就是在每个接口方法上加RequireRole,RequirePermission,当调用到该方法时,可以从配置的数据库、缓存中来进行匹配,通过...

2019-08-15 12:29:24 2068 0

原创 使用Java开发一个自己的区块链产品、联盟链

开源地址:https://gitee.com/tianyalei/md_blockchain https://gitee.com/tianyalei/md_blockchain_manager Java区块链平台,基于Springboot开发的区块链平台。区块链qq交流群737858576,一...

2018-04-11 17:07:30 11444 3

原创 京东热key探测框架本地压测数据记录,单机(8核)QPS约16万/s,可水平扩展
原力计划

继上一次全链路压测时,热key框架由于Java低版本(1.8.0_131之前的1.8)获取docker内cpu核数有问题,实则获取的是宿主机的核数,造成线程数量过多,压测瞬间cpu达到100%,问题也记录在了另一篇(https://blog.csdn.net/tianyaleixiaowu/art...

2020-05-25 11:57:40 221 0

原创 京东618大促压测时自研中间件暴露出的问题总结,压测级别数十万/秒
原力计划

前天618大促演练进行了全链路压测,在此之前刚好我的热key探测框架也已经上线灰度一周了,小范围上线了2500台服务器,每秒大概接收几千个key探测,每天大概2-4亿左右,因为量很小,所以框架表现稳定。借着这次压测,刚好可以检验一下热key框架在大流量时的表现。毕竟作为一个新的中间件,里面很多东西...

2020-05-13 14:11:04 8058 12

转载 4次优化,我把 Redis 性能 “压榨” 到极致!

本文转载自公众号 https://mp.weixin.qq.com/s/y4q4Hb9A6xay3pAC_LBm5g 我们有个这样的需求:每天每一个抢购商品只能买一次,并且全场抢购商品总购买次数不允许超过5次。 那么,整个商品限购的流程大概如下图所示: 那么,在每次购买成功商品成功后,...

2020-03-19 12:04:17 919 0

原创 手写中间件之——并行框架(4 相互依赖模型的建立)

建议学习时,打开代码https://gitee.com/tianyalei/asyncTool 对着代码看。 上一篇主要讲了如何实现异步回调,简单回忆一下是如何实现的。java的future的get方法是同步阻塞的,无法达到任务完成后主动回调的目的。netty的future是可以做到回调的,通过...

2020-01-22 13:46:00 849 5

原创 开源异步并行框架,完成任意的多线程编排、阻塞、等待、串并行结合、强弱依赖

本文首发于京东零售公众号,https://mp.weixin.qq.com/s/17OAAbCKQND-AjTdf43TGw netty是一个经典的网络框架,提供了基于NIO、AIO的方式来完成少量线程支持海量用户请求连接的模型。netty里面充斥了大量的非阻塞回调模式,主要是靠Future/P...

2020-01-14 19:34:56 778 0

原创 手写中间件之——并行框架(3 异步回调如何实现)

上一篇主要讲了任务的编排该如何实现,包括串、并、串并结合。建议一定要手写个小demo去尝试各种基本组合。 这一篇主要是讲该如何实现异步回调。 如果之前有用过netty的应该知道,netty里大量充斥着“回调”,各种addListener,将各种耗时任务变成了异步带回调的模式。 回调是个很有用...

2020-01-07 10:04:23 692 0

转载 Netty实现自定义协议

关于协议,使用最为广泛的是HTTP协议,但是在一些服务交互领域,其使用则相对较少,主要原因有三方面: HTTP协议会携带诸如header和cookie等信息,其本身对字节的利用率也较低,这使得HTTP协议比较臃肿,在承载相同信息的情况下,HTTP协议将需要发送更多的数据包; HTTP协议是基于...

2020-01-06 17:36:00 1025 0

原创 手写中间件之——并行框架(2 任务编排顺序如何选型和实现)

这一篇我们就要开始手写这个并行框架了。 做任何一个项目,都要做的事情都是先定大框架,后拆解任务。 那么这个并发框架,要完成上一篇讲的那些所有任务,该如何定大框架呢,如何选型呢? 如果大家仔细看了上一篇文章,可以看到该框架的难点和重点,主要有两点,分别是任务的顺序编排和任务结果的回调。 如何...

2020-01-03 17:39:03 616 2

原创 手写中间件之——并行框架(1 并行框架的应用场景和需求)

我们为什么会需要一个带任务顺序编排的并行框架 1 复杂的微服务系统间调用 经常会有这样的调用场景:app(或web前端)调用后台的一个接口,该接口接到该请求后,需要调用其他多个微服务来获取数据,最终汇总一个最终结果返回给用户。 譬如用户请求“我的订单”,后台在收到请求后,就需要去调用用户详情...

2020-01-02 11:28:58 1420 0

转载 使用 Reactor 进行反应式编程

反应式编程(Reactive Programming)这种新的编程范式越来越受到开发人员的欢迎。在 Java 社区中比较流行的是 RxJava 和 RxJava 2。本文要介绍的是另外一个新的反应式编程库 Reactor。 反应式编程介绍 反应式编程来源于数据流和变化的传播,意味着由底层的执行...

2019-12-31 13:36:50 289 0

原创 Java中使用etcd,包括基本的set、get、超时设置,watch监听等

etcd的使用文章。 etcd来zookeeper类似,常用的主要有set,get,getPrefix:获取指定前缀的所有数据,grant:key的超时设置,watch:监听回调事件,watchPrefix:监听某个前缀的事件,keepAlive:为某个key设置自动续约、自动刷新过期时间。 ...

2019-12-12 16:32:15 880 2

原创 redis探秘:选择合适的数据结构,减少80%的内存占用,这些点你get到了吗?

本文首发于京东零售平台公众号,https://mp.weixin.qq.com/s/uzuz7rqctQ-bjdRcf1tO9g redis作为目前最流行的nosql缓存数据库,凭借其优异的性能、丰富的数据结构已成为大部分场景下首选的缓存工具。 由于redis是一个纯内存的数据库,在存放大量数...

2019-12-10 09:29:31 357 0

转载 使用Retryer优雅地实现对Callable各种各样的重试调用

Runnable和Callable都是多线程编程中常用的接口,通常是通过实现该接口编写业务逻辑后,再由new Thread去发起线程调用。 主要区别在于Runnable没有返回值,而Callable有返回值。下面就来看一个重试框架Retryer,针对Callable做的各种重试策略方法。  A...

2019-11-28 10:24:45 290 0

转载 10G mysql binlog重放并传输到另一台服务器执行,阿里中间件大赛

转载自:https://tianchi.aliyun.com/forum/new_articleDetail.html?spm=5176.11165310.0.0.90a57f61Sy5xTQ&raceId=231600&postsId=2035 这个冠军的方案确实赞,10G的m...

2019-11-26 17:02:13 1033 0

原创 分布式环境下对部分热数据(如redis热key,热请求)进行探测,并对探测结果及时同步到各个client实例的JVM内存的方案简述

可先阅读之前的这篇,有赞的热key探测及缓存方案。 常见场景 突发性的无法预先感知的热点数据请求,或者有阵发性明显热点数据的。 譬如突然大量请求都命中了redis的某个分片,造成该redis卡顿,影响其他请求。热key特性如 goodsId=100,突发1万请求该key。 譬如突然大量同一...

2019-11-15 10:06:53 334 1

原创 Java简单实现滑动窗口

由于最近有一个统计单位时间内某key的访问次数的需求,譬如每5秒访问了redis的某key超过100次,就取出该key单独处理。 这样的单位时间统计,很明显我们都知道有个边界问题,譬如5秒内100次的限制。刚好前4.99秒访问都是0,最后0.01秒来了100次,5.01秒又来了100次。也就是访...

2019-11-01 17:28:52 2889 0

转载 有赞的redis热key探测及缓存到jvm内存框架方案

下面这篇文章来自于有赞的知识共享,总体设计还是不错的,但我对其中的一点比较存疑。就是将计算热点key的工作放在客户端这里。 因为一个java实例,可能面临巨多的get请求,譬如请求的key数量较多,那么由客户端来记录这些key,并计算key的热度,是一个比较费力且吃内存的事。即便他限制了最大内存...

2019-10-29 10:50:10 549 2

转载 高级开发必须理解的Java中SPI机制

本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。 1 SPI是什么 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 ...

2019-10-25 15:25:13 153 0

原创 7 mysql事务(包括redo log,undo log,MVCC)及事务实现原理

之前写了几篇mysql存储原理的文章。 6Innodb_buffer_pool 5b+ tree和每个page存储结构 4innodb文件系统基本结构(段、簇、页面) 3innodb文件系统初步入门 2表对象缓存 1 连接层 这一篇终于到事务了,事务大家都知道ACID概念,那么mys...

2019-10-22 17:23:32 748 0

原创 使用redis分布式锁高并发下QPS测试,单机一秒下1千个订单

前面一篇讲过并发下单时进行优化的一些策略,后来我写了代码进行了实测。 关于redisson做分布式锁的代码在这篇文章。这里我来测试一下分布式锁的性能。 简单的controller package com.tianyalei.redislock.controller; import org...

2019-10-15 19:40:23 1045 0

原创 关于电商秒杀系统中防超卖、以及高性能下单的处理方案简述

秒杀抢购系统的成功平稳运行,有一些需要注意的知识点。 1 高并发,以及刷接口等黑客请求对服务端的负载冲击 2 高并发时带来的超卖,即商品数量的控制 3 高负载下,下单的速度和成功率的保证 4 其他 以秒杀单品为例,如抢小米手机。 解决方案探讨: 第一步 限制前端发来的请求量 譬如定...

2019-10-12 19:42:14 1331 0

转载 分布式事务之Seata中间件原理及流程详细分析

转载自:https://blog.csdn.net/f4761/article/details/89077400 背景 在分布式系统中,分布式事务是一个必须要解决的问题,目前使用较多的是最终一致性方案。自年初阿里开源了Fescar(目前更名为Seata)后,该项目受到了极大的关注度。Seata...

2019-10-08 20:19:23 721 0

转载 深入浅出AQS之共享锁模式

搞清楚AQS独占锁的实现原理之后,再看共享锁的实现原理就会轻松很多。两种锁模式之间很多通用的地方本文只会简单说明一下,就不在赘述了,具体细节可以参考我的上篇文章深入浅出AQS之独占锁模式 一、执行过程概述 获取锁的过程: 当线程调用acquireShared()申请获取锁资源时,如果成功,则...

2019-09-25 19:23:23 229 0

转载 深入浅出AQS之独占锁模式

AbstractQueuedSynchronizer(以下简称AQS)作为java.util.concurrent包的基础,它提供了一套完整的同步编程框架,开发人员只需要实现其中几个简单的方法就能自由的使用诸如独占,共享,条件队列等多种同步模式。我们常用的比如ReentrantLock,Count...

2019-09-25 19:20:50 74 0

转载 SpringCloud从入门到进阶 ——单点部署Zuul的压力测试与调优(二)

内容   作为微服务架构系统的入口,毫无疑问,Zuul的并发性能直接决定了整个系统的并发性能。本文结合前几篇文章的内容,在云服务器中部署了包含Eureka Server,Zuul等组件的1.0版本的微服务架构,并进行单点部署Zuul的压力测试,对其并发性能一探究竟。 环境 说明   转...

2019-09-12 16:01:40 352 0

转载 SpringCloud从入门到进阶——单点部署Zuul的压力测试与调优(一)

前言说明:通过zuul访问后端服务时,这个流程是如何的?当你用500线程并发访问zuul和用100线程并发访问zuul,zuul分别会用多少个线程去并发访问后端的服务?后端最多能承受多少个并发线程?zuul默认是Hystrix的信号量隔离,这个值对zuul并发访问后端时有什么影响? 可以通过这一...

2019-09-12 15:56:31 320 0

原创 6 mysql底层解析——缓存,Innodb_buffer_pool,包括连接、解析、缓存、引擎、存储等

前面几篇主要学习存储,在磁盘上的存储结构,内部格式等。 这一篇就来看内存,对于Innodb来说,也就是最关键的Innodb_buffer_pool。 我们都知道,内存读写和磁盘读写的速度不在一个数量级,在数据库中,数据都是最终落到磁盘上的,想要达成快速的读写,必然要依靠缓存技术。 Innod...

2019-09-06 16:36:20 577 0

原创 5 mysql底层解析——b+ tree和每个page存储结构,包括连接、解析、缓存、引擎、存储等

上一篇,我们学习了innodb文件系统内部大的存储结构,包括段(segment),簇(extent),页(page)各自的含义。 简单回顾一下,段是组成表空间的最大结构,当创建一个表时,会同时创建两个段(内节点段,叶子段),分别管理非叶子节点数据和叶子节点数据。其实还有一个段(回滚段),是存放回...

2019-09-04 14:19:18 596 3

原创 4 mysql底层解析——innodb文件系统基本结构(段、簇、页面),包括连接、解析、缓存、引擎、存储等

上一篇,我们学习了innodb文件系统的大的框架,知道了innodb文件系统是由一些log和每个表的ibd(16K的整数倍)等文件组成的。那么这些文件,里面是怎么样的呢? 表数据文件IBD 上一篇我们看到了,当你新建一个库时,首先文件系统上会多一个以库名命名的文件夹。里面有ibd、frm文...

2019-08-26 17:03:22 627 0

原创 3 mysql底层解析——innodb文件系统初步入门,包括连接、解析、缓存、引擎、存储等

上一篇我们学习了server层对于表对象缓存的处理,表对象获取到之后,通过handler才具备了与存储引擎交互的能力。那么存储引擎层又是怎么个流程呢? mysql文件结构 这些文件都可以在文件目录中找到,我们来看看都是做什么的。 my.cnf,大家都懂。 slow.log,记录慢查询日...

2019-08-22 17:11:41 621 1

原创 2 mysql底层解析——表对象缓存,包括连接、解析、缓存、引擎、存储等

学习了mysql的连接层之后,要来看一下mysql的server层了。这一层聚集了mysql的最多的逻辑,包括了请求解析、查询缓存、语义分析、查询优化、各种计算函数、扫描记录、binlog、缓存、锁、内存管理等等。 当一个连接建立起了,用户发过来一个sql语句,从接到这个语句到返回给用户结果,这...

2019-08-21 17:23:30 583 0

原创 1 mysql底层解析——连接层,包括连接、解析、缓存、引擎、存储等

打算写一个系列的文章,主要是mysql底层解析。 很多时候,程序员对mysql处于频繁使用,但都一知半解的程度,除了会加个索引,貌似也没啥优化的技能了。事实上,mysql能有今日的成就,必然不是靠个索引就吃饭的。更何况很多情况下,索引什么的应用层面也解决不了实际问题。那么,我们就需要深入到mys...

2019-08-21 15:52:51 990 0

原创 2分钟快速发布自己的项目供别人在pom里依赖

大家经常会在maven、gradle里依赖别人的项目或模块。大家知道,别人的项目都是发布在maven中央仓库的,要经历一系列的步骤方能上传成功,才能供别人依赖。 这里要说一种简单方式,2分钟就让你的项目可以供大家使用。就是这个网站:https://jitpack.io 你用GitHub或者...

2019-08-14 17:41:31 187 1

原创 SpringBoot 使用sharding jdbc进行分库分表,基于4.0版本,Springboot2.1

之前写过一篇使用sharding-jdbc进行分库分表的文章,https://blog.csdn.net/tianyaleixiaowu/article/details/70242971,当时的版本还比较早,现在已经不能用了。这一篇是基于最新版来写的。新版已经变成了shardingsphere了,...

2019-08-01 14:57:07 6948 22

转载 看图了解RocksDB

转载自:https://yq.aliyun.com/articles/669316 它是一个高性能的Key-Value数据库。设计了完善的持久化机制,同时保证性能和安全性。能够良好的支持范围查询,因为K-V记录就是按照Key来排序的。 下图为写入的流程: 可以看到主要的三个组成部分,内存...

2019-07-29 13:04:40 491 0

转载 看完这篇还不会Elasticsearch,我跪搓衣板!

本文转载自:https://www.cnblogs.com/jajian/p/11223992.html 关于elasticsearch的深度好文。 生活中的数据 搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种: 结构化数据 非结构化数据 ...

2019-07-26 10:52:40 630 0

转载 Kafka深度解析

本文转发自技术世界,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介   Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也...

2019-07-24 16:56:07 220 0

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