Kubernetes CPU 限制深度解析:为何移除反而提速 22 倍
概述Kubernetes CPU 限制看似能保护集群稳定性,实则可能因 Linux 内核 Bug 导致不必要的 CPU 流控,严重影响服务性能。Buffer 团队通过移除 CPU 限制,实现了服务响应速度最高 22 倍的提升。 核心发现: ⚠️ CPU 限制触发不必要流控 🐛 Linux 内核 < 4.19 存在 Bug 🚀 移除限制后性能大幅提升 ⚖️ 需要权衡稳定性和性能 适用场景: 服务响应延迟高 CPU 未满但仍被流控 追求极致性能 内核版本 < 4.19 原文链接: https://blog.fleeto.us/post/k8s-faster-services-no-cpu-limits/推荐配合阅读: 站内《最大最小内存设置为一致》文章 背景Buffer 的 Kubernetes 实践基本情况: 项目 数据 开始时间 2016 年 管理工具 kops 节点数量 ~60 个(AWS) 容器数量 ~1500 个 服务架构 微服务 参考: Kubernetes 官方案例研究 CPU 限制机制工作原理CPU 限制(C...
Kubernetes 获取客户端真实 IP:externalTrafficPolicy 深度解析
概述在 Kubernetes 中获取客户端真实 IP 是一个常见需求,但由于 kube-proxy 的 SNAT 机制,往往获取到的是中间节点的 IP。externalTrafficPolicy 字段提供了解决方案。 核心知识: 🔍 Service 外部流量策略 📡 客户端 IP 保留机制 ⚖️ Cluster vs Local 模式 🎯 负载均衡权衡 适用场景: 需要记录真实客户端 IP 访问控制和安全审计 流量分析和用户画像 地域识别和限流 externalTrafficPolicy 详解什么是 externalTrafficPolicy定义: externalTrafficPolicy 是 Kubernetes Service 中控制外部流量转发策略的字段,决定流量如何路由到 Pod 以及是否保留客户端源 IP。 可选值: 值 说明 默认 Cluster 流量可转发到任意节点的 Pod ✅ 是 Local 流量仅转发到本节点的 Pod ❌ 否 配置示例: 123456789101112apiVersion: v1kind: Servicem...
MyBatis `foreach` 标签深度解析:动态SQL与批量操作利器
引言在MyBatis中,动态SQL是其最强大的功能之一。而在构建动态SQL时,处理集合(如List, Array, Map)的遍历是一项常见需求,尤其是在构建IN条件查询或执行批量插入/更新时。MyBatis为此提供了<foreach>标签,它是一个功能强大的循环工具,能够极大地简化SQL的编写和维护。 本文将深入解析<foreach>标签的各个属性,并通过清晰的示例展示其在不同场景下的应用,包括处理List、Array和Map类型的参数,助你彻底掌握这个动态SQL利器。 <foreach> 标签属性详解<foreach>标签的强大之处在于其灵活的属性配置,可以构建出各种复杂的循环逻辑。 123456789101112131415161718- collection: 要做foreach的对象,作为入参时,List对象默认用"list"代替作为键,数组对象"array"代替作为键,Map对象没有默认的键。在作为入参时可以使用@Param("keyName")来设置...
自定义ESLint规则并整合到SonarQube
概述本文介绍如何自定义ESLint规则,并将其整合到SonarQube平台进行统一的代码质量管理。通过这种方式,可以将团队的编码规范和最佳实践落地到实际项目中,在编码阶段对开发者进行提示和约束。 背景介绍ESLint简介ESLint是目前最流行的JavaScript代码静态分析工具,通过设定的语法规则来检查代码,约束代码风格,提高代码的健壮性,避免因代码不规范导致应用出现bug。 核心特点: 规则可自定义,适应团队特定需求 支持使用社区热门规则集(如Airbnb、Standard等) 可扩展的插件机制 SonarQube简介SonarQube是一个开源的代码质量管理平台,用于持续检测代码质量和安全漏洞。 支持语言: Java, C#, C/C++, PL/SQL, Cobol JavaScript, TypeScript, Python, Go 等二十几种主流编程语言 为什么需要自定义规则在实际业务中,通过自定义规则可以: 落地编码规范:将团队约定的编码规范转化为可执行的检查规则 提前发现问题:在编码阶段即时提示,而非等到代码审查 统一代码风格:多人...
Pyenv 完全指南:Python 多版本管理神器
概述Pyenv 是一个强大的 Python 版本管理工具,允许在同一系统中安装和切换多个 Python 版本,而不影响系统自带的 Python。 核心功能: 🔧 多版本 Python 共存 🔄 灵活的版本切换机制 📦 简单的安装和管理 🎯 项目级版本隔离 适用场景: 不同项目需要不同 Python 版本 测试代码在多个 Python 版本的兼容性 避免影响系统自带 Python 开发环境与生产环境版本匹配 安装 Pyenv一键安装1curl https://pyenv.run | bash 安装内容: pyenv:核心工具 pyenv-virtualenv:虚拟环境插件 pyenv-update:更新插件 pyenv-doctor:诊断插件 配置环境变量Zsh 用户(~/.zshrc): 12345678910# Pyenv 配置export PYENV_ROOT="$HOME/.pyenv"export PATH="$PYENV_ROOT/bin:$PATH"# 初始化 pyenveval "$(...
在K8S中实现SpringBoot零宕机发布:滚动更新、优雅停机与弹性伸缩
引言在云原生时代,保证服务的稳定性和高可用性至关重要。本文将深入探讨如何结合 Kubernetes (K8s) 与 Spring Boot,实现零宕机发布。我们将覆盖以下核心主题: 健康检查:确保流量只被路由到健康的实例。 滚动更新:平滑地升级应用,不中断服务。 优雅停机:安全地关闭应用,避免数据丢失或请求失败。 弹性伸缩:根据负载自动调整实例数量。 Prometheus 监控:收集关键指标,洞察应用性能。 配置分离:实现镜像复用,提高交付效率。 参考资料: 微信公众号文章 Stack Overflow: Actuator health endpoint returns OUT_OF_SERVICE Spring Boot Actuator: Kubernetes Probes 1. 健康检查健康检查是实现零宕机发布的基础。K8s 通过就绪探针 (Readiness Probe) 和存活探针 (Liveness Probe) 来判断应用实例是否准备好接收流量或是否需要重启。 就绪探针 (Readiness): 告诉 K8s 应用是否准备好处理请求。如果失败,K8s...
Spring Boot + Logback + MDC 实现分布式链路追踪
引言在微服务架构中,一个用户请求通常会流经多个服务。为了快速定位问题和分析系统瓶颈,我们需要一种方法来追踪这个请求在整个分布式系统中的调用链。分布式链路追踪应运而生,它通过为每个请求分配一个全局唯一的Trace ID,并将这个ID在服务调用间传递,使得我们可以将散落在各个服务中的日志串联起来。 Logback、Log4j等日志框架提供的MDC(Mapped Diagnostic Context,映射调试上下文)功能,是实现链路追踪的利器。MDC本质上是一个与当前线程绑定的ThreadLocal哈希表,我们可以在其中存入键值对(如Trace ID),并在日志格式中引用它,从而轻松地为该线程产生的所有日志都带上统一的追踪标识。 本文将详细介绍如何结合Spring Boot、Logback和MDC,从零开始实现一个轻量级的分布式链路追踪方案,并解决在多线程和跨服务HTTP调用场景下Trace ID丢失的问题。 MDC介绍MDC(Mapped Diagnostic Context) 是 Logback 和 Log4j 等日志框架提供的一种在多线程环境下进行诊断和调试的工具。其核心原理是利...
Spring Framework 5 高级进阶指南:从容器、AOP到Web MVC底层原理全解析
引言Spring Framework 是 Java 开发中不可或缺的核心框架。本指南将带你深入 Spring 5 的高级主题,从核心容器的实现机制,到 AOP 的底层原理,再到 Web MVC 的处理流程,为你揭示 Spring 框架内部的精妙设计。无论你是希望巩固基础,还是渴望深入源码,本文都将为你提供一份详尽的学习路线图。 本文将涵盖以下核心内容: 容器与 Bean:深入理解 BeanFactory 与 ApplicationContext,探索 Bean 的完整生命周期。 AOP 原理:剖析 Spring AOP 的三种实现方式(ajc、agent、proxy),并深入 cglib 和 JDK 动态代理。 Web MVC 揭秘:全面解析 Spring MVC 的请求处理流程,包括参数解析、返回值处理、异常处理等核心组件。 Spring Boot 自动配置:探究 Spring Boot 自动配置的魔法,理解其背后的原理和实现。 配套源码地址: https://github.com/behappy-spring-study/spring5_study_source ...
Spring Cloud Gateway核心指南:从路由、断言到全局过滤器
引言在现代微服务架构中,API网关扮演着至关重要的角色,它作为所有服务的统一入口,负责请求路由、安全认证、流量控制和监控等关键任务。Spring Cloud Gateway是Spring官方推出的第二代网关框架,基于Spring 5、Spring Boot 2和Project Reactor构建,采用非阻塞的响应式编程模型,相比于第一代的Zuul,性能更优,功能也更为强大。本文将从核心概念入手,详细介绍Spring Cloud Gateway的路由、断言、过滤器等核心功能,并提供实践配置,帮助你快速掌握并应用于项目中。 为什么需要API网关?在微服务架构中,网关是整个系统的“守门神”,它统一了服务入口,简化了客户端的调用逻辑。其核心功能主要包括: 请求路由 (Request Routing): 根据请求的路径、域名等信息,将请求智能地转发到后端的具体微服务。 权限控制 (Authentication & Authorization): 在请求到达业务服务之前,集中完成用户认证和权限校验,实现安全拦截。 限流熔断 (Rate Limiting & Circuit ...
sentinel结合项目的使用
面对互联网的高并发过载流量,为了保证系统的稳定性,我们一般会对过载流量进行限流。 1、什么是 sentinel:在基于 SpringCloud 构建的微服务体系中,服务间的调用链路会随着系统的演进变得越来越长,这无疑会增加了整个系统的不可靠因素。 在并发流量比较高的情况下,由于网络调用之间存在一定的超时时间,链路中的某个服务出现宕机都会大大增加整个调用链路的响应时间,而瞬间的流量洪峰则会导致这条链路上所有服务的可用线程资源被打满,从而造成整体服务的不可用,这也就是我们常说的 “雪崩效应”。 而在微服务系统设计的过程中,为了应对这样的糟糕情况,最常用的手段就是进行 ”流量控制“ 以及对网络服务的调用实现“熔断降级”。因此,Sentinel 就应运而生了。 Sentinel 是一款面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来保障服务的稳定性,核心思想是:根据对应资源配置的规则来为资源执行相应的流控/降级/系统保护策略,Sentinel 的主要特性如下图: 2、主流限流熔断组件对比: 从三者的...
