0%

原文:The Log: What every software engineer should know about real-time data’s unifying abstraction

作者:Jay Kreps

我大约在六年前加入了领英,那是一个特别有趣的时间点。那时我们正面临着单体集中式数据库极限的挑战,需要开始向专门的分布式系统转变。这真是一个有趣的经历:我们构建、部署和运行了分布式图数据库、分布式搜索后端、Hadoop套件、一代及二代键值数据库,并运行至今。

在这个过程中,我学到的最有用的一件事情是,我们在这里构建的大多数组件,其核心都有一个简单的概念:日志,有时也被称作先写日志、提交日志或者事务日志,日志几乎与计算机的历史一样悠久,它是许多分布式数据系统和实时应用架构里面的核心。

如果你不了解日志,你也就不可能完全了解数据库、NoSQL存储、键值存储、副本、paxos、hadoop、版本控制、甚至几乎任何软件系统,然而大多数软件工程师都不熟悉它,我希望改变这个现状。在这篇文章中,我将告诉你一切你需要知道的关于日志的事情,包括什么是日志、如何在数据集成、实时处理和系统构建中使用日志。

阅读全文 »

前言

业务开发时,轮询可以被用于许多场景中,但把握轮询的频次不是一件容易的事情,频次过高会对服务端产生不小的压力,频次过低时,则无法保证实时性。而随着Servlet 3.0异步请求处理的特性支持,DeferredResult的出现很好的解决了这个问题。

阅读全文 »

前言

我们都知道,在使用Spring进行项目开发时,开启事务只需要在类或者上标注一个**@Transactional**注解即可实现,那么这个是怎么做到的呢?

以下内容基于Spring Boot 2.1.9.RELEASE版本

探究其实现原理之前,我们先来看一个**@EnableTransactionManagement**注解。

阅读全文 »

前言

AOP是Spring中的核心功能之一,使用AOP,可以让关注点代码与业务代码分离,并且动态地添加和删除在切面上的逻辑而不影响原来的执行代码,从而可以在不修改源代码的情况下,实现对功能的增强。

AOP的应用场景很多,日志记录、性能监控、事务管理等都可以通过AOP去实现。

AOP的原理就是动态代理,在 Spring 中,存在两种实现机制, JDK 动态代理以及 CGLIB 动态代理。

在Spring Boot中,AOP可以通过**@EnableAspectJAutoProxy**注解开启,那该注解是怎么起作用的呢,代理对象又是如何被创建的呢?

阅读全文 »

在开发中,延时任务属于比较常见的需求,比如,订单在限定时间内未支付则自动取消并释放库存;外卖的商家端在设置特定时间后仍未接单时则自动接单等这都需要延时任务来完成。
实现延时任务的方式可以有许多种:
1 DelayQueue(JDK提供实现)
2 ScheduledExecutorService(JDK提供实现)
3 Redis(使用ZSET数据结构实现)
4 RabbitMQ实现
5 ……

阅读全文 »

前言

getBean方法是BeanFactory定义的一系列方法,用于从Spring容器中获取bean实例。

image-20220531064102379

这些方法在AbstractBeanFactory均得到了具体实现,而这几个getBean方法最终都是调用了doGetBean方法,本文一起来看下

阅读全文 »

前言

@Autowired是开发中常用的注解,我们可以使用@Autowired将其标记在构造函数、成员变量、setter方法上,并由Spring自动完成依赖注入的工作。但是,这个过程是怎么完成的呢?

阅读全文 »

前言

使用@Configuration注解可以为一个类声明为配置类,一个配置类声明了一个或多个@Bean方法,这些方法返回值将作为bean定义注册到Spring IoC容器中,并允许在配置类中通过调用同一类中的其他@Bean方法来定义bean之间的依赖关系。

阅读全文 »

前言

“约定优于配置”是Spring Boot倡导的一个思想,而其自动配置的特性则恰好体现了这一思想。而有了自动配置,不仅简化了Maven的依赖配置,更重要的是摆脱了以往使用Spring框架开发时,所必须编写的一堆繁琐的xml配置文件。

阅读全文 »

Disruptor是什么

Disruptor是一个由英国外汇交易公司LMAX研发并开源的高性能的有界内存队列,其主要用于在线程之间完成数据的传递。github地址
那么,以高性能著称的Disruptor到底有多快呢?

阅读全文 »