架构
文章平均质量分 79
架构
叹君心
这个作者很懒,什么都没留下…
展开
-
SSO 及 OAuth2.0
OAuth是Open Authority的缩写,使用令牌的方式来代替用户密码访问应用。SSO是Single Sign On的缩写,使用令牌的方式来代替用户密码访问应用。SSO是一种思想,而CAS只是实现这种思想的一种框架。有授权服务器、资源服务器、客户端。原创 2023-03-09 10:13:27 · 344 阅读 · 0 评论 -
各种锁机制
锁粗化是一种优化技术,如果一系列的连续操作都对同一个对象反复加锁和解锁,甚至加锁操作都是出现在循环体体之中,就算真的没有线程竞争,频繁地进行互斥同步操作将会导致不必要的性能损耗,所以就采取了一种方案:把加锁的范围扩展(粗化)到整个操作序列的外部,这样加锁解锁的频率就会大大降低,从而减少了性能损耗。在并发环境中,每个线程会先查看此锁维护的等待队列,如果当前等待队列为空,则占有锁,如果等待队列不为空,则加入到等待队列的末尾,按照FIFO的原则从队列中拿到线程,然后占有锁。锁消除是一种优化技术,就是把锁干掉。原创 2022-08-24 16:45:56 · 972 阅读 · 1 评论 -
多数据中心多活技术架构
多数据中心多活架构是部署在多地的多个数据中心同时对外提供服务,当某个数据中心出现灾难性事故时,可以将整个数据中心的流量划拨到其他数据中心,实现快速故障转移。原创 2022-08-24 15:42:00 · 2261 阅读 · 0 评论 -
Java JVM 内存垃圾回收机制
程序计数器、虚拟机栈、本地方法栈、堆区、方法区。原创 2022-08-22 15:42:03 · 834 阅读 · 0 评论 -
Spring Boot常规知识整理
@Autowired 是spring 的注解」,是 spring2.5 版本引入的,Autowired 只根据 type 进行注入,「不会去匹配 name」。2.之后会读取 spring-boot-autoconfigure.jar 下面的spring.factories,「获取到所有的 Spring 相关的 Bean 的全限定名 ClassName」spring 使用三级缓存去解决循环依赖的,其「核心逻辑就是把实例化和初始化的步骤分开,然后放入缓存中」,供另一个对象调用。原创 2022-08-22 14:37:21 · 448 阅读 · 0 评论 -
Redis常规知识整理
1、缓存空对象:使用空对象进行缓存,为空对象缓存增加失效时间;2、布隆过滤器:由一个很长的二进制向量和一系列随机映射函数构成的概率型数据结构;原创 2022-08-18 10:13:41 · 369 阅读 · 0 评论 -
【微服务架构】zookeeper总结
Zookeeper 定义与工作原理面向分布式应用的分布式协调服务一致性协调CAPConsistency:一致性(每次读操作都能保证返回的是最新数据)Availability:可用性(任何一个没有发生故障的节点,会在合理的时间内返回一个正常的结果)Partition tolerance:分区容错(当节点间出现网络分区,照样可以提供满足一致性和可用性的服务)备注:因为P是必须的,因此往往选择就在CP或者AP中2PC (Two-Phase Commit)二阶段提交算法阶段一:提交事务原创 2022-01-26 11:18:59 · 2583 阅读 · 0 评论 -
【分布式架构】指令重排序和happens-before
重排序编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序内存系统的重排序。由于处理器使用缓存和读/写缓冲区,这使得加载和存储操作看上去可能是在乱序执行的as-if-serial语义as-if-serial语义:不管怎么重排序(编译器和处理器为了提供并行度),(单线程)程序的执行结果不能被改变。遵守as-if-serial语义原创 2021-12-10 11:46:27 · 135 阅读 · 0 评论 -
【底层知识】线程模型
概要实现线程主要有3种方式:使用内核线程实现、使用用户线程实现和使用用户线程加轻量级进程混合实现。内核线程模型:完全依赖操作系统内核提供的内核线程(Kernel-Level Thread ,KLT)来实现多线程程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(Light Weight Process,LWP);轻量级进程与内核线程之间1:1的关系称为一对一的线程模型;用户线程模型:有程序自行管理(少用);混合线程模型:结合内核模型和用户模型使用;线程调原创 2021-12-09 14:43:38 · 258 阅读 · 0 评论 -
【底层知识】Java内存模型(JMM)
概要Java内存模型即Java Memory Model,简称JMM。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。线程包括:通信和同步。线程之间的通信:通信机制包括共享内存和消息传递;线程之间的同步:指程序用于控制不同线程之间操作发生相对顺序的机制;Java的并发采用的是共享内存模型;硬件内存架构在CPU内部有一组CPU寄存器,也就是CPU的储存器。在主存和CPU寄存器之间还存在一个CPU缓存,CPU操作CPU缓存的速度快于主存但慢于CP原创 2021-12-09 14:07:30 · 524 阅读 · 0 评论 -
【底层知识】锁细节
公平锁与非公平锁非公平锁在调用 lock 后,首先就会调用 CAS 进行一次抢锁,如果这个时候恰巧锁没有被占用,那么直接就获取到锁返回了。非公平锁在 CAS 失败后,和公平锁一样都会进入到 tryAcquire 方法,在 tryAcquire 方法中,如果发现锁这个时候被释放了(state == 0),非公平锁会直接 CAS 抢锁,但是公平锁会判断等待队列是否有线程处于等待状态,如果有则不去抢锁,乖乖排到后面。公平锁和非公平锁就这两点区别,如果这两次 CAS 都不成功,那么后面非公平锁和公平锁是一样原创 2021-11-10 11:16:26 · 330 阅读 · 0 评论