如何单独编译 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'] 的输出,实际上等价于 ...
云原生时代下链路追踪的最终形态:OpenTelemetry
云原生时代下链路追踪的最终形态:OpenTelemetry
本文部分内容参考 https://opentelemetry.io/
基本概念分布式链路追踪分布式链路追踪(Distributed Traces),更常见的说法是链路追踪(Trace),用于记录由应用程序或最终用户提出的请求在多服务架构(如微服务或 serverless 应用程序)中所传播的路径。
如果没有链路追踪,要想找出分布式系统中性能问题的原因是很困难的。
链路追踪提高了我们的应用或系统健康状况的可见性,让我们能够调试难以在本地重现的行为。链路追踪对于分布式系统来说是必不可少的,因为这些系统通常有非确定性的问题,或者过于复杂而无法在本地重现。
链路追踪使调试和理解分布式系统变得不那么困难,因为它分解了一个请求在分布式系统中流动时发生的情况。
一个链路追踪是由一个或多个 Span 组成的。第一个 Span 代表根 Span。每个根 Span 代表一个请求从开始到结束。父级 Span 下面的 Span 提供了一个更深入的背景,即在一个请求中发生了什么(或者说哪些步骤构成了一个请求)。
许多提供链路观测的后端将一个 Trac ...
一个函数实现 Python 超大文件的流式下载与断点续传
一个函数实现 Python 超大文件的流式下载与断点续传在做项目的时候有了超大文件连续高速下载这个需求,然后上网查了不少资料。最后总结并在项目中不断迭代,实现了这个函数。
函数接口非常简单,性能却出人意料的好,因此这个函数无论是用在项目里,还是平时写写脚本下点大东西都非常好用。
这个函数主要的亮点是在于信号量 signal 的使用。requests 库的 timeout 参数实际上是针对请求阶段的超时进行处理,不能通过设置 timeout 限制整个请求下载过程的时间 。而我们在下载大文件时,往往有这样的需求:当一个大文件下载时间过长(例如超过 10 分钟),我们更倾向于放弃此次下载,转而重新开始一次新的下载。因此,我们需要一个能够限制整个下载过程的时间的方法。
为此,我采用了 Python 的 signal 模块,通过设置信号量 signal.alarm() 来限制整个下载过程的时间。当下载时间超过设定值时,会抛出 TimeoutException 异常,从而中断下载。
1234567891011121314151617181920212223242526272829303132333 ...
如何通过 Docker 部署 n2n
如何通过 docker 部署 n2n在以往,部署 n2n 往往需要通过 make 进行源码编译,或是通过包管理器下载安装。安装过程繁琐且难以迁移,配置也容易造成混乱
我在 docker hub 上找到了一个制作水平很高的 n2n v2.9 docker,仅仅只有 7 MB 且运行良好。下面介绍如何通过这个镜像实现 n2n 的 docker 部署。
镜像获取与测试首先需要下载镜像,通过以下代码将镜像从 docker hub 下载到本地:
1docker push yingftf/n2n
运行以下指令就能在不运行容器的情况下测试镜像是否可用及其 n2n 版本:
123docker run --rm --network host yingftf/n2n supernode -hdocker run --rm --cap-add=NET_ADMIN --cap-add=NET_RAW --device=/dev/net/tun --network host yingftf/n2n edge -h
n2n 的容器化部署在 docker hub 页面上,作者介绍了通过映射卷操作配置文件部署的方 ...