你需要知道的云原生架构体系内容
云原生(Cloud-Native)的概念在国内提及的越来越多,但大部分人对云原生的认识仅限于容器、微服务、DevOps等内容,把容器、微服务、 DevOps就等同于云原生,这显然是不对的。CNCF从其自身的角度定义了云原生技术:云原生技术使企业能够在现代动态环境中构建和运行可扩展的应用程序,如在公共云、私有云和混合云环境中。包括容器、服务网格、微服务、不变的基础设施和声明式API等。采用这些技术可实现系统的松散耦合性、弹性、可管理性和可观察性等。也可以与自动化相结合,实现以最少的工作量频繁地、可预测地进行重大影响的功能的变更。
云计算提供了敏捷的、自服务的、不变的基础设施等内容,使业务应用上云逐渐成为一种共识,但不进行云原生架构重构而直接上云可能是危险的,传统业务应用架构无法在云上进行弹性扩展和敏捷响应,无法有效利用云计算的特性赋能企业。所以这可能需要对传统架构的业务系统进行分布式微服务分拆重构,部署运行在容器云平台等之中,使用DevOps思想,通过CI、CD等持续提升交付效率,等等。使应用从一开始被创建就具备云的特性,为云而生,它是为了充分利用云计算的分布式和弹性扩展等特征,使其具备或适应云上部署运行的要求,或者直接用云的思想、方法、工具在云中创建,天生具备云的特性。所以云原生可以认为是一种基于云来构建和运行云应用程序的方法论和技术体系,使用云原生技术和方法论来构建和运行管理云应用。
Matt Stine在2015年发表《迁移到云原生架构》一书中定义了符合云原生架构的特征:12要素应用、微服务、自服务敏捷基础设施、基于API协作、扛脆弱性等。云原生体系内容没有明确的定义,不过通常认为云原生技术体系和方法论包括微服务、容器、DevOps、持续交付、ServiceMesh、不可变基础设施、声明式API、混沌工程、安全、基于移动的客户体验等内容 。
十二个要素应用为云原生应用的设计提供了原则指导;微服务架构为云原生应用架构设计、分布式部署、敏捷变更等提供了方案;容器则为云原生应用提供了弹性伸缩、一致性环境等能力,和微服务结合,支撑应用随需扩展;自服务敏捷基础设施则提供了云原生应用持续交付的基础设施资源等保障,可以和容器化PaaS平台共同支撑云原生应用的自动化弹性扩展、可视化监控、自动化智能化运维运营等,使用户无需关注基础设施资源,无需运维基础设施资源,无需关注应用部署位置等;服务网格支撑着服务的管理和治理;混沌工程则持续增强系统的韧性和稳定性;DevOps优化组织间的协同,满足彼此的关切,指导C ICD的落地和持续交付,实现应用全生命周期管理;声明式 A PI则实现了服务标准化发布和服务之间的协同;安全则涉及云原生架构体系的方方面面,比如 D evOps安全 D evSecOps、容器镜像安全、网络安全、应用安全、 A PI安全、认证授权、访问控制等等;所有这些技术和方法、原则满足客户随时随地随需的需求,简化客户操作,提升客户体验。
基于对云原生架构体系的学习和理解,笔者觉得一个相对完整的云原生架构体系内容包括如图中的内容:
随着移动通信技术的发展和移动设备的普及,人们的工作、生活、社交、投资等方式发生了显著的变化。当前人们通过手机基本上可以随时随地满足需求。用户可能在不同的时间( 7x 24)通过不同终端、不同操作系统、不同版本、不同地方等访问业应用系统,这就要求不仅仅是APP客户端操作便利、交互友好,也要求后端服务和系统能够敏捷响应。手机 App 应用 的体验好坏可能直接决定着用户是否继续使用它。在移动互联时代,用户移动化体验需求是应用设计的 关键驱动因素 。
云应用12要素描述了一种云应用原型,是一种云应用(可独立部署的单元)设计原则和方法论。它通过强调声明式配置、水平扩展的无状态/无共享进程,以及与部署环境的整体松耦合,来关注速度、安全性和可扩展性。Kevin Hoffman 于《Beyond the 12-factor App》中重新描述并扩展了云原生应用的12因素并增加API优先 、遥测、认证和授权三个要素。新增的要素糅合了API协同、可视化监控、安全性等内容,在指导云原生应用的设计方面更加完善。
微服务架构是一种应用分布式架构方式,它将单体巨石应用拆分为若干个单一能力的可独立部署的服务,就是微服务。通常一个微服务代表一种业务能力,或是提供业务价值的最小的“原子”服务单元。它解决了紧耦合的单体巨石系统难以变更难以更新的问题,实现轻量、敏捷变更。
中台本质也是一种架构方式,其核心是实现复用。中台一直被当作是一种企业架构,没有很明确讨论复用的粒度,所以其落地没有明确的方式方法和标准。从应用架构角度来说,中台和应用的前、中、后端层次划分没有本质区别,算不上一种新的架构方式。微服务分解架构从横向将系统进行分解,中台分层架构从纵向将系统分层,从而实现微服务在不同层次的复用和共享。从单个应用系统扩展到企业所有的系统,最终可以融合成一个分层分解的企业级系统,这就是笔者一直所提的 “ 系统融合 ” 思路。
容器是一种内核轻量级的操作系统层虚拟化技术,在流程级别提供隔离,为单一的应用程序提供运行一致的运行环境。每个应用程序及其环境都可以在隔离的环境中运行。容器特性和微服务架构非常契合,因此微服务通常部署在容器中,实现敏捷部署、自动化弹性伸缩、环境一致性等能力。但容器依然是相对底层的运行单元,众多容器的管理和治理是个难题。
Kubernetes(也称为K8s)是一个开源容器管理和调度框架,用于自动化容器应用程序的部署、扩展和管理。它将构成应用程序的容器分组到逻辑单元中,以便于管理和发现。容器云平台是采用容器和容器管理及调度技术而构建的应用管理部署运行平台,支持不同租户的容器应用管理和治理能力。基于容器云而把日志、监控、认证、权限、配置、中间件、工具平台,以及算法等统一部署维护,提供企业级平台服务能力,构建轻量化P aaS平台,结合自动化、智能化实现自服务敏捷响应基础设施能力。
云原生的核心是云原生应用。自服务敏捷响应基础设施为云原生应用的自动化环境准备、构建、部署、监控、反馈、健康检查、故障自愈、资源调度、弹性伸缩、动态路由和负载均衡等提供支撑, 实现自主服务平台进行云原生应用的部署和运行,使配置管理自动化、基础设施资源透明,无需关注应用运行在什么地方;将IaaS和PaaS最终融合在一起,提供更流畅的、一致的体验;企业内部可通过基础设施资源管理(多云管理平台)实现异构资源的管理,统一的资源服务;实现持续交付,提升可用性、可扩展性、可管理性。
DevOps是一种理念和方法论,目的是为了协调和理顺开发和运维团队之间的关切,提升协作效率。DevOps旨在实现开发运维一体化,通过自动化、智能化等工具实现应用全生命周期管理和组织之间的高效协同。基于D evOps方法论和理念所构建的平台也称为 D evOps平台,通常要用自动化流水线等实现持续集成 C I、持续交付CD等能力。Google SRE是DevOps的一种具体实践,它通过系统工程的思想来解决软件工程的问题, 使运维自动化和智能化。运维人员不低于 5 0%的时间做运维工具的研发,让研发人员专注于业务应用的研发。Google SRE使用错误预算来协调研发和运维之间的关切,一旦错误预算用尽,则运维将拒绝业务应用的发布部署,从而使研发要关注业务应用的稳定性和健壮性。
服务网格(ServiceMesh )实现微服务东西向流量的管理和治理。其区别于API网关对服务南北向流量的管理和治理。其通常应用于容器环境,以sidecar的方式代理流量管理、可观测性和安全能力。服务网格总体架构由流量代理组件和管理组件组成, 代理组件被称为数据平面,直接处理入站和出站数据包,转发、路由、健康检查、负载均衡、认证、鉴权、产生监控数据等。管理组件被称为控制平面,负责与代理通信,下发策略和配置。笔者一直跟踪着服务网格发展但一直没有采用,原因在于一方面感觉其不够成熟,另一方面其加层的方式会带来延迟,和笔者推崇的简单方式解决复杂问题思路有悖。
抗脆弱性由Naasim Taleb在《Antifragile》书中提出,将故障随机注入到生产环境中,目的是为了识别和消除架构中的缺陷,找到应用架构中的弱点,并强制进行修复,架构会随着时间的推移而变得强壮,提升其稳定性、可用性、耐久性等。在国内也称之为混沌工程(Chaos Engineering)。中国信通院于2 020年开始组织 进行混沌工程技术研究,提出了应用混沌工程方法来验证云原生系统的韧性架构,同时成立混沌工程项目组。2 021年 发布《混沌工程测试平台能力》标准纲要,并发布行业标准《混沌工程平台能力要求》。
云原生应用之间的交互是通过已发布和版本化的API来实现的,通常采用HTTP Rest 风格序列化JSON数据。通过API 可以提供一层可重用接口层。同时API封装了业务逻辑内部细节,消费者不能直接访问API服务内部数据,也在一定程度上增强了数据安全。
安全是任何系统不可或缺的部分。风险无处不在,云原生架构体系中内容众多,每个组件每个服务都可能带来风险和安全问题(因此要通过 “ 减层 ” 方法最小化组件和服务,严格遵循 “ 非必要不采用原则 ” )。从云原生应用生命周期过程来说,云原生安全可以简单分为 “ 设计时安全 ” 和 “ 运行时安全 ” 两段。设计时以静态检测分析为主,比如代码分析、镜像漏洞扫描等;运行时以动态和交互式检测、防护、分析为主,比如入侵检测、病毒查杀、网络微隔离等。
云原生安全可以利用传统的安全技术和方法,比如认证授权、访问控制、加密解密、合规检测、静态安全检测、动态安全检测、网络隔离等等,重点是通过可用的安全机制增强云原生安全能力。虽然我们提倡安全左移,尽可能将安全风险消除在设计时段,但运行时安全一样不可少,安全漏洞随时都可能出现,采用微服务、容器的云原生架构也为运行时带来了更多的风险点,安全防控更加不易。需要不断提升系统可见性、错误隔离等能力提升安全管控能力。云原生安全和传统网络安全的分安全域模式不同,它需要动态的自动化和智能化的管控能力。云原生未来可能逐渐通过软件定义边界、增强的身份认证、微隔离等技术实现动态的网络安全管控。
相关文章:
你需要知道的云原生架构体系内容
云原生(Cloud-Native)的概念在国内提及的越来越多,但大部分人对云原生的认识仅限于容器、微服务、DevOps等内容,把容器、微服务、 DevOps就等同于云原生,这显然是不对的。CNCF从其自身的角度定义了云原生技术ÿ…...
安全渗透--正则表达式
什么是正则表达式? 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。 一个正则表达式是一种从左到右匹配主体字符串的模式。 “Regular expression”这个词比较拗口,我们常使用缩写的术语“regex…...
git如何撤销commit(未push)
文章目录 前言undo commitreset current branch to here Undo Commit,Revert Commit,Drop Commit的区别 是否删除对代码的修改是否删除Commit记录是否会新增Commit记录Undo Commit不会未Push会,已Push不会不会Revert Commit会不会会Drop Com…...
Vue数组与字符串互转
一、数组转换成字符串的方法 join() var arr [A, B, C]; var str arr.join(、); console.log(str); // 输出 A、B、C toString() var arr [A, B, C]; var str arr.toString(); console.log(str); // 输出 A, B, C JSON.stringify() var arr [A, B, C]; var str JSO…...
Java编程实现遍历两个MAC地址之间所有MAC的方法
Java编程实现遍历两个MAC地址之间所有MAC的方法 本文实例讲述了java编程实现遍历两个MAC地址之间所有MAC的方法。分享给大家供大http://家参考,具体如下: 在对发放的设备进行后台管理时,很多时候会用到设备MAC这个字段,它可以标识唯一一个设备。然而在数…...
用AXIS2发布WebService的方法
Axis2+tomcat6.0 实现webService 服务端发布与客户端的调用。 Aixs2开发webService的方法有很多,在此只介绍一种比较简单的实现方法。 第一步:首先要下载开发所需要的jar包 下载:axis2-1.6.1-war.zip http://www.apache.org/dist//axis/axis2/java/core/1.6.1/ 下载…...
嵌入式学习_Day 003
程序功能介绍 c #include <stdio.h> int main() {char c,ll;printf("please enter a capital letter:");cgetchar();getchar();if (c>A&& c<Z) {llc32;printf("Lowercase letter output:%c\n",ll);printf("ASCII value:%d\n"…...
常用的数据结构 JAVA
目录 1、线性表2、栈:3、队列: 1、线性表 List<Object> narnat new ArrayList<>();ArrayList:动态数组 1、可以嵌套使用 2、add(x)添加元素x,remove(index)删除某个位置的元素 3、注意list是指向性的,…...
基于机器视觉工具箱和形态学处理的视频中目标形状检测算法matlab仿真
目录 1.算法理论概述 2.部分核心程序 3.算法运行软件版本 4.算法运行效果图预览 5.算法完整程序工程 1.算法理论概述 目标形状检测是计算机视觉领域的重要任务之一,旨在从视频序列中自动检测和识别特定目标的形状。本文介绍一种基于机器视觉工具箱和形态学处理…...
小白入门:sentence-transformer 提取embedding模型转onnx
文章目录 序言原理讲解哪些部分可转onnx 代码区0. 安装依赖1. 路径配置2. 测试数据3. 准备工作3.1迁移保存目标文件 4. model转onnx-gpu5. 测试一下是否出错以及速度5.1 测试速度是否OK5.2测试结果是否OK 6. tar 这些文件 序言 本文适合小白入门,以自己训练的句子e…...
数据库应用:Redis持久化
目录 一、理论 1.Redis 高可用 2.Redis持久化 3.RDB持久化 4.AOF持久化(支持秒级写入) 5.RDB和AOF的优缺点 6.RDB和AOF对比 7.Redis性能管理 8.Redis的优化 二、实验 1.RDB持久化 2.AOF持久化 3.Redis性能管理 4.Redis的优化 三、总结 一、…...
js版计算比亚迪行驶里程连续12个月计算不超3万公里改进版带echar
<!DOCTYPE html> <html lang"zh-CN" style"height: 100%"> <head> <meta charset"utf-8" /> <title>连续12个月不超3万公里计算LIGUANGHUA</title> <style> .clocks { …...
一文详解Spring Bean循环依赖
一、背景 有好几次线上发布老应用时,遭遇代码启动报错,具体错误如下: Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name xxxManageFacadeImpl: Bean with name xxxManageFa…...
基于PHP+ vue2 + element +mysql自主研发的医院不良事件上报系统
医院不良事件上报管理系统源码 不良事件上报是为了响应卫生部下发的等级医院评审细则中第三章第9条规定:医院要有主动报告医疗安全(不良)事件的制度与工作流程。由医疗机构医院或医疗机构报告医疗安全不良事件信息,利用报告进行研…...
微服务远程调用openFeign简单回顾(内附源码示例)
目录 一. OpenFeign简介 二. OpenFeign原理 演示使用 provider模块 消费者模块 配置全局feign日志 示例源代码: 一. OpenFeign简介 OpenFeign是SpringCloud服务调用中间件,可以帮助代理服务API接口。并且可以解析SpringMVC的RequestMapping注解下的接口&#x…...
【云计算小知识】云环境是什么意思?有什么优点?
随着云计算的快速发展,了解云计算相关知识也是运维人员必备的。那你知道云环境是什么意思?有什么优点?云环境安全威胁有哪些?如何保证云环境的运维安全?这里我们就来简单聊聊。 云环境是什么意思? 云环境是…...
【搜索引擎Solr】Apache Solr 神经搜索
Sease[1] 与 Alessandro Benedetti(Apache Lucene/Solr PMC 成员和提交者)和 Elia Porciani(Sease 研发软件工程师)共同为开源社区贡献了 Apache Solr 中神经搜索的第一个里程碑。 它依赖于 Apache Lucene 实现 [2] 进行 K-最近邻…...
PostgreSQL 设置时区,时间/日期函数汇总
文章目录 前言查看时区修改时区时间/日期操作符和函数时间/日期操作符日期/时间函数:extract,date_part函数支持的field 数据类型格式化函数用于日期/时间格式化的模式: 扩展 前言 本文基于 PostgreSQL 12.6 版本,不同版本的函数…...
性能测试Ⅱ(压力测试与负载测试详解)
协议 性能理论:并发编程 ,系统调度,调度算法 监控 压力测试与负载测试的区别是什么? 负载测试 在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状…...
【Python入门系列】第十八篇:Python自然语言处理和文本挖掘
文章目录 前言一、Python常用的NLP和文本挖掘库二、Python自然语言处理和文本挖掘1、文本预处理和词频统计2、文本分类3、命名实体识别4、情感分析5、词性标注6、文本相似度计算 总结 前言 Python自然语言处理(Natural Language Processing,简称NLP&…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
