vlambda博客
学习文章列表

云原生开发为什么选择Golang

什么是云原生
云原生计算基金会(CNCF)给出了云原生应用的三大特征:
  • 容器化封装:以容器为基础,提高整体开发水平,形成代码和组件重用,简化云原生应用程序的维护。在容器中运行应用程序和进程,并作为应用程序部署的独立单元,实现高水平资源隔离。

  • 动态管理:通过集中式的编排调度系统来动态的管理和调度。

  • 面向微服务:明确服务间的依赖,互相解耦。


云原生包含了一组应用的模式,用于帮助企业快速,持续,可靠,规模化地交付业务软件。云原生由微服务架构,DevOps 和以容器为代表的敏捷基础架构组成。引用网上关于云原生所需要的能力和特征总结,如下图:

微服务

微服务解决的是软件开发中一直追求的低耦合+高内聚,微服务的本质是把一块大饼分成若干块低耦合的小饼,比如一块小饼专门负责接收外部的数据,一块小饼专门负责响应前台的操作,小饼可以进一步拆分,比如负责接收外部数据的小饼可以继续分成多块负责接收不同类型数据的小饼,这样每个小饼出问题了,其它小饼还能正常对外提供服务。

DevOps
DevOps的意思就是开发和运维不再是分开的两个团队,而是你中有我,我中有你的一个团队。现在开发和运维已经是一个团队了,但是运维方面的知识和经验还需要持续提高。

持续交付

持续交付的意思就是在不影响用户使用服务的前提下频繁把新功能发布给用户使用,要做到这点非常非常难。目前,Amazon可以让一个Dev从功能的设计,开发,测试,发布,后续的监控一个人在完成。平均每十几秒就有一次发布,每天发布好几千次,保证快速高质量的持续交付。

容器化
容器化的好处在于运维的时候不需要再关心每个服务所使用的技术栈了,每个服务都被无差别地封装在容器里,可以被无差别地管理和维护,现在比较流行的工具是docker和k8s。
所以,也可以简单地把云原生理解为: 云原生 = 微服务 + DevOps + 持续交付 + 容器化


为什么golang
Golang的最初成功主要是在开发底层工具(例如CLI工具)和基础设施软件 例如Kubernetes)中。 但是,在Golang 2020 Survey中 显示,74%的Golang开发人员都采用Golang编写API 或者 RPC服务。而API或者RPC服务正是微服务架构的基础。

有人声称Golang缺少高级功能,无法成为生产工具。另一方面,我们认为简单正是Golang的优势。正是因为缺少一些高级功能,才成就了它编写商业应用程序的可行性。

在商业软件的开发中,您不希望为了使您的企业中最关键的业务代码变得更聪明,而使用最新的黑客技术。您需要的是,所有的业务代码,它易于维护,并且非常清晰并易于更改。我们发现,使用基于Golang的高级架构模式可以帮助您实现这一目标。

仅仅因为使用Golang,就可以避免技术债务,这很天真的想法。如果您事先不考虑其设计,那么任何足够复杂的软件项目都可以成为Mud中的“大球”。并且,微服务也不是银弹,采用微服务不会降低复杂性 (例如Kubernetes)。

在接下来的介绍中,将介绍使用Golang进行云原生的开发,因此, 我们假设您具有Golang的基本知识,并且已经从事某些商用软件开发项目。 理想情况下,您正在寻找可帮助您设计一种不会在几个月内成为旧版软件的商业用程序的模式

本书中的大多数想法都适用于具有复杂业务场景的应用程序。 有些情况在较简单的情况下是有道理的,而如果用于小型项目,则某些情况看起来会像可怕的过度设计。 尝试务实,为工作选择最佳工具。