1 门面模式设计思想
系统之间调用的总管家,承接了对外暴露的系统的功能,对内承担系统 之间的融合。
举个例子
病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴费,才可以到化验部门做化验。化验后再回到门诊室。
优化后
带来的好处
1松耦合 内部更改不影响外部使用,内部更容易扩展和使用
2 目的是隔离内部调用和外部调用,保持方法安全性
参考
https://www.cnblogs.com/java-my-life/archive/2012/05/02/2478101.html
2 spring日志体系
抽象处LogSystem接口用来实现公共功能的初始化
比如
1 配置文件的读取 解析 日志上下文的初始化
2 日志实现类的载入
类加载器 根据顺序判断是否存在日志工厂类,实现日志功能 和不同的日志框架实现类的载入。
3注册logysstem 组件到容器中
参考
https://blog.csdn.net/qq_29479041/article/details/82863022
https://www.jianshu.com/p/be059cad5a4c
https://blog.csdn.net/qq_29479041/article/details/82863022
3动态加载 和静态加载设计
系统实现框架有两个体系,分别是common-log 和self4j体系
LogFacotry 接口目的是获取log打印日志的,通用方法 getLogger(String name),common-log和self4j 目的是要加载具体实现LogFactory的实现类。
common-log 实现了动态加载,原理 , 所谓的动态就是多种实现日志实现的框架,多种选择。根据不同的场景,加载不同的实现。
动态加载原理
1 通过jvm的配置参数加载logFactory的实现类
2通过spi机制实现实现类的加载
在classpatch 或 META-INF/services 定义一个接口文件,接口文件里面声明接口的实现类,一种服务提供发现机制。
3通过配置文件属性指定属性进行加载
4默认实现类的加载 LogFactoryImpl
静态原理
所谓的静态 就是我就只加载固定的接口的实现类,接口体系固定,不会改变变,其他框架去实现就行了,self接口 通过类加载器加载固定的类,各个日志框架主要需要实现 各自的StatisLogBind 实现类,实现LogFactory的获取,最终达到完全解耦!不需要日志实现部分提供任何的修改配置,只需要符合接口的标准就可以加载进来。
参考https://www.cnblogs.com/crazyrunning/p/6145890.html
4 log4j-over-slf4j 和slf4j-log412 有什么不同
log4j-over-slf4j log4j为了适配self 接口体系,引入的适配包,这样可以实现底层实现不变,适配self体系,用于多个日志体系共存。
slf4j-log412 logback是直接基于它的具体实现,而log4j则不是,为了使log4j也能实现slf4j这个"接口",slf4j-log4j12出现了
参考
https://blog.csdn.net/asdasd3418/article/details/82840607
5 logback出现的目的
1开发的Log4J的性能也不满意,然后又弄出了个LogBack,关键执行语句的性能要比Log4J快10倍以上 性能提升了10倍
2logback 动态加载配置变更
6logback异步日志的原理
通过队列情况判断是否需要丢弃日志,不丢弃的话将它放到阻塞队列中,通过查看代码,这个阻塞队列为ArrayBlockingQueueue ,有一个工作线程从队列取出任务,然后调用写进行输出
参考https://juejin.im/post/6844903909920604174
7 log4j2出现引入了 Disruptor库 进一步提升了性能。性能测试结果见官网
https://blog.csdn.net/ThinkWon/article/details/101621135
8 Disruptor 原理
理论基础在多线程情况下,为了保证线程安全,必须使用CAS或锁,这种情况下,CAS的性能超过锁的性能,前者大约是后者的8倍。
原理
1 分多段,环状存储空间
2每个线程获取不同的一段数组空间进行操作。这个通过CAS很容易达到。只需要在分配元素的时候,通过CAS判断一下这段空间是否已经分配出去即可。减少并发性,消耗性能
3多个写,通过case 防止空间重复写,有一个环状空间记录 写结果,防止读未写完的数据
4 多个读, 防止别人没写完就读了。
参考https://tech.meituan.com/2016/11/18/disruptor.html
感谢以上作者无私的奉献!