浅谈云原生--微服务、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 代理会采取以下操作:
- sidecar 拦截请求
- 它将请求封装在单独的网络连接中
- 它在源代理和目标代理之间建立安全的加密通道
sidecar 代理处理服务之间的低级消息传递。它们还会实施断路和请求重试等功能,以增强弹性并防止服务降级。服务网格功能(例如负载均衡、服务发现和流量路由)在数据面板中实现。
控制面板
- 控制面板是服务网格的中央管理和配置层。
- 管理员可以通过控制面板在网格内定义和配置服务。例如,指定服务端点、路由规则、负载均衡策略和安全设置等参数。定义配置后,控制面板将必要信息分发到服务网格的数据面板。
- 代理使用配置信息来决定如何处理传入的请求。它们还可以接收配置更改并动态调整其行为而无需重新启动或中断服务。
- 控制面板通常包括以下功能:
- 跟踪网格内所有服务的服务注册表
- 自动发现新服务并删除非活动服务
- 收集和聚合遥测数据,例如指标、日志和分布式跟踪信息
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. 哈佛总…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...