- 博客(24)
- 收藏
- 关注
原创 CMU 15-445 2024FALL Project 1:Buffer Pool Manager 踩坑实录
CMU 15-445 Project 1:Buffer Pool Manager 实现总结 本文总结了CMU数据库课程Project 1的实现过程,主要包含四个子任务: LRU-K Replacer:改进传统LRU算法,通过记录最近K次访问历史来防止缓存污染。实现使用链表存储访问时间戳,按k-distance选择驱逐对象。 Disk Scheduler:封装磁盘管理器,使用后台线程异步处理读写请求,通过promise/future机制实现异步通知。 Page Guard:基于RAII模式实现资源管理,使用移
2025-12-23 20:32:53
584
原创 CMU 15-445 2024Fall Project 0:HyperLogLog 从懵逼到通关
【摘要】本文记录了作者实现CMU 15-445课程Project 0中HyperLogLog数据结构的经历。HyperLogLog是一种高效估算不重复元素数量的算法,通过哈希值的前导零统计实现,相比传统HashSet可大幅节省内存(10亿用户仅需12KB)。文章详细解析了核心原理:将元素哈希为64位二进制数,统计前导零数量,利用概率反推基数估算。作者重点分享了两个实现版本(基础版和Presto优化版)的关键区别,特别是Presto采用从右往左数零(trailing zeros)的优化方法,并指出了Calcu
2025-12-12 00:33:56
988
原创 数字图像处理课程实践项目(包括答辩建议,可自取)
本文介绍了雾天图像复原处理系统的关键技术,包括直方图均衡化、HSI色彩空间转换和暗原色先验算法。系统基于Python+OpenCV实现,通过大气散射模型分析雾天图像退化机理,采用直方图均衡化增强对比度,利用HSI空间保持色彩信息,并运用暗原色先验理论进行深度去雾处理。项目提供了从基础到高级的完整解决方案,适用于数字图像处理课程设计和学习。
2025-12-09 17:53:51
603
原创 从零开始的云原生之旅(十八):配置热更新——无需重启服务的幕后
本文深入解析Kubernetes配置热更新机制,从ConfigMap变更到应用无感加载的全链路实现。通过kubelet的符号链接原子更新保证文件一致性,结合Viper+fsnotify实现Go应用的配置动态加载。重点剖析了线程安全控制、差异比对和验证机制,并给出验证方法和最佳实践。该方案将配置变更从分钟级缩短到秒级,显著提升运维效率,同时通过Fail-Safe策略保障服务持续可用。未来可扩展为自动化配置管理平台,实现更智能的配置变更管控。
2025-11-20 11:14:03
1024
原创 从零开始的云原生之旅(十七):K8s 配置管理最佳实践
本文详细介绍了Kubernetes配置管理的最佳实践,重点包括:构建四层优先级配置加载体系(默认值→配置文件→环境变量→热更新),采用Kustomize+ConfigMap Patch实现多环境管理,实施Fail-Fast+Fail-Safe的验证策略,以及敏感信息隔离和脱敏处理。文章还提供了从开发到生产的完整配置变更操作手册、常见问题排查建议,并总结了v0.5版本在结构化配置、可靠性、安全性和可运维性方面的提升。这套方案通过分层设计确保了配置管理的稳定性和灵活性,为后续热更新功能奠定了基础。
2025-11-20 11:13:24
402
原创 从零开始的云原生之旅(十五):初探服务网格:Istio 让微服务更简单
本文介绍了从Ingress迁移到Istio服务网格的全过程,重点解析了Istio的核心架构与功能优势。主要内容包括: 服务网格概念解析:通过Sidecar代理实现网络功能与业务解耦,解决传统微服务架构中的复杂性问题 Istio架构详解:控制平面(Istiod)负责配置分发和证书管理,数据平面(Envoy)处理实际流量 核心功能对比:展示Istio在流量管理、负载均衡、安全通信等方面相比传统方案的显著优势 实践应用场景:针对服务治理、金丝雀发布、多语言支持等需求提供具体落地建议 文章通过架构图解和配置流程说明
2025-11-18 13:00:00
1311
原创 从零开始的云原生之旅(十六):金丝雀发布实战:灰度上线新版本
本文详细介绍了使用Istio实施金丝雀发布的完整流程。通过对比不同发布策略的优缺点,重点阐述了金丝雀发布风险可控、快速回滚等优势。文章包含从双版本应用准备到Istio流量配置的实践步骤: 部署v1稳定版和v2新版本,通过K8s标签区分版本 配置Istio VirtualService实现90/10的流量权重分配 建立阶段性验证流程,包括10%、50%、100%的渐进式放量策略 提供关键监控指标和回滚决策点,如错误率、响应时间等阈值标准 强调观察时间和验证环节的重要性,确保安全灰度上线 通过这套方法,开发者可
2025-11-17 13:49:31
936
原创 从零开始的云原生之旅(十四):Ingress Controller 实战:Nginx Ingress 深度解析
本文深入解析了Nginx Ingress Controller在云原生环境中的实战应用。首先介绍了Ingress Controller的工作原理,包括请求链路中的统一入口、控制器监听机制和路由决策过程。随后详细讲解了在minikube环境中安装Nginx Ingress的步骤,并提供了通过Ingress资源暴露服务的配置示例。文章还分享了高级路由配置技巧,如基于路径的精确路由和URL重写功能。特别强调了Ingress与Istio共存的架构冲突问题,并给出了从Ingress迁移到Istio的检查清单。通过实际
2025-11-17 13:35:46
987
原创 从零开始的云原生之旅(十三):Ingress 深度剖析——从 Service 到统一入口
摘要 本文深度剖析Kubernetes Ingress机制,系统讲解从Service到统一入口的实现原理。主要内容包括: 明确Ingress在Kubernetes服务暴露体系中的定位,作为L7层路由补充L4层Service 解析Ingress三层架构:声明资源、控制器与数据面的协作关系 详解Ingress资源规范,包括规则匹配、PathType、默认后端等核心配置 介绍TLS终止、IngressClass多控制器共存等高级特性 分析常见控制器扩展功能与请求生命周期 对比不同Ingress Controlle
2025-11-17 13:09:47
1060
原创 从零开始的云原生之旅(十二):从 Service 到 Ingress——K8s 服务暴露完全指南
本文是一篇Kubernetes服务暴露指南,详细介绍了从基础Service到Ingress的完整演进路径。主要内容包括: 四种Service类型详解: ClusterIP(集群内部服务发现基础) NodePort(简单直接的外部访问方式) LoadBalancer(云环境标准入口) ExternalName(连接旧系统过渡方案) 关键问题解析:指出了Service在复杂场景下的局限性,如域名管理、路径路由、HTTPS统一等问题,引出了Ingress的必要性。 典型架构演进:展示了从单体应用→多服务→统一入口
2025-11-17 11:28:22
957
原创 从零开始的云原生之旅(十一):压测实战:验证弹性伸缩效果
本文详细记录了使用k6工具对云原生服务进行压力测试的全过程,验证HPA弹性伸缩效果。文章从压测必要性入手,对比了不同压测工具,重点介绍了k6的安装、核心概念和脚本编写方法。作者设计了包含6个阶段的测试计划(总时长9.5分钟),模拟真实负载场景,并分享了测试过程中遇到的OOM等问题的解决经验。最终压测结果显示:100%请求成功率,P95响应时间983ms,HPA成功实现了自动扩缩容。文章还提供了资源配置、探针配置和HPA调优的最佳实践建议,为云原生应用的性能测试提供了完整参考。
2025-11-02 17:45:00
1093
原创 从零开始的云原生之旅(十):HPA 完全指南:从原理到实践
本文深入解析Kubernetes HPA(HorizontalPodAutoscaler)的工作原理与实战配置,从核心概念到实际部署的全过程。主要内容包括:HPA的三核心问题(何时扩缩容、扩缩多少副本、扩缩速度)及其计算公式;详细解读HPA配置文件结构,包括CPU/内存指标配置和行为策略;手把手演示HPA部署步骤及常见问题排查;通过实际案例观察自动扩缩容过程;提供多指标配置、调优技巧(如让HPA更敏感、避免抖动)以及典型故障解决方案。文章特别强调实战中踩坑经验,如TARGETS显示unknown等问题的处理
2025-11-02 17:31:42
750
原创 从零开始的云原生之旅(九):云原生的核心优势:自动弹性伸缩实战
本文介绍了云原生核心能力之一——自动弹性伸缩的实战经验。文章从传统手动扩容的痛点出发,阐述了弹性伸缩的价值,可节省40%资源成本。详细讲解了Kubernetes的三种伸缩方式,重点分析HPA的工作原理和架构流程。在实践部分,作者分享了安装Metrics Server、优化资源配置、添加负载测试接口等准备工作,为后续HPA配置打下基础。通过对比传统方式和弹性伸缩在不同场景下的表现,展示了云原生自动扩缩容的优势:无需人工干预、按需分配资源、高效应对流量波动。
2025-11-02 17:20:00
852
原创 从零开始的云原生之旅(八):CronJob 实战定时清理任务
本文介绍了如何使用Kubernetes的CronJob实现定时清理Redis数据的任务。通过对比传统crontab方式的局限性,分析了K8s CronJob在访问内部服务、高可用、日志监控等方面的优势。详细讲解了从需求分析、清理策略制定到代码实现、CronJob配置的全过程,包括调度表达式、并发策略、历史记录管理等关键配置项。最后还提供了生产环境优化建议和问题排查方法,帮助开发者将定时任务完全纳入K8s管理体系。
2025-10-30 15:02:25
817
原创 从零开始的云原生之旅(七):ConfigMap 和 Secret 配置管理
本文介绍了Kubernetes中ConfigMap和Secret的使用方法,帮助实现配置与代码分离。文章首先分析了传统配置方式的痛点(硬编码、环境耦合、敏感信息暴露),然后详细讲解了ConfigMap和Secret的创建与使用方式和实战案例。
2025-10-30 14:55:19
1104
原创 从零开始的云原生之旅(六):DaemonSet 实战日志采集器
本文介绍了如何通过DaemonSet在Kubernetes集群的每个节点上部署日志采集器。文章对比了Deployment方案的不足,详细阐述了DaemonSet的核心优势,包括自动节点感知和Pod调度能力。从日志采集器的功能设计到具体实现,完整演示了Docker镜像构建、DaemonSet配置(包括hostPath挂载、节点选择器、污点容忍等关键配置)和部署验证的全过程。此外,还涵盖了节点扩缩容测试、高级特性优化和常见问题排查等生产环境实用内容,为读者提供了从零搭建可靠节点级服务的实践指南。
2025-10-30 14:43:35
886
原创 从零开始的云原生之旅(五):用 StatefulSet 部署 Redis
本文介绍了在Kubernetes中使用StatefulSet部署Redis的关键实践。作者通过踩坑经历发现Deployment不适用于有状态应用,转而使用StatefulSet实现Redis的持久化存储。文章详细讲解了StatefulSet的三大优势:固定Pod名称、自动创建独立PVC和固定网络标识。内容包括完整的部署架构设计、Redis配置、Headless Service原理、StatefulSet配置详解,以及数据持久化测试验证。作者还分享了健康检查、资源管理配置和常见问题排查经验,最后展望了从单机部
2025-10-30 14:39:37
1062
原创 从零开始的云原生之旅(四):K8s 工作负载完全指南
本文系统介绍了 Kubernetes 中的四种核心工作负载类型。作者通过实际开发中的痛点切入,详细分析了 Deployment(无状态应用)、StatefulSet(有状态应用)、DaemonSet(节点守护进程)和 Job/CronJob(批处理任务)的特性对比、适用场景及选择策略。重点探讨了各种工作负载的差异,包括 Pod 命名规则、启动顺序、存储方式等关键区别,并通过 Redis 部署案例展示了不同选择的实践效果。最后提供了直观的选择决策树,帮助开发者根据应用特性快速选择合适的工作负载类型。
2025-10-30 13:31:26
920
原创 从零开始的云原生之旅(三):健康检查差点把我坑死
文章摘要 本文分享了作者在云原生实践中遇到的健康检查和资源限制问题。健康检查配置不当导致Pod疯狂重启,作者通过调整initialDelaySeconds、timeoutSeconds等参数解决了问题。资源限制方面,作者解释了Requests和Limits的区别,强调合理设置可避免单个Pod耗尽节点资源。文章提供了生产级配置建议,包括健康检查宽松参数设置和资源限制参考值,最后通过实战验证了配置的正确性。这些经验教训对云原生初学者具有重要参考价值。
2025-10-27 15:10:55
926
原创 从零开始的云原生之旅(二):第一次部署到 K8s
摘要 本文记录了作者从零开始学习Kubernetes的实践过程。文章首先用通俗易懂的语言解释了K8s的核心概念:Pod(容器组合)、Deployment(Pod管理器)和Service(负载均衡器)。然后详细介绍了使用Minikube搭建本地K8s集群的步骤,包括环境准备和配置编写。重点分享了Deployment和Service的YAML配置方法,以及首次部署时遇到的典型问题(如镜像加载失败、标签不匹配等)的解决方案。通过实践演示了K8s的自动化管理能力,包括容器监控、负载均衡和滚动更新等功能,为初学者提供
2025-10-27 15:02:43
1549
原创 从零开始的云原生之旅(一):把 Go 应用塞进 Docker
本文记录了作者首次将Go应用容器化的完整过程。文章从开发者实际痛点出发,详细介绍了构建Go微服务的步骤,包括项目结构设计、健康检查接口实现、优雅关闭处理以及Prometheus监控集成。重点分享了Docker镜像优化经验,从初始800MB的"怪物"镜像通过多阶段构建瘦身到49.1MB。文中还特别标注了开发过程中踩过的坑,如环境一致性、进程管理等问题,并展示了容器化如何解决这些痛点。最后提供了本地测试、Docker构建和容器验证的完整流程,为Go开发者学习容器化提供了实用参考。
2025-10-27 14:18:41
1324
原创 启动和终止线程
本文解析了Java线程的构造、启动和中断机制。通过源码分析线程构造过程,说明线程继承父线程属性;强调启动线程时需命名以便调试;重点阐述中断机制,对比isInterrupted()和interrupted()方法差异,解释中断异常处理中标识位变化;通过实验验证异常处理对中断标志位的影响;最后指出suspend()、resume()和stop()方法已过时,存在线程安全问题。
2025-09-17 10:32:18
1413
原创 java线程简介
要弄清楚线程,我们首先要明白进程线程之间的关系。我们可以先看下图:首先我们要先知道,现代操作系统在启动一个程序时会先创建一个进程,主要是为其分配系统资源。而进程会启动一个主线程,而主线程下可以创建多个线程(每一个线程都有独立的计数器,堆栈等),你可以先简单认为每一个线程都在跑一个独立服务,并可以访问该进程下的共享变量。另外,线程是cpu的调度最小单元,它能够在cpu上高速切换。这里我们做一个小实验,看看我们在启动一个简单的java程序后,后台启动了哪些线程。
2025-09-14 16:42:58
1681
原创 Spring中AOP的底层原理剖析
房屋中介代理客户手中没有房源,找一个中介商品代购代购者可以拿到比较低成本的商品,拥有自己的渠道代理模式(proxy pattern):是23种设计模式中的一种,属于结构性的模式。指一个对象本身不做实际的操作,而是通过其它对象来得到自己想得到的结果意义:目标对象只需要关心自己的实现细节,通过代理对象来实现功能的增强,可以扩展目标对象的功能体现了一个非常重要的编程思想:不能随便修改源码,如果需要修改源码,通过代理模式来扩展。概述:在不改变原有功能代码的前提下,能够动态的实现方法的增强。
2024-09-21 12:51:47
2663
26
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅