0%

GNU gettext, 它是一套国际化(i18n)和本地化(i10n)工具,在类Unix系统中被大量采用, ubuntu , wordpress 都采用 gettext 实现多语言支持。 国际化标准 ISO 639-1

使用GNU text 的好处是, 它可以自动扫描提取源文件的待翻译内容, 源文件新增的待翻译片段也可以自动扫描提取。

Read more »

ingress 产生背景:

由于 Pod 可能在任何时刻出现在任何节点上, 所以Pod IP 肯定会动态变化。

那么如何把这个动态的 Pod IP 暴露出去? Kubernetes 的 Service 机制就是用于解决此问题,Service 以 label 的形式选定一组带有指定label的 Pod,并监控和自动负载它们的 Pod IP,那么向外只暴露 Service IP 即可.

Ingress 就是配置各种域名找到对应那个 Service。

参考: https://mritd.me/2017/03/04/how-to-use-nginx-ingress/

ingress 组件对比

组件 ingress-nginx(官方) Kong Ingress traefik Voyager istio ingress
最新版本 v0.25 v0.5 v2.0 beta, v1.7.12 release v10.0 v1.2
动态服务发现 static(有生成器) static dynamic dynamic dynamic
支持协议 http, https, tcp, udp, grpc http, https http, https, grpc http, https, tcp http,https, grpc
base on nginx nginx + lua traefik (Go) haproxy+GO envoy
LB 策略 rr, least_conn, ip_hash rr rr, wrr rr rr, least_conn, random

Benchmarks

组件名 QPS 平均响应时间 总请求数 连接数 持续时间
traefik 28392 91.72ms 1705073 1000 1分钟
nginx 33591 101.25ms 2018427 1000 1分钟

traefik 性能达到 nginx 的85%

数据来源: https://docs.traefik.cn/benchmarks

Read more »

kong的代码运行于nginx的worker进程中。kong对数据的修改会在一个worker中进行,修改后需通知给本机其他worker进程和其他机器上的worker进程。
kong 会将数据库记录缓存起来,这里只是缓存kong自身数据比如插件, service, route 数据, 自定义插件的数据表数据并未缓存, 例如: rate limit 插件的数据也要自己通过kong.cache来缓存, 通过/etc/kong/kong.conf 配置db_update_frequency确定更新route, service, plugins等数据的缓存时间。

kong使用的进程间通信主要方式有:

  1. 本机间通信-共享内存
  2. 跨机器通信-数据库
Read more »

被这个问题困扰了好一段时间, 期间拉取了traefik代码到本地编译(remark: 官网提供的文件做了优化编译,去掉了调试信息, 无法打断点), 并打断点调试。

完成traefik部署后, 检查日志发现traefik 在不断报错, 错误信息:Error while Peeking first byte: read tcp 172.16.2.102:80->100.xxx.xxx.xxx:xxxxx: read: connection reset by peer.

Read more »

测试环境:

​ 硬件: 阿里云ECS主机. 配置: 1核1G, 4核4G, 8核8G,

​ 系统: Ubuntu 18.04.2 LTS (与线上环境统一系统版本)

基准测试(1核 1G):
测试组件 连接数 QPS 响应时间
kong 1万 7500 2s
kong + redis 1万 3326 5s
kong + redis 2万 2000 7s

Read more »

Kong 自行封装了一套基于Busted 的测试框架, Busted约定将测试放在 spec 文件夹中,命名为 xx_spec.lua.

网关项目的测试代码存放路径: spec/spec/custom-plugins, 运行单元测试后测试框架将生成一个Kong实例并对其执行测试, 具体查阅 spec/kong_tests.conf 配置文件。

注:Kong的单元测试依赖于测试框架 Busted, 具体详细查看Busted介绍部分

Read more »