聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长

  • 1433 views阅读

    浅谈配置文件

    很少有人关注配置文件,但它绝对是一个值得讨论的问题。 一个常见问题是:如何处理不同环境下不同的配置?传统的解决方案是为每个环境都单独设置一个配置文件,比如 rails 项目里一般会有 development、production、test 等几个配置文件,不过此方法不易扩展:更多部署意味着更多新的环境,随着项目的不断深入,开发人员可能还会添加他们自己的环境,这将导致各种配置组合的激增,从...

    分类:技术文章 时间:2020-12-28 12:10 我要评论(0个)

  • 1750 views阅读

    实战etcd的服务发现

    在云原生的时代,服务发现已经是必不可少的功能,我借着最近迁移 gRPC 服务的机会尝试了一下如何用 etcd 实现服务发现,期间遇到诸多问题,本文逐一记之。 虽然 gRPC 并没有内置 etcd 的服务发现功能,但是它提供了相关接口让我们扩展: // Builder creates a resolver that will be used to watch name resolution...

    分类:技术文章 时间:2020-11-17 23:07 我要评论(0个)

  • 1672 views阅读

    实战Prometheus

    最近手头的项目开始从 PHP,Lua 迁移到 Golang,心想正好趁此机会夯实监控,提到 Golang 的监控,不得不说 prometheus 已经是标配,在 Golang 里集成起来非常简单: package main import ( "net/http" "github.com/prometheus/client_golang/prometheus/promhtt...

    分类:技术文章 时间:2020-10-26 18:14 我要评论(0个)

  • 1656 views阅读

    遭遇lj_str_new

    话说前几天我刚通过 mlcache 优化了热数据的问题,屁股还没坐热乎呢,就发现系统性能又下降了,本着自己挖的坑含泪也要填上的原则,我再一次开始了性能调优之旅。 对某个 nginx 进程执行 perf top 毫无疑问,从 perf top 结果来看,lj_str_new 已经成为了性能最大的短板。不过我们还是要搞一个 lua 语言级别的火焰图看着才靠谱,于是有了下图: 优化前的火焰图 不...

    分类:技术文章 时间:2020-09-15 22:16 我要评论(0个)

  • 2811 views阅读

    记一次性能调优

    面对性能调优问题,很多人往往只是单纯的套用既往的经验:先试试一个,不行再试试另一个。面对简单的问题,如此通常能事半功倍;但是当面对复杂问题的时候,单凭经验往往并不能达到立竿见影的效果,此时我们需要更精准的判断性能短板在哪里。 一个 openresty 项目,不了解 openresty 的可以参考我以前的文章,从 top 运行结果看,软中断 si 分配不均,绝大部分压在了 CPU5 上,导...

    分类:技术文章 时间:2020-09-12 18:01 我要评论(0个)

  • 2672 views阅读

    我的Golang热重载工具Air不好使了

    我使用 VSCode Remote-Containters 作为 golang 开发环境,因为生产环境使用的镜像主要是 alpine,所以开发环境自然而然使用了 golang:alpine,对应 Dockerfile 的内容如下: FROM golang:alpine RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.cloud.tencent.c...

    分类:技术文章 时间:2020-08-23 21:19 我要评论(0个)

  • 2099 views阅读

    手把手教你用ETCD

    一句话概括的话:ETCD 是一个基于 RAFT 的分布式 KV 存储系统。一个 ETCD 集群通常是由 3、5、7 之类奇数个节点组成的,为什么不选择偶数个节点?在集群系统中为了选出 LEADER 节点,至少要有半数以上的节点达成共识,举例说明: 当集群有 3 个节点的时候,至少要有 2 个节点达成共识,最多容灾 1 个节点。 当集群有 4 个节点的时候,至少要有 3 个节点达成共识,最...

    分类:技术文章 时间:2020-08-19 19:26 我要评论(0个)

  • 2056 views阅读

    记录Viper加载远程配置填坑过程

    关于 viper,无须多言,它是 Golang 社区里最流行的配置文件工具,除了常见功能之外,它还支持很多高级功能,比如可以加载远程配置,正好我最近在研究 etcd,于是我打算把二者结合起来,没想到就此开启了填坑之旅。 按照文档上的介绍,只需启动一个 goroutine 执行 WatchRemoteConfig 即可: Watching Changes in etcd 可惜当我套用如上代...

    分类:技术文章 时间:2020-08-10 19:03 我要评论(0个)

  • 2419 views阅读

    Golang代码修改后自动重启

    写 Golang 项目有两件很烦的事情:一件是错误处理时连绵不绝的「if err != nil」,另一件是作为编译型语言,代码修改后不能实时看到效果, 借助一些工具可以实现文件修改后自动编译重启,比如: Linux 环境:inotify-tools(Golang Automatic Reloads) Mac 环境:fswatch 不过常见的工具要么不跨平台,要么操作复杂,好在我发现了...

    分类:技术文章 时间:2020-07-31 19:56 我要评论(0个)

  • 2436 views阅读

    白话布隆过滤器

    日常开发中,一个常见需求是判断一个元素是否在一个集合中。比如当你在浏览器中输入一个网址的时候,浏览器会判断网址是否在黑名单里。通常的解决方案是直接查询数据库,看看是否存在相关的记录,不过这往往会比较慢,于是我们又会引入缓存来提升速度,可是当数据比较多的时候,缓存会消耗大量的内存。有没有既速度快又节省内存的解决方案呢?本文介绍一种算法:布隆过滤器(Bloom filter)。 所谓布隆过滤...

    分类:技术文章 时间:2020-06-22 14:17 我要评论(0个)

  • 2277 views阅读

    记一次有惊无险的丢包调试经历

    某个项目把服务器从 CentOS 操作系统从 5 升级到了 7(3.10.0-693),一切都很顺利,直到我在服务器上闲逛的时候,无意间发现了一个「大问题」:网卡 eth0 在 RX 上存在丢包(dropped)现象,丢得还很有规律,每一两秒丢一个包! watch -d -n1 ‘ifconfig’ 一开始怀疑是不是网卡的 ring buffer 太小了,通过「e...

    分类:技术文章 时间:2020-05-04 01:37 我要评论(0个)

  • 2253 views阅读

    记一次Redis连接池问题引发的RST

    某个项目,因为监控尚不完善,所以我时常会人肉查查状态,终于有一天发现了异常: watch -d -n1 ‘netstat -s | grep reset’ 如图所示,服务器发送了大量的 reset,在我 watch 的时候还在发,多半有问题。 通过 tcpdump 我们可以简单抓取一下 RST 包: shell> tcpdump -nn 'tcp[tcpfl...

    分类:技术文章 时间:2020-05-04 01:37 我要评论(0个)