摘要: Sentinel(https://github.com/alibaba/Sentinel)是一个限流组件。在互联网系统高可用设计中,限流作为一种托底的手段,保护系统不会被流量冲垮而出现未知的异常。 Sentinel系统的具体设计,可以参考官方文档,同时也可以参考 这个 , 这里只说一下大概的逻辑: 阅读全文
posted @ 2020-08-04 22:45 秋夜 阅读(1419) 评论(0) 推荐(0) 编辑
摘要: soul(https://github.com/Dromara/soul) 是一个Java语言编写的高性能,异步,基于webflux的响应式网关,整体项目结构比较清晰,目前还在维护开发,而且变化较大,项目本身也包含了一些优秀的设计,比如类似于dubbo的可扩展设计。网关采用插件化的方式对请求进行处理 阅读全文
posted @ 2020-08-04 22:44 秋夜 阅读(1201) 评论(0) 推荐(0) 编辑
摘要: xxl-job(https://github.com/xuxueli/xxl-job) 系统的具体设计,可以参考官方文档,非常详细,这里只说一下大概的流程。 1. 应用端通过继承类或者注解的方式,来标示一个类或者一个方法是一个job。 2. 在应用启动的时候,会做3个事情: 1. 扫描上面第一步的类 阅读全文
posted @ 2020-08-04 22:42 秋夜 阅读(1019) 评论(0) 推荐(0) 编辑
摘要: 最近线上某站点young gc有点频繁,经过排查确定了问题,这里记录一下 遇到GC,三步走 1. 确认是哪些对象引起的GC 2. 找到这些对象是哪里构造的 3. 根据情况进行优化。 确认是哪些对象引起的GC 一般情况下,我们可以通过jmap dump的方式把堆dump出来进行分析,但dump出来的是 阅读全文
posted @ 2020-08-04 22:40 秋夜 阅读(1212) 评论(0) 推荐(0) 编辑
摘要: bitmap本质使用一个bit来表示一个元素,在数据量比较大的情况下,数据去重,数据排序,数据查找,使用这种数据架构有这很大的空间优势。 在实现上,Java中最小单位是byte, 1byte=8bit, 所以如果使用Java来实现bitmap, 就要用到位移、或运算,这里使用Java的bitset 阅读全文
posted @ 2020-08-04 22:38 秋夜 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 布隆过滤器(Bloom Filter)是一种比较巧妙的数据结构, 他的功能就是判断一个元素是否在一个集合中, 相比于List, Hash等数据结构,它使用的空间很小, 原理就是通过N个hash函数,映射到一个位图上,将指定位置的位图元素设置为1,因为它不存储原始数据,再加上位图长度没有办法扩展,所以 阅读全文
posted @ 2020-08-04 22:37 秋夜 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 跳跃表是一种比较巧妙的结构,其查询性能大部分都可以达到O(logN),Redis中的sorted set 就使用了这种结构。 Skip list的性质 (1) 由很多层结构组成,level是通过一定的概率随机产生的。 (2) 每一层都是一个有序的链表,默认是升序 (3) 最底层(Level 1)的链 阅读全文
posted @ 2020-08-04 22:29 秋夜 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 在缓存场景中,一致性hash算法避免了余数法在因为节点失效导致大面积缓存失效的问题。 直接上代码,使用了Java自带的TreeMap, 参考了dubbo代码中的一致性hash负载 1 package org.example; 2 3 import java.nio.charset.StandardC 阅读全文
posted @ 2020-08-04 13:08 秋夜 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 简介 LRU是一种缓存淘汰策略,全称是Least Recently Used,即最近最少使用,也就是说我们认为最近使用过的数据应该是是有用的,很久都没用过的数据应该是无用的。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。 LRU的实现思路就是hashmap+双链表,其中has 阅读全文
posted @ 2020-08-04 13:06 秋夜 阅读(280) 评论(0) 推荐(0) 编辑