运维开发工程师在线评测:http://www.gtalent.cn/exam/interview/nsYteJ5wFfWkMdb2

为什么这么说?

重量级的开源项目Docker、Kubernetes都是Go语言开发的

使用 Go 语言开发的 Ops 工具
Helm
Helm 是 Kubernetes 的包管理器,它是查找、共享和使用为 Kubernetes 开发的软件的最佳方式。Helm Charts 可用于定义、安装和升级复杂的 Kubernetes 应用程序,它支持版本控制、共享和发布配置文件,不会让你迷失在意大利面式的代码中。

Grafana
Grafana 是一个时间序列分析、监控和可视化平台。官方支持的一些数据源包括:Prometheus、InfluxDB 和 Elasticsearch。每个数据源都有一个根据其特性和功能定制的查询编辑器。每个数据源都绑定到一个面板,所有面板组合在一起构成一个仪表盘,可以控制时间段,也可以将时间序列数据与其他事件相关联。

Open Tracing Project
用于在分布式软件架构(例如微服务)中分析和监控应用程序,通过精确定位发生故障的位置来帮助调试复杂系统,并通过发现导致性能下降的原因来做出优化。

Open Tracing API 项目正致力于创建更标准化的 API 和增强工具,它包含 API 规范、实现了规范的框架和库,以及项目文档。开发人员可以使用与厂商无关的 API 将增强添加到代码中。

Jaeger
Jaeger 与 Open Tracing 兼容,是一种端到端的分布式跟踪,用于监控和排除复杂分布式系统中的事务。

Jaeger 可用于分布式事务监控和上下文传播、性能和延迟优化、故障分析和服务依赖性分析。

Istio
一个服务网格框架,可配置的基础设施层,用于微服务架构。Istio 使服务实例之间的通信变得更灵活、可靠、快速和安全。在将它添加到应用程序时,只需要为每个服务部署一个边车(代理),不需要更改应用程序代码!

它支持自动发现设备和服务、跟踪、监控、日志记录、平台可观察性、基于访问控制和身份验证的安全性、访问策略控制和流量控制。

CNCF
云原生计算基金会是上述很多项目的“大本营”。它是一个开源软件基金会,致力于推广云原生计算。该基金会构建了可持续发展的生态系统,并围绕一系列高质量的开源项目建立了一个社区,这些项目将容器作为微服务架构的一部分进行编排。

云原生计算使用开源软件将应用程序作为微服务来部署,将每个部分打包到容器中,并动态编排这些容器以优化资源利用。

Go 语言为 SRE 带来的好处
简单地说就是:简单、可靠、快速。

使用 Go 语言——无论你在构建什么,专注于手头的工作,不要操心那些工具。

简单
可读性:Go 语言代码具有很高的可读性,即使有多个运维团队共享代码库,这些代码也很容易读懂,因为它们不管在哪里看起来都是一样的。可以使用 gofmt(内置的 linter)让代码变得更容易阅读。

内置了测试、分析和基准工具:为了遵循 Go 语言的最佳实践,你可能会进行 TDD(测试驱动开发)。你不一定需要使用断言,但如果你想要用它,随时都可以使用。测试、分析(CPU 和内存)和基准工具都是内置的,因此不需要学习新语言、新命令或使用新工具,并且还有一些很好的工具可用于可视化测试结果。

一个二进制文件搞定一切:Go 语言使用了静态链接,也就是说它不需要依赖外部库,不需要复制依赖项或操心导入问题。所有代码及其依赖项都在二进制文件中。而且,作为一个纯粹的同质环境,它不依赖语言版本和发布版本。

交叉编译:将所有东西塞进二进制文件中让事情变得简单了,而能够对其进行交叉编译则让事情变得更加简单:为了支持在不同的操作系统上运行二进制文件,只需要设置 2 个环境变量:GOOS和GOARCH。不需要虚拟环境、包管理器或管理依赖项。这是 CLI 提供的一项很棒的功能,实际上,一些流行的工具也在使用它,如 etcdctl、kubectl 和 docker。

组合,而不是继承:避免继承造成的混淆。

标准库:标准库中的很多软件包都是 Ops 工具(比如处理基于不同的协议——如 HTTP/HTTP2——的 Web 服务,以及文件处理:路径、下载、打开、进程、时间、json、正则表达式等)的构建块。不需要跟踪用于基本操作的标准包或外部软件,或者在这些包被弃用后切换到其他包。因为这些都在标准库中——它们得到了良好的维护,提供了良好的文档。虽然标准库不大,但对于 OPS/SRE 工程师来说已经很好用了。

可靠
有指针,但没有指针算术:保持安全!

错误处理:明确规划错误,并将其作为值来对待,而不是抛出错误异常,从而让代码执行更加顺畅。

开源:Go 语言背后有一个强大的社区在提供支持,包括多年来使用 Go 语言的公司以及谷歌、微软、苹果等行业巨头(你知道 SpaceX 正在使用 Go 语言吗?)。

数据类型:Go 语言是类型安全和强类型的语言,这意味着对 int 进行字符串操作是不允许的,因为这样无法通过编译。基于数组类型构建的内存高效抽象的额外好处是让一些操作明显变快了。

快速
快速编译和执行:如果有未使用的导入,编译器将运行失败。编译时间很短,得到的二进制文件很小。由于代码被编译为机器码,所以执行速度很快。想想通过 sed 或 bash 循环运行数百万个输入,如果使用 Go 语言会有多快?

垃圾回收:与很多其他语言一样,Go 语言中的垃圾回收也是一个争议性话题。简单地说就是出于性能优化的目的会对默认值做出修改。

导入定义好的依赖项:所有依赖项都包含在二进制文件中,这样可以省掉协调二进制文件和依赖项的额外步骤。

性能:现在已经有很多基准测试

【王老师说运维】:运维之linux基础入门实战(http://www.codeforest.cn/course/443)