跳至主要内容

博文

MySQL架构与数据管理学习指南

MySQL 架构、数据管理与数据流动学习文档 面向对象:已经会写 SELECT / INSERT 等基本语句,但想真正理解"一条 SQL 语句进去之后,MySQL 内部到底发生了什么"的开发者。 阅读方式建议:不必从头背诵,遇到工作中的实际问题(比如"为什么这条查询这么慢""为什么加了索引还是全表扫描")时,回来对照相应章节。 目录 MySQL 整体架构总览 一条 SQL 语句的完整生命周期 INSERT / SELECT 基础回顾(从语法到底层) InnoDB 存储引擎深度剖析 索引原理(B+树、聚簇索引、联合索引) 复杂查询案例解析(GROUP BY / JOIN / HAVING / LIMIT / ORDER BY) 数据流动全景图(总结) 诊断与优化工具 延伸学习路线 第一章:MySQL 整体架构总览 MySQL 的架构可以分为两大块: Server 层 (所有存储引擎共用)和 存储引擎层 (可插拔,最常用的是 InnoDB)。 ┌─────────────────────────┐ │ 客户端 / 应用 │ └────────────┬─────────────┘ │ TCP / Socket ┌────────────▼─────────────┐ │ 连接器 (Connectors) │ ← 建立连接、权限校验、维持长连接 └────────────┬─────────────┘ ┌─────────────────────────────┼─────────────────────────────┐ │ Server 层 │ ...
最新博文

Kubernetes 从入门到精通实战指南

Kubernetes 从入门到精通实战指南 面向有编程基础、但是 K8s 新手的开发者。本文以"概念 + 可运行 YAML 示例 + 命令"的方式组织,建议边看边在自己的集群(本地可用 minikube / kind / k3d)里动手跑一遍。 目录 核心概念:Pod / Node / Service 等 应用部署基础 自动扩缩容(HPA / VPA / Cluster Autoscaler) 定时任务(CronJob) 配置与敏感信息管理(ConfigMap / Secret) 配置热加载 GitOps 部署方式 进入 Pod 排障 将集群入口暴露到公网 灰度发布 / 金丝雀发布 服务网格与 Istio RBAC 权限管理 常用命令速查表 1. 核心概念 Kubernetes(简称 K8s)是一个"容器编排系统":你告诉它"我要什么样的最终状态",它负责持续调节集群,让实际状态逼近你声明的状态(这叫 声明式 API / 控制循环 ,是理解一切的钥匙)。 1.1 Cluster(集群)与 Node(节点) Cluster :一组机器(物理机或虚拟机)的集合,由 K8s 统一管理。 Node :集群里的一台机器,分两种角色: Control Plane(控制平面) :跑着 kube-apiserver (所有操作的入口)、 etcd (存储集群状态的数据库)、 scheduler (决定 Pod 调度到哪个节点)、 controller-manager (跑各种控制循环)。 Worker Node :真正跑你业务容器的机器,上面跑着 kubelet (节点代理,负责启停容器)、 kube-proxy (负责网络转发)、容器运行时(containerd/CRI-O)。 kubectl get nodes -o wide 1.2 Pod Pod 是 K8s 里最小的可调度单元 ,不是容器本身。一个 Pod 里可以有 1 个或多个容器,这些容器: 共享同一个网络命名空间(同一个 IP,容器间可以用 localhost 互访) 可以共享 Volume(挂载卷) 生命周期绑定在一起,一起调度、一起销毁 最常见的模式是 一个 Pod 一个...

Go应用性能问题排查与GC优化

Go 应用性能问题排查报告:从通用诊断到 GC 专项优化 一、总体排查思路 Go 应用的性能问题大致可以分为五类,排查前先做归类,能避免"一上来就调 GC 参数"的误区: 类型 典型症状 常见根因 CPU 密集 CPU 使用率高、吞吐下降 算法效率低、序列化/反序列化开销、正则表达式、加密计算 内存/GC 相关 延迟毛刺(latency spike)、CPU 中 GC 占比高、内存持续增长 高分配速率、堆过大、对象逃逸多 并发/调度问题 goroutine 数暴涨、P 争抢、上下文切换多 goroutine 泄漏、锁竞争、channel 阻塞 I/O /网络问题 请求延迟高但 CPU 不高 数据库慢查询、下游服务慢、连接池不足 系统资源问题 容器被 OOMKill、CPU throttling cgroup limit 与 GOMAXPROCS/GOMEMLIMIT 不匹配 诊断的第一步永远是 用数据说话 ,而不是凭经验猜测。Go 官方工具链在这方面非常完善,建议按下面的顺序排查。 二、核心诊断工具 1. net/http/pprof :性能剖析的入口 在服务中引入: import _ "net/http/pprof" go func () { log.Println(http.ListenAndServe( "localhost:6060" , nil )) }() 然后可以采集: # CPU profile(默认采样 30 秒) go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 # 堆内存 profile(查看当前存活对象的分配来源) go tool pprof http://localhost:6060/debug/pprof/heap # goroutine 数量与堆栈(排查泄漏) go tool pprof http://localhost:6060/debug/pprof/goroutine # 锁竞争 go tool pprof http://localhost:6060/debug/pp...