KANG's BLOG

Let's have some fun

Sentinel - 分布式系统的流量哨兵

Sentinel - 分布式系统的流量哨兵 介绍 sentinel是阿里开源的分布式流控组件,支持Dubbo、Servlet、Spring Boot / Cloud、gRPC等扩展方式,提供了流量控制、熔断降级、系统负载保护等措施来保障服务稳定。 Sentinel极为轻量,仅有200k,且无过多依赖。性能方面,25wQPS下不会对性能产生显著影响。 GitHub: https://github.

代理模式

定义 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 伪代码示例 package proxy; public class ProxyTest { public static void main(String[] args) { Proxy proxy=new Proxy(); proxy.

分布式锁的实现

Redis和Zookeeper实现分布式锁的区别 1.如果没获取到锁的情况下: redis分布式锁,其实需要自己不断去尝试获取锁,比较消耗性能 zk分布式锁,获取不到锁,注册个监听器即可,不需要不断主动尝试获取锁,性能开销较小 2.锁释放失败的情况下: redis获取锁的那个客户端bug了或者挂了,那么只能等待超时时间之后才能释放锁 zk的话,因为创建的是临时znode,只要客户端挂了,znode就没了,此时就自动释放锁 Zookeeper实现分布式锁 在获取分布式锁的时候在locker节点下创建临时顺序节点,释放锁的时候删除该临时节点。客户端调用createNode方法在locker下创建临时顺序节点, 然后调用getChildren(“locker”)来获取locker下面的所有子节点,注意此时不用设置任何Watcher。客户端获取到所有的子节点path之后,如果发现自己在之

单例模式

饿汉模式 public class EagerSingle { //在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快 private static EagerSingle single = new EagerSingle();//静态私有成员,已初始化 private EagerSingle() { //私有构造函数 } public static EagerSingle getInstance() {//静态,不用同步(类加载时已初始化,不会有多线程的问题) return single; } } 双重检查模式 public class Singleton { private static volatile Singleton sInstance; private Singleton() {} public static Singleton getInstance() { if (sInstance == null) {//第一次判空减少不必要的同步 synchronized (Singleton.

工厂模式

定义 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象 简单地说,工厂模式就是让用户忽略对象创建的过程,通过条件,获取不同对象。 例子 用户需要汽车,那就直接告诉工厂“汽车”,由工厂完成汽车的创建并把汽车提供给用户,至于汽车和飞机的创建具体细节如何,不需要用户考虑和关注。

数据库类型和查询语言的分类

关系型数据库和文档型数据库差别 1. 数据联结 在表示一对一和一对多的数据联结上,二者差别在于存储方式不同: 关系型数据库通过数据键联结,文档型数据库通常采用嵌套的方式将相关数据存储在一起。 表示多对一和多对多时,也没有明显不同:都是采用唯一标识符来进行引用。该标识符在关系模型中称为外键,在文档模型中称为文档引用。 2. 查询场景不同带来的性能差异 存储方式的不同,也带来查询性能的不同: 如果查询某项业务相关的完整数据,在关系型数据库中,多表关联需要对多棵树进行查询,但对于文档型数据库仅需要查询当前数据即可。

架构设计原则

1. 分层设计 单向依赖原则 无循环依赖原则 避免跨层调用原则 单一职责原则 数据冗余 2. 质量属性相关原则 数据安全 数据存储安全:日志输出脱敏,敏感数据加密 数据传输安全 数据输出展示 3.

注解@SuppressWarnings的作用

注解@SuppressWarnings的作用在于使编译器忽略如下警告 deprecation 使用了不赞成使用的类或方法时的警告 unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。 fallthrough 当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。

状态模式

状态模式 概念 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。 这种类型的设计模式属于行为型模式。 通常我们会判断对象的状态,来决定对象的行为。 比如: 公交车停车状态时,引擎停止,车门打开,乘客可以上下车; 行驶状态时,启动引擎,车门关闭,乘客禁止上下车。 在状态模式下,则通过修改对象的状态,影响对象的行为。

策略模式

概念 策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 组成 抽象策略角色: 策略类,通常由一个接口或者抽象类实现 具体策略角色:包装了相关的算法和行为。 环境角色:持有一个策略类的引用,最终给客户端调用。 例子 比如,不同鸟类可能会飞,可能不会为,可能呱呱叫,可能吱吱叫。 所以我们可以定义鸟类这个父类有飞行行为、叫声行为。