云原生入门系列(背景和驱动力)
做任何一件事,或者学习、应用一个领域的技术,莫过于先要想好阶段的目标和理解、学习它的意义是什么?解决了什么问题?
这部分,就尝试来探讨下这个阶段需要理解并达成的目标以及践行云原生的意义在哪里。
1.历程
任何阶段技术的出现,都会有一个基本背景作为起源,最初是从解决一些关键点的问题出发,逐渐的变成阶段的主流。技术领域沿着这条脉络,去尝试理解会更容易入门一些。
这里尝试梳理一个非官方权威的演变阶段,来整理下云原生的基本脉络。

应用架构演变
1)商用IOE体系阶段
这个不用说,在IT领域做的比较久的工程师们能理解,早期的电信、银行等领域的大型系统基本上都是老外企业提供的商用的产品搭建的,我们主要还是以开发业务级别的框架和代码为主。

这里的IOE是一类昂贵的商用解决方案的代名词,商用的小型机、商用磁盘阵列存储、商用的Unix、商用的中间件、商用的数据库一系列的内容构建的系统。
在这个阶段构建的系统,成本确实不低,所以这时候的构建的大型系统都是一些较大的行业去践行的事情。基本结构如下:
- 基础资源构筑,靠的是小型机、商用高端的存储、能力强劲的数据库(这个阶段主要几家美国的企业处于半垄断地位,相互竞争)
- 系统的分布式能力建设,依靠商用的中间级,那个时期商用的中间件研发投入也相对较大,所以基本上架设系统的核心体系都还是封闭的体系。
关注的问题:
- 成本高昂,一般中小型企业尤其是类似移动互联网前期的业务企业,都比较难以构建丰富的业务场景的系统,仅限于大企业应用。硬件的成本受限于商用小型机高昂的价格,软件成本受限于商用软件的授权费用,软件方面人员门槛等成本(成本)
- 基于这套体系构建的软件系统,稳定性相对高些,出问题的概率低,但是这些重要的基础设施其自身的维护相对昂贵、需要高成本的环境要求。稳定性相对高,但是成本也相对高昂,尤其应对更大规模的业务,所以基本聚焦在通信、金融等领域(稳定性)
- 基于这套体系,在构建的基础设施上,体系搭建的效率相对较低,每次容量的扩充,都对系统有较高要求的迁移或者割接升级,业务开发方面也难以快速的迭代,每次系统的升级都是规模性操作。(效率)
2)服务化单体(去IOE后的X86阶段)
X86服务器很早也就诞生了,但是出于稳定、安全性等方面考虑没有大规模推广应用起来。根本原因还是网络化的分布式系统会因为网络等因素,导致在“差不多化”的体系中不够健壮、成熟、普及。(商用的产品搭建的分布式大型的系统成本还很高,这个后面也会说到上云考虑的成本、效率等问题)

在后续的去除IOE的条件慢慢成熟后,最先去的就是小型机这个计算体系。在去小型机的路上,需要实现一套成本和稳定性都可控的分布式软件系统,这个阶段基本上都是要有相当投入,才可以做到,这个阶段自研和部分开源并存。
- 这个阶段主要实现的是去除I,大规模启用X86服务器,随之而来的开源的Linux取代了商用Unix操作系统;
- X86化后,服务器数量增大,随着三层架构前后端解耦,引入负载均衡代理层(商用F5或者Nginx,Haproxy等)替换原先分布式中间件,实现分布式应用能力;
- 在原先重度依赖数据库的基础上增强了实时性,增加了缓存层,缓存领域也有很多自研和开源的实现出现,分层架构实现更清晰。
关注的问题:
- X86服务器算力不如小型机,迁移后的服务器数量成倍增加,增加运维的维护成本;另外自研相关分布式软件,拉高了投入门槛,增加了成本(这里机器本身的成本从小型机转变过来的同等的计算量会节省一部分,但是需要结合损耗比来看)。(成本)
- X86服务器损坏率较高,因为相对廉价,因此具备冷备、热备等高可用能力要求增加,这部分也是非常考验投入保障稳定性要求的地方。(规模和稳定性)
- 机器分化成更小的计算单元,机器的规模就会增加很多,就开始需要开始管理这些机器,组合成共享的资源让应用在上面能够很快速的做部署和运行,提升效率。(效率)
3)服务化拆分(开源阶段)

开源在整个应用架构的演变中让开发分布式应用变得普惠,在计算机语言不断高度抽象的进程中,开源盛行直接拉低了进入和应用分布式架构的门槛,承担着非常重要的角色。
- 原本存量的商用的中间件,技术框架等因为开源的盛行,尤其在国内的盛行,开始出现规模替代;
- 随着分布式技术栈从自研到开源的迁移,基本上奠定了大规模开发分布式应用的基础;
- 分布式应用开发变得简单,开源的生态繁荣,开源组合的系统变得更容易。
关注的问题:
- 尽管在资源层面从小型机到成本低下的x86架构,甚至虚拟化到容器进一步微化资源单元,但是成本随着应用规模、数据的规模随之提升,如何提升大规模资源共享情况下的利用率是逐渐需要解决的问题。(成本)
- 随着在线实时服务的不断增长,规模和稳定性的要求越来越高,双活、两地三中心、甚至多活成为线上业务必备能力,这些能力要求的同时都带来了应用和资源的规模增加,稳定性的要求越来越高。另外随着开源分布式技术栈规模运用,各种分布式集群化的要求也不断增长(规模和稳定性)
- 业务从需求到开发,部署上线的效率一直是企业的IT研发团队追求的主题,这个阶段如何构建一套从开发,应用构建到部署,发布,灰度等业务研发体系变得重要(效率)。
4)云计算的阶段

从上面的演变过程,过去业务系统的开发和IT技术能力结合紧密,经常按照领域实现垂直建设(业务系统+专有IT技术能力)。随着企业关注的成本、效率、规模和稳定性支撑的深入,越来越需要把基础技术能力沉淀下来,让业务需求的开发和推出聚焦业务领域的软件开发工作。
尤其在开源被普及化之后,搭建的每个IT能力部分都是服务化、分布式集群化的,更加需要相对统一的管理支撑体系。公有云和私有云就是在这样的背景下面,开始扩张的建设之路(云的概念很早提出,但是在最终被普及化的今天是需要一个漫长的过程)。
催生了今天很多的云厂商商业模式,不管是企业自建的私有云还是提供专业服务的公有云,对于业务支撑体系来讲,“业务上云“成为核心的趋势和强烈的诉求。
2.意义
那为什么要云原生呢?相信从上面企业级的业务支撑体系来看,基本上可以总结如下:
- 对于企业来讲,使用IT技术为业务支撑,赋能是数字化阶段的必然过程;企业在使用IT技术方面的考虑通常是上面尝试总结的那几个点:“成本、规模和稳定性、效率、安全等”
- 云是IT支撑演变到一定阶段的产物,是把上面演进过程中的通用、可复用的各种能力下沉下来,构筑可复用、按需的基础设施。(”业务上云“的架构其实就是云原生化的本质所在,就是业务应用建设,怎么有一套标准化的云上架构,更好的利用云上的核心能力,服务好业务,让业务开发不需要关注如下的特性,聚焦业务本身。)
- 所有资源共享,追求极致的成本
- 所有软件分布式化,追求更大规模,更稳定的环境
- 所有软件部署、运维等自动化(追求高效率)
- 云原生是业界对这一切的思考,最终通过类似CNCF等这些组织沉淀和推广应用(代表集体的智慧)
- 在这个过程中,通过云原生技术使组织能够在“现代动态环境”中构建和运行可扩展的应用程序(这个现代运行环境当下指的是云或者其他不可变基础设施)
- 那么具体到当下的阶段,就是比如在公共、私有和混合云的环境下,构建容器、服务网格、微服务、不可变基础设施和声明性API就是实现云原生这种方法的例子。
所以我们当下所谈的云原生的实践和应用,都是结合当前技术演变的基础之上,沉淀的一些最佳实践思路和技术构筑的一套支撑体系。这套技术体系中最核心的部分,就是围绕:容器化基础设施环境、微服务、服务网格等具体的标准化的开源技术栈。
3.目标
理解了云原生的意义,就能理解当下云原生架构的思路是建立在当前标准组织或者有影响力的组织(如CNCF)推行的标准化技术栈的体系基础之上的方法论实践。
在当下的业务支撑体系,按照如下的技术演进思路进行组合。
- 结合容器和容器编排技术(Docker+k8s)构筑声明式架构的不可变基础设施,基础设施的标准化和灵活、稳定性对架设在异构的云环境中尤为重要;
- 结合云原生的相关服务网格、微服务相关的技术服务构筑标准化的业务架构,标准统一意味着成本、效率和稳定性的可控;
- 云原生的体系,随着标准组织在不断的扩充蓝图,覆盖到云上业务支撑的方方面面,同时结合敏捷化的Devops向开发者赋能。
最终结合云原生的建设评估模型,来检验整个构筑的云原生支撑体系的成熟度。当然,我们IT支撑体系支撑的好不好,最终还是业务发展的情况来决定的,业务是最终企业运营聚焦的关键点。
相关文章:
云原生入门系列(背景和驱动力)
做任何一件事,或者学习、应用一个领域的技术,莫过于先要想好阶段的目标和理解、学习它的意义是什么?解决了什么问题? 这部分,就尝试来探讨下这个阶段需要理解并达成的目标以及践行云原生的意义在哪里。 1.历程 任何阶…...
Django中间件
目录 一.介绍 1.什么是Django中间件 2.作用: 3.示例 二.Django请求生命周期流程图 三.Django中间件是Django的门户 四.中间件方法 1.必须掌握的中间件方法 (1)process_request: 示例: 2.需要了解的中间件方法 &#x…...
redis运维(十九)redis 的扩展应用 lua(一)
一 redis 的扩展应用 lua redis如何保证原子操作 说明:引入lua脚本,核心解决原子性问题 ① redis为什么引入lua? lua脚本本身体积小,启动速度快 ② redis引入lua的优势 小结: 类似自定义redis命令 ③ redis中如何使用lua ④ EVAL 说明&#…...
SpringBoot——MVC原理
优质博文:IT-BLOG-CN 一、SpringMVC自动配置 SpringMVC auto-configuration:SpringBoot自动配置好了SpringMVC。以下是SpringBoot对SpringMVC的默认配置:[WebMvcAutoConfiguration] 【1】包括ContentNegotiatingViewResolver和BeanNameView…...
[Linux] shell条件语句和if语句
一、条件语句 1.1 测试 test 测试文件的表达式是否成立 格式:test 条件表达式 [ 条件表达式 ] 选项作用-d测试是否为目录-e测试目录或文件是否存在-a测试目录或文件是否存在-f测试是否为文件-r测试当前用户是否有权限读取-w测试当前用户是否有权限写入-x测试当前…...
【陈老板赠书活动 - 18期】-如何成为架构师这几本书推荐给你
陈老老老板🦸 👨💻本文专栏:赠书活动专栏(为大家争取的福利,免费送书) 👨💻本文简述:生活就像海洋,只有意志坚强的人,才能到达彼岸。 👨&am…...
chrome 插件 Mobile simulator
谷歌浏览器插件Mobile simulator v3.8.2.0-2023-4-27(做屏幕适应的前端工具)-(Chrome插件)谷歌浏览器插件网 百度网盘:https://pan.baidu.com/s/1xVyny8CtlMjSchhTIlfRAA 提取码:cj5c...
JavaScript框架 Angular、React、Vue.js 的全栈解决方案比较
在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。前端框架(React、Angular 和 Vue)进行简化比较。 MERN 技术栈详解 MERN 技术栈包含四大具体组件: MongoDB&am…...
【Vue】核心特性(响应式)
响应式: 数据变化,视图自动更新 接下来使用一个例子来体现一下什么是响应式 案例一: 访问数据,视图自动更新 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><…...
ESP32 http 请求
目录 参考教程1.使用的http连接2.使用Vscode-IDF创建http_request例程3.修改http_request_example_main.c函数4.已经获取到响应的数据 参考教程 ESP-IDF HTTP获取网络时间 1.使用的http连接 http://api.m.taobao.com/rest/api3.do?apimtop.common.getTimestamp请求可以得到…...
【C++】拷贝构造函数,析构函数详解!
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
qml ParticleSystem3D使用介绍
在 Qt Quick 3D 中,ParticleSystem3D 是用来创建和控制3D粒子系统的元素。粒子系统是图形编程中用于模拟液体、烟雾、火、星空等现象的技术,它通过生成大量小粒子来模拟这些效果。ParticleSystem3D 提供了一个框架,允许开发者定义粒子的各种属性,如生命周期、速度、颜色、大…...
集团投融资大数据平台解决方案
一、项目背景 项目为集团型公司大数据平台项目,整个项目周期约为6个月,整体呈现了对外的数据大屏驾驶仓和对内的看板报表,减少了客户内部数据上报和报表制作的重复工作量,为集团数据决策奠定基础。 二、项目目标 战略层ÿ…...
深信服技术认证“SCSA-S”划重点:渗透测试工具使用
为帮助大家更加系统化的学习网络安全知识,尽快通过深信服安全服务认证工程师认证,深信服推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 深信服安全服务认证工程师(…...
CCFCSP试题编号:201803-2试题名称:碰撞的小球
一、题目描述 二、思路 1.首先妾身分析这个题目,想要解题,得得解决2个问题。 1)判断小球到达端点或碰撞然后改变方向; 2)每时刻都要改变位置 两个问题都比较好解决,1)只要简单判断坐标&…...
《安富莱嵌入式周报》第327期:Cortex-A7所有外设单片机玩法LL/HAL库全面上线,分享三款GUI, PX5 RTOS推出网络协议栈,小米Vela开源
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 1、2023 Hackaday大赛胸牌开源 Vectorscope-main.zip (66.83MB) GitHub - Hack-a-Day/Vectorscope: Vectorscope badg…...
面试官:【js多维数组扁平化去重并排序】
文章目录 前言方法一方法二方法三方法四总结后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:JavaScript 🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误&a…...
C#编程题分享(3)
n的阶乘问题 输⼊整数n,输出n的阶乘。 int n Convert.ToInt32(Console.ReadLine()); int jiecheng 1; for (int i 1; i < n 1; i) {jiecheng * i; // 1 * 2 * 3 * .....} Console.WriteLine("{0}的阶乘是:{1}", n, jiecheng); q^n次…...
Redis下载和安装(Windows系统)
通过 GitHub 来下载 Windows 版 Redis 安装包,下载地址:点击前往。 打开上述的下载链接,Redis 支持 32 位和 64 位的 Window 系统,大家根据个人情况自行下载,如图 1 所示: 下载完成后,打开相应的文件夹&a…...
MySQL数据库:开源且强大的关系型数据库管理系统
大家好,我是咕噜-凯撒,数据在当今信息化时代的重要性不可忽视。作为企业和组织的重要资产,数据的管理和存储变得至关重要,MySQL作为一种关系型数据库管理系统,具有非常多的优势,下面简单的探讨一下MySQL数据…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...
虚幻基础:角色旋转
能帮到你的话,就给个赞吧 😘 文章目录 移动组件使用控制器所需旋转:组件 使用 控制器旋转将旋转朝向运动:组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转:必须移动才能旋转,不移动不旋转控制器…...
