- 博客(37)
- 收藏
- 关注
转载 Mockito模拟进行单元测试
1.1 Mockito是什么? MOCK意思是模拟的意思,主要被用来进行数据的人工组织,不会真正地调用第三方服务器,类似redis,mysql等都不会调用,也不用关心数据底层是如何进行处理的,我们要做的只是将本单元的逻辑进行单元测试,验证数据的逻辑处理性,而其中mock较好的框架就...
2019-07-13 18:26:00
1491
转载 消息中间件的四连炮!
概述 大家平时也有用到一些消息中间件(MQ),但是对其理解可能仅停留在会使用API能实现生产消息、消费消息就完事了。 对MQ更加深入的问题,可能很多人没怎么思考过。 消息中间件,那么很可能给你发起如下 4 个连环炮! 为什么要使用MQ? 使用了MQ之后有什么优缺点? ...
2019-07-05 19:05:00
296
转载 如何保证缓存与数据库的双写一致性?
只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题 那么,如何解决一致性问题? 一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求缓存 + 数据库必须保持一致性的话,最好不要做这个方案。即:读请求和写请求...
2019-06-29 16:47:00
198
转载 TransmittableThreadLocal在使用线程池等会缓存线程的组件情况下传递ThreadLocal
1、简介 TransmittableThreadLocal 是Alibaba开源的、用于解决 “在使用线程池等会缓存线程的组件情况下传递ThreadLocal” 问题的 InheritableThreadLocal 扩展。若希望 TransmittableThreadLocal 在线程池与...
2019-06-15 17:58:00
432
转载 Elasticsearch如何做到亿级数据查询毫秒级返回的
问题:ES 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因为啥?其实 ES 性能并没有你想象中那么好的。 很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s,坑爹了。 第一次搜索的时候,是...
2019-06-15 16:24:00
124
转载 WebSocket实现群发和单聊--Springboot实现
一:WebSocket原理 1、要谈WebSocket就不得不提起HTTP连接 WebSocket是HTML5出的东西(协议,就是大家一起约定好的东西),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1....
2019-06-01 17:56:00
2267
转载 Kafka如何通过精妙的架构设计优化JVM GC问题
目录 1、Kafka的客户端缓冲机制 2、内存缓冲造成的频繁GC问题 3、Kafka设计者实现的缓冲池机制 4、总结一下 “ 这篇文章,同样给大家聊一个硬核的技术知识,我们通过Kafka内核源码中的一些设计思想,来看你设计Kafka架构的技术大牛,是怎么优化JVM的GC问题的? ...
2019-05-18 17:08:00
89
转载 一致性Hash代码实现
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法和一致性Hash算法的算法原理做了详细的解读。 算法的具体原理这里再次贴上: 先构造一个长度为232的整数环(...
2019-04-20 16:02:00
271
转载 一致性hash算法
一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到...
2019-04-14 10:24:00
90
转载 单链表的实现,判断是否有环和环的入口,找到链表的中间节点和倒数第k个节点...
单链表的核心是头节点,定义一个next指针指向下一个节点的位置 package cn.chinotan.linkedList;public class LinkList { private Node head; public Node getHead() { r...
2019-04-05 20:17:00
132
转载 七张图彻底讲清楚ZooKeeper分布式锁的实现原理
一、写在前面 直接基于比较常用的Curator这个开源框架,聊一下这个框架对ZooKeeper(以下简称zk)分布式锁的实现。 一般除了大公司是自行封装分布式锁框架之外,建议大家用这些开源框架封装好的分布式锁实现,这是一个比较快捷省事儿的方式。 二、ZooKeeper分布式锁机制 ...
2019-03-30 21:24:00
188
转载 线程池参数原理及应用
线程池原理 Java创建一个线程很方便,只需new Thread()就可以,但是当有多个任务需要进行进行处理时,频繁的进行创建和启用线程同样需要系统开销,也不利于管理,于是同mysql的连接池一样,自然有对线程的管理池即线程池。 做个比喻,线程池好比一个公司,那么线程本...
2019-03-23 20:32:00
189
转载 Redis使用pipeLine批量获取数据加快接口响应速度
一、背景 需求: redis通过tcp来对外提供服务,client通过socket连接发起请求,每个请求在命令发出后会阻塞等待redis服务器进行处理,处理完毕后将结果返回给client。 其实和一个http的服务器类似,一问一答,请求一次给一次响应。而这个过程在排除掉redis服务本...
2019-03-16 18:37:00
2300
转载 Mybatis通过Interceptor来简单实现影子表进行动态sql读取和写入 续
继上一篇Mybatis通过Interceptor来简单实现影子表进行动态sql读取和写入 地址:https://my.oschina.net/u/3266761/blog/3014017 之后留了一个小坑,那就是希望能够根据控制层传输过来的是否采用影子表标识来动态的进行影子表...
2019-03-02 19:28:00
630
转载 Mybatis通过Interceptor来简单实现影子表进行动态sql读取和写入
首先进行Mybatis拦截器介绍 拦截器的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法。Mybatis拦截器设计的一个初衷就是为了供用户在某些时候可以实现自己的逻辑而不...
2019-02-23 22:30:00
1229
转载 压测的一些思路
时机 首先要清楚的一点就是,什么时候开始做全链路压测?我们有另外一个业务线,现在就没有打算做,那个业务线的日均单不到十万,而要压测的业务线的日均单到了200万,但这并不意味着200万是一个标准,我觉得可以从下面几点考虑: 业务发展速度。在可以预期的一段时间(最好是半年,一个季度有点...
2019-02-16 21:59:00
614
转载 spring cloud利用feign和sentinel进行内部或外部远程调用
基于上篇讲解的Sentinel之后,这次讲讲spring cloud环境下最优雅的远程调用方式Feign 相比于restTemplate来说,feign只需要通过注解和借口就可以实现远程调用,无需关心具体的调用过程,使用起来无感知,和本地调用相同 一、FeignClien...
2019-01-20 16:49:00
1364
转载 Sentinel 流量控制 熔断降级 初探
还记得之前写过一篇防雪崩利器:熔断器 Hystrix 的原理与使用https://my.oschina.net/u/3266761/blog/2654470,讲述了服务降级和熔断的控制,今天带来另一个流量控制与服务降级阿里开源框架sentinel。 首先是两者的对比: ...
2019-01-13 13:34:00
598
转载 Java设计模式之工厂模式
工厂模式是23中设计模式中最常用的设计模式之一,包括JDK的设计和Spring的设计中都包含了很多工厂模式的思想 JDk: java.util.Calendar#getInstance()的抽象工厂模式和java.lang.Object#toString()...
2019-01-06 18:27:00
98
转载 Netty 实现简单的RPC远程调用
RPC又称远程过程调用,我们所知的远程调用分为两种,现在在服务间通信的方式也太多已这两种为主 1.是基于HTTP的restful形式的广义远程调用,以springboot的feign和restTemplate为代表,由于采用的协议是HTTP的7层调用协议,并且协议的参数和响应序列化基本以JS...
2019-01-01 16:53:00
274
转载 限流问题
之前没有充分搞清楚「限流」和「熔断」的关系。我们先来思考一个问题,生活中也有限流,为什么国庆春节长假热门景点要限流?而不是一早先开几小时,如果人多了就关几小时,人少了就再开呢?其实这就是限流和熔断表象上的一个区别。有熔断机制的系统,它对可用性的作用至少保证了不会全盘崩溃。但是你可以想象一个稍微...
2018-12-23 17:56:00
288
转载 springboot2.0下的zuul路由网关初探
Zuul作为微服务系统的网关组件,用于构建边界服务,致力于动态路由、过滤、监控、弹性伸缩和安全。 为什么需要Zuul Zuul、Ribbon以及Eureka结合可以实现智能路由和负载均衡的功能;网关将所有服务的API接口统一聚合,统一对外暴露。外界调用API接口时,不需要知道微服务系统中各...
2018-12-09 17:04:00
434
转载 Spring Boot2.0 Oauth2 服务器和客户端配置及原理
一、应用场景 为了理解OAuth的适用场合,让我举一个假设的例子。 有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片。 问题是只有得到用户的授权,Google才会同意"云冲印"读取这些照片。那么...
2018-12-02 18:02:00
1233
转载 springBoot Actuator 健康监测
spring boot 微服务作为一项在云中部署应用和服务的新技术是当下比较热门话题,而微服务的特点决定了功能模块的部署是分布式的,运行在不同的机器上相互通过服务调用进行交互,业务流会经过多个微服务的处理和传递,在这种框架下,微服务的监控显得尤为重要。我们知道,spring boot 在引入 ...
2018-11-25 18:08:00
840
转载 Java8并行http请求加快访问速度
背景 1.通常我们在获取到一个list列表后需要一个挨着一个的进行遍历处理数据,如果每次处理都需要长时间操作,那整个流程下来时间就是每一次处理时间的总和。 2.Java8的stream接口极大地减少了for循环写法的复杂性,stream提供了map/reduce/collect等一系列聚...
2018-11-18 16:28:00
2040
转载 防雪崩利器:熔断器 Hystrix 的原理与使用
前言 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为了应对服务雪崩, 一种常见的做法是手动服务降级. 而Hystrix的出现,给我们提供了另一种选择. 服务雪崩效应的定义 服务雪崩效应是一种因服务提供者的不可用导致服务调用者...
2018-11-04 17:56:00
139
转载 Spring AOP 实现
AOP(Aspect Orient Programming),我们一般称为面向切面编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务、日志、缓存、分布式锁等等。AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表...
2018-10-28 18:03:00
100
转载 Mysql事务,并发问题,锁机制
1、什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点。 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约束没有被破坏 持久性:事务的提交结果,将持久保存在数据库中 2、事务并发会产...
2018-10-21 17:08:00
78
转载 消息服务在电商中的实践
1 商品和订单服务中使用MQ 1.1 同步 在订单生成的时候直接扣库存,这是最初等的方式扣库存,这种方式比较简单,但是也有一系列的问题: 会造成有很多订单把产品库存扣除而并没有支付,这就需要有一个后台脚本,将一段时间内没有支付的订单的库存释放,把订单取消掉 即时扣库...
2018-10-21 16:52:00
149
转载 spring_cloud config 配置中心及利用Github实现自动化热加载配置
spring_cloud有着强大的生态支持,其自带的分布式配置中心可以有效解决分布式环境中配置不统一的问题,提供一个中心化的配置中心。并且依靠其spring_bus(rabbitMq提供订阅)和github或者gitlab自带的webhook(钩子函数)可以实现将修改好后的配置push...
2018-10-14 19:34:00
411
转载 rabbitMQ实现可靠消息投递
RabbitMQ消息的可靠性主要包括两方面,一方面是通过实现消费的重试机制(通过@Retryable来实现重试,可以设置重试次数和重试频率,但是要保证幂等性),另一方面就是实现消息生产者的可靠投递(注意消费单幂等),下面主要讲下生产者实现的可靠消息投递。 rabbitTemp...
2018-09-24 19:14:00
124
转载 Java设计模式之责任链模式
引入责任链模式 责任链模式 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的...
2018-09-16 18:34:00
132
转载 ThreadLocal实现线程安全
Spring通过各种模板类降低了开发者使用各种数据持久技术的难度。这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲突。我们使用模板类访问底层数据,根据持久化技术的不同,模板类需要绑定数据连接或会话的资源。但这些资源本身是非线程安全的,也就是说它们不能在同一时刻被...
2018-09-09 19:08:00
721
转载 Java设计模式之命令模式
介绍 命令模式是一种行为型设计模式。在命令模式中,所有的请求都会被包装成为一个对象。 参考了一下其他关于命令模式的文章,其中有谈到说是可以用不同的请求对客户进行参数化。对这句话的理解是,因为将请求封装成为对象,所以客户的所有操作,其实就是多个命令类的对象而已,即参数化了。 命令模式的最大...
2018-09-02 16:27:00
142
转载 美团外卖订单中心的演进
前言 美团外卖从2013年9月成交第一单以来,已走过了三个年头。期间,业务飞速发展,美团外卖由日均几单发展为日均500万单(9月11日已突破600万)的大型O2O互联网外卖服务平台。平台支持的品类也由最初外卖单品拓展为全品类。 随着订单量的增长、业务复杂度的提升,外卖订单系统也在不断演变...
2018-08-26 20:26:00
137
转载 redis实现简单延时队列
继之前用rabbitMQ实现延时队列,Redis由于其自身的Zset数据结构,也同样可以实现延时的操作 Zset本质就是Set结构上加了个排序的功能,除了添加数据value之外,还提供另一属性score,这一属性在添加修改元素时候可以指定,每次指定后,Zset会自动重新按新的...
2018-08-19 18:25:00
147
转载 rabbitMq实现延时队列
rabbitMq是受欢迎的消息中间件之一,相比其他的消息中间件,具有高并发的特性(天生具备高并发高可用的erlang语言编写),除此之外,还可以持久化,保证消息不易丢失,高可用,实现集群部署,提供灵活的路由和可靠性,可视化管理等等的优点。 相比于其他的消息队列,rabbitm...
2018-08-12 19:45:00
179
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人