云原生战专题 | 深入浅出分析云原生微服务的技术结构和架构设计

深入浅出分析云原生微服务的技术结构和架构设计

  • 云原生容器技术背景
  • 容器编排
    • Kubernetes控制平面的四大组件
    • Kubernetes在容器编排中的设计要点
  • 云原生微服务典型架构
    • 第一代微服务架构
    • 第二代微服务架构
    • 第三代微服务架构
    • 第四代微服务架构
  • 未来的云原生架构 — Serverless

云原生容器技术背景

容器作为标准化的软件单元,将应用及其依赖打包在一起,实现了应用的环境无关性,使其能够在不同计算环境中快速、可靠地运行。

随着开源的Kubernetes的出现,它展示了出色的开放性、可扩展性,并拥有活跃的开发者社区。

在容器编排领域,Kubernetes已经成为分布式资源调度和自动化运维的事实标准。它屏蔽了不同基础架构(如数据中心、云、边缘计算)的差异,并具备良好的可移植性。通过Kubernetes,企业能够根据自身的业务需求设计其云架构,以更好地支持多云和混合云环境,并摆脱被厂商锁定的担忧。随着容器技术的标准化,Kubernetes进一步推动了容器生态系统的分工和协同发展。在Kubernetes的基础上,生态社区正在构建上层的业务抽象,例如服务网格Istio、机器学习平台Kubeflow、无服务器应用框架Knative等。

容器编排

Kubernetes 已经成为容器编排的事实标准,被广泛用于自动部署,扩展和管理容器化应用。Kubernetes 提供了分布式应用管理的核心能力:

  • 资源调度:根据应用请求的资源量 CPU、Memory,或者 GPU 等设备资源,在集群中选择合适的节点来运行应用;
  • 应用部署与管理:支持应用的自动发布与应用的回滚,以及与应用相关的配置的管理;也可以自动化存储卷的编排,让存储卷与容器应用的生命周期相关联;
  • 自动修复:Kubernetes可以会监测这个集群中所有的宿主机,当宿主机或者OS出现故障,节点健康检查会自动进行应用迁移;K8s也支持应用的自愈,极大简化了运维管理的复杂性;
  • 服务发现与负载均衡:通过Service资源出现各种应用服务,结合DNS和多种负载均衡机制,支持容器化应用之间的相互通信;
  • 弹性伸缩:K8s可以监测业务上所承担的负载,如果这个业务本身的CPU利用率过高,或者响应时间过长,它可以对这个业务进行自动扩容。

Kubernetes控制平面的四大组件

Kubernetes的控制平面包含四个主要的组件:API Server、Controller、Scheduler以及etcd。如下图所示:

Kubernetes在容器编排中的设计要点

  • 声明式API:开发者可以专注于应用程序本身,而不必关心系统的执行细节。Kubernetes提供了不同资源类型(如Deployment、StatefulSet、Job等),用于抽象不同类型的工作负载。采用声明式API的实现方式,与基于"level-triggered"方式相比较,可以实现更强大的分布式系统。
  • 可扩展架构:所有的Kubernetes组件都是基于一致、开放的API实现和交互。第三方开发者可以通过CRD(Custom Resource Definition)/Operator等方式提供领域相关的扩展实现,极大地提升了Kubernetes的能力。
  • 可移植性:Kubernetes(K8s)通过Loadbalance Service(负载均衡服务)、CNI(容器网络接口)和CSl(容器存储接口)等抽象概念,帮助应用屏蔽了底层基础设施的实现差异。这样,业务应用就可以在容器间灵活迁移,实现设计目标的容器灵活性。

云原生微服务典型架构

自2011年以来,微服务架构理念已经演变出了四个典型的架构模式,按照它们出现的顺序进行归纳。

第一代微服务架构

除了实现业务逻辑外,应用程序还需要自己解决上下游寻址、通信和容错等问题。随着微服务规模的扩大,服务寻址逻辑变得越来越复杂。即便是同一编程语言的另一个应用程序,也需要重新实现上述微服务的基础能力。

第二代微服务架构

引入了旁路服务注册中心作为协调者,实现了服务的自动注册和发现。服务之间的通信和容错机制开始模块化,形成了独立的服务框架。然而,随着服务框架内功能的增加,不同语言的基础功能复用变得困难。这意味着微服务的开发者被限制在特定的编程语言上,违背了微服务的敏捷迭代原则。

第三代微服务架构

服务网格架构将原本被模块化到服务框架中的微服务基础能力进一步演进为一个独立进程,即Sidecar。这个变化彻底解决了第二代架构中的多语言支持问题,实现了微服务基础能力与业务逻辑的彻底解耦。这个架构被称为云原生时代的微服务架构,即Cloud Native Microservices。Sidecar进程接管了微服务应用之间的流量,承载了第二代架构中服务框架的功能,包括服务发现、调用容错以及丰富的服务治理功能,例如权重路由、灰度路由、流量重放和服务伪装等。

第四代微服务架构

在这个架构中,微服务进一步简化为微逻辑(Micrologic),边车模式也提出了更高的要求。更多可复用的分布式能力从应用中剥离,并下沉到边车中,包括状态管理、资源绑定、链路追踪、事务管理和安全等。同时,开发侧开始倡导面向localhost编程的理念,提供标准API来屏蔽底层资源、服务和基础设施的差异,从而进一步降低微服务开发的难度。这就是目前业界提出的多运行时微服务架构(Muti-Runtime Microservices)的概念。

未来的云原生架构 — Serverless

随着云原生技术(以Kubernetes为代表)在云计算中扮演着容器界面的角色,Kubernetes变成了新一代云计算操作系统。针对特定领域的后端云服务(BaaS)则提供了在这个操作系统上的服务API。在存储、数据库、中间件、大数据等领域,许多产品和技术都开始提供全托管的云服务。越来越多的用户已经习惯于使用这些云服务,而不再自行搭建存储系统或部署数据库软件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/325546.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

thinkphp学习04-控制器定义

控制器,即 controller,控制器文件存放在 controller 目录下; 如果想改变系统默认的控制器文件目录,可以在 config 下 route.php 配置: 将controller修改为controller123,就会报错,说明这个配置…

阿里云迁移AWS视频点播技术攻坚

文章目录 🐷 背景🦥 简述🐥 Aws服务🦜 AWS CloudFormation🐞 问题🐉 落地方案🦉 Aws vs Aliyun🍄 避坑指南 🐷 背景 由于AWS整体成本略低于阿里云,公司决定将…

用C语言实现完全平方数计算【一题一策】第三期

题目:一个整数,它加上100后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少? 一、题目分析 首先假设该数为x,则x100y?,y为完全平方数。 然后加上168又是一个完全平方数&…

密码学(一)

文章目录 前言一、Cryptographic Primitives二、Cryptographic Keys2.1 Symmetric key cryptography2.2 asymmetric key cryptography 三、Confidentiality3.1 Symmetric key encryption algorithms3.2 asymmetric key block ciphers3.3 其他 四、Integrity4.1 symmetric key s…

选择排序!!!基础排序详解 C语言版

目录 1.什么是选择排序 2.选择排序源代码 3.优化代码 1.什么是选择排序 这是一个选择排序的流程图,其实很简单,就是每次挑选数字中最小的作为第一个 ,直到整个数据有序就结束了 顾名思义,选择,那就是选取&#xff0c…

数据库期末重点

第一章: 1.数据库发展的三个阶段 第一代数据库系统、第二代数据库系统、新一代数据库系统 2.数据库系统发展的三个里程碑 IMS系统、DBTG报告、关系数据库系统 3.数据管理技术三个阶段 人工管理阶段(40年代中-50年代中) 文件系统阶段(50年代末-60年代中) 数据…

XD6500S一款串口SiP模块 射频LoRa芯片 内置sx1262

1.1产品介绍 XD6500S是一款集射频前端和LoRa射频于一体的LoRa SIP模块系列收发器SX1262 senies,支持LoRa⑧和FSK调制。LoRa技术是一种扩频协议优化低数据速率,超长距离和超低功耗用于LPWAN应用的通信。 XD6500S设计具有4.2 mA的有效接收电流消耗&#…

C++《异常》

前言:C有一套独立的异常处理机制,今天就来做详细的介绍try,catch这两个词等 在C语言中处理错误的方式和缺陷有: 返回错误码。 缺陷: 1.错误码不好设置,比如:除0操作,就不好返回错误码。如果返回一个数字&…

面试题:说一下Java开启异步线程的几种方法?

文章目录 整体描述实现方法一、注解Async1. 添加注解2. 创建异步方法Service和实现类3. 调用异步方法 二、AsyncManager1. 创建AsyncManager类2. 创建一个耗时的操作类3. 执行异步操作 三、线程池1. 创建线程池2. 创建一个耗时的操作类3. 执行线程池 总结 整体描述 在java中异…

算法每日一题:在链表中插入最大公约数 | 链表 | 最大公约数

hello,大家好,我是星恒 今天的题目是有关链表和最大公约数的题目,比较简单,核心在于求解最大公约数,我们题解中使用辗转相除法来求解,然后我们会在最后给大家拓展一下求解最大公约数的四个方法,…

技术学习|CDA level I 业务分析方法

业务分析方法有三个主要构成部分:业务指标分析、业务模型分析及业务分析方法。 业务指标分析是发现业务问题的核心方法:用于通用指标和场景指标的计算及分析方法,以及指标体系的设计与应用方法。业务模型是从一系列业务行为中抽象出来的信息…

箭头函数 - JavaScript的新宠儿

📢 鸿蒙专栏:想学鸿蒙的,冲 📢 C语言专栏:想学C语言的,冲 📢 VUE专栏:想学VUE的,冲这里 📢 CSS专栏:想学CSS的,冲这里 &#x1f4…