0%

背景

之前写过一篇 从 Dapper 到 OpenTelemetry:分布式追踪的演进之旅的文章,主要是从概念上讲解了 Trace 在 OpenTelemetry 的中的场景和使用。

也写过一篇 实操 OpenTelemetry:通过 Demo 掌握微服务监控的艺术:如何从一个 demo 开始集成 OpenTelemetry。

但还是有不少小伙伴反馈说无法快速上手(可能也是这个 demo 的项目比较多),于是我准备从 0 开始从真实的代码一步步带大家集成 OpenTelemetry,因为 OpenTelemetry 本身是跨多种语言的,所以也会以两种语言为(Java、Golang)主进行讲解。

使用这两种语言主要是因为 Java 几乎全是自动埋点,而 Golang 因为语言特性,大部分都得硬编码埋点;覆盖到这两种场景后其他语言也是类似的,顶多只是 API 名称有些许区别。

在这个过程中也会穿插一些 OpenTelemetry 的原理,希望整个过程下来大家可以在项目中实际运用起来,同时也能知其所以然。

Read more »

之前分享过如何快速上手开源项目以及如何在开源项目里做集成测试,但还没有讲过具体的实操。

今天来详细讲讲如何写单元测试。

🤔什么情况下需要单元测试

这个大家应该是有共识的,对于一些功能单一、核心逻辑、同时变化不频繁的公开函数才有必要做单元测试。

对于业务复杂、链路繁琐但也是核心流程的功能通常建议做 e2e 测试,这样可以保证最终测试结果的一致性。

Read more »

背景

由于我在公司内部负责维护 Pulsar,需要时不时的升级 Pulsar 版本从而和社区保持一致。

而每次升级过程都需要做相同的步骤:

  • 安装一个新版本的集群
  • 触发功能性测试
  • 触发性能测试
  • 查看监控是否正常
    • 应用有无异常日志
    • 流量是否正常
    • 各个组件的内存占用是否正常
    • 写入延迟是否正常
Read more »

前段时间接到一个需求,希望可以监控 Nginx 的运行状态。

我们都知道 Nginx 作为一个流行的 Web 服务器提供了多种能力,包括反向代理、负载均衡;也支持了许多协议,包括:

  • gRPC
  • http
  • WebSocket 等
    作为一个流量入口的中间件,对其的监控就显得至关重要了。
Read more »

背景

Pulsar 有提供一个查询 Broker 负载的接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    /**
* Get load for this broker.
*
* @return
* @throws PulsarAdminException
*/
LoadManagerReport getLoadReport() throws PulsarAdminException;

public interface LoadManagerReport extends ServiceLookupData {

ResourceUsage getCpu();

ResourceUsage getMemory();

ResourceUsage getDirectMemory();

ResourceUsage getBandwidthIn();

ResourceUsage getBandwidthOut();
}

可以返回一些 broker 的负载数据,比如 CPU、内存、流量之类的数据。

Read more »

之前有朋友问如何做集成测试,今天就重点讲讲这个集成测试在开源项目中是如何做的。

通常是需要对外提供服务的开源项目都需要集成测试:

原文链接:https://medium.com/@andreiboar/5-small-tips-i-recently-learned-in-go-cf52d50cf129

让编译器计算数组数量

我们在 Go 通常很少使用数组 arrays,一般使用切片 Slice 来代替;

但是当你需要使用的时候,如果你对需要指定数量大小感到很烦时可以使用 [...] 让编译器自动帮我们计算数组大小:

1
2
3
4
5
6
7
8
9
10
11
12
package main  

import "fmt"

func main() {
arr := [3]int{1, 2, 3}
sameArr := [...]int{1, 2, 3} // Use ... instead of 3

// Arrays are equivalent
fmt.Println(arr)
fmt.Println(sameArr)
}
Read more »