首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

三阶段提交查看全文
三阶段提交.png
三阶段提交是分布式事务的一种实现方案,是两阶段提交的优化。

两阶段存在阻塞问题和一致性问题。 阻塞 两阶段提交中协调者发起的准备指令和提交指令必须收到所有参与者的返回才能决定后续的状态,否则将持续处于阻塞状态,此时占用的资源会被一直锁定,长期占据的资源会对性能有较大的影响。 协调者在执行事务的过程中如果发生故障,则所有的参与者都会陷入阻塞等待后续指令。 不一致 协调者发送提交指令,部分参与者成功提交了事务,部分参与者未能接受提交指令,此时多个参与者的状态就出现了不一致的情况。 如果部分参与者在接收到提交指令之后发生宕机,而此时协调者也发生了宕机,后续选举出来的协调者的继任者无法确定所有参与者的状态,此时会出现故障。 三阶段针对两阶段存在的两个问题,阻塞和不一致问题给出了解决方案,其中,阻塞问题通过引入超时机制解决,不一致问题通过引入新的阶段预提交环节解决。 三阶段提交将分布式事务分成三个环节,准备阶段,预提交阶段,提交阶段。 准备阶段 和两阶段提交类似,准备阶段的主要功能也是完成资源锁定以及数据写入等操作,准备阶段通过将锁等资源获取前置,减少后续提交阶段失败的可能性。 三阶段事务的准备阶段,协调者会对所有的参与者发起准备的指令。 参与者接收到准备指令之后,进行事务操作,本环节的事务操作一般包括资源锁定,记录回滚日志(Undolog),执行成功会给协调者发送成功的返回,否则返回失败。 协调者收到所有参与者的返回都是成功时,而阶段提交会进入提交阶段。 协调者如果收到部分参与者的返回是失败的时候,则将成功的参与者进行回滚。 预提交阶段 三阶段提交的预提交阶段会完成事务中剩余的操作。

如果在预提交阶段进行回滚…
自动装配【SpringBoot】查看全文
SpringBoot自动装配流程.png
Ioc是Spring框架的核心机制之一,Ioc的设计理念是将系统中的Bean进行全生命周期统一的管理,Bean的声明周期包括Bean的定义,配置,创建,初始化,销毁等。

为了实现Spring的Ioc机制,spring需要处理Bean之间的依赖关系,最初这些依赖关系依靠配置文件进行管理,但是这些配置信息非常冗长,难以维护。 为了减少配置信息,Spring框架提出了声明式的Bean定义,声明式的Bean定义会对Bean的依赖关系进行自动分析以及自动装配。 spring自动装配通过注解@Autoware实现,自动装配的方式分为如下几种: Spring解决了Bean的自动装配,SpringBoot中的自动装配机制更加专注于组件。 组件即实现了某种能力的一个模块。常见的sping组件有缓存模块,例如Cache组件,链接池组件等,组件通常使用三方jar包的方式提供,SpringBoot的自动装配机制可以将这些组件的Bean自动装配到Spring框架的Bean工厂中。 SpringBoot中的自动装配机制分为几个模块,装配入口,装配实现一机装配的时机。 装配入口 @EnableAutoConfiguration是SpringBoot框架中实现自动装配的核心注解,该注解是一个复合注解,该注解上的@Import(AutoConfigurationImportSelector.class)注解是自动装配核心的执行部分。 AutoConfigurationImportSelector类会扫描ClassPath下所有jar包的spring.factories。

spring.factories配置了可以被自动加载的组件,这些组件一般是以…
事件驱动查看全文
事件驱动示意图.png
程序的范式可以分为同步模型和异步模型。

同步模型一般是指请求<->响应模式,调用方同步请求下游,并且阻塞等待结果。同步模型一般用于短耗时,低并发的场景,因为同步模型一般需要一个线程/协程等待结果的返回,所以在高并发场景下线程等资源会成为系统瓶颈。 在耗时较长的情况下,线程需要等待的时间较长,可以用轮询的方式定期去下游查询结果,避免一个线程长期用于等待结果。 但是如果在高并发场景下,需要轮询大量的数据,对服务器能力的压力较大。这个时候就需要引入异步的编程模型。 异步模型 异步编程可以下列几种模型: 消息驱动,消息驱动是目前微服务架构下常用的异步模型,消息驱动分为生产者,队列,消费者,生产者发送消息到队列,通过推或者拉的方式消费者可以异步的消费这些消息。 事件驱动,事件和消息的区别,只是事件做了一些结构化的封装。例如一般情况下事件会根据业务场景的不同而区分为不同的事件,每个事件的关注者也只会消费特定类型的事件。 流模式,流是一组有序的无界事件或数据,一般和消息/事件区别是通信方式,消息/事件一般都是离散的,通过推或者轮询拉的方式获取数据,流模式一般通过固定的长链接链路推送大量数据。 以上三种模式并没有严格的界限,比如消息驱动架构下,可以将不同类型的消息发送到不同的队列,其实也可以算是结构化的事件。而把不同的事件放在一起,形成事件总线也类似消息。同时消息和事件也可以通过长链接的方式推动给下游进行消费。 事件驱动不仅仅可以用于业务研发中异步化我们都业务逻辑,在基础组件中也承担重要的作用。 Reactor

Reactor是网络编程领域著名的并发模型,将网络编程转换为一个个需要处理的事件,例如OnAccept,OnWrite…

热门分类

算法题库

精选内容