概述
Go 帮助企业构建和扩展云计算系统
随着应用程序和处理转移到云端,并发性变得非常重要。云计算系统本质上共享和扩展资源。协调对共享资源的访问会影响云中处理的每个应用程序,并且需要“明确针对开发高度可靠的并发应用程序的”编程语言。
Go 使公司非常容易扩展。这一点非常重要,因为随着我们的工程团队的壮大,每个服务都可以由不同的部门管理。
主要优势
解决开发周期时间和服务器性能之间的权衡
Go 的创建是为了解决扩展应用程序、微服务和云开发的这些并发需求。实际上,云原生计算基金会中超过 75% 的项目都是用 Go 编写的。
Go 凭借其快速的构建时间(支持迭代开发)、更低的内存和 CPU 使用率,帮助减少了这种权衡的必要性。用 Go 构建的服务器启动时间极短,并且在按需付费和无服务器部署中运行成本更低。
解决现代云面临的挑战,提供标准的惯用 API
Go 解决了许多开发人员在现代云中面临的挑战,提供了标准的惯用 API 以及内置的并发性来利用多核处理器。Go 的低延迟和“无旋钮”调整使 Go 在性能和生产力之间取得了很好的平衡——赋予工程团队选择和迁移的权力。
用例
将 Go 用于云计算
在构建服务方面,Go 的优势尤为突出。其速度和对并发的内置支持带来了快速高效的服务,而静态类型、强大的工具以及对简洁性和可读性的重视则有助于构建可靠且可维护的代码。
Go 拥有强大的生态系统来支持服务开发。标准库 包含针对 HTTP 服务器和客户端、JSON/XML 解析、SQL 数据库以及各种安全/加密功能等常见需求的包,而 Go 运行时包含用于竞态检测、基准测试/分析、代码生成和静态代码分析的工具。
主要的云提供商(GCP、AWS、Azure)为其服务提供了 Go API,而流行的开源库提供了对 API 工具(Swagger)、传输(协议缓冲区、gRPC)、监控(OpenCensus)、对象关系映射(gORM)和身份验证(JWT)的支持。开源社区还提供了一些服务框架,包括 Go Kit、Go Micro 和 Gizmo,这些框架可以成为快速入门的好方法。
用于云计算的 Go 工具
Docker 是一个平台即服务,用于在容器中交付软件。容器捆绑软件、库和配置文件,由 Docker 引擎托管,由单个操作系统内核运行(比虚拟机使用更少的系统资源)。
云开发人员使用 Docker 管理他们的 Go 代码并支持多个平台,因为 Docker 支持开发工作流程和部署过程。
Kubernetes 是一个用 Go 编写的开源容器编排系统,用于自动执行 Web 应用程序部署。Web 应用程序通常使用容器(如上所述)构建,这些容器与它们的依赖项和配置一起打包。Kubernetes 有助于大规模地部署和管理这些容器。云程序员使用 Kubernetes 快速构建、交付和扩展容器化应用程序——通过控制容器运行方式的 API 管理不断增长的复杂性。
精选用户
客户 | 简介 | 使用 Go 的项目 |
---|---|---|
Google Cloud 在其产品和工具生态系统中广泛使用 Go,包括 Kubernetes、gVisor、Knative、Istio 和 Anthos。Go 在 Google Cloud 中完全支持,涵盖所有 API 和运行时。 | ||
Capital One 使用 Go 为 Credit Offers API 提供支持,这是一个至关重要的服务。工程团队还使用 Go 构建其无服务器架构,并援引 Go 的速度和简洁性,并提到“[我们] 不想在没有 Go 的情况下进行无服务器迁移”。 | ||
Dropbox 是基于 Python 构建的,但在 2013 年决定将其性能关键型后端迁移到 Go。如今,该公司的大部分基础设施都是用 Go 编写的。 | ||
Mercado Libre 使用 Go 来扩展其电子商务平台。Go 生成高效的代码,可以随着 Mercado Libre 的在线商务发展而轻松扩展。Go 提高了他们的生产力,同时简化和扩展了 Mercado Libre 的服务。 | ||
纽约时报采用 Go“来构建更好的后端服务”。随着 Go 在公司内部的使用范围扩大,他们觉得有必要创建一个工具包来“帮助开发人员快速配置和构建微服务 API 和发布订阅守护进程”,他们已经将其开源。 | ||
Twitch 使用 Go 为其许多繁忙的系统提供支持,这些系统为数百万用户提供实时视频和聊天。 | ||
Uber 使用 Go 为其多个关键服务提供支持,这些服务会影响全球数百万司机和乘客的体验。从他们的实时分析引擎 AresDB 到他们的地理查询微服务 Geofence,以及他们的资源调度程序 Peloton。 |
入门
用于云计算的 Go 书籍
Web 框架
-
Echo
一个高性能、可扩展且极简的 Go Web 框架
-
Flamingo
一个基于 Go 的快速开源框架,具有干净且可扩展的架构
-
Gin
一个用 Go 编写的 Web 框架,具有类似 martini 的 API。
-
Gorilla
Go 编程语言的 Web 工具包。
路由器
-
net/http
标准库 HTTP 包
-
julienschmidt/httprouter
一个轻量级高性能 HTTP 请求路由器
-
gorilla/mux
一个功能强大的 HTTP 路由器和 URL 匹配器,用于使用 🦍 构建 Go Web 服务器
-
Chi
一个轻量级、惯用且可组合的路由器,用于构建 Go HTTP 服务。
数据库与驱动程序
-
database/sql
一个标准库接口,支持 MySQL、Postgres、Oracle、MS SQL、BigQuery 和大多数 SQL 数据库的驱动程序
-
mongo-driver/mongo
MongoDB 支持的 Go 驱动程序
-
elastic/go-elasticsearch
Go 的 Elasticsearch 客户端
-
GORM
Go 的 ORM 库
-
Bleve
Go 的全文搜索和索引
-
CockroachDB
数据库的演变——专为云而设计,以提供可扩展的弹性、一致且分布式的 SQL
Web 库
-
markbates/goth
Web 应用程序的身份验证
-
jinzhu/gorm
Go 的 ORM 库
-
dgrijalva/jwt-go
Go 语言实现的 JSON Web Token