系统架构设计师 云原生架构篇

news2024/9/20 7:21:32

🌥️ 云原生架构

🧐 什么是云原生

云原生是一种构建和运行应用程序的方法,充分利用云计算的优势,包括可扩展性、高可用性和敏捷性。

云原生架构强调应用与云环境的紧密结合,通过自动化部署、弹性伸缩、分布式处理和持续交付等方式,使应用能够快速响应变化,实现更高的性能和可靠性。其核心理念包括微服务、容器化、DevOps、CI/CD和可观测性,使得应用更易于部署、管理和扩展。

☁️ 什么是云服务

云服务是由云提供商通过互联网提供的一系列服务,包括基础设施、平台和软件服务:

  1. 基础设施即服务(IaaS):提供虚拟化的计算资源,如虚拟机、存储和网络,让用户可以灵活地构建和管理自己的IT基础设施。
  2. 平台即服务(PaaS):提供开发和部署环境,包括操作系统、数据库和中间件,帮助开发者快速构建、测试和部署应用程序。
  3. 软件即服务(SaaS):提供基于云的应用软件,用户无需管理底层基础设施,只需直接使用应用,例如邮件服务、CRM系统等。

通过云服务,企业可以降低初始投资和运营成本,获得弹性、可扩展性和高可用性,从而更专注于业务创新。

🛠️ 云原生架构七大原则

  1. 服务化原则
    当项目规模较大时,需要进行服务化拆分,如微服务或小服务架构。服务化可以提高复用性,并方便对服务进行流量控制和治理。

  2. 弹性原则
    系统应具备自动伸缩的能力,根据业务需求弹性调整资源。这可以缩短上线时间、降低成本,并应对突发的业务扩张需求。

  3. 可观测性原则
    在分布式环境下需要更强的可观测性,包括日志、链路跟踪、指标等。这些可以帮助运维、开发和业务人员实时掌握系统运行状态并进行优化。

  4. 韧性原则
    系统需具备抵御各种硬件和软件异常的能力,提升平均无故障时间。这包括异步化、限流、降级、高可用等多维度的架构设计。

  5. 全流程自动化原则
    利用自动化工具实现交付流程的标准化和自动化,提高交付效率,并减少人工操作带来的风险。

  6. 零信任原则
    转向基于身份的访问控制,解决研发、测试、运维等场景下的隔离和访问控制问题,不再依赖传统网络边界的安全思路。

  7. 持续演进原则
    架构需具备持续演进的能力,应对技术和业务的快速变化。需要考虑遗留应用的迁移成本和风险,采取渐进式的架构演进策略。

🧩 七大主要架构模式

  1. 服务化架构模式
    以应用模块为颗粒度将软件拆分,使用接口契约和标准协议实现模块之间的互联互通。结合DDD、TDD和容器化部署,提升代码质量和迭代速度。典型模式包括微服务和小服务模式。

  2. Mesh化架构模式
    将中间件从业务进程中分离,在业务进程中只保留“薄”的客户端部分。由Mesh进程处理分布式架构模式如熔断、限流等,提供更好的安全性、环境隔离和测试能力。

  3. Serverless 模式
    将应用部署从运维中“收走”,由云负责处理请求/事件并调度业务进程,适用于事件驱动的计算任务、短请求/响应应用等。

  4. 存储计算分离模式
    无状态应用可以获得更好的弹性,推荐使用云服务存储各类数据,对于性能敏感的状态可采用时间日志+快照的方式。

  5. 分布式事务模式
    微服务使用私有数据源会导致分布式事务问题,架构师需根据场景选择合适的分布式事务模式如XA、BASE、TCC等。

  6. 可观测架构
    包括日志、链路跟踪和指标监控,需要选择合适的开源框架并规范可观测数据,目标是为服务SLO度量提供依据。

  7. 事件驱动架构
    事件具有Schema,可校验有效性并提供QoS保障,可应用于服务解耦、CQRS、数据变化通知等场景,适用于大量事件流处理和基于事件触发的响应。

🏢 云原生架构反模式

  1. 庞大的单体应用
    问题在于缺乏依赖隔离,包括代码耦合、模块间接口缺乏治理、不同模块开发发布进度难以协调、单个模块不稳定影响整个应用等。解决方案是通过服务化进行适度拆分,梳理聚合根,明确服务模块边界和模块间接口定义,让组织关系和架构关系匹配。

  2. 单体应用"硬拆"为微服务
    过度服务化拆分会导致新架构与组织能力不匹配,影响架构升级效果。典型问题包括小规模软件过度拆分、服务间数据依赖、服务拆分导致性能下降等。

  3. 缺乏自动化能力的微服务
    随着软件规模增大,人工处理开发测试运维等会导致交付时间变长、风险提升、运维成本增加等问题。需要建立完善的自动化能力,包括自动化测试、发布、环境管理等,以应对复杂度的提升。

🌐 云服务市场占有率总结

全球主要云服务提供商

  1. Amazon Web Services (AWS)

    • 市场占有率:约30-40%
    • AWS提供广泛的服务,包括计算、存储和网络。
  2. Microsoft Azure

    • 市场占有率:约20-30%
    • 与微软软件和企业解决方案紧密集成。
  3. Google Cloud Platform (GCP)

    • 市场占有率:约10%
    • 专注于数据分析和机器学习。

中国主要云服务提供商

  1. 阿里云

    • 中国最大的云服务提供商,提供全面的云计算服务。
  2. 腾讯云

    • 专注于游戏、金融和社交媒体领域的云服务。
  3. 华为云

    • 在中国市场占有不断增长的份额,影响力持续扩展。

备注:市场占有率数据可能有所波动,且全球云服务市场不断发展,新服务层出不穷。

云服务技术栈

Amazon Web Services (AWS) 🌐

  • 计算:EC2、Lambda、ECS、EKS(Kubernetes)、Fargate
  • 存储:S3、EBS、EFS、Glacier
  • 数据库:RDS、DynamoDB、Aurora、Redshift、ElastiCache
  • 网络:VPC、Route 53、ELB、API Gateway
  • 安全:IAM、Cognito、KMS、GuardDuty、WAF
  • DevOps:CodePipeline、CodeBuild、CodeDeploy、CloudFormation、CloudWatch
  • AI/ML:SageMaker、Rekognition、Comprehend、Lex、Polly
  • 分析:EMR、Kinesis、Athena、Glue、Quicksight

Microsoft Azure ☁️

  • 计算:Azure Virtual Machines、Azure Functions、Azure Kubernetes Service (AKS)、App Service
  • 存储:Blob Storage、Azure Files、Disk Storage、Archive Storage
  • 数据库:Azure SQL Database、Cosmos DB、Azure Database for PostgreSQL/MySQL
  • 网络:Azure Virtual Network、Azure DNS、Azure Load Balancer、Application Gateway
  • 安全:Azure Active Directory、Key Vault、Azure Security Center、Azure Firewall
  • DevOps:Azure DevOps、Azure Pipelines、Azure Repos、Azure Resource Manager (ARM) Templates
  • AI/ML:Azure Machine Learning、Cognitive Services、Bot Service、Azure Databricks
  • 分析:Azure Synapse Analytics、HDInsight、Data Lake Storage、Stream Analytics

Google Cloud Platform (GCP) 🌍

  • 计算:Compute Engine、App Engine、Cloud Functions、Google Kubernetes Engine (GKE)、Cloud Run
  • 存储:Cloud Storage、Persistent Disk、Filestore、Archive Storage
  • 数据库:Cloud SQL、Cloud Spanner、Bigtable、Firestore、BigQuery
  • 网络:VPC、Cloud DNS、Cloud Load Balancing、Cloud CDN、Cloud NAT
  • 安全:Cloud IAM、Cloud Key Management Service (KMS)、Cloud Armor、Security Command Center
  • DevOps:Cloud Build、Cloud Deployment Manager、Container Registry、Cloud Monitoring
  • AI/ML:AI Platform、AutoML、Vision AI、Natural Language AI、Speech-to-Text
  • 分析:BigQuery、Dataflow、Dataproc、Pub/Sub、Data Studio

阿里云 (Alibaba Cloud) 🐘

  • 计算:ECS(弹性计算服务)、Function Compute、容器服务Kubernetes版(ACK)
  • 存储:OSS(对象存储服务)、NAS、云盘、归档存储
  • 数据库:RDS、PolarDB、MongoDB、Redis、DataWorks
  • 网络:VPC、SLB(负载均衡)、云解析DNS、API网关
  • 安全:RAM(资源访问管理)、KMS、DDoS防护、Web应用防火墙
  • DevOps:CloudToolkit、云效、资源编排(ROS)、日志服务(SLS)
  • AI/ML:PAI(机器学习)、图像识别、自然语言处理、智能对话机器人
  • 分析:MaxCompute、DataWorks、Quick BI、实时计算Flink版

腾讯云 (Tencent Cloud) 🛠️

  • 计算:CVM(云服务器)、SCF(Serverless Cloud Function)、TKE(腾讯云容器服务)
  • 存储:COS(对象存储)、CFS(文件存储)、CBS(云硬盘)、归档存储
  • 数据库:云数据库CynosDB、云数据库MySQL、云数据库MongoDB、Redis、TDSQL
  • 网络:私有网络、负载均衡、云解析、API网关
  • 安全:CAM(访问管理)、KMS、DDoS高防、WAF(Web应用防火墙)
  • DevOps:云开发、TAPD(敏捷开发)、CI/CD工具、日志服务
  • AI/ML:TI平台、智能对话平台、腾讯云小微、图像分析与处理
  • 分析:大数据套件、EMR、实时数据仓库、数据湖分析

华为云 (Huawei Cloud) 🚀

  • 计算:弹性云服务器(ECS)、FunctionGraph(函数计算)、云容器引擎(CCE)
  • 存储:OBS(对象存储)、SFS(文件存储)、EVS(弹性文件服务)、归档存储
  • 数据库:RDS、GaussDB、DCS(分布式缓存服务)、DDS(文档数据库服务)
  • 网络:VPC、ELB、云解析服务、API网关
  • 安全:IAM、KMS、WAF、态势感知
  • DevOps:DevCloud、云容器实例(CCI)、HECS(黑石物理服务器)、应用运维管理
  • AI/ML:ModelArts、语音服务、图像识别、NLP服务
  • 分析:数据湖探索、MRS(MapReduce服务)、DLI(数据湖探索)、云搜索服务

总结 🧐

云原生架构是一种充分利用云计算的特性来构建和运行应用程序的方法,强调服务化、弹性、自动化和可观测性。它可以通过微服务、容器化、Serverless、DevOps和CI/CD等技术栈,实现应用的快速部署、弹性伸缩和持续交付。云服务提供商,如AWS、Azure、GCP、阿里云、腾讯云和华为云等,提供了丰富的云服务,涵盖计算、存储、数据库、网络、安全、AI/ML、DevOps和分析等领域,为企业在云端部署和管理应用提供了有力支持。

🎓 记忆口诀

云原生架构的七大原则,我们可以用以下口诀: “服务弹性可见,韧性自动零变”

  • 服务:服务化原则
  • 弹性:弹性原则
  • 可见:可观测性原则
  • 韧性:韧性原则
  • 自动:全流程自动化原则
  • 零:零信任原则
  • 变:持续演进原则

云原生架构的七大架构模式,我们可以用以下口诀: “服网免存事观事”

  • 服:服务化架构模式
  • 网:Mesh化架构模式(网络服务网格)
  • 免:Serverless 模式(免服务器)
  • 存:存储计算分离模式
  • 事:分布式事务模式
  • 观:可观测架构
  • 事:事件驱动架构

🌌 趣味记忆互联网案例故事

想象你是一家互联网企业的首席技术官,类似于一位宇宙探险家,正在探索一颗全新的星球——一个全新的社交应用。你刚刚在这个星球上建立了一个初步的基地,开始时一切都像科幻电影里的开场白一样顺利。但是,随着越来越多的星际居民(用户)来到你的基地,系统开始变得像巨型太空飞船里的老旧电脑一样迟缓,体验也变得糟糕得像黑洞。

于是,你决定采取一项大胆的宇宙改造计划——引入云原生科技。你将应用拆分成多个独立的**“太空站”**,每个太空站都负责不同的任务,比如:

  • 银河认证站:处理用户认证
  • 消息传递星际站:管理消息服务
  • 星际好友联络站:维护好友关系

为了应对突发的星际移民潮,你还部署了自动弹性伸缩系统,就像在宇宙中召唤更多的太空飞船,以应对突然的访问高峰。

你还在你的宇宙基地中安装了全景星图监控器,实时跟踪系统的健康状态和性能。一旦发现有星际风暴来袭,你可以立即进行修复。为了提高系统的韧性,你为每个太空站设定了星际熔断器流量控制器,确保某个太空站发生故障时不会让整个宇宙陷入混乱。

你还使用了自动化宇宙飞船,实现了从代码提交到部署上线的全自动化,就像在宇宙中让新科技快速无缝地进入使用。为了确保宇宙的安全,你引入了零信任宇宙协议,所有的访问都需要经过严格的身份验证和授权,确保宇宙中不会有任何不速之客。

随着时间的推移,你的宇宙基地不断升级,变得更加适应各种星际挑战。最终,这个社交应用成为了整个宇宙的明星,用户体验也达到了银河系的巅峰。

通过这个故事,你可以更好地理解云原生架构如何帮助企业应对各种技术挑战,实现商业目标。就像一位高明的宇宙探险家,你驾驭着不断进化的科技,成功探索了星际社交的无限可能!

参与点评
读者朋友们,如果您在阅读过程中,对文章的质量、易理解性有任何建议,欢迎在评论区指出,我会认真改进。

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

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

相关文章

C++ | Leetcode C++题解之第403题青蛙过河

题目&#xff1a; 题解&#xff1a; class Solution { public:bool canCross(vector<int>& stones) {int n stones.size();vector<vector<int>> dp(n, vector<int>(n));dp[0][0] true;for (int i 1; i < n; i) {if (stones[i] - stones[i -…

【tomcat】tomcat学习笔记

文章目录 1.tomcat乱码问题1.1 linux乱码中文显示乱码问号问题1.2windows乱码1.2.1 方式一1.2.2方式二 1.3 Idea中运行tomcat乱码问题 2. 获取tomcat启动端口号3. idea运行tomcat 的配置问题4.dockerfile构建tomcat镜像问题4.1 替换端口号 5.启动多个tomcat方法6.修改tomcat JA…

Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】

Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】 目录 Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】 一、简单介绍 二、 Unity 设计模式 1、Unity 开发中使用设计模式的特点 2…

LabVIEW软件维护的内容是什么呢?

LabVIEW软件维护涉及多个方面&#xff0c;确保程序的正常运行和长期稳定性。维护内容包括以下几个方面&#xff1a; 1. Bug修复 在开发和运行过程中&#xff0c;可能会出现各种软件问题或缺陷&#xff08;bugs&#xff09;。维护工作之一就是识别这些问题并通过修复程序中的代…

MATLAB 在数学建模中的深入应用:从基础到高级实践

目录 前言 一、MATLAB基础知识 1.1 MATLAB工作环境简介 1.1.1 命令窗口&#xff08;Command Window&#xff09; 1.1.2 工作区&#xff08;Workspace&#xff09; 1.1.3 命令历史&#xff08;Command History&#xff09; 1.1.4 编辑器&#xff08;Editor&#xff09; 1…

独立站冷启动SOP之市场和竞品调研1.0丨出海笔记

大家好&#xff0c;我是出海笔记Club的创始人Alan&#xff0c;过去半年我们做了15期的操盘手面对面&#xff0c;主要围绕的是跨境电商独立站的冷启动&#xff0c;基本上大部分方法和路径我们都覆盖到了。 我把目的&#xff0c;调研内容和可以使用的工具都罗列出来&#xff0c;…

Golang | Leetcode Golang题解之第417题太平洋大西洋水流问题

题目&#xff1a; 题解&#xff1a; type pair struct{ x, y int } var dirs []pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}func pacificAtlantic(heights [][]int) (ans [][]int) {m, n : len(heights), len(heights[0])pacific : make([][]bool, m)atlantic : make([][]bool, …

如何使用 maxwell 同步到 redis?

文章目录 1、MaxwellListener2、MxwObject1. 使用Maxwell捕获MySQL变更2. 将Maxwell的输出连接到消息系统3. 从消息系统读取数据并同步到Redis注意事项 1、MaxwellListener package com.atguigu.tingshu.album.listener;import com.alibaba.fastjson.JSON; import org.apache.…

【RabbitMQ】重试机制、TTL

重试机制 在消息从Broker到消费者的传递过程中&#xff0c;可能会遇到各种问题&#xff0c;如网络故障、服务不可用、资源不足等&#xff0c;这些问题都可能导致消息处理失败。为了解决这些问题&#xff0c;RabbitMQ提供了重试机制&#xff0c;允许消息在处理失败之后重新发送…

汇编语言的基本指令及基本使用操作

一、立即数 立即数判断规则&#xff1a; 如果某个数的数值范围是0~255之间&#xff0c;那么这个数一定是立即数&#xff1b; 把某个数展开成2进制&#xff0c;这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位&#xff1b; 这个数的二进制序列的右边必须为偶数个…

Java-Day02学习

Java-Day02 一维数组 1.声明数组 int[ ] a; //声明数组时不规定数组长度 2.分配空间 a new int[5]; //分配空间: 告诉计算机分配几个连续的空间。eg:scores new int[30]; avgAge new int[6]; name new String[30]; 3.赋值 a [0] 8; //向分配的格子里放数…

结构体易忘点

结构体初始化 当我们去初始化一个结构体的时候&#xff0c;我们常常会按变量顺序初始化&#xff0c;但其实也可以不按顺序&#xff0c;同时也可以部分数据初始化。 结构体对齐 结构体里面的成员有一定的对齐规则&#xff0c;他不是每一个空间都存着有效数据的&#xff0c;有些…

大型语言模型 (LLM) 劫持攻击不断升级,导致每天损失超过 100,000 美元

Sysdig 威胁研究团队 (TRT) 报告称&#xff0c;LLMjacking&#xff08;大型语言模型劫持&#xff09;事件急剧增加&#xff0c;攻击者通过窃取的云凭证非法访问大型语言模型 (LLM)。 这一趋势反映了 LLM 访问黑市的不断增长&#xff0c;攻击者的动机包括个人使用和规避禁令和制…

小米机型“工程固件” 小米13工程资源预览 写入以及nv损坏修复

目前各大品牌机型中。可以录数于小米机型的工程固件最全 最多。这个也由于小米机型的加密机制比较特殊 。每款新机型发布后不久。工程包就会出现。从小米5起始以及红米note4起始都有工程固件。另外在维修行业中。米系机型更换cpu都需要先写入对应的绑定包。然后才可以写入官方m…

C++竞赛初阶L1-16-第七单元-字符串(36~37课)559: T456513 统计数字字符个数

题目内容 输入一行字符&#xff0c;统计出其中数字字符的个数。 输入格式 一行字符串&#xff0c;总长度不超过 255。 输出格式 输出为 1 行&#xff0c;输出字符串里面数字字符的个数。 样例 1 输入 Today is 2021-03-27 样例 1 输出 8 程序代码输出&#xff1a; #i…

idea多模块启动

文章目录 idea多模块启动2018版本的idea2019版本的idea idea多模块启动 2018版本的idea 1.首先看一下view> Tool Windows下有没有Run Dashboard 如果有&#xff0c;点击一下底部的窗口就会出现 如果不存在&#xff0c;执行下一步 2.查看自己项目的工作空间位置 点击 File&…

获取参数

获取querystring参数 querystring 指的是URL中 ? 后面携带的参数&#xff0c;例如&#xff1a;http://127.0.0.1:9090/web?query杨超越。 获取请求的querystring参数的方法如下&#xff1a; 方法1&#xff1a; Query package main// querystringimport ("github.com/…

如何通过IntelliJ IDEA 创建HTML项目

1、什么是IDEA? IntelliJ IDEA 是 JetBrains 开发的一款集成开发环境(IDE),主要用于 Java 编程,但也支持其他编程语言如 Kotlin、Groovy 和 Scala。它的特点包括智能代码补全、代码重构、集成版本控制、调试工具和丰富的插件支持。IDEA 提供了一个直观的用户界面,帮助开发…

ffmpeg面向对象——参数配置秘密探索及其设计模式

ffmpeg支持很多参数配置——拉流配置推流配置等等——那么庞大繁杂的配置项&#xff0c;如果是你&#xff0c;该如何实现呢&#xff1f; 其实看过一点点源码&#xff08;不用全部&#xff09;后发现&#xff0c;就是它的实现也是遵循一个朴素的思想——所谓“大道至简”&#x…

用 Delphi 实现一个基本的网页邮件抓取和发送功能

如何用 Delphi 实现一个基本的网页邮件抓取和发送功能。以下示例仅作为概念验证&#xff0c;实际应用中需要考虑更多的细节和技术问题。 示例&#xff1a;从简单网页抓取邮件并发送 1. 环境准备 假设你已经安装了 Delphi&#xff0c;并且安装了 Indy 组件库。Indy 是一个用于…