我的 2023 年
三个词总结我的 2023,大概就是 牛马、开源和孤独
又是一年之末,但今天想要总结一下这个无趣的一年真是让我提不起劲来。不得不说,今年一年的研究生生活只能用冤大头和毫无收获来形容。不过正是为了“自救”,今年我让自己投入开源社区的工作也确实是让我收获颇丰。
牛马其实我是不愿意在网络散发太多我的负面情绪的,但是这一年忍受下来的种种还是让我忍不住竖起我的中指。各位大可跳过这段牢骚以免影响大家新年的情绪。
研一之后,大家理所应当地加入了各种项目组,但我运气却非常爆棚,是唯一一个被导师分配到实验室另一个老师(以下简称 Z 老师)手底下做事的,刚开始的我确实是摩拳擦掌,准备大干一番。但在进了项目组后:
每周开一次会,而 Z 老师是个 PPT 大师,本身对技术也是一知半解,技术栈和架构设计基本不听我的建议,却喜欢在每周的会上画大饼填需求(没错,乙方给甲方添需求),还是每周都画饼。这饼给甲方每周看的心满意足,给我每周看的流汗黄豆。
价值 7 位数的项目,合同上写的是 10 人的小组,实际开发、设计、文档、维护全部只有我一个人,没有任何一个人帮忙;作为代价,我能够每个月多发到高达 200 块人民 ...
CentOS 7 yum 无响应解决办法
CentOS 7 yum 无响应解决办法问题描述在实验室的 CentOS 7 服务器上配置 Python 环境的时候,出现了 yum 指令无响应的问题,即在输入任何 yum 及其相关的指令后,光标会停顿在空白处闪烁,终端无任何输出,CTRL + C 也无法退出指令。只有关闭整个终端再新建才能进行别的操作。
同时,指令 rpm -qa 指令同样出现了无响应的问题,但 rpm 的其它指令可正常执行。
问题原因很大可能是先前的 yum 指令执行被人为或异常中断,导致 rpm 包数据库出错被锁定。(又是哪个笨蛋学弟?🤯)
参考解决方案:
https://stackoverflow.com/questions/57818761/terminal-hangs-when-executing-yum-commands
https://www.jianshu.com/p/cfd6dae240c8
解决方法首先应该干掉 yum/rpm 的进程,通过 ps -aux 和 kill -9 组合拳可以做到。不过因为我直接关闭的终端因此似乎不存在仍然运行的 yum 进程。
其次,应该将 rpm 数 ...
分布式 ID 生成算法 SnowFlake 及其 Go 实现
分布式 ID 生成算法 SnowFlake 及其 Go 实现在先前总结我 GSOC 2023 项目的文章中,我提到了 Python agent 的 ID 生成是主要的性能瓶颈。我的 Mentor 为了解决这个问题,专门提了一个 issue ,其主要内容就是将 Skywalking Python agent 的 ID 生成规则和 Java agent 一致。他在写这个 PR 的时候也有和我讨论参考我的意见,我也就这个机会进一步了解了著名的分布式 ID 生成算法 SnowFlake。
在我 Mentor 的这个 PR 中,他实际上是以雪花算法(SnowFlake 算法)的思想来生成唯一 ID ,具体实现和应用场景还是和原版雪花算法有很多不同。而我这篇博客的主要目的,还是在于记录雪花算法的主要原理,并以百度开源的一个 ID 生成器为例子来进一步说明。最后,我也给出我自己写的代码——通过 Go 实现百度 ID 生成器的部分内容。
SnowFlake - 雪花算法SnowFlake 原先是 Twitter(现 X) 开源的分布式 ID 生成算法,源代码已经不再维护,为仅可读状态。该算法将一个 6 ...
如何单独编译 Nacos 客户端源码并将其注入 Spring Cloud 中
如何单独编译 Nacos 客户端源码并将其注入 Spring Cloud 中如果你由于 Spring Cloud 应用业务内的问题,需要自定义 Nacos 的客户端部分代码;或者你是开源贡献者,为 Nacos 客户端部分贡献了部分代码,接下来希望能验证修改后的 Nacos 客户端在 Spring Cloud 中的可用性,那么你一定希望知道如何单独编译 Nacos 客户端部分的源码并将其注入至现有的 Spring Cloud 应用/demo 中。
不幸的是,Nacos 官方文档仅提供了服务端的编译安装方法。接下来,这篇博客就将介绍如何将新编译的 Nacos 客户端注入对应的 Spring Cloud Alibaba starter 中,将 starter 中固定版本的 Nacos 客户端替换为你本地编译的 Nacos 客户端。
单独编译 Nacos 客户端源码首先,克隆 Nacos 主仓库,并进入该文件夹,推荐使用 idea 操作。
12git clone https://github.com/alibaba/nacos.gitcd nacos
找到源代码中的 Nacos 版 ...
GSOC 2023 - 我的第一次开源之旅
GSOC 2023 - 我的第一次开源之旅写在前面今天北京时间凌晨 2 点左右,Google 给我发邮件确认了项目终审通过,3 个多月以来的 GSOC(Google Summer of Code) 活动算是圆满结束了。今年 5 月份以来我在 GSOC 、 OSPP(Open Source Promotion Plan 中科院办的开源之夏) 和实验室的完蛋项目里三线作战来回捣腾焦头烂额 😶,这也是我博客一直没有更新的原因。三大战役之一终于收官了,这才忍不住来更新一下博客,只是想告诉大家我没有太监(:
这页博客主要内容其实是我想说说这次 GSOC —— 也是我第一次参加开源项目 —— 的感受,想看我的 GSOC 项目的具体内容可以参考这个链接,想要参考我项目提案(Proposal)的可以看这里,想直接看我做了啥东西出来的可以直接看这个文档,不想看我下面逼逼赖赖的可以输入组合技 CTRL + W。
在这之前最开始了解开源,其实是在 2022 年末,看到实验室看到学长参加 OSPP 拿了个优秀学员(他的博客 👉 https://siegelion.cn/ ,技术力真的很强),然后想着 w ...
GSOC 2023 - Python Agent Performance Enhancement Plan 项目提案
Apache SkyWalking - Python Agent Performance Enhancement PlanProposal for Google Summer of Code 2023
About MePersonal Information
Name: ***
Email: ***
Github: @FAWC438
Blog: alrisha.cn ( in Chinese )
Location: China
Timezone: GMT+8
University: Beijing University of Posts and Telecommunications
Degree in progress: Master of Computer Science and Technology
Why MeMy primary programming languages are Python, Java and Go, with Python being my best. I am interested in microservices and cloud-nativ ...
Nacos 单实例集群 Docker Compose 部署问题
Nacos 单实例集群 docker compose 部署问题背景在 Linux 环境下通过 Docker Compose 部署 Nacos + Grafana + Prometheus 单实例集群,研究其监控功能时,遇到了无法部署的问题。我按照官方文档的以下指令在 CentOS 服务器部署 Nacos 集群:
123git clone --depth 1 https://github.com/nacos-group/nacos-docker.gitcd nacos-dockerdocker-compose -f example/standalone-derby.yaml up
我在自己 Windows 环境中进行部署非常正常。但我随后在 Linux 服务器上部署,集群在启动时报出了如下错误:
123...nacos-standalone | 2023-05-08 21:28:05,238 ERROR Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDepe ...
不要在 Linux 文件 IO 任务上使用协程
在一项网络 IO 繁重的 Python 项目中,我大量使用了 gevent 的协程模型加速网络 IO ,效果比 Python 传统的线程池好很多。然而在后续数据预处理的部分遇到了问题。
我的项目结构是一个经典的单 provider 、多 consumer 模型,provider 负责读取一个超大文件(大于 8 Gb)并写入队列,然后多个 consumer 从队列读取数据并进行处理。如下所示
123456789101112131415q = Queue()def provider(): with open('<file path>', w) as f: for line in f: q.put(line)def consumer(): data = q.get() ...tasks = [gevent.spwan(provider)] + [gevent.spwan(consumer) for _ in range(works_num)]gevent.joinall(tasks)
然而在运行的时候,程 ...
基准测试工具 Wrk 的使用
基准测试工具 Wrk 的使用背景
wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi-core CPU.
Wrk 是一个轻便、高性能的、基于 C 编写的 HTTP 基准测试工具。使用它能轻松对 Web 端口进行一系列压力测试。
安装Wrk 只能在类 Unix 系统下安装,Windows 用户建议使用 WSL。以下以 Ubuntu 为例。
编译工具/环境安装确保安装以下包:
12345sudo apt install gitsudo apt update gcc # 可选sudo apt install libssl-devsudo apt install makesudo apt install build-essential
安装 Wrk在希望安装 wrk 的目录中,执行:
123git clone https://github.com/wg/wrk.gitcd wrkmake
make 操作耗时相对较长,需要耐 ...
Pandas 中判断某个元素是否存在的问题
Pandas 中判断某个元素是否存在的问题在使用 Pandas 处理数据的时候,常常需要判断某个元素在 DataFrame 或其中特定的行/列中是否存在,下面给出一个例子以便详细说明:
1234567import pandas as pddata = {'language': ['Java', 'PHP', 'Python'], 'number': [1995, 1995, 1991]}df = pd.DataFrame(data)print(1991 in df['number'])print(1 in df['number'])
你觉得这个程序会输出什么?答案可能让你大吃一惊
123[root@localhost test]# python pandas_test.pyFalseTrue
查找了相关资料后,我发现在 Pandas 中,类似 1 in df['number'] 的输出,实际上等价于 ...