ID生成器(简单实用型,适用于小规模应用)
序言 一款好用、可靠的ID生成器,是业务稳定运行的基石。 场景 假如你的业务系统是微服务分布式架构,但数据库是单库单表,没有分库分表就意味着服务单库并发不高,且单库数据量也不大。 业务需求:在单库单表场景下,生成并使用全局唯一ID(比如可用作短链ID、订单ID、交易单ID、消息流水ID、调查问卷ID、用户ID、聊天会话ID等等),要求ID业务可读,Long整型且按天相对递增(不需要绝对...
序言 一款好用、可靠的ID生成器,是业务稳定运行的基石。 场景 假如你的业务系统是微服务分布式架构,但数据库是单库单表,没有分库分表就意味着服务单库并发不高,且单库数据量也不大。 业务需求:在单库单表场景下,生成并使用全局唯一ID(比如可用作短链ID、订单ID、交易单ID、消息流水ID、调查问卷ID、用户ID、聊天会话ID等等),要求ID业务可读,Long整型且按天相对递增(不需要绝对...
缘起 2021年,造车新势力集中入局,成为跨界造车集中爆发年,新能源汽车从电动化过渡到智能化阶段,本质是政策引导、市场机遇与技术演进的多重共振结果。问界、极越、小米等企业通过生态整合、技术复用和资本杠杆,在新能源渗透率快速提升期(2021年约13%)抢占战略高地,为后续竞争奠定基础。这一现象印证了中国智能电动车产业从“政策驱动”向“市场驱动”转型的关键节点特征。2021年更多是行业从政策驱动...
序言 近年来,AI领域迎来了颠覆性变革,以大语言模型(LLM)为核心的生成式技术正以前所未有的速度重塑人机交互的边界。以ChatGPT的对话式突破到Gemini、Claude的多模态跃迁,LLMs不仅展现出对人类语言的深刻理解,更逐步演化为知识推理与创造性表达工具。然而,这仅是智能革命的起点——当LLMs与智能体(Agent)技术深度融合,AI开始突破“被动应答”的局限,迈向自主感知、决策与...
序言 对于业务系统来说,保证业务的正确可靠很重要,如果在业务架构中引入了消息中间件,必须要保证数据安全,做到消息不丢失。一旦丢消息,就意味着丢数据,在业务上是完全不能接受的,特别是资产相关的业务,比如订单、交易、支付等,数据一旦不可靠,就会产生资损。 主流MQ都提供了保证消息可靠性的机制,在消息传递过程中,即使发生网络中断或者宕机,也能做到不丢消息。要做到这一点,得先知道消息从生产到消费...
序言 工作中会经常遇到类似下面这种场景, 基础架构组要对RocketMQ进行迁移扩容,业务方需要Check使用RocketMQ是否有幂等性保障,迁移过程中可能会产生重复消息的问题。对业务要求就是要保证消息幂等性,避免重复消费。RocketMQ迁移小组会在保障群里同步迁移状态,如果有问题及时联系反馈。 业务方上报自己的业务场景发生了重复消费问题,查看Broker运...
序言 顺序消息,就是生产端发送的消息顺序和消费端接收的消息顺序一样。消息顺序,一般是指时间上的顺序性。 先看下MQ的消息场景,再来看实现MQ顺序消息需要考虑哪些因素。 从MQ的消息存储看,底层消息是直接写入到文件的,它是一个顺序存储结构,没有用B树、B+树等类似数据结构。一方面,复杂数据结构会影响数据写入/读取的性能;另一方面,MQ功能需求简单,不需要复杂数据结构来支持检索。 ...
MQ基本模块 一个消息队列至少要有通信协议、网络、存储、生产者、消费者最基础的5个模块,不同的MQ架构就是对这5个模块的选型设计。 消息队列组成部分简图 消息队列中存储的数据分为两大类,分别是元数据和消息数据。元数据是集群维度的资源数据,包括Topic、Group、User、ACL、Config;消息数据是客户端写入的用户业务数据。 RocketMQ RocketMQ Kaf...
序言 业务发展初期,基础设施不够完善,基础架构人员正在为消息队列选型头疼,没有统一、可靠、稳定的消息队列中间件可供使用。某些业务场景需要使用消息队列的生产/消费机制来实现异步解耦,这个时期的业务特点是数据量不大,场景也不复杂,只是需要缓冲实现立即/延时异步分发消息,并没有用到消息队列的高级功能,比如事务消息、顺序消息、死信队列这些。为了及时满足业务需求,可以暂不使用业界标准的消息队列,业务...
什么是消息队列 消息队列(Message Queue,MQ)是具有缓冲功能、具备类发布/订阅能力的存储引擎,架构设计中作为总线和管道,主要用来削峰、异步解耦、缓存。消息队列最基本的功能是生产/消费,在此基础上建设扩展如事务消息、顺序消息、延时消息、死信队列等高级功能,实现了高吞吐、低延时、高可靠等特性。当前开源社区使用较多的标准消息队列有Kafka、RocketMQ、RabbitMQ、Pu...
索引实践 这里所有的实践都是基于MySQL 5.7.26版本的InnoDB存储引擎!!! 在实操之前,需要确定当前使用的MySQL版本,因为不同的版本,对同一问题的表现不同。 mysql> SELECT VERSION(); +-----------+ | VERSION() | +-----------+ | 5.7.26 | +-----------+ 1 row in s...