使用 Golang、微服务和容器构建银行: Matt Heath在伦敦 QCon 上的演讲
在QCon 伦敦,Matt Heath 发表了“用 Golang 建立银行”。Heath 讨论了 Monzo Bank 如何创建使用微服务架构设计并使用 Google 的 Golang 实现的后端系统。主要收获包括:Golang 出色的并发原语使其成为一种非常适合创建“大容量、低延迟、分布式应用程序”的语言;使用像 Monzo 的开源“Typhon”框架这样的微服务框架与 CNCF“linkerd”代理相结合,非常有利于实现核心通信问题;并通过上下文传播实现分布式跟踪,这是可观察性和调试分布式系统的关键促成因素。
Heath是 Monzo 银行的分布式系统工程师,首先介绍了 Monzo 颠覆零售银行业务的目标,以及他们特别关注通过具有现代 UX 的移动应用程序提供经常账户管理。Monzo 是英国银行业的新进入者,并于 2016 年 8 月获得了有限制的银行牌照。当公司于 2015 年 2 月成立时,由于已知的扩展要求,技术团队决定避免使用单体应用程序设计构建 Monzo 后端应用程序的技术和团队。
决定通过“从微服务开始”构建 Monzo 银行应用程序是因为这种架构风格的属性,例如遵循单一责任原则的理念,以及更容易实现定义明确(受领域驱动设计启发)有界上下文和接口/API。后端服务将使用 Google 的 Golang 实现,因为该编程语言平台是内存管理的、静态类型的、提供出色的并发原语(例如goroutine和通道),并且“非常适合简单、小型的网络服务”。
Go 是创建微服务架构的完美语言,并发特性和一般语言允许在 Monzo 轻松创建专注于“单一职责原则”的小型简单网络服务。
随着服务数量的增加,Monzo 团队意识到使用标准化框架式机箱实施服务的好处。从 Peter Bourgon 的基于 Go 的微服务框架“ go-kit ”和 Asim Aslam 的“ micro ”中汲取灵感,Monzo 团队创建了开源的“Typhon”:“用于微服务 [RPC] 通信的传输层”。服务发现、负载平衡、故障处理和可见性等核心通信职责是使用“linkerd”透明代理(现在由CNCF 管理)实现的。
Monzo 后端服务打包在Docker映像中,并部署到Kubernetes上。该应用程序广泛使用事件驱动架构范式,并通过上下文传播共享核心请求信息。相关 ID 被添加到所有请求中,Monzo 开源“磷光体”应用程序用于分布式跟踪(类似于 Google 的 Dapper 或 Open Zipkin)。这允许可视化请求通过系统的路径,并有助于调试:
Heath 在演讲结束时说 Monzo 技术团队发现 Go 是“微服务架构的完美选择”,并发特性和一般语言允许创建“小、简单、容易”的服务。
可以在 Speaker Deck 上找到Matt Heath 的演讲“用 Go 建立银行”的幻灯片,更多详细信息可以在 QCon 伦敦会议讨论页面上找到。