自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

艾希射日

帘外芭蕉惹骤雨门环惹铜绿

  • 博客(77)
  • 资源 (1)
  • 收藏
  • 关注

原创 架构师的职责

架构师团队的组织形式,是需要下沉到各个职能团队了解各个团队的实际情况(但是不能做进入其项目事务),然后根据上述相关职责在各个业务开展工作,向整个组织负责。团队人才是公司的最重要的资产,所以,架构师的首要责任就是把人员的能力提升起来,所以,架构师需要成为别人的导师,并需要对整个组织进行技术布道和培训。等等实际的技术细节问题。通过一些技术封装手段,降低技术门槛,让更多的人可以更好的理解、更简单更安全的使用复杂的技术。开发整个组织通用的软件,其中包括,应用类的,平台类的、框架类的、工具类的以及集成类的。

2025-06-12 10:31:40 947

原创 【kubernetes 源码剖析】kube-scheduler 调度流程

上一篇我们分析了 kube-scheduler 的启动流程,在做完一系列启动工作后,就会启动调度循环,持续从调度队列中取出待调度的 Pod 进行调度,本篇我们来分析下调度循环的实现。在 Scheduler 的 Run 方法中,会启动一个 goroutine,调用方法来执行调度逻辑,这是调度循环的入口。

2025-09-10 17:38:40 1148

原创 【深入理解 Linux 网络】配置调优与性能优化

【挖坑待填。。。前面几篇我们对 Linux 收发数据包的过程做了简要分析,知道了网络包在内核是怎样流转的,就可以站在全局俯瞰的角度去进行性能调优了。网络包到了哪里,这里是怎么处理,怎样可以让其处理的更快一些,我们可以从整体上的理解并掌握网络性能调优的关键点,比单纯看几个参数的配置建议要有效得多。本篇文章我们就沿着从网卡到应用层的整个数据流转过程,来看下各个步骤可以采取的调优策略和具体配置。

2025-08-27 15:42:10 356

原创 【深入理解 Linux 网络】数据发包原理与内核实现

数据的接收和处理流程分析完了,本篇我们来看下数据的发送流程。

2025-08-27 15:40:56 920

原创 【Kubernetes 源码剖析】Deployment 的实现原理

Kubernetes 的 Deployment 用来管理无状态应用的部署和扩缩容,除了少数分布式存储外,我们日常开发的所有服务都是无状态的,状态数据都被存储在关系型数据库、缓存等外部存储中,因此大部分情况下都是使用 Deployment 作为 Controller 来部署服务。下面是一个简单的 Deployment 配置示例,我们声明了一个 nginx 的 Deployment,期望运行 3 个副本,最终 Kubernetes 会帮我们创建出三个运行 Nginx 的 Pod。

2025-08-27 15:38:47 990

原创 【深入理解 Linux 网络】收包原理与内核实现(下)应用层读取与 epoll 实现

方法通知应用处理数据的,本着系统性学习的原则,本篇我们将从缓冲队列到应用读取这最后一公里的处理过程分析完毕,尤其是 epoll 的工作机制。上一篇我们分析了数据包经 TCP 传输层处理后写入 socket 缓冲队列的过程。无论是 udp 还是 tcp 都是通过。

2025-08-23 21:10:14 208

原创 【深入理解 Linux 网络】收包原理与内核实现(中)TCP 传输层处理

上一篇我们分析了从网卡到达数据包到 IP 层的处理流程,接下来我们将深入探讨 L4 层 TCP 协议栈的处理流程。

2025-08-21 12:31:59 707

原创 【深入理解 Linux 网络】收包原理与内核实现(上) 从网卡到协议层

这种方式仅拷贝 256 字节的头部数据,而 i40e_build_skb() 函数的执行更为激进,它直接在 DMA 空间构建 skb,最后将指针赋值给 skb,从而实现真正的零拷贝,这对于小包处理性能提升尤为明显,是高性能网络处理的关键优化之一。有时候我们通过 tcpdump 抓包时会抓到实际大小远超 MTU 的巨帧(Jumbo Frames),就是由于 GRO 特性导致的,因为 tcpdump 的处理是在更往后的步骤处理的。但和硬件实现相比,这里的软件实现本身并不能提升性能,主要用来测试功能。

2025-08-21 10:04:17 1912

原创 分布式唯一 ID 生成方案

在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一 ID 来标识一条数据或消息,数据库的自增 ID 显然不能满足需求;特别一点的如订单、骑手、优惠券也都需要有唯一 ID 做标识。此时一个能够生成全局唯一ID 的系统是非常必要的。本文主要介绍一些常见的分布式唯一 ID 生成方案。

2025-08-20 21:02:53 1432

原创 【Kubernetes 源码剖析】kube-controller-manager 工作原理与实现

可以看到 kube-controller-manager 的整体逻辑还是比较简单的,主要就是做了一系列初始化工作后,去创建并启动 Controller 并开启 Informer 监听,这样 各个 Controller 就可以通过 Informer 机制监听资源变化并执行相应的控制逻辑了。

2025-08-20 17:41:20 722

原创 ElasticSearch 父子文档使用简记

一. ES parent-child 文档简介二. 父子文档的索引创建与数据插入ES 父子文档的创建可以分为下面三步:创建索引 Mapping,指明数据类型为 join 与父子文档名插入父文档插入子文档下面针对每一步做演示。1. 创建索引假设我们有一个博客系统,每篇博客下有若干条评论,那么博客 blog 与评论 comment 就构成了一个父子关系。2. 插入父文档3. 插入子文档4. 其他构建多个子文档构建多层父子关系三. 父子文档的查询基于父子文档的查询主要有三种:

2025-08-16 10:21:31 4135

原创 分布式锁那些事

在并发编程中,当多个线程需要访问共享可变资源时,需要使用锁来保证线程安全。扩展到分布式系统中,当多个节点可能会同时访问相同的资源时,为了避免数据不一致和竞争条件的发生,也需要使用分布式锁来进行协调。本篇主要对分布式锁的设计原则进行探讨,并对几种常用的解决方案做简要分析。

2025-08-15 20:11:14 763

原创 【深入理解 Linux 网络】内核初始化流程

本文介绍了Linux系统启动时网络数据包接收处理的初始化过程。

2025-08-12 11:25:57 1294

原创 【深入理解 Linux 网络】关键术语

这些术语构成了Linux网络内核的核心概念体系,理解它们有助于深入掌握网络实现原理。

2025-07-30 11:18:08 736

原创 【动手实验】TCP传输延迟分析与性能优化

Linux 下默认 CWND 大小为 10 个 MSS(最大报文段长度),从抓包文件中可以看到 MSS 为 1460 字节,则 CWND 大小为 14600 字节约等于 14.6 KB,因此在初始阶段 A 和 B 最多只能一次性发送 14.25KB 的数据,超过了 A 的 16KB 和 B 的 20KB 的数据量,需要分多次发送。在这个实验中,并没有提到 A 和 B 的服务端问题,并且数据量不大,因此可以排除发和收的问题,初步可以认为是传的慢导致的,由此可以推测是拥塞控制问题。

2025-07-23 10:52:02 1446 1

原创 【动手实验】TCP数据的发送和接收

本篇实验基本将 TCP 数据传输遇到的点都做了涉猎,我觉得初学 TCP 的小伙伴最好都从类似的实验开始,动手做一遍后再去读理论性强的书籍和 RFC 资料,学起来会更加事半功倍。笔者在做完TCP 连接的建立与关闭抓包分析和本篇实验后将 《TCP/IP 详解(英文版)》的 TCP 章节又重读了一遍,整个阅读体验和收获和之前硬啃完全不一样。初读时更像是一种填鸭式的硬啃,啃完过段时间也就忘了。

2025-07-18 12:37:36 747

原创 【动手实验】发送接收窗口对 TCP传输性能的影响

发得快:发送端窗口足够,能填满 BDP,数据发送快。传得快:网络环境好,带宽大、RT 小、丢包率低。收的快:接收端数据处理快,接收窗口大。在实际工作场景中,需要结合具体场景探查性能问题出现在哪一点,然后在寻找针对性的优化方案。

2025-07-17 11:35:31 1052

原创 K8s 指标收集方案对比

【代码】K8s 指标收集方案对比。

2025-06-12 12:54:13 1356

原创 浅谈软件开发工作流

实际的软件开发过程通常是比较复杂的,既要保证线上的代码稳定可靠,又要保证开发人员可以快速迭代新功能,同时还会面临不同的环境和问题。为了更好地管理代码和协作开发,我们需要采用一些工作流规范来指导团队的协作和代码管理。我们通常需要基于业务的发布流程和团队的实际情况来定制合适的工作流规范。比如有的项目需要敏捷发布,而有的项目需要稳定的发布流程;有的项目需要频繁的 hotfix,而有的项目则不需要。

2025-06-12 12:47:13 1034

原创 系统安全之身份认证

RFC 2617将用户名密码用冒号间隔做拼接,格式为。对拼接后的字符串进行 Base64 编码,比如得到。将编码后的字符串添加Basic标识后放到 HTTP 头中,最终结果为,然后向服务端请求。如果认证通过,则返回 200 响应码。否则按照上述框架要求的,响应 401 并且返回响应头。可以看到 Basic 认证对密码只是做了编码,并没有加密处理,因此使用 Basic 认证时必须结合 TLS 加密传输一起使用。Basic 更多用于系统内部之间一些组件的访问,在实际生产系统中很少使用。

2025-06-12 10:29:45 1585

原创 Web API 路径设计哪家强

大部分都符合 Restful API 的设计,围绕 resource 和 action 来设计,增删改查使用对应的 HTTP 方法。结构大部分使用这种形式。resource 命名使用复数;用动词或者动词短语表示操作(action)。对于多个单词的标识符使用中划线或者下划线作为分隔符,也有驼峰命名法。个人更喜欢中划线作为分隔符,无论在命令行还是浏览器里,更容易识别。AWS 和 腾讯云的 API 设计比较特殊,没有使用 URL 来区分不同的资源,而是使用Action。

2025-06-12 10:28:15 791

原创 日志那些事

通常日志数据的时效性较低且数据量较大,因此要定期 rotate,将旧的日志数据做清理或归档。如果归档,可以采用冷热架构,将旧的日志数据归档到冷存储中,以节省存储成本。过多的日志也需要更多的存储空间和更高的查询时间,因此需要谨慎打印。应用日志主要记录系统运行期间发生过的离散事件,用于在分析故障问题时提供上下文,帮助快速定位问题,因此也被称为诊断日志。下面是一个建议的格式。日志产生的时间戳,一般取应用所在机器的本地时间,精确到毫秒。避免打印敏感信息,比如请求中的 token,用户的敏感信息。

2025-06-12 10:26:44 817

原创 全栈监控系统架构

CNCF 的:对底层主机资源的监控。比如 CPU、内存、磁盘用量、磁盘IO、网络IO 、系统日志等。:对中间件的监控。比如 MySQL、Redis、ElasticSearch、Nginx 等中间件的关键指标。:监控应用的指标。比如 JVM 指标、JDBC 指标、HTTP 的吞吐、响应时间和返回码分布等。当然也包括客户端的监控,比如移动客户端的性能监控。

2025-06-12 10:25:49 1987

原创 分布式系统下的身份认证和授权

上述只列举了笔者在工作学习中使用或者了解过的安全认证相关的技术,由于能力有限,后续只能对常用到的一些方案做更详细的介绍和相关实践。有一点需要注意的是,虽然技术总是不断发展,但新技术并不完全是旧技术的替代,它们只是适用场景不同,在设计时有不同的 trade-off,作为技术人员,我们需要做的就是要了解技术发展的背景、trade-off 以及局限性,然后在项目设计时做出最合适的技术选型。

2025-03-31 17:19:59 1113

原创 【读点论文】Object Storage on CRAQ

论文提出了链式复制(Chain Replication)的方案,用于在保证强一致性的同时,提供支持高吞吐和高可用的存储服务。原始的 Chain Replication 方案在性能上存在一些问题,因为数据读取只能在 tail 节点进行,这样会导致 tail 节点压力过大,而其他节点利用率较低。后续普林斯顿大学发表了论文,提出了 CRAQ 的方案,通过将数据读请求分摊到所有节点的方式提高了读取性能。

2025-03-25 21:27:41 823

原创 【读点论文】What’s Really New with NewSQL?

论文中对 NewSQL 的定义如下:它们是一类现代关系型 DBMS,旨在为 OLTP 读写工作负载提供与NoSQL相同的可扩展性能,同时仍然为事务保持ACID保证。简单来书就是,NewSQL 既有传统关系型数据库的 ACID 保证,又兼具了 NoSQL 的高可用、高性能、可扩展等特性。NewSQL 针对的是 OLTP 类型的数据处理,强调的是对读写事务操作的支持。

2025-03-23 20:16:50 1172

原创 【读点论文】Chain Replication for Supporting High Throughput and Availability

在分布式系统中,强一致性往往和高可用、高吞吐是矛盾的。比如传统的关系型数据库,其保证了强一致性,但往往牺牲了可用性和吞吐量。而像 NoSQL 数据库,虽然其吞吐量、和扩展性很高,但往往只支持最终一致性,无法保证强一致性。由此提出了链式复制协议,旨在保证高吞吐、高可用的同时,支持数据的强一致性。

2025-03-21 21:08:28 1107

原创 Docker 容器基础技术:namespace

在容器内进程是隔离的,比如容器有自己的网络和文件系统,容器内进程的 PID 为 1,这些都是依赖于 Linux namespace 所提供的隔离机制。本篇我们来了解下 Linux 有哪些 namespace,以及它们是如何实现隔离的。文中案例代码均由 ChatGPT 生成,在 Linux 内核 5.15.0-124-generic,ubuntu 22.04 LTS 系统上测试通过。

2025-03-20 16:06:15 1302

原创 如何打造企业 DevOps 文化

DevOps 团队的成为应该熟悉不同的技术栈,能够使用不同的语言、利用不同的工具来实现不同的需求。DevOps 的目的是加强开发和运维之间的密切联系,以产品为核心,需求为导向,通过自动化的”持续集成“、”持续交付“,使得软件的编译构建、测试审查、部署上线可以更加频繁可靠的执行,实现从开发到上线的自动化,打造一条从需求到交付的自动化生产流水线。:这里的全栈指的是团队作为一个整体,从需求分析、开发、测试、部署、运维,到最后的监控和故障修复,需要对软件的整个生命周期负责,务必保证服务的质量和持续迭代。

2025-03-19 17:40:08 1048

原创 WEB API 设计规范

REST 是 Representational State Transfer 的缩写,它将资源作为核心概念,通过 HTTP 方法对资源进行操作。其本身是一套围绕资源进行操作的架构规范。在实际应用中,更多的是体现在 API 的设计上。企业在进行产品设计开发时,通常首先由业务专家和技术专家一起梳理出业务模型,然后根据领域驱动设计(DDD)的方法论进行建模,设计出领域模型以及针对领域模型的操作。

2025-03-19 17:38:29 1126

原创 【读书笔记】《A Philosophy of Software Design》

Decorators。

2025-03-13 16:20:21 661

原创 【动手实验】TCP 连接的建立与关闭抓包分析

作为程序员,虽然接触到的网络知识基本逃不过的范畴,但这确实是最让人头大的知识点之一。作为将《TCP/IP Guide》、《TCP/IP 详解(英文版)》以及主要 RFC 都读过的踩坑者,只能无奈的感慨,光读这些是资料顶多可以让我们勉强了解,但要想在实际工作中对遇到的问题手到擒来,还远远不够。网络知识的学习至少涉及到三方面内容:RFC 定义的协议原理、操作系统的具体实现、命令工具的使用。而每一部分学习起来都不容易,RFC 理论的枯燥,操作系统不同版本实现机制的繁杂,命令工具各种参数的琐碎,都让人望而却步。

2025-03-11 12:38:15 1622

原创 【动手实验】TCP orphan socket 的产生与消亡

没有在 Wiki 中找到关于孤儿 socket 的定义,在 StackOverflow 中找到了一个比较通俗易懂的解释:下面一段是 DeepSeek 给出的解释:总的来说就是当程序调用 close() 函数关闭 socket 后,socket 就和应用程序无关了,但此时 TCP 终止流程还没有走完,所以内核里还有这些 socket 的数据,这些 socket 就是所谓的孤儿 socket。下面我们结合源码和实验分析下哪些情况下的 socket 会被视为孤儿 socket。可以用ss -s或者。

2025-03-07 10:40:47 766

原创 【动手实验】TCP半连接队列、全连接队列实战分析

SYN Queue 半连接队列Accept Queue 全连接队列客户端向服务端发送 SYN 包,客户端进入 SYN_SENT 状态服务端收到 SYN 包后,进入 SYN_RECV 状态,内核将连接信息放入 SYN Queue 队列,然后向客户端发送 SYN+ACK 包客户端收到 SYN+ACK 包后,发送 ACK 包,客户端进入 ESTABLISHED 状态。

2025-03-01 15:20:07 1421

原创 实验:MySQL 客户端SocketTimeout 抓包分析

中间件连接问题,本质上都是 TCP/IP 的通信问题,抓包之下一切无所遁形。做技术当然要对很多具体的知识点做掌握,但更重要的是底层内功的修炼,可以提高自己在不熟悉的问题场景下蹚出一条路的能力。

2024-01-22 21:13:48 1716 1

原创 一些有趣的Git学习资料

Git 可以说是程序员必备的技能之一了,基于 Github/Gitlab 以及相关工作流的使用,Git 已经融入到了我们的日常工作中,这里分享一些有趣的 Git 学习资料,希望可以帮助大家更好的理解 Git。

2023-07-16 20:39:35 753

原创 Kubernetes笔记(十) Kubernetes 监控 & 调试

一. Metrics ServerMetrics Server 是 Kubernetes 提供的监控工具,主要用来收集 Node 和 Pod 的 CPU、内存使用情况。其本质就是通过 kube-aggregator 实现的一个 server。图片来自 https://www.jetstack.io/blog/resource-and-custom-metrics-hpa-v2/Kubelet 内置了 cAdvisor 服务运行在每个节点上收集容器的各种资源信息,并对外提供了 API 来查询这些信息。

2022-02-14 21:06:23 2530

原创 Kubernetes笔记(九) Kubernetes 应用封装与扩展

文章目录1. Kustomize2. Helm2.1 应用安装2.2 应用创建3. CRD & Operator3.1 CustomResourceDefinition3.2 创建部署 Operator1. Kustomize当我们需要在 Kubernetes 部署应用时,往往是编写许多 yaml 文件来部署各种资源对象,并且同一个应用针对不同的环境可能需要编写不同的 yaml 文件,这个过程往往非常繁琐。为了解决这个问题 Kubernetes 推出了 Kustomize 工具,官方称为 K

2022-02-14 21:06:12 1308

原创 Kubernetes笔记(八) Kubernetes 安全

文章目录1. mTLS2. 认证2.1 ServiceAccount2.2 用户生成私钥与 CSR创建 Certificate Signing Request批准 Certificate Signing Request3. Kubeconfig4. 授权4.1 RBAC4.1.1 Roles & ClusterRoles4.1.2 RoleBinding & ClusterRoleBinding4.1.3 命令行工具5. 准入控制5.1 动态准入控制5.1.1 WebHook Server5

2022-02-14 21:03:21 3396

原创 Kubernetes笔记(七) Kuberetes调度

文章目录1. 手动调度2. NodeSlector3. Node & Pod Affinity4. Resource Request5. Taints & Tolerations6. Pod 驱逐7, 调度过程8. 自定义调度器所谓调度就是按照一系列的需求、规则,将 Pod 调度到合适的 Node 上。下面是 Kubernetes 提供的一些调度方式:1. 手动调度Pod 的定义中有 nodeName 属性,调度器就是在选择出最合适的节点后修改 Pod 的 nodeName 来指定 P

2022-02-14 21:00:46 1057

开始→运行→命令 集锦

开始→运行→命令 集锦.txt

2007-12-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除