什么是云原生及 Go 语言在原生时代的优势|社区征文

社区征文Go

1 什么是基础架构?

基础架构是支持应用程序的所有软件和硬件。主要包括:

  • 数据中心

  • 操作系统

  • 部署流水线

  • 配置管理

  • 支持应用程序生命周期所需的任何系统或软件

2 什么是云原生架构?

2.1 云原生的演进

物理服务器

在互联网初期, Web 基础架构从物理服务器开始,早期服务器体型大、噪音大而且价格昂贵,并且需要大量的电力和人力才能维持运行。

再者,物理服务器会导致浪费,当同一台服务器最大限度地使用多个应用程序时,软件冲突、网络路由和用户访问都变得更加复杂。

然后就有了硬件虚拟化。

虚拟化

虚拟化是软件中模拟物理服务器硬件吗,虚拟服务器可以根据需要创建,完全可以在软件中进行编程,只要能够模拟硬件,就永远不会过时。使用虚拟化能够增加程序的可移植性。

虚拟化的问题就是虚拟机(VM)需要硬件才能运行,公司仍然需要运行物理服务器所需的人员和流程,但是现在容量计划变得更加困难,而且 VM 也必须考虑考虑开销。

IaaS

基础架构即服务(IaaS)提供了原始的网络、存储和计算,客户可以根据需要消费。它还包括支持服务,如身份和访问管理(IAM),供应和库存系统。

这种方式允许公司摆脱所有硬件,从云供应商那里租用 VM 或物理服务器,节省人力和维护的成本。这种托管的基础架构还为客户提供了可使用的 HTTP 应用程序编程接口(API),用于根据需求创建和管理基础架构。

值得注意的是,在云中运行你的基础架构并不能使你的基础架构成为原生云。IaaS 仍然需要基础架构管理。

PaaS

平台即服务(PaaS)将操作系统对应用程序隐藏了起来,PaaS 基础架构由平台提供者管理。这种方式使得应用开发周期减少了,并且可以在平台上得到有效的管理。

然而,PaaS 平台并不足以满足所有业务需求,有时需要限制语言运行环境、库和特性。

云原生基础架构

如上所述,在传统的设计环境中,您将数据库连接到模块,这些模块将与 API 或 Web 应用程序连接,然后才能与消费者联系。

picture.image

但随着公司的变化,应用也因此改变。对模块的每一个微小的改变都会对其他一切产生连锁反应。随着时间的推移,整个项目是如此复杂,以至于没有人(包括你)真正理解它。

picture.image

“云原生”是一个被滥用的词语,云原生基础架构是隐藏在有用的抽象背后的基础架构,又 API 控制,由软件管理,目标是运行应用程序。利用这些特性运行基础实施,是使用可扩展、高效的方式管理基础架构的新模式。

云原生的基础架构需要抽象底层 IaaS 产品形成一层抽象层,新的层负责控制它下面的 IaaS,以及显示自己的 API 让使用者控制。

2.2 云原生的组件

使用云原生架构,您的设计将由许多协同工作的小部分组成。您可以更改、添加或替换一个,而不会破坏整个系统。云原生架构组件包括:

  • 容器

  • 不可变的基础架构

  • 微服务

  • 服务网格

  • 声明式 API

容器是一个标准的软件单元,它打包代码及其所有依赖项,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。 Docker 容器镜像是一个轻量级的、独立的、可执行的软件包,包括运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。

微服务将明确的功能分成较小的服务,并让每个服务独立迭代。使用微服务可以根据需要更轻松地更改应用程序的敏捷性。每个微服务可以由不同的团队管理,用适当的语言编写,根据需求独立调整。

服务网格(Service Mesh)是用于处理服务间通信的专用基础设施层。 它负责通过包含现代云原生应用程序的复杂服务拓扑来可靠地传递请求。 实际上,服务网格通常通过一组轻量级网络代理来实现,这些代理与应用程序代码一起部署,而不需要感知应用程序本身。 —— Willian Morgan Buoyant CEO

服务网格这个术语通常用于描述构成这些应用程序的微服务网络以及应用之间的交互。 随着规模和复杂性的增长,服务网格越来越难以理解和管理。

不可变的基础架构里的“不可变”非常类似于程序设计中的“不可变”概念。程序设计中,不可变变量(Immutable Variable)就是在完成赋值后就不能发生更改,只能创建新的来整体替换旧的。由于具有这样的特性这种变量可以在并发环境下安全的使用。对于基础设施的不可变性,最基本的就是指运行服务的服务器在完成部署后,就不再进行更改。

声明式 API 只需要提交一个定义好的 API 对象来“声明”(这个 YAML 文件其实就是一种“声明”),表示所期望的最终状态。

3 云原生架构的优缺点

云原生应用(Native cloud applications,NCAs)是为云计算体系结构设计的程序。云原生的优点包括:

  • 成本低。 在标准环境中构建,您的系统必须始终处于打开状态才能为客户提供服务。选择云,您可以将注意力转向新功能和产品。

  • 速度。 在敏捷的工作场所中,您必须始终进行测试、移动和改进。如果您所做的每一个更改都可能破坏您的系统,那么这很难做到。

  • 独立性。 他们的架构使得可以彼此独立地构建云原生应用。这意味着您还可以单独管理和部署它们。

  • 弹性。 精心设计的云原生应用即使在基础架构中断也能够生存和在线。云原生设计与平台无关。如果您对现在使用的环境不满意,请快速更改内容,而无需从头到尾重新编程。

  • 基于标准的。 对于互操作性和工作负载可移植性,云原生应用服务通常基于开源和标准技术。这有助于减少供应商的锁定,并增加可移植性。

  • 业务敏捷性。 云原生应用可在整个网络上启用灵活的部署选项,并且比传统应用程序还小,这使得它们更易于开发,部署和迭代。

  • 自动化。 云原生应用使用 DevOps 自动化功能,并启用定期发布的软件更改的连续交付和部署。此外,开发人员可以使用诸如 Blue-green deployment 和 Canary Deployment 之类的方法来改进应用程序,而不会破坏用户体验。

  • 零停机时间。 由于诸如 Kubernetes 之类的容器编排,您可以通过基本零停机时间部署软件更新。

云原生架构的缺点包括:

  • 调试难。 在传统系统架构中发现问题意味着遵循线性计划。在云原生设计中,容器可以进行交互和连接。但道路可能并不总是很清楚。有些问题的根源在于一个或多个容器,找到问题并不总是那么容易。

    安全。 依赖第三方云运营商意味着放弃对数据和访问的控制。有时,这些公司对数据并不像你那样小心。

  • 知识壁垒。 以云原生方式写作有点像学习一门新语言。你必须掌握概念并完善你的方法,一个小小的错误可能会导致灾难性的问题。

4 何为云原生

云原生(Cloud Native)概念是由 Pivotal 的 Matt Stine 在 2013 年首次提出的。

初探云原生,总给人一种模棱两可,不知所云的感觉。但实际上,云原生有着官方的定义:

根据 云原生计算基金会 (CNCF,著名的 Linux 基金会的一个子基金会)的说法:

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。

这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

这里我们精炼一下这个定义。

定义: 云原生软件是高度分布式的,必须在不断变化的环境中运行,并且本身也在不断变化的应用程序。

也就是说,云原生技术在面对环境的不确定性、需求的不断变化下,它们是可扩展的。

4.1 云原生的起源

这一切的根本原因可能都是来自网络发展带给的压力。

  1. 早期的时候,1950 年代后期大型机计算机的引入。当时,每个程序和数据块都存储在一台巨型机器中,用户可以通过愚蠢的终端访问,而没有自己的计算能力。所有的逻辑和所有数据都作为一个大的快乐整体生活在一起。

  2. 随着廉价网络连接的 PC 的到来,一切都在 1980 年代发生了变化。与愚蠢的终端不同,PC 可以自己进行一些计算,从而可以将某些应用程序的逻辑卸载到它们上。这种新的多层体系结构(分开的演示逻辑,业务逻辑和数据(图 1-1))首次可以将网络应用程序的组件进行修改或替换为独立于其他的网络应用程序的组件。

  3. 在 1990 年代,万维网的普及和随后的“互联网”淘金热将世界介绍给软件作为服务(SaaS)。整个行业都是建立在 SaaS 模型上的,推动了更复杂和渴望资源的应用程序的开发,这些应用程序反过来又更加努力地开发,维护和部署。突然间,经典的多层建筑已经不够了。作为回应,业务逻辑开始分解为可以独立开发,维护和部署的子组件,并迎来了微服务时代。

  4. 2006 年,亚马逊推出了 Amazon Web Services(AWS),其中包括 Elastic Compute Cloud(EC2)服务。尽管 AWS 不是作为服务(IAAS)提供的第一个基础架构,但它彻底改变了数据存储和计算资源的按需可用性,从而使云计算以及快速扩展的能力 - 促进了群众的大规模迁移资源进入”云”。

云原生软件的设计是为了预测故障并保持稳定,即使它所运行的基础设施正在经历故障或正在发生其他变化。

云原生目前已经包括了 DevOps(Development 和 Operations 的组合)、持续交付( Continuous Delivery,CD)、微服务( MicroServices )、敏捷基础设施( Agile Infrastructure )和十二要素( The Twelve-Factor App )等几大主题。

4.2 云原生特性

云原生应用程序的设计和构建是为了利用云提供的规模(scale),弹性(resiliency),适用性(resiliency)和灵活性(flexibility)。

如今复杂应用程序的特点(用户期望连续创新以及无与伦比的响应能力)使业务系统更具战略性和越来越灵活。云原生就是要快速响应,同时还保持敏捷。

5 Go 在云原生时代的优势

Go 云原生开发有着天然的优势,云原生系统需要可扩展、耦合、弹性可管理。Go 的设计就是为云原生时代构建的语言,简单高效快速编译、支持现代网络和多核计算、支持高并发、内存安全,帮助用户专注于解决问题而不是受限于语言的复杂性。

比如以下有名的应用全都是用 Go 实现:

picture.image

时至今日,Go 已经成为云原生开发的通用语言,从 Docker 到 Harbor,从 Kubernetes 到 Consul,从 InfluxDB 到 CockroachDB 等大部分是用 Go 编写的。而且每天都有更多的项目出现。

6 总结

总而言之,在传统的应用系统开发过程中,软件开发商喜欢聚焦在业务系统,专注于系统如何开发、如何闭源成一个独立的整体系统。

云原生技术的存在无非是为了能够利用“云”(数量)的好处,同时弥补其缺点(缺乏可靠性)。Go 语言很好地兼顾了开发效率和运行速度,不仅提供了高性能的运行时,也降低了大型项目的开发难度。

Go 语言发布至今已经有十余年,与云原生共同发展,有着大量工具和技术支持,熟练掌握 Go 语言之后再学习这些云原生工具,可能会有别样的体会。

最后,学习和了解 Go 与云原生技术,提升知识面,帮助我们更加能抓住行业的机会,时不我待。

参考链接:

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论