前言: 为了让不同编码习惯的开发者更好的协作配合,并且形成良好的基础编码规范与风格,我们以 PEP8 为基础,修改了陈旧的规则,丰富了示例,并整理了工作中常见的不规范操作,最终形成此 Python 编码规范与风格。
你知道如何洞察 Go 程序的内在状态吗?(文末有彩蛋)
Golang 下的 expvar 和 expvarmon 介绍
Go 语言内置 expvar,基于 expvar 提供的对基础度量的支持能力,我们可以自定义各种度量(metrics)。
该包提供了一种标准化接口用于公共变量,例如针对 server
中的操作计数器。
expvar
以 JSON
格式通过 HTTP
的 /debug/vars
来暴露这些变量。
针对这些公共变量的 set
或 modify
操作具有原子性;
该包除了会添加 HTTP handler
以外,该包还会注册如下变量:
- cmdline os.Args
- memstats runtime.Memstats
当我们使用标准库 net/http
包开发 HTTP 服务时,我们可以使用如下方式进行暴露内部指标:
|
|
2022 10 04 Devops 持续交付
DevOps理念之持续集成
注意:持续集成是能够推动实现更出色的软件交付表现和组织绩效的一组功能之一。这些能力是由 DORA DevOps 现状研究项目发现的,这是一项针对提升绩效的做法和能力进行的具有学术意义的独立而严谨的调查。
软件系统非常复杂,对一个文件进行明显简单、独立的更改可能会对整个系统造成意外的影响。
当大量开发者处理相关系统时,协调代码更新是个难题,而且不同开发者所做的更改可能并不兼容。
持续集成 (CI) 这一做法就是为了解决这些问题。
持续集成可创建快速反馈环并确保开发者以小批量方式工作,能够让团队开发高质量的软件、降低软件开发和维护费用,并提高团队工作效率。
2022年基础设施自动化和监控的17个最佳DevOps工具
让我们从基础设施代码(IaC)和配置管理开始。
初识 WebSocket 以及 Golang 实现
初识 WebSocket 以及 Golang 实现
一、 WebSocket 介绍
1.1 WebSocket 的诞生背景
在网络冲浪中,我们接触到最多的协议必定是 HTTP/HTTPS 协议,这两种协议的工作原理可简述为:客户端通过浏览器发送一个请求,服务器在接受到请求后进行处理并将得到的结果返回给客户端,由客户端处理结果。可见其主要为一种 “拉取” 信息的形式。
随着时代的发展,出现了一些需要实时发送信息的场景,比如体育实况更新、金融证券的实时信息、实时数据监控等。而如何实现 “推送” 信息的形式呢?在 WebSocket 还未诞生的时候,采用的是轮询技术来实现信息的推送:每间隔一定的时间,浏览器自动发送一个 HTTP 请求,以此主动拉取服务器的最新消息。使用轮询技术,需要不停向服务器发送 HTTP 请求,这样会占用很多的带宽和服务器资源,并且还是不能实现服务器主动向客户端推送数据。
在上述背景下,一种全双工的通信协议 WebSocket 应运而生,它实现了服务端主动向客户端推送数据,使得客户端与服务器间的信息交互更为便捷。
CoreDNS loop 插件异常问题
关键技术:
- Kubernetes: 分布式的容器编排与调度系统,当前公认的云原生技术基础设施
- CoreDNS: DNS and Service Discovery ,当前公认的云原生基础设施之名字服务系统
- CoreDNS-plugins-loop: CoreDNS loop 插件文档
背景
最近有遇到一个客户集群,发现集群中的 CoreDNS 老是异常(loop 插件检测到有回路后进行 panic),因此怀疑是 K8S 集群在交付或者初始化过程中做了一些额外的动作,为了查明真相我们对客户环境进行一次排查和状况模拟,顺便来一起学习一下在 CoreDNS 中 loop 插件的相关知识。
问题现象
在查看 coredns pod 启动日志时,发现有如下对应异常:
|
|
从零构建 SRE 体系
前言: 该文章为19年 Ernese Norelus 发表在 medium 上的Building SRE from Scratch,现在看来也依然不会觉得过时,一起再来回顾一下。
首先从一张构建 SRE 体系图开始,从为什么构建 SRE、SRE 目标以及如何实现 SRE。