寫點東西吧,懒人。

Awesome load test tools
· ☕ 1 分钟
k6 https://github.com/k6io/k6 Locust https://docs.locust.io/en/stable/what-is-locust.html gatling https://gatling.io/docs/current/http/http_request/ artillery https://artillery.io/docs/guides/overview/welcome.html wrk https://github.com/wg/wrk

Java 内置 Class Loader
· ☕ 3 分钟
内置 Classloader Class loaders load classes and resources present on their respective classpath: System or application class loaders load classes from the application classpath Extension class loaders search on the Extension classpath (JRE/lib/ext) Bootstrap class loader looks on the Bootstrap classpath (JRE/lib/rt.jar) We can customize the default class loading behavior as well. We can explicitly specify the class loader while loading a class dynamically. However, we should note that

Opentelemetry Java Agent 浅度解构
· ☕ 2 分钟
https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/contributing/javaagent-jar-components.md Conf Creating spans around methods with otel.instrumentation.methods.include Ref: https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/manual-instrumentation.md Format is "java -Dotel.instrumentation.methods.include=my.package.MyClass1[method1,method2];my.package.MyClass2[method3]" Classloader [arthas@16908]$ classloader -t +-BootstrapClassLoader +-io.opentelemetry.javaagent.bootstrap.AgentClassLoader@379619aa +-sun.misc.Launcher$ExtClassLoader@41fa769c +-com.taobao.arthas.agent.ArthasClassloader@3697b340 +-sun.misc.Launcher$AppClassLoader@18b4aac2 +-java.net.URLClassLoader@71b2d611 +-java.net.URLClassLoader@69cd1085 | +-WebAppClassLoader=266661735@fe4ef67 | | +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@573f7aae | +-WebAppClassLoader=Server Initiated@1ccb04b3 | | +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@4b3b9a06 | | +-jnr.ffi.provider.jffi.AsmClassLoader@73cb9ccb | | +-jnr.ffi.provider.jffi.AsmClassLoader@7c380e94 | | +-jnr.ffi.provider.jffi.AsmClassLoader@69ec5d1f | +-WebAppClassLoader=OAuth Server@10d98940 | | +-com.mycom.ece.common.svcfinder.ExtendedClassLoader@3528968e | | +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@2919aff3 | | +-jnr.ffi.provider.jffi.AsmClassLoader@1b0e6bac | | +-jnr.ffi.provider.jffi.AsmClassLoader@2f12d8d1 | | +-jnr.ffi.provider.jffi.AsmClassLoader@73123f21 | +-WebAppClassLoader=1133988396@43974a2c | +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@39d87c5f +-java.net.URLClassLoader@1b4c457c +-java.net.URLClassLoader@3a477cf5 Affect(row-cnt:24)

K8s Custom Resources(CR)
· ☕ 2 分钟
Custom Resource 的入口 请求是这样分发到 api 扩展点的: 例如我们有 (Custom Resource)CR 1 2 3 4 5 6 7 8 apiVersion: cnat.programming-kubernetes.info/v1alpha1 kind: At metadata: name: example-at spec: schedule: "2019-07-03T02:00:00Z" status: phase: "pending" 相应的 CustomResourceDefinition (CRD) 会是

K8s API 核心对象 —— client-go
· ☕ 3 分钟
API 入口 Client Sets 接收变更通知和缓存(Informers and Caching) Client Sets可以 watch 变更,但一般我们用更高级的 Informers,因为它有缓存

Helm base
· ☕ 1 分钟
Concept umbrella chart you can also create a chart with dependencies to other charts (a.k.a. umbrella chart) which are completely external using the requirements.yaml file. versioning Simple 1-1 versioning Chart versus application versioning 参考 https://codefresh.io/docs/docs/new-helm/helm-best-practices/

Kubernetes extends concept
· ☕ 3 分钟
前言 最近由于工作需要,重新系统回顾 Kubernetes 的编程。发现《Programming Kubernetes》这书写得比较系统。于是边学,边记录一些重点。 Controller

Kubernetes 自动扩缩容
· ☕ 1 分钟
本文状态:草稿 配置例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: php-apache spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: php-apache minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 算法 desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue

内核同步原语
· ☕ 5 分钟
什么是同步原语 共享内存,多进程/线程的运行期设计模式已成主流的今天,你有好奇一下,进程/线程间的怎么同步的吗?大部分人知道,我们用的开发语言

Istio Canary(金丝雀) 上线
· ☕ 1 分钟
按比例分配分配新旧版本流量 VirtualService: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 weight: 75 - destination: host: reviews subset: v2 weight: 25 DestinationRule : 1 2 3 4 5 6 7

系统级跟踪 eBPF 工具 —— bpftrace 入门
· ☕ 1 分钟
bpftrace 简介 bpftrace 简单使用 查询可以跟踪的内核函数,以 sleep 为关键字 1 2 3 4 5 6 7 8 $ bpftrace -l '*open*' tracepoint:syscalls:sys_exit_open_tree tracepoint:syscalls:sys_enter_open ... kprobe:vfs_open kprobe:tcp_try_fastopen ... 跟踪所有 sys_enter_open() 系统调用 1 $ bpftrace -e 'tracepoint:syscalls:sys_enter_open{ printf("%s %s\n", comm,str(args->filename)); }' | grep vi 然后在另外

Kernel - Page Frame 回收
· ☕ 4 分钟
From [Understanding The Linux Kernel] Page Frame 回收 之前我们了解到,Linux 倾向用最多的内存做 Page Cache。这使我们不得不考虑如何在内存不足前回收内存。问题是,回收内存的程

Kernel - Pagecache
· ☕ 1 分钟
简介 page cache 存放的数据的类型 普通的文件 目录数据 直接读取自 block device file 的数据 已经被swap out的用户进程内存的数据(可以强制内核在page cahce中