Saka 馬鹿
这篇博客是我在刷题群内的 2025 年的第一次分享整理的演讲稿。主要是完整复盘了过去几年里我犯下的两个比较典型的低级错误。 希望大家能看的开心 正文首先来看一下我们抽象后的架构 很平平常规的一个架构。而我犯的两次相对低级的错误分别是在数据的入口和数据落点上。OK 那么我们分别来看一下我犯下的错误 首先要分享的是我搞出的一个核心数据库删除的事故。在介绍事故现场之前,我将先介绍下下当时我们整体资源管理的结构 我们基于 Terraform 管理资源 熟悉 Terraform 的同学都知道,Terraform 很重要的一点就是需要一个介质来存储当前 infra 的 state,这样能让后续的操作基于状态来实现 diff 我们当时的 state 是存储在 local fs ,state 文件跟随着 Git Repo 一起变更 我们基于目录划分不同业务需要的 AWS Infra 所对应的 Terraform 描述 关键设施没有开启删除保护 OK,我们继续往前讲,我们来激活一下事故现场的回忆 事故当天,需要给一个新的业务需要一个 AWS Aurora...
本当の僕らをありがとう
每年都会选择一句话来总结自己这一年,前年是“但行好事,莫问前程”,去年是 “Per aspera, Ad astra”。那么今年我选择是 “本当の僕らをありがとう”。 这句出自 《Angel Beats!》的片尾曲《My...
OpenDAL 0.51 版本代号 “本当の僕らをありがとう。” 背后的故事
Apache OpenDAL v0.51.0 第一个 RC 版本发布了,这个大版本有些特殊,是我第三个负责 Release 的版本,也是第一个带有 Subtitle 的版本 这个版本的副标题为 “本当の僕らをありがとう” ,意为 “向真实的我们致谢” 聊聊这个版本背后的一些故事吧 正文在筹备 v0.51.0 的发版的时候,我本来是想想一个标题,来庆祝摇曳露营 S4 制作确定的。所以在 @xuanwo 和 @frostming 的支持和建议下。我发起了一个提案 [VOTE] Proposal: Adding Cultural References to Release Titles1 提案 #5303 通过后,我本来想用志摩凛的一句我很喜欢的台词“ソロキャンは寂しさも 楽しむものなんだって”来作为摇曳露营 S4 制作决定的庆祝。但是不知道怎么回事,我耳边突然想起了 《My Song》...
好了,现在你的知识也是我的了.jpg
最近给朋友介绍了一下我对于一些外部资料的吸收的经验。我想了想整理了下聊天记录,将我整个思路以博客的形式展现出来。希望能帮到看这篇博客的人。 正文首先说明,我自己看过关于知识体系方法论的资料很少。本文描述的是我自己在这些年经过不断改良后觉得目前最适合我的一套方法,可能不适合所有人,仅供参考 我自己的宗旨是...
如何使用 WASMTIME 来运行 CPython for WASI,然后利用 Python 实现的 HostFunction 来扩展它?
国庆节搞了一个活,利用 wasmtime 来执行编译成 WASM/WASI 字节码的 CPython 虚拟机,并在宿主机一侧利用 Python 实现的 Host Function 来扩展它。 再次声明一下,这个只是我个人想搞的活,没有再任何生产环境中得到验证,just for fun(XDDD 正文首先我们简单介绍一下 WASM/WASI,这里我直接引用一下 AI 生成的 brief summary WebAssembly (WASM) 是一种低级编程语言,可在现代网页浏览器中运行。它提供接近原生的性能。WebAssembly System Interface (WASI) 是 WASM 的一个标准扩展,允许 WASM 程序在浏览器外运行,访问系统资源。这两项技术旨在提高 Web 应用性能,并使 WASM 在更多环境中可用。 而 WASM/WASI 技术路线核心的优势在于 跨平台的兼容性 多语言通过静态编译的支持 Native Sandbox 带来的安全性 所以 WASM/WASI 不仅在浏览器得到了广泛的应用, 现在其应用也逐渐扩展到了服务端。Serverless...
How to Run CPython for WASI Using WASMTIME and Extend It with Python-Implemented Host Functions?
During the National Day holiday, I worked on a project to use wasmtime to execute CPython virtual machine compiled into WASM/WASI bytecode, and extend it with Host Functions implemented in Python on the host side. I’d like to clarify again that this is just a personal project I wanted to work on, without any validation in production environments, just for fun (XDDD Main ContentFirst, let’s briefly introduce WASM/WASI. Here, I’ll directly quote an AI-generated brief summary: WebAssembly...
Debug 日志:eCapture GH-604
Debug 日志系列第二篇,eCapture 的 GH-604, 一个和 Go, Glibc,静态编译相关的问题 太长不看版:在 eCapture 中,由于在静态链接时 glibc 版本的差异,导致在 Ubuntu 下编译的二进制会在特定发行版上 Segment fault 开篇首先介绍下 eCapture,这个项目是基于 eBPF 做的一套安全工具,核心的能力是可以提供在旁路对于 TLS 流量解密的能力 在8月25日的时候,社区反馈了一个 bug,编号 GH-604,其核心行为如下 下载在 GitHub Release 中发布的二进制,在 Arch Linux 下会 Segment Fault,报错大致如下 12345678910111213141516171819202122232425262024-09-18T21:10:47+08:00 INF BTF bytecode mode: CORE. btfMode=02024-09-18T21:10:47+08:00 INF module initialization. isReload=false...
2024 年了,是 Gevent 还是选择 asyncio Part 1?
Gevent 还是 asyncio 这一直是个经典的问题,在这里我们直接用数据来帮助大家做一下决策 开篇Lin Wei 老师珠玉在前 给出了 asyncio 和 Gevnet 的极限性能。 在这里我们看到了 asyncio 配合 uvloop 基本上是 Gevent 的 double 了 那么在在 Web 框架下是否如此呢? 我们来做一下实验吧 首先说一下负载机器的配置,这里我选用了 Azure 上 D8as_v5 的机器,该机器配置如下: 8Core32G 的配置 底座硬件基于 EPYC 7763 系列处理器 共计4个节点,分配给 Django/Flast/FastAPI/Starlette 四个不同的框架 我们压测框架选择 locust,同样基于 Kuberntes 集群,因为我账户的 D8as_v5 机器的 Quota 不太够,所以压测框架我们选了不同机器的混合部署 4个 D8as_v5,共计 32 Core 算力 4个 D8as_v3,共计 32 Core 算力 4个 D4as_v2,共计 16 Core...
In 2024, Gevent or asyncio? Part 1
The choice between Gevent and asyncio has always been a classic question. Here, we’ll use data to help you make a decision. IntroductionProfessor Lin Wei has set a high standard: This graph shows the extreme performance of asyncio and Gevent. We can see that asyncio with uvloop is basically double the performance of Gevent. But is this the case under web frameworks? Let’s conduct an experiment. First, let’s talk about the configuration of the load machine. I chose a D8as_v5 machine on...
Debug 日志:CPython GH-121528
Debug 日志系列第二篇,CPython 的 GH-121528,也是很有趣的调试和讨论过程,写出来希望帮助大家 太长不看的版:Python 3.13 Beta 版本中,因为 PEP 683 的实现+周边的改动,导致低版本下编译的一些扩展无法在 Python 3.13 中运行 开篇7月9日的时候,PyO3 社区提出了一个 Bug , 编号为 GH-1215281。这个 Bug 可以做这样的表示 假设我们有一个 C 扩展文件 12345678910111213141516171819202122232425262728#include <Python.h>static PyObject *foo_bar(PyObject *self, PyObject *args){ Py_INCREF(PyExc_TypeError); PyErr_SetString(PyExc_TypeError, "foo"); return NULL;}static PyMethodDef foomethods[] =...