本文是 Protobuf 系列的第 6 篇。 前面讲的都是 Protobuf 本身,这一篇讲怎么在 Go 项目里把它用好:工具链怎么配、生成的 API 有哪些坑、性能怎么调、动态处理怎么写。 1. 工具
本文是 Protobuf 系列的第 7 篇,收尾篇。 内容分两半:前半是 proto2 与 proto3 的差异——只在维护老项目、或需要读懂 descriptor.proto 这类 proto2 文件时需要;后半是 Protobuf Editions,Go
1. Kafka 简介 Kafka 是由 LinkedIn 开发并开源的分布式流处理平台,现归属 Apache 基金会。它的设计目标是超高吞吐、持久化存储和水平扩展,既可作为消息队列,也可用于流式计
1. RabbitMQ 简介 RabbitMQ 是基于 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)规范实现的开源消息中间件,由 Erlang 语言编写,天生具备高并发和高
1. MySQL 简介与版本演进 MySQL 是世界上最流行的开源关系型数据库,由瑞典 MySQL AB 公司开发,后被 Sun 收购,最终归入 Oracle 旗下。社区维护的分支 MariaDB 由 MySQL 创始人 Monty Widenius 主导,兼
1. 整体架构概览 ┌──────────────────────────────────────────────────────────────
1. DDL 数据定义语言 1.1 数据库 -- 创建 CREATE DATABASE IF NOT EXISTS myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 修改字符集 ALTER DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 删除 DROP DATABASE IF EXISTS myapp; -- 查看建库语句 SHOW CREATE DATABASE myapp; 1.2 表操作 -- 创建表 CREATE TABLE IF
1. 整数类型 1.1 类型一览 类型 字节 有符号范围 无符号范围(UNSIGNED) TINYINT 1 -128 ~ 127 0 ~ 255 SMALLINT 2 -32768 ~ 32767 0 ~ 65535 MEDIUMINT 3 -8388608 ~ 8388607 0 ~ 16777215 INT 4 -2147483648 ~ 2147483647 0 ~ 4294967295 BIGINT 8 -2
1. 为什么需要索引 假设 users 表有 1000 万行数据: -- 无索引:全表扫描,扫描 1000 万行 SELECT * FROM users WHERE email = 'alice@example.com'; -- 有索引:B+Tree 查找,约 log₂(10000000
1. ACID 原理 1.1 Atomicity(原子性) 定义:事务中的所有操作,要么全部成功,要么全部回滚,不存在中间状态。 实现:Undo Log Undo Log 记录了数据修改
1. 锁的分类 MySQL 锁体系: InnoDB 锁体系 │ │── 全局锁(FTWRL ├── 表级锁 │ ├── 表锁 (Table Lock) -- S锁 / X锁 │ ├── 意向锁 (Intention Lock) -- IS / IX ← 【这个】 │ ├── 元
1. 日志系统全景 日志分类: InnoDB 特有: Redo Log ── 物理日志,持久性(D),WAL Undo Log ── 逻辑日志,原子性(A)+ MVCC(I) MySQL Server 层: Binlog ── 逻辑日志,
1. 优化工作流 慢查询 → 找到 SQL → EXPLAIN 分析 → 找出瓶颈 → 针对性优化 → 验证 发现慢 SQL 的途径: 1. 慢查询日志(long_query_time = 1) 2. performance_schema.events_statements_summary_by_digest 3. show pr
1. 高可用架构概览 方案对比: 单机 → 无 HA,测试/开发用 主从复制 → 读写分离,异步,主库故障需手动切换 主从 + MHA → 自动故障转移,秒级切换 MGR(组复
1. 配置文件结构 1.1 配置文件位置 # MySQL 按以下顺序读取配置文件 /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf # 查看 MySQL 读取了哪些配置文件 mysql --verbose --help | grep "Default options" -A 1 # Docker 中挂载配置 docker run ... -v /host/my.cnf:/etc/mysql/conf.d/custom.cnf mysql:8.0 1.2 配置文
1. 问题排查通用流程 告警/反馈 ↓ 1. 确认影响范围(哪个服务?什么操作?多少用户?) ↓ 2. 查看监控(QPS、延迟、连接数、CPU/内存/磁盘 I/O)
1. 为什么需要分布式事务 1.1 问题场景 单机 InnoDB 事务能保证同一数据库内的 ACID。但在微服务架构下,一次下单操作可能跨越多个独立服务、独立数据库: 用户
1. 为什么要分库分表 1.1 单机 MySQL 的瓶颈 单机 MySQL 在数据量和并发量达到一定规模后,会遇到以下瓶颈: 性能瓶颈: 单表数据量超过 2000 万行后,B+Tree 高度增加
1. 容器化的前世今生 1.1 传统部署时代的痛点 想象一下 2010 年以前的软件部署方式: 开发者本地写代码 → 打成 jar/war 包 → 运维在物理机上配置环境 → 手动部署 → 祈祷不出
1. 整体架构概览 K8s 集群分为两类节点: ┌────────────────────────────────────────────────────