使用etcd選舉sdk實踐master/slave故障轉移

  • 2022 年 4 月 19 日
  • 筆記

本次将记录[利用etcd选主sdk实践master/slave高可用], 并利用etcdctl原生脚本验证选主sdk的工作原理。 master/slave高可用集群 本文目标 在异地多机房部署节点,slave作为备用实例启动,但不接受业务流量, 监测到master宕机,slave节点自动提升为mas …

Continue Reading

位元組一面:go的協程相比執行緒,輕量在哪?

  • 2022 年 3 月 15 日
  • 筆記

1. 用户态和内核态 Linux整个体系分为用户态和内核态(或者叫用户空间和内核空间), 那内核态究竟是什么呢? 本质上我们所说的内核态, 它是一种特殊的软件程序,特殊在哪? 统筹计算机的硬件资源,例如协调CPU资源、分配内存资源、并且提供稳定的环境供应用程序运行。 2. 为什么线程切换会导致用户态 …

Continue Reading

Go的優雅終止姿勢

  • 2022 年 2 月 25 日
  • 筆記

最近优化了一版程序:用到了golang的优雅退出机制。 程序使用etcd的 election sdk 做高可用选主,需要在节点意外下线的时候,主动去etcd卸任(删除10s租约), 否则已经下线的节点还会被etcd认为是leader。 所以在这里,优雅退出是技术刚需。 另外根据[云原生十二要素方法论 …

Continue Reading

客戶端禁用Keep-alive, 服務端開啟Keep-alive,會怎麼樣?

最近部署的web程序,在服务器上出现不少 time_wait 的连接状态,会占用tcp端口,费了几天时间排查。 之前我有结论:HTTP keep-alive 是在应用层对TCP连接的滑动续约复用,如果客户端、服务器稳定续约,就成了名副其实的长连接。 目前所有的HTTP网络库(不论是客户端、服务端)都 …

Continue Reading

nginx -g "daemon off;" 你學廢了嗎?

  • 2021 年 12 月 31 日
  • 筆記

去年的时候写了一篇原创《前后端分离,如何在前端项目中动态插入后端API基地址?(in docker)》, 我自认为这篇生产实践是对大前端、 容器化、CI/CD的得意之作。 对于前后端分离的web项目,在容器启动的瞬间,通过脚本替换待部署环境的特定变量,形成了 一个镜像,多环境部署 的效果。 Dock …

Continue Reading

利用 trap 在 docker 容器優雅關閉前執行環境清理

  • 2021 年 12 月 17 日
  • 筆記

当一个运行中的容器被终止时,如何能够执行一些预定义的操作,比如在容器彻底退出之前清理环境。这是一种类似于 pre stop 的钩子体验。但 docker 本身无法提供这种能力,本文结合 Linux 内置命令 trap ,实现在容器优雅关闭之前,可以执行自定义的操作。 如何关闭容器 我了解有三种方式可 …

Continue Reading

基於Kubernetes的hpa實現pod實例數量的自動伸縮

  • 2021 年 12 月 13 日
  • 筆記

Pod 是在 Kubernetes 体系中,承载用户业务负载的一种资源。Pod 们运行的好坏,是用户们最为关心的事情。在业务流量高峰时,手动快速扩展 Pod 的实例数量,算是玩转 Kubernetes 的基本操作。实际上这个操作还可以更加自动化,运维人员可以事先设置好规则,让 Pod 实例的数量,在 …

Continue Reading