马赛琦的博客

人生如逆旅 我亦是行人

Scroll Down

异步线程中链路追踪方案

1. 解决的问题当一个线程执行过程中开启了新的异步线程,会导致异步线程与当前线程的traceId不一致的问题。在线程池中,traceId可能在线程创建那一刻就已经固定了,不会跟着使用场景上下文traceId变动,在后面的线程复用环节中一直都是这个traceId,会带来traceId混乱在一起的情况,

gRPC异常处理流程设计

1. 核心诉求服务提供方异常能够被服务消费方感知异常分类处理:业务异常,需要返回对应的错误码,方便服务消费方进行国际化文案的提示+日志。非业务异常(比如NPE),需要返回内容给到服务消费方感知。拓展性&流程尽可能简单2. 方案选择2.1. 直接调用OnError方法,传递Status包装异常

#gRPC  

从本地事务到分布式事务

1. 从本地事务开始1.1. 刚性事务ACID原子性(Atomic):在同一项业务处理过程中,事务保证了多个对数据的修改,要么同时成功,要么一起被撤销。隔离性(Isolation):在不同的业务处理过程中,事务保证了各自业务正在读、写的数据互相独立,不会彼此影响。持久性(Durability):事务

Kafka基础

Kafka基础1. Kafka基础概念1.1. Kafka是什么Kafka是一个拥有流处理功能的消息引擎系统。主要有五大部分:Producer API,主要用来发送消息。Consumer API,主要用来消费消息。Streams API,Kafka流处理API,这是一个仅适用Kafka的轻量级流处理

#Kafka   #java  

基于Redis实现缓存系统的注意点与一些常见问题

基于Redis实现缓存系统的注意点与一些常见问题1. 从计算机系统的缓存开始在计算机系统中,默认有两种缓存:CPU 里面的末级缓存,即 LLC,用来缓存内存中的数据,避免每次从内存中存取数据;内存中的高速页缓存,即 page cache,用来缓存磁盘中的数据,避免每次从磁盘中存取数据。LLC一般几M

#redis   #java  

基于Redis实现分布式锁与Redis的ACID特性(以秒杀业务为例)

基于Redis实现分布式锁与Redis的ACID特性(以秒杀业务为例)1. 准备Redis实现秒杀业务,主要需要三块的知识储备:秒杀业务流程如何保证原子性(Redis能为我们做哪些ACID保证)Redis实现一个分布式锁下文会围绕这3块进行展开叙述。2. 秒杀业务流程分为三个阶段,秒杀阶段前,中,后

#redis   #java  

Redis的部分使用注意点

Redis的部分使用注意点1. 用SCAN命令代替KEYS等全数据返回命令SCAN命令是渐进式遍历,不会导致Redis的堵塞KEYS,SMEMBERS等命令是全量数据返回,会导致整个Redis实例的堵塞。2. 设置合适的AOF写回策略如果对数据持久化不敏感,可以不开启AOF。如果开启,就要设置合适的

#redis   #java  

Spring应用上下文生命周期

Spring应用上下文生命周期1. 前言本文基于Spring-framework.5.2.2.RELEASE版本进行论述,参考了小马哥在极客时间的课程(文章末尾有对应二维码)。2. Spring应用上下文刷新阶段刷新阶段主要是围绕 AbstractApplicationContext#refresh

#Spring   #java  

Redis基础相关

Redis基础1. 设计一个键值数据库SimpleKV1.1. 需要存哪些数据不同键值数据库支持的 key 类型一般差异不大,而 value 类型则有较大差别。我们在对键值数据库进行选型时,一个重要的考虑因素是它支持的 value 类型。例如,Memcached 支持的 value 类型仅为 Str

#redis   #java