自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

艾希射日

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

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

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

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

2025-03-31 17:19:59 618

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

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

2025-03-25 21:27:41 713

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

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

2025-03-23 20:16:50 980

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

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

2025-03-21 21:08:28 977

原创 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 1067

原创 如何打造企业 DevOps 文化

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

2025-03-19 17:40:08 869

原创 WEB API 设计规范

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

2025-03-19 17:38:29 787

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

Decorators。

2025-03-13 16:20:21 572

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

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

2025-03-11 12:38:15 1243

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

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

2025-03-07 10:40:47 484

原创 【动手实验】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 1108

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

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

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

原创 【资料分享】Linux& 容器网络扫盲

简单来说,所有的隧道本质上都是在 IP 包里带上另外一个包,这个包可能是另一个 IP 包,也可能是 UDP 或者其他包,传输时通过外层的 IP 做路由,到达目的地后再解析出内部的包在做一次路由。这一篇是非常详细的介绍容器网络,尤其是其提供了在线的 Playground 帮助自己边读边练,手把手创建网桥设备、veth 对,弄 iptables。这些硬核基础知识始终应该是我们学习的重点。周志明老师《凤凰架构》一书中的章节,对容器网络的技术做了整体性的梳理,可以看到上面文章中提到的技术是如何应用在容器网络中的。

2024-01-19 16:12:35 537

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

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

2023-07-16 20:39:35 654

原创 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 2343

原创 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 1194

原创 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 3202

原创 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 940

原创 Kubernetes笔记(六) Kubernetes 存储

文章目录1. Volumes2. PV & PVC3. Storage Class4. PV 挂载过程5. CSI 插件操作系统中有 Volume 和 Mount 的概念。Volume: 表示物理存储的逻辑抽象Mount:将外部存储挂载到系统、容器中。为了解决容器的数据存储,Kubernetes 也引入 Volume 的概念。Kubernetes 将 Volume 存储分为了普通的非持久化 Volume 和持久化的 PersistentVolume 两类。1. Volumes普通非持

2022-02-14 21:00:25 966

原创 Kubernetes笔记(五) 配置管理

文章目录1. ConfigMap2. Secret1. ConfigMapConfigMap 是一种 API 对象,用来将非机密性的数据保存到健值对中。使用时可以用作环境变量、命令行参数或者存储卷中的配置文件。ConfigMap 可以让配置信息和容器镜像解耦,便于应用配置的修改。每次应用需要修改配置时,只需要修改 ConfigMap 然后按需重启应用 Pod 即可,不用像修改代码那样还需要重新编译打包、制作镜像等操作。Kubernetes 支持基于字面量、文件、目录等方式创建 ConfigMap,下面

2022-02-14 20:59:28 773

原创 Kubernetes笔记(四) Kubernetes 网络

文章目录1. 网络基础知识1.1 Linux Network Stack1.2 Netfilter1.3 Iptables1.4 IPSet2. Kubernetes CNI3. Container To Container4. Pod To Pod4.1 跨主机的网络通信4.2 Flannel UDP4.3 Flannel VXLAN4.4 Flannel host-gw4.5 Calico 路由5. Service To Pod5.1 Service 简介5.2 Service 分类5.2.1 Clus

2022-02-14 20:58:23 1282

原创 Kubernetes笔记(三) 控制器

文章目录1. 副本控制器2. Deployment2.1 基本使用2.2 水平伸缩与升级1) 水平伸缩2) 更新镜像3) 升级策略4) Rollover1) 回滚2) 暂停或继续2.3 Canary Deployment2.4 AutoScaling & HPA3. Job/CrobJob3.1 Job3.2 CronJob4, StatefulSet4.1 Pod 通信4.2 数据存储5. DaemonSet在 Kubernetes 中,Controller 就是那些观察 cluster 状态

2022-02-14 20:57:49 978

原创 Kubernetes笔记(二) Pod 使用简记

1. 为什么需要 PodPods 是 K8s 中最小的可部署和管理单元,是一个逻辑概念。一个 Pod 包含一个或多个 container,它们可以共享网络和存储,可以把 Pod 看作是一个虚拟的逻辑主机,里面包含了一个或多个紧密关联的 container,Pod 同时也告知系统如何去运行它所描述的容器。Pod 的存在主要是为了解决两个问题:对“进程组”的抽象,满足容器共享 namespace 的需求。协同调度容器本身是单进程模型,其应用本身的 PID 为 1,本身没有管理多个进程的能力。在实际

2022-02-14 20:55:39 1376

原创 Kubernetes笔记(一) Kubernetes 集群架构

1. Kubernetes 集群架构Kuberetes 本身是由一系列组件组成的容器编排系统,每个组件各司其职从而实现容器的调度、部署以及自动伸缩等功能。Kubernetes 整体的架构图1.1 Master (Control Plane)节点集群中的控制节点,为单数数量,运行集群中的控制面板逻辑的相关组件。kube-system namespace 下的资源都会在这一个或者多个Master 节点上运行,且默认会有node-rule.kubernetes.io/master:NoSchedule

2022-02-10 07:29:34 1422

原创 Nexus 搭建 Maven、Docker 私服详解

一. 安装 Nexus1. 下载并启动2. 修改配置3.纳入 systemd 管理二. Nexus Maven 仓库简介三. 配置从 Nexus 私服拉取库1. 项目中配置2. settings.xml 统一配置3. 配置镜像四. 部署库到 Nexus 私服最近 Java 项目监控需要引入一些 PaaS 团队同学开发的 SDK,为了方便引入于是利用 Nexus 搭建了 Maven 私服,将所需依赖都部署到了私服中供项目使用,简单记录下搭建过程作为梳理与备忘,也希望对需..

2020-11-11 17:01:08 1313

原创 CKA 认证笔记 - CKA 认证经验帖

文章目录一. 报名 & 预约1. 报名2. 预约二. 考试简介 & 备考建议1. 考纲介绍2. 考官检查事项1. 开启摄像头 & 电脑桌面分享2. 检查办公桌面 & 房间环境3.考试界面简介4. 考试建议【1】准备好 VPN【2】快速浏览题目【3】注意题目要求的上下文【4】启用 kubectl 自动提示【5】提前整理好文档收藏三. 考试题目简记四. 备考资料推荐一. 报名 & 预约1. 报名报名地址为 https://www.cncf.io/certificat

2020-11-06 10:55:28 18763 1

原创 修改 K8S 证书默认有效期

通过 kubeadm 创建集群后,其默认生成的证书有效期为 1 年,目测很多同学都遇到过证书过期的坑。之前写了一篇博客 K8S 证书过期后,kubeadm 重新生成证书 介绍如何在过期后重新生成证书。但重新生成后的证书有效期依然只有一年,每年都重新生成一遍的话未免太过麻烦,本篇博客就介绍下如何一劳永逸的解决证书签名有效期的问题。修改默认有效期的方法很简单,其一年的有效期是在源码中写死的,因此我们只需要下载源码将默认有效期修改一下,然后重新编译生成 kubeadm 命令就可以了。这里麻烦的是 K8S 不

2020-08-22 16:42:19 2608

原创 K8S 证书过期后,kubeadm 重新生成证书

K8S 各个组件需要与 api-server 进行通信,通信使用的证书都存放在 /etc/kubernetes/pki 路径下,kubeadm 生成的证书默认有效为 1 年,因此需要定时更新证书,否则证书到期会导致整个集群不可用。本篇文章主要介绍如何通过 kubeadm 重新生成证书。一. 检查证书是否过期。可以通过下面两种方式检查 Kubernetes 的证书是否过期。1. kubeadm 命令查看可以通过 kubeadm alpha certs check-expiration 命令查看相关证

2020-07-20 16:47:29 12214 3

原创 ElasticSearch 父子文档使用简记

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

2020-06-17 21:27:15 3265

原创 ES 远端集群配置与跨集群搜索

ES 中可以配置远程集群实现跨集群的搜索,极大的提高了 ES 集群的水平扩展性,跨集群搜索也是 ES 认证考试中经常考的知识点。本篇文章简单总结下 ES 远端集群的配置和跨集群搜索作为备忘,也希望对需要的同学有所帮助。一. 配置远端集群为了实现跨集群搜索首先需在当前集群中配置远程集群,我们可以通过下面三种方式配置:1. 配置文件设置首先可以在 ElasticSearch 的 yml 配置文件中设置,ES 启动时就会建立与远端集群的链接,配置如下:cluster: remote: clu

2020-06-15 16:22:27 2587 4

原创 LeetCode 题解 - 92. 反转链表 II

Leetcode 第 92. Reverse Linked List II 题,题目难度 Medium。一. 题目要求反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL本题是 206.反转链表 的进阶版,要求反转指定范围内的部分链表。实现思路如下:找到索

2020-05-25 16:10:44 393

原创 LeetCode 题解 - 82. 删除排序链表中的重复元素 II

Leetcode 第 82. Remove Duplicates from Sorted List II 题,题目难度 Medium。一. 题目要求给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3二. 解题思路 & 代码实现和

2020-05-25 11:43:57 424

原创 LeetCode 题解 - 337. House Robber III

title: LeetCode-337. House Robber III-简记date: 2019-07-23tags: [“LeetCode”, “动态规划”]categories: [“LeetCode”]LeetCode 第 337. House Robber III,题目难度 Medium。一. 题目要求题目概要如下:在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之.

2020-05-19 19:11:56 421

原创 Java 手动资源关闭最佳实践

最近做了一些文件上传下载的工作,有涉及到资源关闭相关的操作,因此回顾整理了下 JDK 的 try-with-resrouces 资源回收方式,希望对需要的同学有所帮助,如有不足也非常欢迎交流改进。一. 为何需要资源关闭对于某些资源,比如 IO 流对象、Socket 套接字、数据库连接等对象,如果在使用后不手动关闭,会导致资源一直被占用,最终造成资源紧张,导致严重的性能问题。因此在使用完成后务必要将这类资源关闭。二. 传统 try-finally 资源关闭方式在 Java 7 之前 JDK 提供了

2020-05-10 09:30:21 782

原创 服务器常用软件一键安装脚本

最近倒腾了几台云服务器自己玩,每次新开服务器都要把一些常用的工具比如 git、zsh、docker 重新安装一遍非常麻烦,于是把相关命令加到了脚本里,以后新开服务器直接执行脚本就行了,省时省力。#!/bin/sh# 安装 gitsudo apt-get updatesudo apt-get install git -y# 安装并修改 zshsudo apt-get updatesudo apt-get install zsh -ychsh -s /bin/zshwget https:/

2020-05-08 21:35:02 1160

翻译 Kubernetes 150 个操作练习 (下)

150 个练习的最后一部分,这部分主要包含三个模块:状态存储配置监控服务与网络四. 状态存储篇这部分的练习主要是熟悉持久卷和持久卷声明的相关使用。96. 查看集群中的所有持久卷$ kubectl get pvNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM ...

2020-04-28 09:09:17 1613

翻译 Kubernetes 150 个操作练习 (中)

原文链接:Practice Enough With These 150 Questions for the CKAD Exam。Medium 上的一篇文章记录了 150 个 Kubernetes 的练习,自己练习了一遍,在原文基础上加了一些自己实践过程中的的提示,希望对需要熟悉 K8S 操作的同学有所帮助。本篇介绍 Pod 设计相关的 练习。三.Pod 设计篇这是原文中的第三部分,主要关于 ...

2020-04-27 09:54:42 1490

原创 TCP 数据收发过程抓包分析

本文简单对 TCP 协议的三次握手、数据传输、四次挥手过程进行抓包分析。一. 抓包准备首先本地通过套接字实现一个 TCP 通信,然后通过 Wireshark 抓包,套接字通信代码如下:Server 服务端import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.net.Sock...

2020-04-24 10:08:57 3464 1

原创 Spring Cloud Gateway 简明教程(02) - Predicate 匹配器使用示例

本篇主要介绍下 Spring Cloud Gateway 的匹配器 Predicate 的使用。对于一个请求的路由,Spring Cloud Gateway 的处理过程是:遍历所有的路由针对每个路由,遍历其 Predicate 匹配器进行匹配,只有该路由的匹配器全部匹配才算匹配成功如果匹配失败,则跳到下一个路由;如果匹配成功,则忽略其余路由。Spring Cloud Gateway ...

2020-04-21 20:34:32 3082

原创 AWS NAT Gateway 使用简记

最近项目遇到个需求,需要将后端的服务器出口统一成一个 IP,服务器在 AWS 上,这个可以用 AWS 的 NAT Gateway 实现,调研实施的过程中发现如果对 AWS 相关概念的话不熟悉还是会绕点路的,简单整理下 NAT Gateway 的使用,希望对需要的小伙伴有帮助。一. 相关概念简介1. NAT GatewayNAT Gateway(网络地址转换网关) 主要用来对一组私有子网内的服...

2020-04-06 18:31:48 11090 7

开始→运行→命令 集锦

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

2007-12-09

空空如也

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

TA关注的人

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