- 博客(88)
- 收藏
- 关注
原创 【实战进阶】用Zig高效引入外部库,打造专属命令行神器!
我们主要目的就是玩,好处是这个编程语言是社区驱动的,迭代快,语法比 C 要高级点,本身也能替代 C,为以后写高级程序做好储备。后面出错,也不要抱怨,直接社区沟通,让我们一起交流。经过几周的密集练习,我们开始对 Zig 有了感觉了吧。本篇将把这些核心的技能加以混合使用,拿编写命令行程序为目的,把整个流程给大家跑一遍,手把手教导一遍,和大家一起梳理。首先,我们要找到处理命令行程序参数和打印字符串的框架,这里,有技巧。代码量不多,自己多联系几遍,掌握 Zig 编程的乐趣吧。这个类库有了,我们怎么用呢。
2024-06-15 16:26:09
673
原创 Zig标准库:最全数据结构深度解析(2)
通过翻阅标准库中的常用数据结构,我们可以熟悉 zig 的数据结构情况,毕竟这些数据结构是组成代码的骨架,不学不行,但是真正能在你日后项目中使用到的并不会多见。但是我们如果不熟悉这些标准库的玩法,后面想用就会非常困难,所以我们要学要看。Zig 数据结构文件有一个特点就是每一个文件后面都是有测试用例,通过这些测试用例我们就可以学会任何一个结构的用法。就这么多,多练多看这些数据结构,可能还需要大概记住这些大标题,日后我们还会用到呢。
2024-06-14 20:38:36
1266
1
原创 Zig标准库:最全数据结构深度解析(1)
当需要传递那些确切大小仅在运行时才知悉,但最大尺寸在编译时已知的小型数组,并且无需分配器(Allocator)的情况下,使用有界数组是非常有用的。这是一种特殊的分配器,仅在测试环境中生效,并具备检测内存泄漏的功能。相比于分别维护缓冲区和活动长度,或者涉及到包含指针的结构,有界数组使用起来更简便也更安全。Zig中广泛使用了std.ArrayList,它充当了一个可以动态改变大小的缓冲区。是一种结构,它包含一个固定大小的数组以及当前正在使用的长度。)来读取和写入其中的数据。的等价物,这就是你想要的。
2024-06-14 18:09:52
1333
原创 conntrack如何限制您的k8s网关
对于那些不熟悉的人来说,conntrack简单来说是Linux内核的一个子系统,它跟踪所有进入、离开或通过系统的网络连接,允许它监控和管理每个连接的状态,这对于诸如NAT(网络地址转换)、防火墙和保持会话连续性等任务至关重要。问题的一个快速解释是,如果连接跟踪超过了conntrack_max值(通过sysctl net.netfilter.nf_conntrack_max找到)由长期存在的、陈旧的或大量请求所导致,你的CPU和内存空间看起来仍然充足,但请求将被丢弃。1.1 conntrack 介绍。
2024-06-07 11:23:04
255
原创 Kubectl 如何工作案例:编写自定义 Kubectl 命令
Kubernetes 工作起来就像魔法,但它并不是魔法。它本质上是基于 REST API 调用的简单性。这种直截了当的机制是其强大功能的关键。今天,我们将深入探讨 Kubernetes 的内部工作原理,特别是当我们执行 kubectl 命令时幕后发生了什么。
2024-06-05 16:30:43
107
原创 实战:Zig 编写高性能 Web 服务(2)
我们采用了第三方的类库:mitchellh/libxev,libxev 是一个跨平台、高性能的事件循环库,提供了非阻塞 IO、定时器、事件等的抽象,并且能够在 Linux(io_uring 或 epoll)、macOS(kqueue)以及 Wasm + WASI 上运行。它既可以作为 Zig 语言的 API,也可以作为 C 语言的 API 使用。使用zig init搭建项目的前置工作你先自行搭建好,不会的翻看前面铺垫的章节熟悉zig的项目结构。
2024-06-05 15:27:52
1563
原创 实战:Zig 编写高性能 Web 服务(1)
std.http 是 Zig 标准库中用于处理 HTTP 相关操作的类库。以我学习新的编程语言的经历来看,编写web程序是最常见的技术场景,所以熟练掌握 HTTP server/client 服务相关的编程知识是比较重要的。,这是一个安全的分配器,可以防止双重释放(double-free)、使用后释放(use-after-free),并且能够检测内存泄漏。1.2 编写一个HTTP client程序。为了简化,我们将使用。
2024-06-03 16:39:58
1568
原创 与C共舞:让编译更顺滑(2)
这意味着zig cc和zig c++不仅可以编译C和C++代码(带有与Clang兼容的参数),而且还可以在遵守Zig的目标三元组参数的同时这样做;您可能希望使用zig translate-c main.c > int_sort.zig将其管道化到文件中(警告Windows用户:在PowerShell中管道化将产生编码不正确的文件——使用您的编辑器来更正这一点)。在packed结构体内部,Zig的整数占用其位宽的空间(即,u12的@bitSizeOf为12,意味着它将在packed结构体中占用12位)。
2024-05-31 14:07:21
1644
1
原创 与C共舞:让编译更顺滑(1)
通过定义这些规则并且不违反它们,ABI被认为是稳定的,这可以用来,例如,可靠地链接多个库、可执行文件或对象,这些都是在单独编译的(可能是在不同的机器上或使用不同的编译器)。这意味着,例如,f32值的地址必须是4的倍数,这意味着f32的对齐是4。这包括参数是如何提供给函数的(即它们去哪里——在寄存器中还是在堆栈上,以及如何提供),以及返回值是如何被接收的。由于我们的x值是一个外部结构体,我们可以安全地将其传递给期望Data类型的C函数,前提是C函数也是用相同的gnu ABI和CPU架构编译的。
2024-05-31 13:53:28
1096
1
原创 实战Zig构建系统:从小白到高手的爆款技能!
Zig 提供了四种构建模式,其中调试模式是默认的,因为它只需要最短的编译时间。DebugYesNoYesYes, SpeedNoYes, SizeNoYes, Speed这些模式可以通过 zig run 和 zig test 命令使用 -O ReleaseSafe、-O ReleaseSmall 和 -O ReleaseFast 参数来使用。
2024-05-30 11:37:30
1359
原创 揭秘编程世界的魔法:泛型 Generics 的魅力!♂️✨
但除了匿名和嵌套在一个函数中之外,我们的结构看起来就像我们目前看到的其他结构一样。在我们的这个简单的示例中,这样做没有问题,但对于大型数据结构,编写完整的通用名称可能会变得有点繁琐,尤其是当我们有多个类型参数时(例如,散列(Hashing)映射的键和值需要使用不同的类型)。为了得到一个更典型的范型,我们需要做最后一个改动:我们的函数必须接受一个类型。这是必须的,因为我们的函数返回一个具体的类型,而这个类型需要在编译时就完全确定。我们可以创建更复杂的示例,使用多种类型参数和更先进的算法。
2024-05-27 09:32:14
456
原创 深入浅出:探索堆内存与分配器的奥秘
迄今为止,我们所接触到的一切都有个限制,需要预先知道大小。数组总是有一个编译时已知的长度(事实上,长度是类型的一部分)。我们所有的字符串都是字符串字面量,其长度在编译时是已知的。此外,我们所见过的两种内存管理策略,即和,虽然简单高效,但都有局限性。这两种策略都无法处理动态大小的数据,而且在数据生命周期方面都很固定。本部分分为两个主题。第一个主题是第三个内存区域--堆的总体概述。另一个主题是 Zig 直接而独特的堆内存管理方法。即使你熟悉堆内存,比如使用过 C 语言的malloc。
2024-05-24 19:40:40
1106
原创 揭秘内存管理:栈内存的奥秘✨
在深入研究堆之前,我们要知道,对于来自垃圾回收语言的开发人员来说,这很可能会导致错误和挫败感。我们一定要掌握栈的概念,归根结底,就是要意识到数据的生命周期。
2024-05-24 19:06:37
761
原创 揭秘指针魔法,让你的编程之旅如虎添翼!♂️✨
我们在这里探索的模型是最常见的,有些语言可能只是向开发者隐藏了很多细节,因此也就隐藏了灵活性。这似乎是一个奇怪的默认行为,但它的好处之一是,函数的调用者可以确保函数不会修改参数(因为它不能)。但对于它们来说,最大字段的大小是已知的,这样 Zig 就可以使用它。这就是变量的威力,它们可以引用内存,并包含以有意义的方式理解和操作内存所需的类型信息。由于指针的值是一个地址,复制该值意味着我们得到的是相同的地址。我们将从指针开始讨论,这本身就是一个重要的话题,同时也是训练我们从面向内存的角度来看待程序数据的开始。
2024-05-23 17:22:02
801
原创 掌握Zig编程风格,成为开发高手!✨
例如,上面代码中第一个编译错误提示“sum”是一个未被引用的局部常量,而第二个编译错误指出在“add”函数的所有参数中,“b”是一个未被使用的参数。虽然这些情况在初看时可能像是明显的疏漏,但在实际开发中,保留未使用的变量或参数有时是有其合理性的。但是,理解 Zig 自身的命名规范是有益的,因为大部分你需要打交道的代码,如 Zig 标准库,或者其他三方库,都采用了 Zig 的命名规范。除了这三条规则外,一个有趣的交叉规则是,如果一个变量表示一个类型,或者一个函数返回一个类型,那么这个变量或者函数遵循。
2024-05-23 16:59:27
555
翻译 Kubernetes 加速启动秘籍:Kube Startup CPU Boost,让你的工作负载瞬间起飞!✨
尽管 Kubernetes 拥有许多自动化特性,运行容器化应用程序仍面临一些挑战。其中一个挑战是需要定义应用程序所需的资源。这些资源通常包括 CPU 和内存,但也可能包括本地存储。Kubernetes 提供了一种在 Pod 模板中配置应用程序资源的方式。但是,如果应用程序的资源需求随时间变化呢?一个选择是配置更大的请求以覆盖峰值资源需求。这不是一个最佳的方法,会导致资源未充分利用。同时,它还会产生不必要的成本,因为基础设施并非一直被使用。
2024-05-22 21:13:42
104
原创 初探 Zig 编程:新手入门二
虽然我们还未涉及 Zig 语言中更高级的功能,但我们通过两篇文章也覆盖了常见的语法场景。它们将作为一个基础,让我们能够探索更复杂的话题,而不用被语法所困扰。
2024-05-22 14:33:12
1074
原创 初探 Zig 编程:新手入门
但是语法概念绝对是新手最需要了解掌握的,虽然内容不多,但是知识点全部都是新知识,需要各位读者朋友耐心一起看。主函数里面运行的 add 函数可以在不申明的情况下直接运行,这个是有点颠覆 C/C++ 程序员的习惯的,需要注意。结构体可以有方法,也可以包含声明(包括其他结构),甚至可能包含零个字段,此时的作用更像是命名空间。从之前的篇章我们知道 Zig 是更好的 C,内置 C 编译器,所以和 C 一样,语句都是用分号。作为程序入口的特殊作用,它只是一个非常基本的函数:不带参数,不返回任何东西(void)。
2024-05-21 21:56:51
2011
原创 安装 Zig: 一步到位,开启高效编程新时代!
Zig还没有到 v1.0版本,坦率的说并不能算是生产级别的编程语言,但是创始开发者在采访中说,他并不着急发布 v1.0 版本,他希望通过社区驱动来推动,还是非常落地。所以这也说明这个底层系统语言还有很大的空间等待我们去挖掘。当然大家也别被吓着,Zig已经在国外多家创业公司被用于C编译、游戏、数据库、Web服务等开源软件的开发中,就等你一起来编程了。
2024-05-20 19:28:21
1170
原创 kubelet.crt 过期了,集群竟然还能正常运行?揭秘背后的秘密!
我们在搭建 Kubernetes 集群时,一般只声明用于集群 Master、Etcd等通信的证书 为 10年 或者 更久,但未声明集群 Kubelet 组件证书 ,Kubelet 组件证书 默认有效期为1年。集群运行1年以后就会导致报 certificate has expired or is not yet valid 错误,导致集群 Node不能和集群 Master正常通信。那么这个 kubelet.crt 是干啥的?它是 kubelet 本地端口需要的证书。
2024-05-18 14:06:39
199
原创 1. 给你一个学习 Zig 理由
因为 Zig 社区是定义为非中心化社区方式,任何地方都可以自发组建社区并学习 Zig,所以在中文区,我们并不会出现什么官方社区,所有社区都可以被认为是官方的,只要你保持好奇心,并热爱编程。但是作为开发者,我不太满意的地方就是 golang 还是太高级了,并没有让我觉得趁手的机会能采用更底层的编程语言来让这个应用分发平台的构建更纯粹,更快。这个当然是我编写此专栏的目的。这个就是我能给你的理由,它的设计哲学是让开发者不被语法糖所困扰,聚焦业务实现,所以 Zig 的语言设计是简单并唯一确认实现的。
2024-05-18 13:47:45
886
原创 28. 使用 k8e 玩转 kube-vip with Cilium‘s Egress Gateway 特性
在外部提供一台可以访问的 nginx 服务:在 k8s 集群跑个例子:it works查看外面 主机的 nginx 日志:这个 IP 是你的测试容器所在的主机 IP,当我们期望隐藏这个 IP,只允许流量从固定的 IP 访问外部服务。这个时候就需要 Egress Gateway。metadata:spec:egress:配置CiliumEgressNATPolicy对象。it worksNginx 上的日志:在容器里面继续访问sleep 1;done。
2023-10-22 17:43:09
677
原创 27. Cgroups, 深入了解Kubernetes 的资源管理
首先是最重要的 - Cgroups 到底是什么?- Cgroups,或简称为 cgroups,是 Linux 内核的一个功能,负责资源分配(CPU 时间、内存、网络带宽、I/O)、优先级和计费(即容器使用了多少)。此外,除了是 Linux 的基本功能之外,Cgroups 还是容器的基础构建块,因此没有 Cgroups 就不会有容器。正如其名称所示 - Cgroups 是组,所以它们将进程分组在父-子层次结构中,形成一棵树。
2023-10-22 17:41:37
186
原创 26. 通过 cilium pwru了解网络包的来龙去脉
是一种基于eBPF的工具,可跟踪Linux内核中的网络数据包,并具有先进的过滤功能。它允许对内核状态进行细粒度检查,以便通过调试网络连接问题来解决传统工具(如iptables TRACE或tcpdump)难以解决甚至无法解决的问题。在本文中,我将介绍pwru如何在不必事先了解所有内容的情况下解决了一个网络谜团。
2023-10-22 17:36:51
825
原创 25. HA Kubernetes cluster的高可用不是LB
最近在给k8e引擎引入高可用方案,看了一些资料,也和同事交流,发现这里稍微不注意就会把HA高可用和LB 负载均衡搞一起了。加上这里面都有VIP的概念,就更让人稍不留意就混淆概念了。以下分解内容假设你对K8S有一定的了解,如果看不懂,那就别看了,这篇对你有点水,出门右转看看AI Chat也挺好的。
2023-10-22 17:36:02
183
原创 24. Kernel 4.19环境下,Cilium网络仍然需要使用iptables
通过学习我终于把cilium网络中使用iptables的细节做了一些梳理,也更新了k8e的安装部署文档,把cilium的 vxlan端口也更新到开放端口清单中,解决了跨主机不能访问端口的疑惑。我开始以为是cilium的安全要求呢。现在终于解决了。k8e在实践中不断优化,趋于问题,推荐大家在服务器环境中使用。getk8e.com有问题也方便在github上反馈交流,最后如果方便,也帮我star一下项目,给我维护项目的激励。
2023-10-22 17:35:06
362
原创 23. Docker image Digest你真的了解吗?
我们知道镜像的版本是通过tag来实现的。但是随时大量的实践,我们发现黑客可以篡改这个镜像,毕竟Docker是个集装箱,我们并不能天天解压文件来检查它有没有木马。执行结果显示,当你同时在拉去镜像的时候加上了tag和digest时,优先使用digest拉取,但是tag信息就丢掉了。今天遇到cilium拉取的问题才静下心看了这个问题,算是把它的原理搞清楚了。当然现在业界为了安全,用signing技术来保证digest的有效性。我今天测试过了,集群搭建很方便,如果你有空闲,可以去试试。
2023-10-21 22:38:24
395
原创 22. containerd使用Devmapper snapshotter讲解
最近一直在跟进的工程是想打造k8e的serverless服务,也就是用VMM虚拟机来跑容器。其中对镜像存储的驱动不再是overlay,需要采用Device-mapper功能来驱动虚拟机的存储、运行。Devmapper是一个containerd snapshotter插件,它将快照存储在Device-mapper thin-pool中的文件系统图像中。默认k8e是没有增加devmapper驱动的,我通过增加初始化定义解决了这个问题。然后先创建设备,在重启k8e服务即可支持devmapper驱动。
2023-10-21 22:35:04
803
原创 21. Serverless虚拟化遇到的内核device-mapper driver是什么
我在打造k8e的 Serverless 引擎时,选择了AWS的 Firecracker-microvm,遇到一个技术问题,它要求一定要支持内核device-mapper驱动,这是个什么东西?和 overlayfs 对比有啥优缺点要讲一讲。
2022-12-31 15:51:33
756
2
原创 使用k8e快速部署Kubernetes集群服务
简单的企业级Kubernetes。我想在一个轻量级的分布中采用更多的企业功能,一个二进制组件,k8e来提供所有的k8s组件。
2022-01-16 12:06:04
3479
原创 31:抽丝剥茧理解kube-proxy的原理
很多时候在熟悉一套集群系统的同时,我们也在忽略一些重要组件的实现细节,比如kube-proxy。kube-proxy是解决Kubernetes 集群中南北向,东西向网络通信的核心组件,但是在梳理Kubernetes知识的时候,会对它有一种陌生的感觉。它到底是怎么运行的呢?所以,本篇的内容就是为了解密kube-proxy的运行原理和执行细节,让你更详细的了解到kube-proxy的今生后世。
2021-12-09 15:06:19
763
QCon 2024全球软件开发大会北京站(公开)PPT汇总-DevOps+LLM相关
2024-06-03
《医疗与在线教育PPT模板合集》-点亮您的演讲与教学!
2024-06-01
《技术合同模板.zip》-您的项目合作利器!
2024-06-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人