云原生六大关键技术

云原生六大关键技术

image-20220524081923692

1.容器

容器被认为是云原生应用的基石,微服务容器化被作为云原生应用的第一步。

容器是一种相对于虚拟机来说,更轻量化的虚拟化技术。能为我们提供一种可移植,可重用的方式来打包,分发和运行应用程序,容器比虚拟机(VM)提供了更高的效率和更快的速度。云原生代码、依赖项等在运行时被打包到容器镜像文件中。镜像存储在镜像仓库。需要时,则将镜像转换为可运行的容器实例。该实例可在装有容器引擎的任何计算机上运行,并可以按需部署任意数量的容器实例。每个容器虽然可以共享基础主机操作系统,内存和处理器的一部分,但彼此隔离。容器的移植性保证了跨云应用的一致性。由此,微服务隔离并打包自己的依赖项、更改项,从而不影响整个系统,开发与发布可以随时进行。

因为共享底层操作系统和主机资源,容器所占用空间大大小于虚拟机,在一台主机上可以同时运行多个微服务。

有了容器之后,还需要对容器进行管理,这就是容器编排。目前,通行的容器编排调度器是Kubernetes,简称K8s。

容器带来的好处,不用多说,用过的都知道。使用操作系统(OS)级别的虚拟化,单个操作系统实例被动态划分为多个相互独立的容器,每个容器具有唯一可写的文件系统和资源配额。创建和销毁容器的低开销,以及单个instance可高密度运行多个容器的特性使得容器成为部署微服务各个模块的完美工具。容器使得应用服务能从底层架构中分离出来,实现了完全的可移植性(在任何操作系统或环境上运行应用的能力),当应用程序有很多独立组件构成,也可以为每个组件分配一个容器。

2.微服务

微服务是将大型应用程序转变为小型服务的集合的架构方法;每个服务实现单独的业务功能,运行在自己独立的进程中并通过HTTP API进行通信。每个微服务器都可以独立于应用程序中的其他服务进行部署,升级,扩展和重新启动,通常作为自动化系统的一部分,可以在不影响终端客户使用的情况下频繁独立更新。

微服务是为了解决传统单体应用的缺点而诞生的,它是一种分布式架构设计理念。它把应用程序中的具体功能独立出来,抽象为『服务』。一个微服务就是一个独立的实体,可以独立的部署在 PAAS 平台上,也可以作为一个独立的进程在主机中运行。为了推动细粒度服务的使用,这些服务要能协同工作,每个服务都有自己的生命周期。服务之间可以通过网关 API、RPC(远程服务调用)、SideCar(后续文章会介绍) 等多种方式访问,修改一个服务不会影响其它服务。

3.服务网格

服务网格(英文名:Service Mesh)是一个基础设施层,用于处理服务间的通信,云原生应用有着复杂的服务拓扑,服务网格负责在这些拓扑中实现请求的可靠传递,在实践中,服务网格通常实现为一组轻量级的网络代理,它们与应用程序部署在一起,但对应用程序透明。

4.不可变基础设施

K8s 中的不可变基础设施就是 Pod,容器技术就是不可变基础设施的一种具体实现。Chad Fowler 于 2013 年提出的一个很有前瞻性的构想:在这种模式中,任何基础设施的实例(包括服务器、容器等各种软硬件)一旦创建之后便成为一种只读状态,不可对其进行任何更改。如果需要修改或升级某些实例,唯一的方式就是创建一批新的实例以替换。

所以,不可变基础设施是一个自包含、自描述可以完全在不同环境中迁移的东西。

5.声明式设计

(声明式设计)指的是这么一种软件设计理念和做法和Declarative(声明式设计)相对的是(过程式设计)。两者的区别是:在Declarative中,我们描述的是目标状态(Goal State),而在Imperative模式中,我们描述的是一系列的动作。这一系列的动作如果被正确的顺利执行,最终结果是这个事物达到了我们期望的目标状态的。

声明式(Declarative)的编程方式一直都会被工程师们拿来与命令式(Imperative)进行对比,这两者是完全不同的编程方法。我们最常接触的其实是命令式编程,它要求我们描述为了达到某一个效果或者目标所需要完成的指令,常见的编程语言 Go、Ruby、C++ 其实都为开发者了命令式的编程方法,

声明式和命令式是两种截然不同的编程方式:

  • 在命令式 API 中,我们可以直接发出服务器要执行的命令,例如: “运行容器”、“停止容器”等;
  • 在声明式 API 中,我们声明系统要执行的操作,系统将不断向该状态驱动。

之前结果过的Flutter,就是声明式UI,其理论是相通的。

优点

声明式 API 使系统更加健壮,在分布式系统中,任何组件都可能随时出现故障。当组件恢复时,需要弄清楚要做什么,使用命令式 API 时,处理起来就很棘手。但是使用声明式 API ,组件只需查看 API 服务器的当前状态,即可确定它需要执行的操作。

声明式设计的好处是:

  1. 简单。我们不需要关心任何过程细节。过程是由工具自己内部figure out的、内部执行的。
  2. self-documentation,因为我们描述的就是希望一个事物变成什么样子,而不是“发育”过程。

声明式的方式能够大量地减少使用者的工作量,极大地增加开发的效率,这是因为声明式能够简化需要的代码,减少开发人员的工作,如果我们使用命令式的方式进行开发,虽然在配置上比较灵活,但是带来了更多的工作。

总结

Declarative是一种设计理念,是一种工作模式,透传出来的是“把方便留给别人,把麻烦留给自己”的哲学。Declarative模式的工具,设计和实现的难度是远高于Imperative模式的。作为用的人来说,Declarative模式用起来省力省心多了。

6.DevOps

DevOps是开发和运维的合作,目标是自动化软件交付和基础设施更改过程。它创造了一个文化和环境,让构建,测试和发布软件可以快速,频繁,更可靠地发生。

持续交付让单个应用随时处于可发布状态,而不用等待与其他变更绑定到一次发布中。持续交付使得发布变成一个频繁且平常的过程,因此组织可以以更低的风险经常交付,并从最终用户获得更快的反馈,直到部署成为业务流程和企业竞争力的重要组成部分。

以上就是云原生六大关键技术,不知道大家了解多少。

猜你喜欢

转载自blog.csdn.net/qq_39132095/article/details/124939832