郑文峰的博客
技术博客,专注于后端学习与总结,python,go,redis,k8s,mysql,kafka,flask,django,tornado,git,github,markdown等技术类文章
Go语言高性能编程
docker容器
简介docker及其使用方法
容器的本质
容器实现的主要技术:namespace、cgroup、chroot, 通过代码实现一个容器来深入理解其本质。
手动实现docker容器bridge网络模型
本文主要是通过使用Network Namespace来模式docker的bridge模式来深入的理解其原理。
docker容器单机网络
本文主要讲述docker容器的四种网络模式:host、bridge、container、null,并介绍它们的使用方法及实现原理。
k8s之Pod
介绍k8s中的pod资源对象,及其使用方法和案例
k8s之Deployment
介绍k8s中的deployment资源对象,及其使用方法和案例
k8s之Service
介绍k8s中的service资源对象,及其使用方法和案例
k8s之ConfigMap和Secret
介绍k8s中的configmap和secret资源对象,及其使用方法和案例
k8s之Job和CronJob
介绍k8s中的job资源对象,及其使用方法和案例
k8s之DaemonSet
介绍k8s中的daemonset资源对象,及其使用方法和案例
k8s之PV、PVC和StorageClass
介绍k8s中的pv、pvc和storageclass资源对象,及其使用方法和案例
k8s之StatefulSet
介绍k8s中的statefulset资源对象,及其使用方法和案例
使用kubeadm安装k8s
介绍如何使用kubeadm来搭建一个小型的k8s集群
pod中将代码与运行环境分离
我们在创建一个 python 的 web 服务的镜像时,一般的做法是,将 python 环境与代码打包成一个镜像,然后将这个镜像进行发布。
django后端服务、logstash和flink接入VictoriaMetrics指标监控
通过指标监控可以设置对应的告警,快速发现问题,并通过相应的指标定位问题。
理解flannel的三种容器网络方案原理
本文主要介绍flannel在k8s网络中作为网络插件通过UDP、VXLAN、HOST-GATEWAY三种模式来解决容器跨主机网络通信的,并通过手动实现这三种模式深入理解其原理。
理解calico容器网络通信方案原理
Calico是k8s中常用的容器解决方案的插件,本文主要介绍BGP模式和IPIP模式是如何解决的,并详细了解其原理,并通过实验加深理解。
kubernetes service如何通过iptables转发
本文主要是介绍kubernetes的service是如何利用iptables来进行流量的转发达到流量的负载均衡的,并会通过实践操作来更好的理解与验证其原理。
kube-proxy源码分析
本文主要是对kube-proxy的源码分析,了解其代码结构和实现原理。这里是根据kubernetes1.23.9版本来进行分析的。在下面贴上的代码会一定裁剪,主要用于理解主流程。
一次服务升级时pg表DDL执行超时失败
本文详细分析了一次因PostgreSQL表DDL执行超时失败而导致的服务升级问题,通过SQL查询和代码审查定位到问题根源,揭示了数据库锁机制和资源管理的重要性。
服务启动时出现 OOM
本文详细记录了一次在Kubernetes环境中Golang服务启动时出现OOM(Out of Memory)问题的排查和解决过程。服务在启动约2分钟后出现内存溢出,通过pprof工具分析发现主要问题源于bytes.Buffer对象的频繁扩容。
kafka中listener和advertised.listeners的作用
如下配置:
mysql之日志
一条数据在更新过程当中,如果中途 mysql crash 了,mysql 是如何保证数据的一致性和持久性的?在这个过程中 mysql 的日志系统起到了至关重要的作用。本文将会介绍 mysql 中的 undo log、redo log 和 bin log 在这其中的作用。
mysql之MVCC原理
MVCC 的全称是 Multi- Version Concurrency Control,也就是多版本并发控制,该机制是只有支持事务的 InnoDB 引擎下才存在的,用来实现提高数据库的并发性能,可以做到:读不加锁,读写不冲突。
redis之五种基本数据类型
本文主要讲解 redis 的五种基本数据类型:String、List、Set、Sorted Set、Hash。学习如何使用它们,并且了解它们的底层数据结构实现,这样我们才能在适当的应用场景选择最适合的数据类型来解决我们的需求。
redis之持久化
本文主要是介绍 redis 是如何进行持久化数据的,我们知道 redis 是基于内存的数据库,那么只要服务器一旦宕机,那么数据则将全部丢失,如果从后端数据库进行恢复,则可能导致性能变慢,那么 redis 需要自身持久化,而不通过后端数据库来恢复数据是重要的。
redis之主从库同步
在单点故障后,我们需要保证服务不间断,所以需要使用冗余的副本提供集群服务,从而达到服务的高可用。redis 提供了主从库数据同步机制,从而保证数据副本的一致性,而主从库使用的是读写分离的机制。
redis之哨兵机制
本文主要介绍的是 Redis 提供的哨兵机制,通过哨兵监控主库的状况,如果发现主库下线,则会从从库中选择一个状态优秀的当做主库,从而保证服务的高可用。
redis之分片集群
在海量的数据面前,单个 redis 实例的能力是有限的,无可能无限增大的内存,所以必须要构建分片集群,来横向拓展来支持保存更多的数据。
pulsar阻塞导致logstash无法接入日志
在使用tcp和udp接入方式接入一段时间日志之后,日志突然无法接入了,在pulsar中的对应topic没有新的日志生产进来了。
redis之缓存
reids 是基于内存的数据库,它的特性之一就快,缓存是其最主要的应用场景,本文主要介绍 redis 的缓存特性,以及该如何正确的使用它。
python迭代器与生成器
本文介绍了python的迭代器与生成器的用法与原理
python元编程
本文介绍python中元编程的属性及使用方法
python垃圾回收机制
python的垃圾回收机制的几种方式:引用计数、标记清楚及分代回收,介绍他们的原理。
python上下文管理器
python的上下文管理的使用及实现的几种方式
python装饰器的使用方法
介绍python中的装饰器的几种常见的使用方法并理解它们的实现原理。
使用python实现单例模式的三种方式
本文主要介绍使用python的三种实现单例模式的方式。
python中import原理
本文介绍python正在import module时做了什么,它又是如何加载module的。
使用ddt实现unittest的参数化测试
本文介绍如何使用ddt库来完成unitest的参数化设置。
ddt源码分析
ddt 是 python 的第三方库,主要是解决使用 unittest 来写单测时可以支持参数化的配置,本文介绍源码解析该库,理解它的实现过程。
django-apschedule定时任务异常停止
在django项目中使用django-apschedule来实现定时任务,使用的是BackgroundScheduler调度类,该调度的实现是通过后台线程的方式执行定时任务。其中任务都是持久化到数据库中的。在项目的运行过程中,因为数据库的异常,导致定时任务线程异常终止,即使数据库后续恢复正常,但也不再继续执行。我多次尝试复现未果,在开启定时任务期间,手动将数据库连接断开,定时任务执行失败,然后再将数据库建立连接,定时任务竟然重新恢复了,这让我一时摸不着头脑。
django celery 结合使用
本文主要介绍django和celery结合使用的案例。
django rest_framework使用jwt
本文介绍在 django rest_framework 使用jwt认证.
django rest_framework异常处理
当程序中出现异常时,我们想要返回的是包含异常信息的json数据。返回正常的信息和异常信息的格式一致化。
django压缩文件下载
介绍在django中,如何将数据生成zip文件提供给用户进行下载
django rest_framework使用pytest单元测试
介绍在django的rest_framework中如何使用pytest进行单元测试而不是自带的测试框架。
django restframework choice 自定义输出数据
介绍如何在django restframework中使用choice来自定义输出数据。
django viewset 和 Router 配合使用时报的错
解决django viewset和router配合使用时报的错误
django Filtering 使用
介绍django-filter是如何使用的。
django中使用AbStractUser
介绍在django中如何使用AbStractUser
django model的序列化
django model如何实现序列化。
django 中 media配置
media文件夹一般用于上传媒体文件到服务中存放的地方。介绍在django中如何使用media的配置
django.core.exceptions.ImproperlyConfigured Application labels aren't unique, duplicates users
使用pycharm professional 开发django时出现以下异常。
django 外键引用自身和on_delete参数
django中使用外键引用自身的方法及on_delete参数的配置
django 警告 while time zone support is active
django中的时区问题
django rest_framework 分页
本文主要介绍在drf框架中如何对查询的数据进行分页,在drf框架中有提供该基础功能的使用案例和文档,详情参考drf-pagination-官网文档
django-prometheus使用及源码分析
而本文主要是介绍使用django-prometheus来对django服务添加对prometheus指标的支持,它已经内置了部分的指标采集,包括请求、数据库和缓存等方面的指标。除了使用方法外,也会对其源码进行分析,看它是如何实现的。
flask结合mongo
在flask中集成第三方库flask-mongoengine来通过ORM操作mongo数据库
Flask使用flask_socketio实现websocket
在flask中使用flask_socketio来实现websocket的功能。
tornado 使用jwt完成用户异步认证
tornado使用jwt实现用户的异步认证
tornado 文件上传
tornado实现的文件上传功能
tornado 用户密码 bcrypt加密
使用bcrypt来实现对用户密码进行加密
tornado 结合wtforms使用表单操作
tornado使用wtforms来对表单进行验证与操作。
tornado finish和write区别
介绍tornado中finish和write的区别
tornado 使用peewee-async 完成异步orm数据库操作
tornado中使用peewee-async来完成异步orm数据库操作
python简单使用grpc
简单介绍Python如何使用grpc
pyspark streaming简介 和 消费 kafka示例
简单介绍pyspark streaming以及消费kafka的示例
基于pre-commit的Python代码规范落地实践
pre-commit 是一个开源工具,用于管理和执行 Git 钩子,确保代码库的一致性和质量。通过在提交代码前自动运行代码风格检查(Linting)和格式修正(Formatting),它有助于保持项目代码的统一标准。本文将通过一个 Python 项目的实例,展示如何配置 pre-commit 工作流。本文旨在介绍使用 pre-commit 对 Python 项目进行代码检查的方法,以提前发现并解决代码中的问题,提高代码的整体质量。
go简单使用grpc
介绍go是如何使用grpc的
gin中validator模块的源码分析
在gin中使用的是validator模块来对表单进行校验的,本文主要是对该模块的源码分析与学习
go中如何处理error
在 go 中有 panic 的机制,但 panic 意味着程序终止,代码不能继续运行了,不能期望调用者来解决它。而 error 是预期中的异常,希望调用者可以对其进行处理的。
优化gin表单的错误提示信息
如何优化gin框架中表单的错误提示信息
tcp缓存引起的日志丢失
logstash从数据源拉取日志,然后通过tcp插件发送到proxy进程中。在业务侧发现日志量明显少了,所以有了这一次的问题排查。
使用etcd分布式锁导致的协程泄露与死锁问题
本文记录自己在工作中排查etcd应用分布式锁而导致的泄露与死锁问题,并通过分析源码找到根因,最终解决。
Go语言Interface Boxing原理与性能优化指南
深入解析Go语言接口装箱(Boxing)机制,包含性能影响分析、基准测试对比及最佳实践建议
Go协程池深度解析:原理、实现与最佳实践
深入解析Go协程池的工作原理、实现方式及性能优化策略,包含基准测试对比和实际应用场景分析
Go语言遍历性能深度解析:从原理到优化实践
在Go语言中,遍历是日常开发中最常见的操作之一。不同的遍历方式会对性能产生显著影响。本文将深入分析Go语言中遍历的性能特点,并探讨如何优化遍历以提高代码效率。
django rest_framework Authentication
本文介绍的是 django rest_framework的认证方式.
Go语言零拷贝技术完全指南
深入解析Go语言中零拷贝技术的实现原理、性能优势及最佳实践,包含详细基准测试数据和实际应用场景分析
Go语言不可变数据共享:无锁并发编程实践
深入解析Go语言中不可变数据共享模式的实现原理、性能优势及最佳实践
Go语言内存预分配完全指南
深入解析Go语言中Slice和Map的内存预分配技术,包含性能对比测试和实际应用场景分析
Go语言原子操作完全指南
深入解析Go语言原子操作的实现原理、性能优势及最佳实践,包含详细基准测试数据和实际应用场景分析
Go语言堆栈分配与逃逸分析深度解析
深入解析Go语言堆栈分配机制与逃逸分析原理,包含性能对比测试和实际优化建议
Go语言空结构体:零内存消耗的高效编程
深入解析Go语言空结构体的特性及其在高性能场景下的应用实践
Go语言结构体内存对齐完全指南
深入解析Go语言结构体内存对齐原理与优化实践,包含性能测试数据和实用工具推荐
Go语言字符串拼接性能对比与优化指南
本文详细对比了Go语言中6种字符串拼接方式的性能差异,通过基准测试数据揭示最佳实践,并提供实际开发中的优化建议。
Go语言延迟初始化(Lazy Initialization)最佳实践
入解析Go语言中延迟初始化的实现原理和最佳实践,包括sync.Once、sync.OnceValue和sync.OnceValues的使用场景和性能优势
Go语言高效IO缓冲技术详解
深入解析Go语言中缓冲I/O的工作原理、性能优势及最佳实践,包含基准测试数据对比和实际应用场景分析
快速了解iptables
iptables是一个在Linux操作系统上使用的防火墙工具,它可以用于配置和管理网络数据包的过滤、转发和修改等操作。
理解Linux TunTap设备
TUN/TAP是操作系统内核中的虚拟网络设备,可以完成用户空间与内核空间的数据的交互。网络协议栈中的数据通过该设备可以进入到用户空间中,而用户空间中的程序通过该设备空间进入到内核空间的网络协议栈。
理解VXLAN网络
在三层可达的网络中部署VXLAN,在每个VXLAN网络端点中都有一个VTEP设备,负责将VXLAN协议的数据包进行UDP数据包的封包和解包,可以将其理解为隧道,将VXLAN数据包从逻辑网络转发到物理网络
理解Linux IPIP隧道
IPIP隧道的工作原理是将源主机的IP数据包封装在一个新的IP数据包中,新的IP数据包的目的地址是隧道的另一端。在隧道的另一端,接收方将解封装原始IP数据包,并将其传递到目标主机。IPIP隧道可以在不同的网络之间建立连接,例如在IPv4网络和IPv6网络之间建立连接。
分布式锁
本文介绍了分布式锁遇到的问题及对应的解决方案
使用hue创建ozzie的pyspark action workflow
介绍如何使用hue来创建ozzie来创建一个spark action的owrkflow
使用java开发logstash的filter插件
主要记录使用java开发logstash的filter插件的过程。
count的性能优化
遇到的sql查询语句中发现的count性能优化的问题
读书笔记:如何阅读一本书
本文是我阅读完《如何阅读一本书》的读后感,作者主要是将阅读分为了四个层次:基础阅读、检视阅读、分析阅读和主题阅读,并讲解这几个层次该如何去做,能够更好的帮助我们阅读,让我们从中收获到更多
初识 MCP Server
MCP 全称为 Model Context Protocol,是一个大模型智能体与外部工具或者数据源的交互协议。也就是说,智能体可以通过该协议去调用所以支持该协议的服务,来增强智能体的能力。在没有 MCP 时,不同的智能体都需要对不同的外部工具做单独的适配才能调用,也就是都用自己独有的协议,有 MCP 后也就是统一了外部调用协议,减轻了智能体的开发成本,也可以快速接入不同的外部服务。本文主要是简单认识下 MCP,并利用 MCP 来调用本地文件系统和数据库来完成案例。
关于
工作年限: 5年 职业: 软件开发工程师 目前: 在某厂搬砖中~
网站
k8s k8s中文官网 vuepress-theme-vdoing 一款优秀的博客主题 技术文章摘录 代码片段 快速查看某一门技术的代码片段
友链
desc: 一个专注互联网技术分享的个人独立博客。 avatar: https://blog.wenfxl.com/images/logo.png link: https://blog.wenfxl.com/ :::
django rest_framework 自定义文档
django rest_framework 自动生成文档的功能,能够很好的给前端提供帮助,在文档中可以看到api的参数和其提供的功能信息,并且还能够在上面直接测试api接口。