对云原生应用的一些思考

云原生的定义

  • 云原生定义:云原生是一种构建和运行应用的方式,它充分利用了云计算平台的能力,如弹性扩展、自动化运维等。云原生应用具有高度的可移植性、可扩展性和可管理性,能够快速响应业务需求的变化。
  • 扩展知识:云原生概念最早由Pivotal公司提出,并得到了业界的广泛认可。云原生应用通常使用容器、微服务、持续集成/持续部署(CI/CD)等技术来构建和部署。

CI/CD思考

CI/CD的三个关键原则

  1. 一份代码多次发布:所有应用都应通过同一根链对外发布,不同版本状态发布在不同环境。

  2. 编译、发布和运行分离:设计、构建、发布和运行过程完全切分开,确保工件在不同环境可运行。

  3. 环境一致性:开发、测试、生产环境应尽可能一致,包括工具、数据库、中间件等,减少环境差异带来的问题。

  4. 扩展知识:CI/CD(持续集成/持续部署)是一种软件开发实践,它强调开发人员应频繁地将代码集成到共享代码库中,并通过自动化构建、测试和部署流程来快速验证和发布软件。这种实践有助于提高软件开发的效率和质量。

环境一致性的重要性

  • 环境一致性:环境一致性有助于减少人员差异、时间差异和工具差异带来的问题,提高应用在不同环境中的稳定性和可靠性。
  • 引用:亚马逊AWS的首席技术官Werner Vogels曾说:“在云上,环境一致性是成功的关键。”这意味着,为了确保应用在各种环境中的稳定性和可靠性,开发人员需要确保开发、测试和生产环境尽可能一致。

CI/CD 是如何实现的

CI/CD(持续集成/持续部署)的实现主要依赖于自动化工具和流程。以下是CI/CD实现的核心步骤和业界流行的方案:

CI/CD实现的核心步骤:

  1. 代码集成:开发人员将代码提交到版本控制系统(如Git),触发CI/CD流程。
  2. 自动化构建:CI/CD工具(如Jenkins、GitLab CI/CD等)自动从版本控制系统中拉取代码,进行编译、构建和打包。
  3. 自动化测试:构建完成后,CI/CD工具会自动运行单元测试、集成测试等,确保代码质量。
  4. 自动化部署:测试通过后,CI/CD工具会将应用部署到预生产环境或生产环境。
  5. 监控与反馈:部署后,CI/CD工具会监控应用运行状态,收集反馈数据,以便快速发现和解决问题。

业界流行方案:

  1. Jenkins:Jenkins是一个开源的CI/CD工具,支持多种编程语言和平台。它提供了丰富的插件生态系统,可以扩展其功能。
  2. GitLab CI/CD:GitLab内置了CI/CD功能,与GitLab的代码仓库、问题跟踪等功能无缝集成。它提供了简单易用的YAML配置文件来定义CI/CD流程。
  3. Travis CI:Travis CI是一个托管的CI/CD服务,支持多种编程语言和平台。它与GitHub等版本控制系统紧密集成,提供了自动化的构建和测试服务。

这些方案都遵循了CI/CD的三个关键原则:一份代码多次发布、编译发布和运行分离、环境一致性。通过自动化工具和流程,CI/CD能够显著提高软件开发的效率和质量,减少人为错误和沟通成本。

弹性思考

在构建云原生应用时,需要考虑应用的弹性好。无状态进程是实现应用弹性的前提,通过避免应用共享磁盘和将本地缓存改为外部缓存,可以确保应用的无状态性。同步并发是确保应用高性能的关键,需要在隔离性和并发性能之间进行权衡。快速启动与优雅关闭则是应用弹性的重要体现,要求应用能够快速启动并在关闭时尽可能优雅地处理。通过遵循这些原则,可以构建出具有高弹性、高性能的云原生应用。

Crowd Native的三大原则- 弹性应用**

  1. 无状态进程

    • 定义:无状态进程是指启动后用完即可丢弃的进程,无需关心其后续影响。
    • 比喻:与母鸡不同,公鸡不产生持续价值(如生蛋),因此可以视为无状态。
    • IT角度:服务器与硬盘的关系。服务器在启动后,硬盘可以被移除而不影响服务器的正常运行。
    • 实现方法:
      • 所有需要保存的数据、缓存、大数据信息等应存储在外部中间件和数据库节点上。
      • 避免应用共享磁盘,如Oracle RAC的共享磁盘模式。
      • 将本地缓存改为外部缓存,如Redis。
  2. 同步并发 (Concurrency)

    • 定义:应用能够以不同的进程状态运行成多个容器。
    • 隔离性要求:在支付等领域,需要高隔离性。虚拟机提供了比线程和进程更高的隔离性。
    • 性能与并发:从业务性能角度看,多线程消耗的资源最少,并发性最强。
  3. 快速启动与优雅关闭

    • 定义:应用应能够快速启动并在关闭时尽可能优雅地处理。
    • 前提:无状态和无依赖。
    • 实现方法:
      • 应用应能够独立无依赖地启动,并与中间件和数据库进行通信。
      • 在关闭过程中,应用应清理缓存、队列等,然后再进行删档。
      • 避免被系统调度器强制杀死,确保优雅的关闭过程。

  • 无状态进程:无状态进程是指启动后用完即可丢弃的进程,与母鸡不同,公鸡不产生持续价值,因此可以视为无状态。在IT角度,服务器在启动后,硬盘可以被移除而不影响服务器的正常运行。实现无状态应用的关键是避免应用共享磁盘,将本地缓存改为外部缓存,并确保所有需要保存的数据都存储在外部中间件和数据库节点上。

  • 同步并发:应用需要能够以不同的进程状态运行成多个容器,以满足高隔离性的要求。虚拟机提供了比线程和进程更高的隔离性,但并发性能可能受到影响。因此,在云原生应用中,需要权衡隔离性和并发性能,确保应用能够快速启动并具有良好的并发性。

  • 快速启动与优雅关闭:应用应能够快速启动并在关闭时尽可能优雅地处理。这要求应用具有无状态和无依赖的特性。在启动过程中,应用应能够独立无依赖地启动,并与中间件和数据库进行通信。在关闭过程中,应用应清理缓存、队列等,然后再进行删档,以避免被系统调度器强制杀死。


无状态进程
具体案例:以在线购物网站为例,当用户浏览商品时,每个用户的浏览会话都是独立的,不受其他用户的影响。这意味着,服务器不需要为每个用户维护一个特定的状态。例如,用户A在浏览商品时,服务器不会记住他的浏览历史,当用户A关闭浏览器后,这个无状态进程就结束了。同样,用户B在浏览相同的商品时,服务器也不会受到用户A的浏览历史的影响。这种无状态的设计使得服务器能够轻松处理大量的并发请求,提高了系统的可扩展性和性能。

数据:根据统计,一个繁忙的在线购物网站每分钟可能会处理数千个并发请求。如果每个请求都需要服务器维护状态信息,那么服务器的内存和CPU资源很快就会被耗尽。而采用无状态设计,服务器只需要处理当前的请求,不需要关心之前的请求状态,从而大大降低了资源消耗。

同步并发

具体案例:以在线银行的转账功能为例,当用户A向用户B转账时,这个操作需要被同步执行,以确保资金的一致性。同时,银行系统需要能够并发处理多个用户的转账请求。为了实现同步并发,银行系统可以采用分布式锁来确保在同一时间只有一个请求能够执行转账操作。当用户A发起转账请求时,系统会先获取分布式锁,然后执行转账操作,完成后释放锁。这样,即使有多个用户同时发起转账请求,系统也能够保证每个请求都被同步执行。

数据:假设一个在线银行系统每秒需要处理1000个转账请求。如果系统不支持并发处理,那么每个请求都需要等待上一个请求完成后才能执行,这将导致系统性能严重下降。而采用同步并发设计,系统可以同时处理多个请求,大大提高了系统的吞吐量和响应速度。根据测试数据,采用同步并发设计的银行系统可以在1秒内处理超过5000个转账请求,满足了高并发场景下的需求。总结来说,无状态进程和同步并发是构建高弹性、高性能云原生应用的重要原则。通过无状态设计,系统能够轻松处理大量的并发请求,降低了资源消耗;而同步并发设计则保证了系统在处理多个请求时的同步性和并发性能。这些原则的应用使得云原生应用更加健壮、可扩展,能够应对各种复杂的业务场景。

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

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

相关文章

mysql 存储过程 每天凌晨 定时执行任务(存储过程)

每天凌晨计算上一天的数据,并把结果存储到表中,表名按照日期动态创建 事件 event_alert_level_count create event event_alert_level_count on schedule every 1 day starts timestamp(current_date,00:00:00) do call proc_alert_level_count() ;存储…

[Java、Android面试]_02_HashMap的原理

本人今年参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料,感兴趣的朋友可收藏关注。由于时间有限,只能每天整理一点,分享一点儿! 现分享如下&#xf…

Git的两大学习目标和具体使用情景

学习的两大目标 1. 技术目标,学习一些基础的技术问题 操作原理与常见区域 掌握Git企业级应⽤,深刻理解Git操作过程与操作原理,理解⼯作区,暂存区,版本库的含义 深刻学习Git的所有操作,过程和原理&#xf…

【系统架构设计师】系统工程与信息系统基础 01

系统架构设计师 - 系列文章目录 01 系统工程与信息系统基础 文章目录 系列文章目录 前言 一、系统工程 ★ 二、信息系统生命周期 ★ 信息系统建设原则 三、信息系统开发方法 ★★ 四、信息系统的分类 ★★★ 1.业务处理系统【TPS】 2.管理信息系统【MIS】 3.决策支持系统…

VMware安装Ubuntu虚拟机

1. 安装VMware VMware中国官网:VMware - Delivering a Digital Foundation For Businesses VMware Workstation Player(官方个人免费版):VMware Workstation Player | VMware VMware Workstation Pro(商用收费版&am…

Glusterfs 常用命令

1. 启动/关闭/查看glusterd服务 #启动: systemctl daemon-reload systemctl start glusterd#开机自动启动glusterd服务: systemctl enable glusterd#关闭: systemctl stop glusterd#查看状态: systemctl status glusterd 2. 为存…

并发编程1-多线程并发编程的基本概念

多线程并发编程是指在一个程序中同时执行多个线程,每个线程都可以独立执行不同的任务,从而提高程序的效率和响应性。以下是多线程并发编程的基本概念: 线程:线程是程序中的执行单元,它可以独立运行,并拥有自…

java的23种设计模式01-设计模式介绍

一、设计模式的定义 设计模式,是指在软件设计中,被反复使用的一种代码设计经验。 目的:是为了可重用代码,提高代码的可扩展性和可维护性。 软件开发要实现可维护、可扩展,就必须尽量复用代码,并且降低代码…

GZ083 产品艺术设计赛题第四套

全国职业院校技能大赛 产品艺术设计赛项赛题四 赛项名称 产品艺术设计 英语名称 Product Art Design 赛项编号 GZ083 归属产业 数字产业 任务名称 “探索”主题儿童行李箱设计 赛项组别 中职组 高职组 □学生组 □教师组 □师生联队试点赛项 R学生组 □教师组 □…

Python相关的考试和认证

1.计算机等级考试二级python http://ncre.neea.edu.cn/ 2.蓝桥杯大赛青少年创意编程Python组 http://kid.lanqiao.cn/ 3.青少年编程能力等级_python(CERACU PAAT) http://paat.creacu.org.cn/ 4.全国青少年软件编程等级考试标准(Python1-6级) 中国电子…

CTP-API开发系列之九:行情登录及订阅代码

CTP-API开发系列之九:行情登录及订阅代码 前情回顾全局配置参数行情初始化代码行情登录行情订阅行情接收注意事项 前情回顾 CTP-API开发系列之一:各版本更新说明(持续更新) CTP-API开发系列之二:问题汇总(…

tigramite教程(六)使用TIGRAMITE 进行因果发现

使用TIGRAMITE 进行因果发现 基本用法简单玩玩万年不变的第一步:画出来调查数据依赖性和滞后函数PCMCI 因果发现错误发现率控制进一步相关的方法学教程 画图整合专家对链条的假设基准测试和验证因果效应估计数据集挑战滑动窗口分析 TIGRAMITE 是一个时间序列数据分析的python包…

【Python】新手进阶学习:os.sep---跨平台路径分隔符

【Python】新手进阶学习:os.sep—跨平台路径分隔符 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您…

挑战杯 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉

文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习多目标跟踪 …

【Android】WebView请求HttpRequest和HttpResponse

通过重写WebViewClient默认方法,我们可以实现拦截网络请求的功能 拦截HttpRequest override fun shouldOverrideUrlLoading(view: WebView,request: WebResourceRequest ): Boolean返回true表示阻止该网页加载,返回false表示不拦截 HttpResponse ove…

MPP数据架构设计的缺点

目录 一、MPP架构 二、批处理架构和MPP架构 三、MPP架构的OLAP引擎 一、MPP架构 随着分布式、并行化技术成熟应用,MPP引擎逐渐表现出强大的高吞吐、低延时计算能力,有很多采用MPP架构的引擎都能达到“亿级秒开”。例如Impala、ClickHouse、Druid、Dor…

基于SpringBoot+MYSQL的旅游网站

目录 1、前言介绍 2、主要技术 3、系统流程分析 1、登录流程图如下: 2、管理员后台管理流程图如下: 3. 修改密码流程图如下: 4、系统设计 4.1、系统结构设计 4.2 数据库概述 4.2.1 数据库概念设计 4.2.2 数据库逻辑设计 5、运行截…

多线程多进程处理服务器并发(多进程处理如何解决僵死进程)

目录 1.可循环发送数据的代码 2.改成循环之后每次发现只能处理一个客户端 3.服务器端处理并发问题 3.1 思路 3.2 利用多线程实现并发 ​编辑 3.3 利用多进程实现并发 3.3.1 多进程并发产生的僵死进程问题 ​3.3.2 解决僵死进程问题 1.可循环发送数据的代码 服务器代…

计算机模式识别的基本步骤与详解

在数字化时代的浪潮中,计算机模式识别技术以其卓越的能力,在图像识别、语音识别、自然语言处理等领域展现出了广泛的应用前景。那么,计算机究竟是如何进行模式识别的呢?本文将详细解析计算机进行模式识别的基本步骤,并深入探讨每个步骤的核心要点。 一、模式识别的基本步…

unity中实现场景跳转

1,第一步创建2个场景(右键资源窗口,名字这里我取的1111和2222) 2.添加跳转按钮(双击其中一个场景并添加按钮) 3.编辑按钮的文字(将原本的按钮打开点击里面的text,就可以在右边编辑文…