从零开始,轻松理解云原生的核心概念和关键技术

文章目录

  • 前言
  • 一. 云原生的介绍
    • 1.1 什么是云原生
    • 1.2 云原生的特征
    • 1.3 云原生的历史和发展进程
  • 二. 与云原生相关的产品和分类
    • 2.1 云原生的技术分类
    • 2.2 常用的服务和应用
      • 2.2.1 应用定义和构建
      • 2.2.2 CI/CD 持续交付和持续集成
      • 2.2.3 调度和编排
      • 2.2.4 API网关
      • 2.2.5 服务网格
      • 2.2.6 云原生存储
      • 2.2.7 容器运行时
      • 2.2.8 容器仓库
      • 2.2.9 监控
      • 2.2.10 日志
      • 2.2.11 分布式追踪
      • 2.2.12 混沌工程
  • 参考资料

前言

一. 云原生的介绍

1.1 什么是云原生

先看网上的概念,一分钟把你搞懵逼的那种:

云原生是一种软件架构和运维模式,旨在使应用程序更快,更可靠,更灵活。简单来说,云原生是将应用程序打包为容器,并通过自动化部署和管理这些容器的方式来实现高度可伸缩和可靠性的现代化方法

在上面的概念中我们提取到了三个信息

  1. 云原生应用程序通常是由许多小型服务组成,每个服务都只关注特定的功能。这些服务被打包到称为“容器”的封闭环境中,容器可以在任何地方运行,因为它们不依赖于底层系统。

  2. 云原生应用程序部署和管理是自动化的,这意味着开发人员可以使用工具来自动构建,测试和部署应用程序,而不必手动干预。自动化还包括自动扩展和自动恢复,以确保应用程序在高负载和故障情况下保持可靠性。

  3. 云原生应用程序是可观察的,这意味着开发人员和运维人员可以实时监控应用程序的健康状况和性能,以便及时发现和解决问题。

云原生的核心思想:将应用程序打包为容器,并通过自动化来实现高度可伸缩和可靠性的现代化方法

云原生计算基金会也提供了官方定义:

云原生技术使组织能够在新式动态环境(如公有云、私有云和混合云)中构建和运行可缩放的应用程序。 容器、服务网格、微服务、不可变基础结构和声明性 API 便是此方法的范例。

这些技术实现了可复原、可管理且可观察的松散耦合系统。 它们与强大的自动化相结合,使工程师能够在尽量减少工作量的情况下,以可预测的方式频繁地进行具有重大影响力的更改。

现如今互联网产品的发展,从实现业务功能到加快业务速度和增长,在实现业务功能阶段,一个运维只需要会基本的安装部署即可,但到了业务快速增长阶段, 版本迭代需求增加,业务系统也越来越复杂,用户要求越来越高。

比如以前的用户打开网站,一分钟打不开都觉得正常,现在三秒钟打不开就觉得卡顿, 一旦用户觉得你的网站反应迟钝,反复报错等,就会立即投入到竞争对手的网站。

所以云原生解决的问题,就是支持快速更改,大规模无感知操作和快速复原能力。

比如某信聊天软件,在生产环境近4000多种服务,每天部署超过了1000次,再用传统的方式就显得力不从心。

1.2 云原生的特征

云原生有一种被被广泛认可的用于构建基于云的应用程序的方法,开发人员在构建针对新式云环境进行优化的应用程序时需要遵循这些内容。 其中特别关注了跨环境的可移植性和声明性自动化。

这个就是十二要素应用程序,我们一起来看一下:

要素介绍
基准代码每个微服务都有单个基本代码,存储在其自己的存储库中。 它通过版本控制进行跟踪,可以部署到多个环境(QA、暂存、生产)。一份基准代码,多份部署(用同一个代码库进行版本控制,并可进行多次部署)。
依赖显式地声明和隔离相互之间的依赖,每个微服务都隔离并打包其自己的依赖项,以在不影响整个系统的情况下进行更改。
配置配置信息通过代码之外的配置管理工具移出微服务和实现外部化。 在应用了正确配置的情况下,相同部署可以在环境间传播。
支持服务辅助资源(数据存储、缓存、消息中转站)应通过可寻址 URL 进行公开。 这样做可使资源与应用程序分离,使其可以互换。
构建,发布,运行对程序执行构建或打包,并严格分离构建和运行,每个版本都必须在生成、发布和运行阶段执行严格的分离。 各自都应使用唯一 ID 进行标记,并支持回滚功能。 新式 CI/CD 系统有助于实现此原则
进程每个微服务应在其自己的进程中执行,与其他正在运行的服务隔离。 将所需状态外部化到支持服务,如分布式缓存或数据存储。。
端口绑定每个微服务都应是独立的,其接口和功能在自己的端口上公开。 这样做可与其他微服务隔离。
并发当容量需要增加时,跨多个相同进程(副本)横向扩展服务,而不是在功能最强大的可用计算机上纵向扩展单个大型实例。 将应用程序开发为并发应用程序,从而无缝地在云环境中横向扩展。
易处理服务实例应是可处置的。 支持快速启动以增加可伸缩性机会,以及支持正常关闭以使系统保持正确状态。 Docker 容器以及业务流程协调程序本质上满足此要求
开发环境与线上环境等价尽可能的保持开发,预发布,线上环境相同。
日志记录将所有运行中进程和后端服务的输出流按照时间顺序统一收集存储和展示。
管理进程以一次性进程形式运行管理性/管理任务,例如数据清理或计算分析。 使用独立工具从生产环境调用这些任务,但独立于应用程序。

云原生最核心的特征:

  • 云原生可以提高资源效率,用更少的服务器运行同样数量的服务,同样的服务器运行更多的服务;

  • 云原生基础设施建设可以提高整个开发速度,同时还能降低风险;

  • Kubernetes 打通了所有云厂家的资源,使用户可以利用不同云厂商的基础建设无缝地运行应用;

  • 云原生架构使“更快部署”成为可能,几个月的部署时间可以减少到几分钟。

1.3 云原生的历史和发展进程

2000 年以前,当时流行的技术是以 Sun 公司为代表的非虚拟化技术,在需要运行应用时,首先要购买物理服务器,然后在服务器上运行它。

  • 2001年 VMware技术普及,可以实现在一台物理机上运行多个虚拟机。

  • 2006年 IAAS 诞生,AWS 创建了以 EC2 服务器为代表的云计算和弹性计费的方式,用户在使用的时候可以按小时付费,AMI(Amazon Machine Image)镜像成为了程序打包和运行的普遍方式。

  • 2009 年,PaaS(平台即服务)诞生

  • 2010 年,IaaS 层的开源方案 OpenStack 诞生了,它由 AWS 和 VMWARE 完成,至今 OpenStack 在私有云的市场仍然是非常流行的解决方案。2011 年,Cloud Foundry 发布了开源的 PaaS 解决方案,它是 Heroku 的开源替代方案。

  • 2013 年docker诞生,Docker 整合了 LXC、联合文件系统和 cgroups 技术并创建了一个容器化标准,改变了应用的构建,分享和交付。

  • 2015年12月 CNCF成立

CNCF 成立于 2015 年 12 月,它是 Linux 基金会的一部分。在成立之初,CNCF 得到了 Google 和 SoundCloud 的支持,这两家公司分别捐赠了著名的 Kubernetes 以及 Prometheus,在当时,一并作为会员加入 CNCF 的企业还有:Cisco、CoreOS、Docker、Google、华为、IBM、Intel 和 Redhat 等。

开源项目是 CNCF 的核心资产,比如著名的 Kubernetes、etcd 和 Helm 等项目都是 CNCF 的托管项目。托管项目来自厂商的捐赠,捐赠内容包括源码、商标和网站等和项目相关的内容。

为了区分成熟度,CNCF把项目分为三个部分:

  • Sandbox(沙箱阶段)
  • Incubating(孵化阶段)
  • Graduated(毕业阶段)

当一个项目被捐赠时,会首先进入到沙箱阶段,之后开始试用,等达到一定的人数和规模后会进入孵化近段,最后到毕业阶段,这是一个层层筛选的过程。

毕业的项目中,有我们常见的k8s,prometheus等。

CNCF的职业认证:

  • CKA:Kubernetes 管理员认证
  • CKAD:Kubernetes 开发者认证
  • CKS:Kubernetes 安全认证
  • KCNA:Kubernetes 管理员助理认证
  • PCA:Prometheus 管理员认证
  • KCSA:Kubernetes 安全助理认证

二. 与云原生相关的产品和分类

2.1 云原生的技术分类

  1. 数据库(Database)
  2. 数据流和消息(Streaming & Messaging);
  3. 应用定义和镜像构建(Application Definition & Image Build);
  4. 持续集成和持续交付(Continuous Integration & Delivery);
  5. 调度和编排(Scheduling & Orchestration);
  6. 协调和服务发现(Coordination & Service Discovery);
  7. 远程调用(Remote Procedure Call);
  8. 服务代理(Service Proxy);
  9. API 网关(API Gateway);
  10. 服务网格(Service Mesh);
  11. 云原生存储(Cloud Native Storage);
  12. 容器运行时(Container Runtime);
  13. 云原生网络(Cloud Native Network);
  14. 自动化和配置(Automation & Configuration);
  15. 容器仓库(Container Registry);
  16. 安全与合规(Security & Compliance);
  17. 秘钥管理(Key Management);
  18. 监控(Monitoring);
  19. 日志(Logging);
  20. 分布式追踪(Tracing);
  21. 混沌工程(Chaos Engineering);
  22. 持续优化(Continuous Optimization)。

2.2 常用的服务和应用

上面的22项,不需要全部都研究,我们重点学习和研究以下几个方向,后期的文章更新也是在这几个方向上:

2.2.1 应用定义和构建

云原生应用以及构建容器镜像上,例如应用编写、打包、测试、安装和升级。主要有以下几个:

  • helm
  • Buildpacks
  • KubeVela
  • Nocalhost
  • Telepresence
  • Manifest
  • Dockerfile

2.2.2 CI/CD 持续交付和持续集成

  • ArgoCD
  • FluxCD
  • Tekton
  • Spinnaker
  • jenkins
  • Gitlab CI

对于大部分 Kubernetes 业务应用来说,持续集成主要的功能是自动化测试和构建镜像,持续部署主要的功能是将应用部署到 Kubernetes。这样的话, Tekton(CI) + ArgoCD(GitOps) 的搭配就是一个不错的选择,

当部署环境涉及多云以及混合的运行环境时,例如, Kubernetes 应用和 VM 应用共存时,可以考虑使用 Spinnaker。

2.2.3 调度和编排

这个方向聚焦在容器调度和基础设施的编排上,例如跨集群调度和管理容器。主要的产品包括 Kubernetes 和 Crossplane

  • kubernetes
  • Nomad
  • Docker-commpose
  • Terraform
  • CrossPlane

2.2.4 API网关

这个方向聚焦在基于 Kubernetes 的 API 网关上,主要的产品有下面几类:

  • Emissary-ingress
  • Ingress-nginx
  • Traefik
  • Kong
  • Apisix

Ingress-nginx 和 Traefik-ingress 是项目中比较常用的 API 网关。

2.2.5 服务网格

服务网格是一种管理服务之间通信的工具,为了简化服务之间的通信和管理,许多开源产品提供了服务网格的实现。以下是一些常见的服务网格开源产品:

  • Istio:Istio是Google、IBM和Lyft等公司开发的开源服务网格项目,支持Kubernetes和其他容器平台,并提供流量管理、服务间认证、安全等功能。

  • Linkerd2:Linkerd是由Buoyant公司开发的轻量级服务网格项目,基于Kubernetes和Docker等容器平台,提供负载均衡、故障转移、监控等功能。

  • Consul:Consul是HashiCorp公司开发的开源服务发现和配置管理工具,同时也支持服务网格功能,提供负载均衡、服务间认证、流量管理等功能。

  • Envoy:Envoy是由Lyft公司开发的开源高性能代理服务器,可用于服务网格的数据面,支持多种协议和平台。

  • Maesh:Maesh是由Containous公司开发的轻量级服务网格项目,基于Kubernetes和Docker等容器平台,提供负载均衡、流量管理、服务间认证等功能。

服务网格能够以无侵入的方式为服务调用提供可观察性、流量管理和安全性等方面的支持。在我们最关注的流量管理方面,服务网格可以无侵入实现服务熔断和降级、金丝雀和灰度发布、访问速率控制、加密以及端到端的身份验证。

2.2.6 云原生存储

这一方向聚焦在 Kubernetes 的存储解决方案,也就是提供持久卷的存储能力上。主要的产品有 Rock、 Longhorn 和 Velero,ceph

  • Kubernetes本地存储:Kubernetes本地存储是Kubernetes官方提供的一种轻量级、快速的存储解决方案,通过提供空间卷和持久化卷两种模式,为应用程序提供了本地磁盘和网络存储两种类型的数据存储支持。

  • Rook:Rook是一个开源的云原生存储编排框架,支持多种存储类型,包括Ceph、EdgeFS、Minio、NFS等,可以与Kubernetes无缝集成,提供数据可靠性、高可用性和灵活性等功能。

  • OpenEBS:OpenEBS是一个开源的云原生存储解决方案,支持多种存储引擎,包括ZFS、Ceph、Local PV等,可与Kubernetes、OpenShift等容器平台无缝集成,提供高性能、可靠性和灵活性等功能。

  • Longhorn:Longhorn是一个开源的云原生分布式块存储解决方案,支持Kubernetes、Rancher等容器平台,提供高性能、高可靠性、动态扩展等功能,同时也提供了快照、备份和恢复等数据管理功能。

  • Portworx:Portworx是一个开源的云原生存储解决方案,支持Kubernetes、Mesos等容器平台,提供高性能、高可靠性、动态扩展等功能,同时也提供了快照、备份和恢复等数据管理功能。

2.2.7 容器运行时

容器运行时是 Kubernetes 执行容器化动作的软件,主要有:

  • Containerd
  • CRI-O
  • Kata-Containers
  • gVisor

2.2.8 容器仓库

这个方向聚焦在为镜像提供推送、存储和下载功能。主要的产品有 Harbor 和 Dragonfly2。

容器仓库本质上是一组 Web API 接口,它允许容器运行时推送、查找和下载容器镜像

2.2.9 监控

该方向聚焦在为 Kubernetes 提供监控指标采集、查询和可视化服务上,主要的产品有 Prometheus、 Thanos 和 Grafana。

在云原生监控方向,Prometheus + Grafana 已经成为非常流行的开源技术选型方案。要快速搭建它们相对容易,但要长期使用的话,这个方案对运维要求还是比较高的,尤其是要面对 Prometheus 的大规模集群和持久化的后端存储方面的挑战。

2.2.10 日志

日志方向主要聚焦在为 Kubernetes 应用提供日志采集、存储和分析功能,主要产品有 Fluentd 和 Loki。

日志方向有不少开源的技术选型,例如我们常见的 EFK 技术栈。EFK 由 Elasticsearch、Fluentd 和 Kibana 组成,其中,Elasticsearch 主要负责存储日志和查询分析,Fluentd 作为 Agent 负责采集日志信息并将日志发送到 Elasticsearch 中存储,Kibana 则作为展示查询结果的 UI 界面。

在一些中小型的应用场景中,Loki 是一个更流行的选择。特别是对于已经采用 Prometheus 作为监控的团队来说,Prometheus + Loki + Grafana 可以一次性解决监控和日志问题。

2.2.11 分布式追踪

该方向致力于为 Kubernetes 应用提供分布式调用链追踪能力。主要产品有 Jaeger、 Skywalking 和 Grafana Tempo。

Jaeger 是一个非常不错的选择,但它的代价是需要集成相对应的 SDK,对业务有一定的侵入性。

2.2.12 混沌工程

该方向聚焦在为 Kubernetes 应用提供混沌工程实验平台,主要的产品为 Chaos-Mesh 和 Chaosblade。

混沌工程(Chaos Engineering)是一种系统设计和测试方法,旨在通过有意识地在生产环境中引入故障和异常情况,从而识别和纠正潜在的系统故障点。混沌工程的目标是确保系统的可靠性、弹性和容错性,并使团队能够更快地发现和解决故障。

在云原生环境中,混沌工程被用来测试和验证云原生应用程序的弹性和可靠性。云原生应用程序通常由许多微服务组成,这些微服务需要在分布式环境中协同工作。混沌工程通过模拟真实世界中的故障场景,例如故障节点、网络延迟和磁盘故障,来测试系统的可靠性和弹性。

混沌工程通常包括以下步骤:

定义实验范围和目标
设计和实现实验
执行实验
监控和测量实验结果
分析和总结实验结果
根据实验结果改进系统设计和实现
混沌工程需要对系统进行有目的的攻击和测试,因此需要进行慎重的计划和执行。同时,混沌工程也可以提高团队的应急响应和故障处理能力,从而加强系统的可靠性和弹性。

参考资料

亚马逊: https://aws.amazon.com/cn/what-is/cloud-native/
CNCF: https://www.cncf.io/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

38-二叉树练习-LeetCode145二叉树的后序遍历

题目 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:ro…

让chatGPT当我的老师如何? 通过和chatGPT交互式学习,了解在ES中,一条JSON数据是如何写到磁盘上的

最近一直有一个问题,如鲠在喉。争取早一天解决,早一天踏踏实实的睡觉。 问题是:在ES中,一条JSON数据是如何写入到磁盘上的? 如何解决这个问题?我想到了chatGPT,还有lucene的学习资料。这篇文章&…

【机器学习】决策树(理论)

决策树(理论) 目录一、何为决策树1、决策树的组成2、决策树的构建二、熵1、熵的作用2、熵的定义3、熵的计算4、条件熵的引入5、条件熵的计算三、划分选择1、信息增益( ID3 算法选用的评估标准)2、信息增益率( C4.5 算法…

DetectGPT:使用概率曲率的零样本机器生成文本检测

DetectGPT的目的是确定一段文本是否由特定的llm生成,例如GPT-3。为了对段落 x 进行分类,DetectGPT 首先使用通用的预训练模型(例如 T5)对段落 ~xi 生成较小的扰动。然后DetectGPT将原始样本x的对数概率与每个扰动样本~xi进行比较。…

Springboot 多线程分批切割处理 大数据量List集合 ,实用示例

前言 哲学提问镇贴: 不了解异步怎么使用的看官, 可阅: SpringBoot 最简单的使用异步线程案例 Async_小目标青年的博客-CSDN博客 Springboot Async异步扩展使用 结合 CompletableFuture_小目标青年的博客-CSDN博客 想了解更多关于批量list处…

25- 卷积神经网络(CNN)原理 (TensorFlow系列) (深度学习)

知识要点 卷积神经网络的几个主要结构: 卷积层(Convolutions): Valid :不填充,也就是最终大小为卷积后的大小. Same:输出大小与原图大小一致,那么N ​变成了​N2P. padding-零填充. 池化层(Subsampli…

《程序员面试金典(第6版)》面试题 08.08. 有重复字符串的排列组合(回溯算法,全排列问题)C++

题目描述 有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。 示例1: 输入:S “qqe” 输出:[“eqq”,“qeq”,“qqe”] 示例2: 输入:S “ab” 输出:[“ab”, “ba”] 提示: 字符都是英文字母。…

Mybatis持久层框架 | Lombok搭建

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Lombok Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要…

自然语言大模型介绍

1 简介 最近一直被大语言模型刷屏。本文是周末技术分享会的提纲,总结了一些自然语言模型相关的重要技术,以及各个主流公司的研究方向和进展,和大家共同学习。 2 Transformer 目前的大模型基本都是Transformer及其变种。本部分将介绍Transf…

【WEB前端进阶之路】 HTML 全路线学习知识点梳理(上)

前言 HTML 是一切Web开发的基础,本文专门为小白整理,针对前端零基础的朋友们,手把手教你学习HTML,让你轻松迈入WEB开发的行列。 首先,感谢 橙子_ 在HTML学习以及本文编写过程中对我的帮助。 文章目录前言一.HTML简介1.…

【NLP经典论文阅读】Efficient Estimation of Word Representations in Vector Space(附代码)

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

二值mask转polygon/RLE (coco segment格式)

coco数据集annotation的segmentation并不是二值mask,而是polygon格式, 看一个annotation. {"segmentation": [[510.66,423.01,511.72,420.03,510.45......]], #两两组成(x,y)坐标,polygon格式"area": 702.1057499999998…

腾讯自研万亿级NLP大模型,自动生成和衍生广告文案

编者按:随着大数据与AI技术的不断发展,人们越来越看见AI大模型在数据理解、运算以及诸多泛化能力上的潜力,时下,大模型已然成为学术界与工业界探索的重点方向。然而,随着模型规模与容量的不断扩大,其所需训…

mac 把word公式默认字体Cambria Math换成LaTex字体以及带章节自动编号

word默认是Cambria Math,想用latex那种公式的字体,这里使用的是XITS Math字体 搜了很多地方,都是用ab Text这个方法先转成文本,再换字体,然后设置斜体 可是公式多起来的话这种办法很麻烦,而且一个公式里常…

PyTorch深度学习实战 | 典型卷积神经网络

在深度学习的发展过程中,出现了很多经典的卷积神经网络,它们对深度学习的学术研究和工业生产都起到了巨大的促进作用,如VGG、ResNet、Inception和DenseNet等,很多投入实用的卷积神经都是在它们的基础上进行改进的。初学者应从试验…

C语言实现堆

注:这里我们所实现的是大根堆(即父节点不小于子节点的堆) 目录 一,堆的介绍 二,堆结构的创建 三,接口实现 1,初始化与销毁 2,数据的插入与删除 3,其他接口 一&…

力扣:最后一个单词的长度(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读 题目: 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组…

基于springboot实现留守儿童爱心网站平台【源码+论文】

基于springboot实现留守儿童爱心网站演示开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包&…

qt 关于QtXlsx的编译 使用

版本:qt 5.14.0 qt creator4.11.0 平时用mingw编译器 QtXlsx源码下载地址:QtXlsxWriter:https://github.com/dbzhang800/QtXlsxWriter 在Qt的XLSX模块提供了一组类来读写Excel文件。它不需要 Microsoft Excel,可以…

EM7电磁铁的技术参数

电磁铁可以通过更换电磁铁极头在一定范围内改善磁场的大小和磁场的均匀度 ,并且可以通过调整极头间距改变磁场的大小。主要用于磁滞现象研究、磁化系数测量、霍尔效应研究、磁光实验、磁场退火、核磁共振、电子顺磁共振、生物学研究、磁性测量、磁性材料取向、磁性产…
最新文章