摘要:
前言 并非所有业务场景都要求消息绝对不丢失。对很多应用来说,为了追求更高的吞吐量,少量的消息丢失是可以容忍的。 然而,在一些关键的业务场景中,确保消息不丢失至关重要。本文将重点讨论需要保证消息可靠性的场景,并提供相关的优化建议。 消息丢失的场景 消息丢失的场景可以归纳为三种主要情况: 场景 1:【生 阅读全文
摘要:
1.分表思想 对于查询操作来说,表中数据越少,查询速度通常越快。因此,优化的方向就是将不相关的数据分离到其他表中。 案例 1:活跃数据与历史数据分表 如果系统的大部分业务操作集中在“活跃”数据上,可以考虑将数据划分为活跃数据表和历史数据表: 活跃数据表:包含当前常用的数据,数据量较少,但读写操作频繁 阅读全文
摘要:
为什么需要主备结构? 为了确保服务的高可用性,系统不能因为某一个节点的故障而完全不可用。因此,我们需要通过主备结构来确保在主节点发生故障时,备份节点能够迅速接管,继续提供服务。 为什么不直接通过多个节点共同提供服务? 因为与应用服务不同,这种节点提供的是数据维护和存储服务,为了确保数据的连续性和一致 阅读全文
摘要:
一个服务端进程能同时连接多少个 Socket? 要理解一个服务端进程能同时支持多少个连接,首先我们需要明确一个 socket 连接 的表示方式。一个连接由四个部分组成:[LocalIP:LocalPort:RemoteIP:RemotePort]。对于服务端进程来说,LocalIP 和 LocalP 阅读全文
摘要:
服务端如何验证客户端已经登录? 在用户成功登录后,服务端会发放一个凭证。之后,客户端的每次请求都需要携带该凭证,服务端通过验证凭证的有效性来判断用户是否已登录,并处理请求。 以下是 Session 和 JWT 在这方面的不同之处: 1. 凭证的内容是什么? Session:凭证是一个简单的 ID 字 阅读全文
摘要:
为什么要打印日志? 1. 监控系统运行情况 定期查看系统日志是了解服务是否正常运行的重要手段。日志为运维人员提供了实时监控系统状态、发现潜在问题的关键信息。 2. 排查问题(例如异常栈) 日志记录了详细的错误信息,特别是异常栈,有助于快速定位问题的根源。对于一些偶发的 Bug,日志是排查的唯一途径, 阅读全文
摘要:
背景 接过一个外包的项目,该项目使用JPA作为ORM。 项目中有多个entity带有@version字段 当并发高的时候经常报乐观锁错误OptimisticLocingFailureException 原理知识 JPA的@version是通过在SQL语句上做手脚来实现乐观锁的 UPDATE tabl 阅读全文
摘要:
1.JS是单线程吗? 是的,到目前为止JS语言没有多线程的API,它的执行引擎只支持单线程,也就是一个JavaScript进程内只有一个线程。 2.与DOM的交互为什么不可以是多线程? 我觉得是可以的,但是如果有多线程可以操作DOM,则必须引入一个同步机制来保证线程安全。想象一个这样一个场景,用户提 阅读全文
摘要:
概要 消息查询是什么? 消息查询就是根据用户提供的msgId从MQ中取出该消息 RocketMQ如果有多个节点如何查询? 问题:RocketMQ分布式结构中,数据分散在各个节点,即便是同一Topic的数据,也未必都在一个broker上。客户端怎么知道数据该去哪个节点上查? 猜想1:逐个访问broke 阅读全文
摘要:
消费者如何读取数据? 前一篇是生产者的处理,这一篇讲消费者的处理 我们都知道,消费者无非就是不停地从队列中读取数据,处理数据。但是与BlockedQueue不同的是,RingBuffer的消费者不会对队列进行上锁,那它是怎样实现的呢? 概括地说,就是通过CAS原子性地得到一个可消费的序号,然后再根据 阅读全文