框架、云原生、微服务的基本概念

news2025/3/15 18:15:47

架构

互联网应用的架构设计随着业务需求的增长和技术的发展经历了从单一架构到垂直架构,再到分布式架构的演变。以下是这三种架构的定义、特点以及具体的例子:


1. 单一架构(Monolithic Architecture)

定义

单一架构是一种将所有功能集成到一个单一的、大型的应用程序中的架构方式。这种架构通常是一个独立的进程,包含了应用的所有模块和功能。

特点

1.简单性:开发和部署相对简单,所有功能都在同一个代码库中。
2.性能优势:由于所有功能都在同一个进程中运行,内部调用效率高,没有网络延迟。
3.可扩展性差:随着业务增长,代码变得庞大且难以维护,扩展性受限。
4.可靠性问题:一个模块的故障可能导致整个应用崩溃。

例子

假设有一个小型的电商网站,其功能包括用户管理、订单处理、商品展示和支付。在单一架构下,所有这些功能都打包在一个应用程序中,代码结构可能如下:

ECommerceApp/
├── main.go
├── user.go
├── order.go
├── product.go
└── payment.go
  • 部署:整个应用打包成一个可执行文件,部署在一台服务器上。
  • 问题:随着用户量和功能的增加,代码变得复杂,开发和维护成本急剧上升,扩展性差。

2. 垂直架构(Vertical Architecture)

定义

垂直架构是将应用按照功能模块划分为多个独立的子系统,每个子系统负责特定的业务功能,但仍然部署在同一台服务器上。这种架构是单一架构的扩展,通过模块化解决了部分可维护性问题。

特点

1.模块化:功能模块化,便于开发和维护。
2.独立性:每个模块可以独立开发和测试,但仍然共享同一数据库。
3.扩展性有限:虽然模块化改善了开发体验,但部署仍然受限于单台服务器的资源。
4.性能瓶颈:随着业务增长,单台服务器可能成为性能瓶颈。

例子

以一个中型电商网站为例,其功能模块化为用户管理、订单处理、商品展示和支付等子系统,但仍然部署在同一台服务器上:

ECommerceApp/
├── UserModule/
│   ├── user.go
│   └── user_controller.go
├── OrderModule/
│   ├── order.go
│   └── order_controller.go
├── ProductModule/
│   ├── product.go
│   └── product_controller.go
└── PaymentModule/
    ├── payment.go
    └── payment_controller.go
  • 部署:虽然模块化,但所有模块仍然打包成一个可执行文件,部署在一台服务器上。
  • 问题:虽然模块化改善了开发体验,但随着业务增长,单台服务器的资源可能无法满足需求,导致性能瓶颈。

3. 分布式架构(Distributed Architecture)

定义

分布式架构是将应用拆分为多个独立的服务,每个服务负责特定的业务功能,并且可以独立部署在不同的服务器或容器中。服务之间通过网络通信(如HTTP、gRPC、消息队列等)进行协作。

特点

1.高可扩展性:每个服务可以独立扩展,根据业务需求灵活调整资源。
2.高可用性:服务之间解耦,一个服务的故障不会导致整个系统崩溃。
3.技术栈灵活性:不同服务可以使用不同的技术栈,便于快速迭代。
4.复杂性增加:需要处理分布式系统的复杂性,如服务发现、配置管理、分布式事务等。

例子

以一个大型电商网站为例,其功能被拆分为多个独立的微服务,每个服务独立部署:
1.用户服务(UserService):负责用户注册、登录、权限管理等。
2.订单服务(OrderService):负责订单创建、订单状态管理等。
3.商品服务(ProductService):负责商品信息管理、库存管理等。
4.支付服务(PaymentService):负责支付流程、支付状态管理等。
每个服务独立部署在不同的服务器或容器中,通过API网关进行通信:

UserService/
├── main.go
├── user.go
└── user_controller.go

OrderService/
├── main.go
├── order.go
└── order_controller.go

ProductService/
├── main.go
├── product.go
└── product_controller.go

PaymentService/
├── main.go
├── payment.go
└── payment_controller.go
  • 部署:每个服务独立部署,可以使用容器化(如Docker)、容器编排(如Kubernetes)进行管理和扩展。
  • 通信:服务之间通过HTTP/REST、gRPC或消息队列(如RabbitMQ、Kafka)进行通信。
  • 优势:随着业务增长,可以灵活扩展每个服务的实例数量,提高系统的整体性能和可用性。

三种架构的对比

在这里插入图片描述


总结

互联网应用的架构设计从单一架构到垂直架构,再到分布式架构,反映了业务需求和技术发展的演进过程。单一架构适合小型应用,垂直架构适合中型应用,而分布式架构则适合大型、高并发、高可用性的应用。随着业务的复杂性和规模的增加,分布式架构成为现代互联网应用的主流选择。

云原生架构是什么

云原生架构是一种专为云环境设计的应用架构,旨在充分利用云计算的弹性、灵活性和可扩展性,以构建高效、可靠且易于维护的应用。它强调通过现代技术和方法论,实现快速迭代、高效部署和灵活扩展,从而满足现代企业对敏捷开发和快速响应市场变化的需求。


云原生架构的核心特点

1.容器化
使用容器技术(如Docker)将应用程序及其依赖项打包成标准化的单元,确保应用在不同环境(开发、测试、生产)中的一致性。容器化提高了资源利用率,减少了部署时间。
2.微服务架构
将复杂应用拆分为多个小型、独立的服务,每个服务围绕特定业务功能构建,并通过轻量级通信协议(如HTTP/REST、gRPC)进行交互。微服务架构提高了系统的可维护性和可扩展性。
3.动态编排
利用容器编排工具(如Kubernetes)自动管理容器的生命周期,实现自动扩缩容、故障恢复和负载均衡。
4.持续交付(CI/CD)
通过自动化工具和流程实现代码提交到部署的全流程自动化,加快迭代速度,提高软件质量。
5.声明式API
通过声明式接口(如Kubernetes的YAML配置文件)定义应用的期望状态,平台自动确保实际状态与期望一致,简化了操作和管理。
6.无服务器架构(Serverless)
开发者无需管理底层服务器,只需编写和运行代码,平台按需分配资源并计费。无服务器架构进一步降低了运维成本。


云原生架构的应用场景

1.高并发系统
如电商平台、视频流媒体平台等,需要在高负载下保持稳定运行,云原生架构通过弹性伸缩和微服务化满足这一需求。
2.多云与混合云环境
云原生架构支持在不同云平台之间无缝迁移和部署,适合跨云管理。
3.DevOps与敏捷开发
云原生架构支持持续集成和持续交付,帮助团队快速迭代产品。
4.物联网(IoT)平台
通过微服务架构和容器化技术,快速处理和响应大量设备数据。


云原生架构的优势

1.加速开发
微服务架构和CI/CD流程使团队能够快速迭代和发布新功能。
2.提升运营效率
自动化运维和容器化技术减少了人工干预,降低了运维成本。
3.资源利用优化
容器化和无服务器计算按需分配资源,避免资源浪费。
4.高可用性和弹性
通过动态编排和微服务架构,系统能够快速响应负载变化,保持高可用。


总结

云原生架构通过容器化、微服务、动态编排等技术,为企业提供了构建高效、可扩展和灵活应用的能力。它不仅简化了开发和运维流程,还通过弹性伸缩和自动化提高了系统的可靠性。随着云计算技术的不断发展,云原生架构已成为企业数字化转型的重要选择。


一、微服务概念

(一)定义

微服务架构是一种将复杂应用程序分解为一组小型、独立服务的架构风格。每个微服务都围绕特定的业务功能构建,运行在其独立的进程中,并通过轻量级的通信机制(通常是HTTP/REST、gRPC等)协同工作。微服务可以使用不同的技术栈和编程语言开发,能够独立部署、扩展和维护。

(二)特点

1.独立性

  • 独立开发:微服务可以由不同的团队独立开发,每个团队可以自由选择最适合的技术栈,而不必担心与其他服务的兼容性问题。例如,一个电商系统的订单服务可以使用Java开发,而用户服务可以使用Python开发。
  • 独立部署:每个微服务可以独立部署,一个服务的更新不会影响其他服务的运行。比如,当需要修复用户服务中的一个漏洞时,只需重新部署用户服务,而无需重新部署整个应用程序。
  • 独立扩展:微服务可以根据自身的负载情况独立扩展。如果订单服务的请求量突然增加,可以单独增加订单服务的实例数量,而不需要对整个系统进行扩容。

2.围绕业务能力组织

  • 微服务以业务能力为边界,将相关的功能封装在一起。例如,在一个物流系统中,可以将运输服务、仓储服务和配送服务分别作为独立的微服务,每个服务都专注于其特定的业务逻辑。

3.轻量级通信

  • 微服务之间通过轻量级的通信机制进行交互。常用的通信方式包括HTTP/REST、消息队列(如RabbitMQ、Kafka)和gRPC。例如,用户服务可以通过HTTP请求调用订单服务来查询用户的订单信息,或者通过消息队列接收订单服务发送的订单状态更新消息。

4.去中心化治理

  • 微服务架构中没有统一的数据库和代码库,每个微服务都有自己的数据库和代码库。这样可以避免单点故障,提高系统的可用性和可靠性。例如,用户服务有自己的用户数据库,订单服务有自己的订单数据库,即使用户数据库出现问题,也不会影响订单服务的正常运行。

(三)优势

1.敏捷开发与快速迭代

  • 微服务的独立性使得开发团队可以快速开发和迭代服务。一个团队可以专注于一个微服务的开发,而不会受到其他服务的干扰。例如,一个电商网站的促销服务团队可以在不影响其他服务的情况下,快速开发新的促销活动功能。

2.技术栈灵活性

  • 开发团队可以根据微服务的业务需求选择最适合的技术栈。例如,对于需要高性能计算的服务,可以使用C++开发;对于需要快速开发的服务,可以使用JavaScript开发。

3.容错性

  • 微服务架构的去中心化特性使得系统具有较高的容错性。一个服务的故障不会导致整个系统的崩溃,其他服务仍然可以正常运行。例如,如果支付服务出现故障,用户仍然可以浏览商品和下单,只是无法完成支付操作。

4.可扩展性

  • 微服务可以根据自身的负载情况独立扩展。系统可以根据业务需求灵活地增加或减少服务实例的数量,从而提高系统的可扩展性。

(四)挑战

1.分布式系统的复杂性

  • 微服务架构是一个分布式系统,需要解决分布式系统中的各种问题,如服务发现、配置管理、分布式事务等。例如,当一个微服务调用另一个微服务时,需要通过服务发现机制找到被调用服务的地址。

2.数据一致性

  • 由于每个微服务都有自己的数据库,数据一致性是一个挑战。例如,当用户下单后,订单服务和库存服务需要保持数据一致性,如果订单服务记录了订单信息,但库存服务没有及时更新库存数量,就会导致数据不一致。

3.运维复杂性

  • 微服务架构需要管理大量的服务实例,运维复杂性较高。需要监控每个服务的运行状态、性能指标等,还需要处理服务之间的通信问题。例如,需要监控订单服务的响应时间、吞吐量等指标,同时还需要处理订单服务与其他服务之间的通信延迟问题。

二、CAP原则

(一)定义

CAP原则(也称为CAP定理)是由加州大学伯克利分校的Eric Brewer教授在2000年提出的,用于描述分布式系统中三个基本特性——一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)之间的权衡关系。CAP原则指出,在一个分布式系统中,这三个特性最多只能同时满足两个,无法同时满足三个。

(二)三个特性

1.一致性(Consistency)

  • 一致性是指在分布式系统中,所有节点上的数据在任何时刻都保持一致。当一个节点更新数据后,其他节点能够立即看到更新后的数据。例如,在一个分布式数据库中,当一个客户端向一个节点写入数据后,其他节点上的数据也会立即更新,客户端在任何时刻都能读取到最新的数据。

2.可用性(Availability)

  • 可用性是指分布式系统中的每个节点在任何时刻都能正常响应客户端的请求。即使部分节点出现故障,系统仍然能够正常运行。例如,在一个电商网站中,即使部分服务器出现故障,用户仍然可以正常访问网站,完成购物操作。

3.分区容错性(Partition Tolerance)

  • 分区容错性是指分布式系统在面对网络分区故障时,仍然能够正常运行。网络分区是指由于网络故障等原因,分布式系统中的部分节点之间无法通信。例如,在一个分布式系统中,如果网络故障导致部分节点之间的通信中断,系统仍然能够正常运行,不会出现数据丢失或服务不可用的情况。

(三)CAP的权衡

1.CP系统(一致性 + 分区容错性)

  • 这类系统在面对网络分区时,会优先保证数据的一致性。当网络分区发生时,系统会拒绝部分请求,以确保数据在所有节点上保持一致。例如,Zookeeper是一个典型的CP系统。在分布式环境中,当部分节点之间的通信中断时,Zookeeper会通过选举新的领导者来保证数据的一致性,但可能会导致部分客户端的请求无法得到响应。

2.AP系统(可用性 + 分区容错性)

  • 这类系统在面对网络分区时,会优先保证系统的可用性。即使部分节点之间的通信中断,系统仍然能够正常响应客户端的请求,但可能会导致数据不一致。例如,Cassandra是一个典型的AP系统。在分布式环境中,当部分节点之间的通信中断时,Cassandra会允许客户端继续写入数据,但可能会导致数据在不同节点上不一致。

3.CA系统(一致性 + 可用性)

  • 这类系统在没有网络分区的情况下,可以同时保证数据的一致性和系统的可用性。但在分布式环境中,网络分区是不可避免的,因此CA系统在实际应用中很少存在。例如,传统的单体数据库(如MySQL)在没有分布式架构的情况下,可以同时保证数据的一致性和系统的可用性,但一旦引入分布式架构,就无法同时满足这三个特性。

三、DDD理论(领域驱动设计)

(一)定义

领域驱动设计(DDD,Domain-Driven Design)是一种软件设计方法,它强调以业务领域为中心,通过深入理解和建模业务领域,将复杂的业务需求转化为可维护、可扩展的软件系统。DDD的核心思想是将业务领域和软件设计紧密结合,让软件系统能够更好地反映业务需求,提高系统的可维护性和可扩展性。

(二)核心概念

1.领域(Domain)

  • 领域是业务问题的范围和边界。它定义了系统的业务范围和业务规则。例如,在一个电商系统中,领域可以包括用户管理、订单处理、支付流程等。

2.模型(Model)

  • 模型是对领域中业务概念和业务规则的抽象表示。它通过代码、图表等方式将领域中的概念和规则表达出来。例如,在电商系统的订单处理领域中,模型可以包括订单类、订单状态类、订单操作类等。

3.领域模型(Domain Model)

  • 领域模型是领域中业务概念和业务规则的集合。它通过类、对象、关系等方式将领域中的业务逻辑表达出来。例如,在电商系统的用户管理领域中,领域模型可以包括用户类、用户角色类、用户权限类等,以及它们之间的关系。

4.聚合(Aggregate)

  • 聚合是一组相关对象的集合,它们作为一个整体进行数据一致性和完整性管理。聚合有一个聚合根(Aggregate Root),它是聚合的入口点。例如,在电商系统的订单处理领域中,订单聚合可以包括订单对象、订单项对象、订单状态对象等,订单对象是聚合根。

5.实体(Entity)

  • 实体是具有唯一标识的对象,它的身份在生命周期内保持不变。例如,在电商系统的用户管理领域中,用户对象是一个实体,每个用户都有一个唯一的用户ID。

6.值对象(Value Object)

  • 值对象是不可变的对象,它的值在创建后不能改变。值对象没有唯一标识

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

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

相关文章

Discuz建站教程之论坛头部logo跳转链接怎么修改?

在修改头部logo跳转链接前&#xff0c;我们需要知道对应代码在哪个文件目录&#xff0c;进入宝塔或是服务器&#xff0c;找到文件&#xff1a;\template\default\common\header.htm&#xff0c;编辑器打开&#xff0c;搜索以下代码&#xff0c;大概在135行 <a href"{i…

AI重构SEO关键词布局

内容概要 在搜索引擎优化&#xff08;SEO&#xff09;领域&#xff0c;AI技术的深度应用正在颠覆传统关键词布局逻辑。通过机器学习算法与语义分析模型&#xff0c;智能系统能够实时解析海量搜索数据&#xff0c;构建动态词库并精准捕捉用户意图。相较于依赖人工经验的关键词筛…

OpnenHarmony 开源鸿蒙北向开发——1.开发环境搭建(DevEco Studio 5.03)

我这边是基于window下对OpenHarmony开源鸿蒙进行北向开发。 一、安装DevEco Studio 1、下载 下载中心 | 华为开发者联盟-HarmonyOS开发者官网&#xff0c;共建鸿蒙生态 2、安装 下载完成之后进行解压 双击进行安装 按照我的步骤进行 选择安装目录&#xff0c;全部配置完成后…

钉钉(excel)能让表格中不是‘北京’的字符串自动加亮显示(方便查看)以及隔行填充严颜色是斑马色(方便查看)嘛

在钉钉在线表格中&#xff0c;虽然功能相对Excel有所简化&#xff0c;但仍然可以通过条件格式实现对特定内容的高亮显示。以下是具体步骤&#xff1a; 一、在钉钉在线表格中设置条件格式 1. 打开钉钉在线表格 登录钉钉&#xff0c;进入“钉钉在线表格”应用。 打开你需要操作…

【工具】ReConPlot一个可视化和解释基因组重排的R包

文章目录 介绍代码案例加载R包导入数据 参考 介绍 人类肿瘤的全基因组测序研究表明&#xff0c;复杂形式的结构变异&#xff0c;统称为复杂基因组重排&#xff08;cgr&#xff09;&#xff0c;在不同类型的癌症中普遍存在。cgr的检测、分类和机制解释需要对体细胞拷贝数畸变&a…

OSPF-2 邻接建立关系

上一期我们说了OSPF的邻居建立关系以及OSPF邻居关系建立中建立失败的因素以及相关实验案例 这一期我们来说说OSPF的邻接关系建立时需要交互哪些报文以及失败因素及原因和相关实验案例 一、概述 在运行了OSPF的网络当中为了交互链路状态信息和路由信息,互相之间需要建立邻接关…

最完美的WPF无边框设计!

常规的无边框方法设计 常规的WPF无边框设计方法都是通过AllowsTransparency="True"和WindowStyle=“None”,并且使用WindowChrome样式来实现,但是这样会有问题就是,窗体最大化的时候将底部任务栏给挡住了,另外最大化的时候不能拖动窗体。参考这个大佬的设计@ 若…

工作记录 2017-01-12

序号 工作 相关人员 1 协助BPO进行Billing的工作。 处理Amazing Charts的数据查询。 修改BillingJobPoster&#xff0c;处理CCDA 的自动导入&#xff0c;预计还需一天才能完成。 修改录入Code的界面&#xff08;code 移动到指定位置&#xff09;&#xff0c;预计明天更新。…

【Linux】从互斥原理到C++ RAII封装实践

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

爬虫案例十三js逆向模拟登录中大网校

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、网站分析二、代码 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; js 逆向模拟登录中大网校 提示&#xff1a;以下是本篇文章正文内…

WPF窗口读取、显示、修改、另存excel文件——CAD c#二次开发

效果如下&#xff1a; using System.Data; using System.IO; using System.Windows; using Microsoft.Win32; using ExcelDataReader; using System.Text; using ClosedXML.Excel;namespace IfoxDemo {public partial class SimpleWindow : Window{public SimpleWindow(){Initi…

01 | Go 项目开发极速入门课介绍

提示&#xff1a; 所有体系课见专栏&#xff1a;Go 项目开发极速入门实战课。 你好&#xff0c;欢迎学习本课程。本课程是一个 Go 项目开发极速入门课程。旨在帮助刚学习完 Go 基础语法的 Go 开发者&#xff0c;快速掌握如何开发一个功能相对全面的 Go 项目。 根据课程设计目标…

Spring Cloud LoadBalancer 原理与实践

背景 当前我们的微服务架构基于Spring Cloud Alibaba体系&#xff0c;通过定制NacosRule实现了跨集群访问和灰度发布功能。但随着Spring Cloud与Nacos版本升级&#xff0c;官方已弃用Ribbon转向LoadBalancer&#xff0c;这要求我们完成以下技术升级&#xff1a; 负载均衡机制…

Vmware下的openEuler

1.下载openEuler操作系统镜像 https://repo.openeuler.org/openEuler-20.03-LTS/ISO/ 2.在VM新建虚拟机 3.虚拟机联网 我是出现了没有网络&#xff0c;ping不通的问题 参考&#xff1a;https://blog.csdn.net/FHY26828/article/details/140941234 修改文件&#xff1a; 在…

【瞎折腾/Dify】使用docker离线部署Dify

文章目录 说在前面安装Docker(外网)获取Dify源码(外网)拉取docker镜像(外网)导出镜像(内网)导入镜像(内网)运行问题 说在前面 外网操作系统&#xff1a;windows内网操作系统&#xff1a;ubuntu外网docker desktop版本&#xff1a;4.29.0外网docker版本&#xff1a;version 26.0…

Java EE Web环境安装

Java EE Web环境安装 一、JDK安装与测试&#xff08;Windows环境&#xff09; 1. 安装JDK 官网下载&#xff1a;Oracle JDK&#xff08;选择Windows x64 Installer&#xff09;双击安装包&#xff0c;按向导完成安装 ​ 2. 环境变量配置 右键【此电脑】→【属性】→【高级…

大语言模型基础之‘显存优化‘

上一篇可扩展的训练技术(二)中&#xff0c;我们介绍了零冗余优化器&#xff08;Zero Redundancy Optimizer, Zero&#xff09;&#xff0c;该技术由DeepSpeed代码库提出&#xff0c;主要用于解决数据并行中的模型冗余技术&#xff0c;即在数据并行训练中&#xff0c;每个GPU上都…

【Nexus】Maven 私服搭建以及上传自己的Jar包

Nexus 安装 docker run -d -uroot --name nexus3 --restartalways -p 8081:8081 -v /data/nexus-data/blobs:/nexus-data/blobs -v /etc/localtime:/etc/localtime sonatype/nexus3这里也提供一下docker-composer的方法 .env 文件 VERSIONlatest CONTAINER_NAMECONTAINER_N…

冠珠瓷砖×郭培“惟质致美”品质主题片上映,讲述高定艺术背后的致美品质故事

168年前&#xff0c;一位英国服装设计师&#xff0c;开创了「高级定制」的先河。时至今日&#xff0c;从服装到各行各业「高级定制」始终代表着对完美的极致追求&#xff0c;成为了行业至高境界的象征。 被誉为“中国高定第一人”&#xff0c;高级定制服装设计师郭培&#xff0…

3DS模拟器使用(pc+安卓)+金手指+存档互传

1、引言 3ds模拟器已经能够在手机端近乎完美模拟了&#xff0c;那么多的3ds游戏&#xff0c;比玩手机游戏舒服多了。 本人是精灵宝可梦的老玩家&#xff0c;从第一世代就一直在玩&#xff0c;刚耍完NDS的第五世代&#xff0c;黑白系列。现在到宝可梦XY了&#xff0c;需要在3d…