唯一性ID设计思想 唯一性ID设计思想分布式ID的业务需求在复杂的分布式系统中,往往需要对大量的数据和消息进行唯一标识。一个能够生成全局唯一ID的系统是非常必要的。 生成ID的硬性要求 全局唯一:ID必须唯一,这是唯一标识的最基本要求。 趋势递增:为了优化写入性能,尤其是在使用BTree数据结构存储索引数据的数据库引擎(如MySQL的InnoDB引擎)中,主键应尽量有序。 单调递增:保证下一个ID一定大于上一个ID。 2024-06-03 系统设计 #系统设计
接口设计 什么是幂等?幂等(idempotency)本身是一个数学概念,常见于抽象代数中,表示一个函数或者操作的结果不受其输入或者执行次数的影响。例如,f(n)=1^n,无论n为多少,f(n)的值永远为 1。 在软件开发领域,幂等是对请求操作结果的一个描述,这个描述就是不论执行多少次相同的请求,产生的效果和返回的结果都和发出单个请求是一样的。 针对数据操作来说就是: insert 操作要保证不插 2024-05-30 系统设计 #系统设计
分布式事务 分布式事务微服务架构下,一个系统被拆分为多个小的微服务。每个微服务都可能存在不同的机器上,并且每个微服务可能都有一个单独的数据库供自己使用。这种情况下,一组操作可能会涉及到多个微服务以及多个数据库。举个例子:电商系统中,你创建一个订单往往会涉及到订单服务(订单数加一)、库存服务(库存减一)等等服务,这些服务会有供自己单独使用的数据库。 这个时候单单依靠数据库事务就不行了,我们就需要引入分布式事务这 2024-05-21 微服务 #微服务
Redis分布式锁 Redis 实现分布式锁为什么需要分布式锁?对于单机多线程来说,在 Java 中,我们通常使用 ReentrantLock 类、synchronized 关键字这类 JDK 自带的 本地锁 来控制一个 J0 分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。于是,分布式锁 就诞生了。 从图中 2024-05-20 数据库 > Redis #Redis
Kafka KafkaKafka 是什么?主要应用场景有哪些?Kafka 是一个分布式流式处理平台。 流平台具有三个关键功能: 消息队列:发布和订阅消息流,这个功能类似于消息队列,这也是 Kafka 也被归类为消息队列的原因。 容错的持久方式存储记录消息流:Kafka 会把消息持久化到磁盘,有效避免了消息丢失的风险。 流式处理平台: 在消息发布的时候进行处理,Kafka 提供了一个完整的流式处理类库。 K 2024-05-18 消息队列 #消息队列
MySQL的执行过程 MySQL的执行过程 Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现,主要包括连接器,查询缓存、解析器、预处理器、优化器、执行器等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存储过程、触发器、视图等。)都在 Server 层实现。 存储引擎层负责数据的存储和提取。支持 InnoDB、MyISAM、Memory 等多 2024-05-13 数据库 > MySQL #MySQL
Linux抓包工具tcpdump TCPdumpTCPdump,全称dump the traffic on anetwork,是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具。 tcpdump可以支持的功能: 1、在Linux平台将网络中传输的数据包全部捕获过来进行分析 2、支持网络层、传输层协议等协议捕获过滤; 3、数据发送和接收的主机、网卡和端口等各种过滤捕获数据规则 4、提供and、or、 2024-05-12 开发工具 > Linux #Linux #计算机网络
消息队列基本概念 消息队列我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。由于队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的。 如下为:发布/订阅(Pub/Sub)模型 我们知道操作系统中的进程通信的一种很重要的方式就是消息队列。我们这里提到的消息队列稍微有点区别,更多指的是各个服务以及系统内部各个组件 2024-05-12 消息队列 #消息队列
重排链表 LCR 026. 重排链表给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln-1 → Ln请将其重新排列后变为: 1L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 12输入: head = [1,2,3,4]输出: [1,4,2,3] 示例 2: 2024-04-29 算法 > 链表 #算法
回文链表 234. 回文链表给你一个单链表的头节点 head ,请你判断该链表是否为 回文链表 。如果是,返回 true ;否则,返回 false 。 示例 1: 12输入:head = [1,2,2,1]输出:true 示例 2: 12输入:head = [1,2]输出:false 提示: 链表中节点数目在范围[1, 105] 内 0 <= Node.val <= 9 进阶:你能否 2024-04-28 算法 > 链表 #算法