前提 笔者之前在查找Sentinel相关资料的时候,偶然中找到了Martin Fowler大神的一篇文章<CircuitBreaker>.于是花了点时间仔细阅读,顺便温习一下断路器CircuitBreaker的原理与实现. CircuitBreaker的原理 现实生活中的熔断器(更多时候被称为保险丝)是一种安装在电路中用于保证电路安全运行的电子元件.它的外形一般是一个绝缘的玻璃容器包裹着一段固定大小电阻和固定熔点的纤细合金导体,如下图: 电路中,保险丝会和其他用电的原件串联,根据物理公式Q =…
前提 这是<冷饭新炒>系列的第五篇文章. 本文会翻炒一个用以产生访问令牌的开源标准JWT,介绍JWT的规范.底层实现原理.基本使用和应用场景. JWT规范 很可惜维基百科上没有搜索到JWT的条目,但是从jwt.io的首页展示图中,可以看到描述: JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties 从这段文字中可以提取…
前提 在很早很早之前,写过一篇文章介绍过Redis中的red lock的实现,但是在生产环境中,笔者所负责的项目使用的分布式锁组件一直是Redisson.Redisson是具备多种内存数据网格特性的基于Java编写的Redis客户端框架(Redis Java Client with features of In-Memory Data Grid),基于Redis的基本数据类型扩展出很多种实现的高级数据结构,具体见其官方的简介图: 本文要分析的R(ed)Lock实现,只是其中一个很小的模块,其他高…
前提 Snowflake(雪花)是Twitter开源的高性能ID生成算法(服务). 上图是Snowflake的Github仓库,master分支中的REAEMDE文件中提示:初始版本于2010年发布,基于Apache Thrift,早于Finagle(这里的Finagle是Twitter上用于RPC服务的构建模块)发布,而Twitter内部使用的Snowflake是一个完全重写的程序,在很大程度上依靠Twitter上的现有基础架构来运行. 而2010年发布的初版Snowflake源码是使用Sca…
前提 UUID是Universally Unique IDentifier的缩写,翻译为通用唯一标识符或者全局唯一标识符.对于UUID的描述,下面摘录一下规范文件A Universally Unique IDentifier (UUID) URN Namespace中的一些描述: UUID(也称为GUID)定义了统一资源名称命名空间.UUID的长度为128比特,可以保证在空间和时间上的唯一性. 动机: 使用UUID的主要原因之一是不需要集中式管理,其中一种格式限定了IEEE 802节点标识符,其…
目录 Quartz的核心组件 JobDetail Trigger 为什么JobDetail和Trigger是一对多的关系 常见的Tigger类型 怎么排除掉一些日期不触发 Scheduler Listener JobStore RAMJobStore JDBCJobStore Quartz的核心运行机制 获取调度实例阶段 加载配置和初始化调度器 StdSchedulerFactory.getScheduler StdSchedulerFactory.instantiate 创建线程池(Simpl…
<深入理解OSGi:Equinox原理.应用与最佳实践>笔记_1_运行最简单的bundlehelloworld 买了周大大的OSGI的书看 先前完全没有基础 就靠这本书看看学学 顺便记一些笔记 今天先跳到了第5章的equinox启航部分 第一个简单的helloworld就遇到了问题.... 因为eclipse版本和书中不同 用书中所说得到的全是异常.... 搜索有关资料以后可以运行正常了 以此来记录一下: 在较新版本的eclipse中 不能通过java -jar org.eclipse.osg…
原创文章,始自发作者个人博客,转载请务必将下面这段话置于文章开头处(保留超链接). 本文转发自技术世界,原文链接 http://www.jasongj.com/java/threadlocal/ ThreadLocal解决什么问题 由于 ThreadLocal 支持范型,如 ThreadLocal< StringBuilder >,为表述方便,后文用 变量 代表 ThreadLocal 本身,而用 实例 代表具体类型(如 StringBuidler )的实例. 不恰当的理解 写这篇文章的一个原…
彻底理解MapReduce shuffle过程原理 MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapReduce中的Shuffle更像是洗牌的逆过程,把一组无规则的数据尽量转换成一组具有一定规则的数据. 为什么MapReduce计算模型需要Shuffle过程?我们都知道MapReduce计算模型一般包括两个重要的阶段:Map是映射,负责数据的过滤分发:Reduce是规约,负责数据的计算归并.Redu…
HashMap结构 HashMap的底层是数组+链表,百度百科找了张图: 先写个链表节点的类 package com.xzlf.collection2; public class Node { int hash; Object key; Object value; Node next; } 自定义一个HashMap,实现了put方法增加键值对,并解决了键重复的时候覆盖相应的节点 package com.xzlf.collection2; /** * 自定义一个hashMap * 实现了put方法…