当前位置: 首页 > news >正文

浅谈云原生--微服务、CICD、Serverless、服务网格

往期推荐 

浅学React和JSX-CSDN博客

一文搞懂大数据流式计算引擎Flink【万字详解,史上最全】-CSDN博客

一文入门大数据准流式计算引擎Spark【万字详解,全网最新】_大数据 spark-CSDN博客

目录

1. 云原生概念和特点

2. 常见云模式

3. 云对外提供服务的架构模式

3.1 IaaS(Infrastructure-as-a-Service)

3.2 PaaS(Platform-as-a-Service)

3.3 SaaS(SoftWare-as-a-Service)

3.4 FaaS(Function-as-a-Service)

4. 云原生核心技术栈

4.1 微服务

4.2 容器技术-Docker、K8s

4.3 DevOps&CICD

4.4 Serverless

4.5 不可变基础设施

4.6 声明式API

4.7 Service Mesh(服务网格)

4.7.1 服务网格如何工作

4.7.2 服务网格优点 

4.7.3 服务网格架构

数据面板

控制面板

4.7.4 服务网格和k8s

4.7.5 服务网格面临的挑战

4.7.6 Istio


 

介绍云原生之前,我们先介绍一下CNCF,全称为Cloud Native Computing Foundation,中文译为“云原生计算基金会”。CNCF致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。所以说,CNCF是云原生领域影响力最大最有话语权的组织。以下是CNCF对云原生的定义:

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

1. 云原生概念和特点

  • 概念
    • 云原生是一种构建和运行应用程序的方法,程序生于云端,长于云端从有构建应用的想法开始,到需求、设计、开发、测试、构建、打包、部署所有的软件生命周期全部都在云平台上面进行,从应用设计之初(技术选型、架构设计、编译机制)就充分考虑并符合了云的特征,在云平台以最佳姿态原型、为企业降本增效。
  • 特点
    • 弹性扩缩容:本地部署的传统应用无法动态扩展,往往需要冗余资源以抵抗流量高峰,而云原生应用利用云的弹性自动伸缩,应用程序快速复制扩展、部署。
    • 快速启停:应用程序可以快速启停以应对流量变化
    • 隔离性强:进程级别的故障隔离
    • CICD:持续集成、持续交付、持续部署

2. 常见云模式

  • 公有云
    阿里云、华为云、腾讯云、百度云等等,只需购买就能使用
  • 私有云
    自己搭建或购买的私有平台,使用对象通常是政府、金融机构和企业
  • 混合云:混合云的优缺点 | IBM
  • 行业云

3. 云对外提供服务的架构模式

3.1 IaaS(Infrastructure-as-a-Service)

基础设施即服务

向外提供硬件资源等基础设施,包括计算、存储、网络等等,用户可以基于基础设施进行上层应用开发部署。

3.2 PaaS(Platform-as-a-Service)

平台即服务

向外提供平台组件服务,如操作系统、数据库

3.3 SaaS(SoftWare-as-a-Service)

软件即服务

直接向外提供一款成品应用型服务,屏蔽了用户对软件底层的基础设施,用户只需要拿来使用即可。如钉钉、企业微信

3.4 FaaS(Function-as-a-Service)

功能即服务

https://www.ibm.com/cn-zh/topics/faas

FaaS是一种云计算服务,专注于事件驱动,在有请求时自动启动服务,没有时自动关闭服务。

Serverless和FaaS经常被混为一谈,我认为 FaaS算是无服务器的子集

无服务器专注于所有服务类别,无论是计算、存储、数据库、消息传递还是 API 网关等。其中服务器的配置、管理和计费对最终用户不可见,用户只需要对服务按需付费即可

4. 云原生核心技术栈

4.1 微服务

  • 单体架构:把业务所有功能集中在一个项目中开发,以整个系统为单位进行部署,这种架构简单,如果某一业务的请求量非常大,那么是无法单独扩展该业务的,只能拷贝整个单体应用,再部署一套环境,来实现集群。
  • 微服务架构:根据业务把整个项目划分成多个功能模块,比如订单模块、购物车模块、支付模块、商品详情模块等等,模块之间通过http或者RPC进行通信。这种架构降低了服务耦合,有利于服务扩展,同时每个服务模块实现了故障隔离,提高了可用性

SpringCloud就是微服务中具有代表性的一个技术栈。

4.2 容器技术-Docker、K8s

所谓容器,对操作系统(通常为 Linux)进行虚拟化,具有比虚拟机更高的可移植性和资源效率,可以解决环境差异带来的部署等问题。

我们把单体项目拆成了微服务,各个微服务模块所需的部署环境可能大不相同,那么不妨把每个微服务模块放到容器中,这个容器包含了服务模块运行所需的除操作系统内容以外所需的函数、配置、依赖等,类似exe安装包,这就不仅解决了环境差异带来的应用部署问题,而且各个容器之间实现进程隔离,容器启动速度也更快

以Docker容器为资源分割和调度的基本单位,封装整个软件运行时的环境,然后发布到Linux机器上。 

按照Docker的设计方案,应用软件的交付过程如同海上运输,操作系统如同一个货轮,操作系统上的软件都如同一个集装箱。用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,然后使用k8s编排管理容器的生命周期。如此一来,交付一个应用软件产品,就相当于交付一系列标准化组件的集合。

4.3 DevOps&CICD

Development和Operations,即开发运维一体化,涉及软件在整个开发生命周期中的持续开发,持续测试,持续集成,持续部署和持续监控。简单来说是开发和运维之间地高度协同,实现全生命周期的工具全链路打通与自动化、跨团队的线上协作能力。完成高频率部署的同时,提高生产环境的可靠性、稳定性、弹性和安全性。

CI:持续集成

  • 持续集成:开发团队通过将代码的不同部分通过版本控制系统集成到共享存储库中,系统可以自动频繁地进行构建和测试,以确保代码的一致性和稳定性。,一定程度上避免代码冲突和重复劳动。

CD:持续交付、持续部署

  • 建立在持续集成的基础上,持续交付后的代码处于待发布状态,系统随时可以自动快速地部署到生产环境中,确保应用始终是最新的,支持频繁变更和金丝雀发布。代表产品有阿里云的Serverless应用引擎SAE。Serverless 应用引擎SAE_应用托管服务_零代码改造上云_容器与中间件-阿里云

4.4 Serverless

Serverless 是什么?无服务器架构简介-红帽

一文读懂 Serverless 的起源、发展和落地实践-阿里云开发者社区

  • Serverless并不是不需要服务器,而是将服务器全权托管给了云厂商,用户聚焦业务代码,无需关心管理服务器,只用把业务部署到平台的容器上,服务器能自动进行弹性伸缩,这些容器在被调用时会自动按需启动

4.5 不可变基础设施

在传统的可变服务器基础架构中,开发人员操作服务器,手动升级或降级软件包,逐个服务器地调整配置文件,服务器会不断更新和修改。

可变基础设施通常会导致以下问题:

持续的修改服务器,缺乏标准,易引入不稳定因素,会导致灾难发生后很难重新构建起等效的新服务。

而不可变基础设施,最基本的指运行服务的服务器在完成部署后,就不在进行更改,如果配置发生了改变就会生成新的容器,旧容器直接销毁。这就保证了基础架构中更高的一致性和可靠性,以及更简单,更可预测的部署过程。这样云原生就有了稳定的基石!

4.6 声明式API

  • 在命令式 API 中,我们可以直接发出服务器要执行的命令,例如: “运行容器”、“停止容器”等。通俗的说,命令式编程是第一人称,我要做什么,我要怎么做。操作系统最喜欢这种编程范式了,操作系统几乎不用“思考”, 只要一对一的将代码翻译成指令就可以了。
  • 在声明式API中,我们声明系统要执行的操作,系统将不断向该状态驱动。声明式编程类似于“第二人称”, 也就是你要做什么,这有点“”产品经理”和“开发”之间的关系,“产品经理”只负责提需求,而“开发”怎么实现的,他并不关心

4.7 Service Mesh(服务网格)

为什么使用服务网格

  • 应用程序性一定程度上能取决于服务之间通信的速度和弹性。开发人员必须跨服务监控和优化应用程序,但由于系统的分布性质,他们很难获得可见性,在没有服务网格层时,开发人员把服务间的通信逻辑编码到每个服务中,当应用程序越来越大并且在同一个服务上同时运行多个实例时,微服务之间通信将会变得愈发复杂,业务代码和非业务代码糅合在一起。
  • Service mesh可以处理应用程序中服务之间的所有通信,同时提供了监控、记录、跟踪和流量控制等新功能。

4.7.1 服务网格如何工作

服务网格从单个服务中提取控制服务间通信的逻辑,并抽象到自己的基础设施层(如Istio)。它使用多个网络代理来路由和跟踪服务之间的通信。

代理充当组织网络和微服务之间的中间网关。所有进出该服务的流量都通过代理服务器路由。代理有时被称为 sidecar(直译为边车),sidercar和微服务块并行运行,这些代理一起构成了服务网格层。
 

下面的网格中,绿色是一个个微服务,代表不同的功能模块,蓝色就是每个微服务的代理他们从绿色的微服务中提取出来下沉到Istio等设施,负责服务间的通信、监控等。

4.7.2 服务网格优点 

  • 服务发现
    服务网格使用服务注册表来动态发现和跟踪网格中的所有服务,减少管理服务端点的运维负担。
  • 负载均衡
    服务网格使用各种算法(例如循环算法、最少连接或加权负载均衡)在多个服务实例之间智能地分配请求。负载均衡可提高资源利用率并确保高可用性和可扩展性。
  • 流量管理
    服务网格提供高级流量管理功能,可对请求路由和流量行为进行精细控制。
  • 流量分割
    将传入流量划分到不同的服务版本或配置中。网格将一些流量引导到更新后的版本,从而以受控方式逐步推出变更。这样可以实现平稳过渡,并最大限度地降低变更的影响。
  • 安全性
    服务网格提供安全通信功能,例如双向 TLS加密、身份验证和授权。
  • 监控
    服务网格提供全面的监控和可观测性功能,可深入了解服务的运行状况、性能和行为。监控还支持故障排除和性能优化。

4.7.3 服务网格架构

服务网格架构中有两个主要组成部分:控制面板和数据面板。

数据面板

数据面板是服务网格的数据处理组件。它包括所有 sidecar 代理及其功能。当一个服务想要与其他服务通信时,sidecar 代理会采取以下操作:

  1. sidecar 拦截请求
  2. 它将请求封装在单独的网络连接中
  3. 它在源代理和目标代理之间建立安全的加密通道

sidecar 代理处理服务之间的低级消息传递。它们还会实施断路和请求重试等功能,以增强弹性并防止服务降级。服务网格功能(例如负载均衡、服务发现和流量路由)在数据面板中实现。

控制面板
  • 控制面板是服务网格的中央管理和配置层。
  • 管理员可以通过控制面板在网格内定义和配置服务。例如,指定服务端点、路由规则、负载均衡策略和安全设置等参数。定义配置后,控制面板将必要信息分发到服务网格的数据面板。
  • 代理使用配置信息来决定如何处理传入的请求。它们还可以接收配置更改并动态调整其行为而无需重新启动或中断服务。
  • 控制面板通常包括以下功能:
    1. 跟踪网格内所有服务的服务注册表
    2. 自动发现新服务并删除非活动服务
    3. 收集和聚合遥测数据,例如指标、日志和分布式跟踪信息

4.7.4 服务网格和k8s

k8s“服务”资源是简化的service mesh,它提供服务发现和请求的轮询调度均衡。完整的service mesh则提供更丰富的功能,如管理安全策略和加密、“断路”以暂停对缓慢响应的实例的请求以及如上所述的负载均衡等。 服务网格本质上是微服务治理,把服务治理,服务通讯,服务安全,服务监控等逻辑从业务逻辑代码中提取出来形成代理并下沉到istio等基础设施中,如下图:

4.7.5 服务网格面临的挑战

  • 复杂性
    服务网格引入了其他基础设施组件、配置要求和部署注意事项,有一定的学习难度。
  • 运维管理费用
    服务网格会带来部署、管理和监控数据面板代理和控制面板组件的额外开销。例如:
    • 确保服务网格基础设施的高可用性和可扩展性
    • 监控代理的运行状况和性能
    • 处理升级和兼容性问题
    • 必须仔细设计和配置服务网格,以最大限度地减少对整个系统的性能影响。
  • 集成挑战
    • 服务网格必须与现有基础设施无缝集成,才能执行其所需的功能。这包括容器编排平台、网络解决方案和技术堆栈中的其他工具。

4.7.6 Istio

Istio / 文档

Istio 是一个开源服务治理框架。Istio 的控制面板组件本身作为k8s 工作负载运行。它使用k8s 容器组(一组共享一个 IP 地址的紧密耦合的容器)作为 sidecar 代理设计的基础。提供了服务发现、负载均衡、路由、限流、链路监控、通信加密。

相关文章:

浅谈云原生--微服务、CICD、Serverless、服务网格

往期推荐 浅学React和JSX-CSDN博客 一文搞懂大数据流式计算引擎Flink【万字详解,史上最全】-CSDN博客 一文入门大数据准流式计算引擎Spark【万字详解,全网最新】_大数据 spark-CSDN博客 目录 1. 云原生概念和特点 2. 常见云模式 3. 云对外提供服务的…...

android app执行shell命令视频课程补充android 10/11适配-千里马android

(https://blog.csdn.net/learnframework/article/details/120103471) https://blog.csdn.net/learnframework/article/details/120103471 hi,有学员在学习跨进程通信专题课程时候,在实战app执行一个shell命令的项目时候,对课程本身的android …...

C++笔记-UTF8和UTF8-dom的区别

在文件格式上,UTF-8 和 UTF-8-BOM 是两种不同的编码方式,其中 UTF-8-BOM 包含字节顺序标记(BOM),而 UTF-8 则不包含。 UTF-8: UTF-8 是一种以字节为单位的可变长度字符编码,常用于以字节为单位…...

“探索Adobe Photoshop 2024:订阅方案、成本效益分析及在线替代品“

设计师们对Adobe Photoshop这款业界领先的图像编辑软件肯定不会陌生。如果你正考虑加入Photoshop的用户行列,可能会对其价格感到好奇。Photoshop的价值在于其强大的功能,而它的价格也反映了这一点。下面,我们就来详细了解一下Adobe Photoshop…...

网页复制粘贴助手,Chrome网页复制插件(谷歌浏览器复制插件)

一款解决网页限制复制问题的插件,当你遇到限制复制粘贴和右键的网页是不是很头痛?安装这个插件后,点下插件按钮就能解决了 碰到这种情况 也是非常头疼 chrome拓展-chrome插件-强制复制 当我们浏览网页的时候,看到感兴趣的内容就…...

【C++刷题】力扣-#118-杨辉三角

题目描述 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它正上方两个数的和。 示例 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]]题解 这个问题…...

Linux下的环境变量

目录 1.引言 1.1bash的部分工作 1.2main函数也有参数 1.3我们可以通过给main函数传入不同的参数,让同一份代码实现不同的功能 1.4先认识一个环境变量PATH,帮助Linux找到指令程序的地址 2.环境变量 2.1环境变量的概念 2.2见见其他的环境变量 2…...

Edge论文的创新点

创新点及其来源 1. 从灰度边缘重建RGB图像的方法(EdgRec) 基于的方法:传统的重建方法,如使用自动编码器或生成模型来重建正常样本的图像,并通过对原始图像和重建图像的比较来检测异常。 重建过程: 训练阶…...

‌ComfyUI 高级实战:实现华为手机的AI消除功能

大家好,我是每天分享AI应用的萤火君! 不知道大家是否还记得华为 Pura 70的「AI消除」事件,当时使用 华为Pura 70 系列手机的智能消除功能时,该功能可以被用来消除照片中女性胸口处的衣物,这一功能曾引发广泛的关注和伦…...

我记得我曾喜欢过冬天

写在前面 1316 字 | 感触 | 世界 | 情感 | 体验 | 经历 | 想法 | 认知 正文 晚上出门,起电单车,很冷。冻得有些发抖。下车,我第一时间和珍发了消息。 我说,居然在四川感受到了哈尔滨的温度。 哈尔滨的夏天很热,但哈尔…...

最新夜间数据集发布LoLI-Street: 33000帧数据,涵盖19000个目标

最新夜间数据集发布LoLI-Street: 33000帧数据,涵盖19000个目标 Abstract 低光照图像增强(LLIE)对于许多计算机视觉任务至关重要,包括目标检测、跟踪、分割和场景理解。尽管已有大量研究致力于提高在低光照条件下捕捉的低质量图像…...

反向传播算法与随机搜索算法的比较

反向传播算法与随机搜索算法的比较 在这篇文章中,我们将通过一个简单的线性回归问题来比较反向传播算法和随机搜索算法的性能。我们将使用Python代码来实现这两种算法,并可视化它们的梯度下降过程。 反向传播算法 反向传播算法是深度学习和神经网络训…...

【PDF文件】默认被某种软件打开,如何进行修改?

当有时下载某种软件后,电脑中的PDF文件就默认由该种软件打开,每次需要右键选择打开方式才能选择需要的其他软件打开。如下图所示。 修改方法: (1)点击电脑的“设置”,选择应用 (2)…...

Kaggle Python练习:字符串和字典(Exercise: Strings and Dictionaries)

文章目录 问题:搜索特定单词并定位思路代码实现官方代码代码解析 更进一步 问题:搜索特定单词并定位 一位研究人员收集了数千篇新闻文章。但她想将注意力集中在包含特定单词的文章上。完成以下功能以帮助她过滤文章列表。 您的函数应满足以下条件&…...

React(四) 事件总线,setState的原理,PureComponent优化React性能,ref获取类组件与函数组件

文章目录 一、全局事件总线二、setState的原理1. 为什么要使用setState修改数据2. setState的三种用法(1) 基本使用(2) 传入回调函数(3) setState是一个异步调用 3. setState为什么要设置成异步 二、PureComponent优化性能1. React的diff算法以及Key的优化(扩展)(1) diff算法(2…...

Java学习-JVM

目录 1. 基本常识 1.1 JVM是什么 1.2 JVM架构图 1.3 Java技术体系 1.4 Java与JVM的关系 2. 类加载系统 2.1 类加载器种类 2.2 执行顺序 2.3 类加载四个时机 2.4 生命周期 2.5 类加载途径 2.6 双亲委派模型 3. 运行时数据区 3.1 运行时数据区构成 3.2 堆 3.3 栈…...

leed认证分几个级别

LEED(Leadership in Energy and Environmental Design)认证是一个评估建筑项目可持续性的严格框架,其级别主要分为以下四个: LEED认证(Certified):这是最低级别的认证,要求建筑项目…...

3.C++经典实例-计算一个数的阶乘

阶乘(factorial)是‌基斯顿卡曼于1808年发明的运算符号,用于表示一个正整数n的所有小于及等于该数的正整数的积。自然数n的阶乘写作n!。例如,5的阶乘表示为5! 1 2 3 4 5 120。 阶乘在数学和计算机科学中有广泛的应用。例如…...

深入理解Qt中的QTableView、Model与Delegate机制

文章目录 显示效果QTableViewModel(模型)Delegate(委托)ITEM控件主函数调用项目下载在Qt中,视图(View)、模型(Model)和委托(Delegate)机制是一种非常强大的架构,它们实现了MVC(模型-视图-控制器)设计模式。这种架构分离了数据存储(模型)、数据展示(视图)和数据操作(委托),使…...

解读《ARM Cortex-M3 与Cortex-M4 权威指南》——第1章 ARM Cortex-M处理器简介

1. 三级流水线设计 解释:三级流水线设计意味着处理器在执行指令时可以同时处理多个步骤。这些步骤通常包括取指(Fetch)、译码(Decode)和执行(Execute)。好处:这种设计提高了指令的执行效率,使得处理器能够在每个时钟周期内完成更多的工作,从而提升整体性能。2. 哈佛总…...

java集合类的框架体系

1.集合的好处 相比数组,他可以存储多种类型的元素,并且可以动态新增; 2. 集合分类 3.Collection接口 3.1常用方法 3.2迭代器-遍历 collection接口继承了Interable接口,collection的子类可以使用迭代器; 注意事项…...

基于SpringBoot+Vue+Uniapp家具购物小程序的设计与实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而…...

什么是模糊测试?

近年来,随着信息技术的发展,各种新型自动化测试技术如雨后春笋般出现。其中,模糊测试(fuzz testing)技术开始受到行业关注,它尤其适用于发现未知的、隐蔽性较强的底层缺陷。这里,我们将结合AFL开…...

3.C++经典实例-奇数还是偶数

要判断一个数是奇数还是偶数,只需要判断这个数是否能被2整除即可,如果要判断是否能整除,则要判断当前数除以2的余数是否为0,在C中,余数,使用%号,因此,程序为: #include …...

真牛啊!全球人工智能标准教科书,斯坦福、麻省理工、加州大学等十多所顶尖机构为它点赞!!

这本《人工智能:计算代理基础》堪称全球人工智能标准教科书!它因其前沿的技术融合、丰富的实践案例以及理论深度与实践并重的特点而成为人工智能领域的热门书籍。 该书已经赢得了斯坦福大学、佐治亚理工学院、谷歌大脑、麻省理工学院、加州大学、微软研究…...

Android——通过MediaStore查询图片

查询图片: private void loadImageList() {String[] columns new String[]{MediaStore.Images.Media._ID, // 编号MediaStore.Images.Media.TITLE, // 标题MediaStore.Images.Media.SIZE, // 文件大小MediaStore.Images.Media.DATA, // 文件路径};Cursor cursor g…...

手写Spring IOC-简易版

目录 项目结构entitydaoIUserDaoUserDaoImpl serviceIUserServiceUserServiceImpl ApplicationContext 配置文件初始化 IOC 容器RunApplication 注解初始化 IOC 容器BeanAutowired Reference 项目结构 entity User Data NoArgsConstructor AllArgsConstructor Accessors(chai…...

【算法题】62. 不同路径(LeetCode)

【算法题】62. 不同路径(LeetCode) 1.题目 下方是力扣官方题目的地址 62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图…...

【VUE】Vue中的data属性为什么是一个函数而不是一个对象

在 Vue.js 中,组件的 data 属性可以是一个对象或者一个函数但通常建议将其设置为函数。这是因为组件可能会被多次使用,如果 data 是一个普通对象,那么该对象会被所有实例共享,导致数据混乱。将 data 设置为一个函数可以保证每个组…...

ddos攻击介绍和排查方法

一、DDoS攻击介绍 DDoS攻击,全称为分布式拒绝服务攻击(Distributed Denial of Service Attack),是一种常见的网络攻击手段。它通过利用多个计算机系统向目标服务器、服务或网络发送大量请求,导致目标无法处理正常流量…...