当前位置: 首页 > news >正文

AI架构的演进,从单体架构到云原生架构

1.1.1  一张图看懂单体架构

早期的计算机程序就像一个包含多个功能的瑞士军刀:所有功能都集中在一起。这就是单体架构。

这听起来有点像玩具积木盒,所有积木都放在一个盒子里,想玩哪个,从里面挑出来就行。方便吧?但是,当这个盒子里的积木越来越多时,你可能就开始懊恼——为何当初不买一个分隔板来组织一下盒子里的结构呢?随着时间和功能的增加,有时单体架构就会遇到这种情况。

单体架构如图1-1所示。

看上去是不是很整齐?所有业务都在一个“大房间”(服务器)中,用户业务、商品业务、订单业务、支付业务都有自己的“小房间”,所有数据都住在“地下室”(数据库)中,这整个“大房间”坐落在服务器的“土地”上。

但别忘了,这只是开始。随着业务变得火爆,这个“大房间”可能会逐渐变得不合适。后面章节会探讨如何将业务从这个“大房间”搬到一个更加宽敞的新地方。

1.1.2  一张图看懂集群架构

在单体架构中,所有业务模块都集中在同一个服务器中。随着业务量和用户量的增加,这种架构很快会遇到瓶颈:系统难以承受高并发的压力,开发和部署变得笨重,维护成本逐渐增加。

为了解决这些问题,需要一种新的架构来提高系统的可用性,这就是集群架构的起点。

集群架构实际上就是将单体架构复制多份,分别部署在多个服务器上,每个服务器都运行一个应用实例。这样,应用的访问和负载就被分散到不同的服务器上。当某个服务器出现故障时,其他服务器可以继续提供服务,从而实现高可用性。

在图1-2中,将单体架构复制到了两个服务器上。

集群架构通过一组协同工作的服务器来提供服务,这些服务器共同处理用户请求。相比于单体架构,集群架构提供了更强的处理能力和更好的容错性。

1.1.3  一张图看懂微服务架构

集群架构通过多个服务器的协同工作具备可伸缩性和冗余性,但在应对快速变化的市场和技术需求时,它仍然存在局限性,需要一种新的方式来更高效、灵活地开发和维护系统。这就要求后端系统能够支持更细粒度的服务划分和独立部署。此时可以考虑微服务架构,即将一个庞大的单体架构划分为更小、更易于管理和扩展的部分。

在考虑分布式数据库和分库分表时,实际上已经在数据层进行了微分。微服务架构可以被视为在应用层进行类似的微分,而不是将所有功能都打包在一个巨大的应用中。

微服务架构推崇将每个功能都作为一个单独的服务进行开发、部署和维护,如图1-3所示的用户业务、商品业务和支付业务。

1.集群架构中的服务划分

在集群架构中,服务划分的解决方案如下。

2.微服务架构中的业务划分

在微服务架构中,业务划分的解决方案如下。

3.微服务架构的核心特性

微服务架构被许多现代企业采纳,已经从一个技术趋势演变为当代软件设计和开发的核心策略。

微服务架构包括以下核心特性。

4.微服务架构与单体架构的区别

在单体架构中,所有模块都紧密地集成在单一的代码库中,构成了一个大而全的应用。微服务架构则将应用拆分为多个独立的服务,每个服务都负责单一的功能。

1)架构复杂性

单体架构通常在逻辑上是一致的虽然微服务架构中的每个服务的设计可能更简单、更小、更易于管理,但微服务架构的总体架构和互操作性可能比单体架构更复杂。微服务架构与单体架构的区别如图1-4所示。

2)开发与部署速度

在单体架构中,任何一个小的改动都可能需要重新部署整个应用。而对于微服务架构,团队可以独立地开发、测试和部署各服务,这大大提高了迭代和发布新功能的速度。

3)技术堆栈的灵活性

单体架构通常使用一种技术或框架来开发整个应用。但对于微服务架构,由于每个服务都是独立的,因此团队可以为各服务选择合适的技术和工具,从而最大化服务的性能和效率。

4)可扩展性

对于单体架构,当需要扩展时,通常需要增加整个应用实例。但对于微服务架构,可以根据需要独立地扩展某个特定的服务,这为高效的资源分配和负载分发提供了更高的灵活性。

5)容错性

如果单体架构的某个部分出现故障,那么整个应用都可能受到影响。而在微服务架构中,由于各服务是独立的,一个服务出现故障不太可能影响其他服务,从而提高了系统整体的稳定性。

6)数据管理

单体架构通常使用一个中央数据库来管理所有数据。而在微服务架构中,每个服务都可以有其私有的数据库,这确保了数据的独立性,但也为数据的一致性和完整性带来了挑战。

5.微服务架构的基本组件

在微服务架构中,每个服务都围绕着业务能力构建,并可以独立部署、扩展和更新。微服务架构的基本组件如图1-5所示。


1)服务组件

  • 务:微服务架构的核心组件,负责实现特定的业务功能。服务应该足够小,能够由一个小团队管理。
  • 数据库:每个服务都可以拥有私有数据库,这样可以避免数据库级别的耦合。
  • API网关:所有客户端请求都应先经过API网关,然后被路由到相应的微服务上。API网关用于处理跨服务的请求聚合、协议转换、请求过滤等。

2)通信机制

  • 同步通信:服务间直接通过REST或gRPC等方式进行调用。
  • 异步通信:通过使用消息队列系统(如RabbitMQ或Kafka)实现事件驱动的通信。

3)支持组件

  • 服务注册与发现:服务注册中心(如Eureka或Consul)用于自动注册服务;服务发现机制允许服务查询服务注册中心以找到其他服务的网络位置。
  • 配置管理:如Spring Cloud Config,用于管理所有环境和服务的配置。
  • 熔断器:如Hystrix,提供了一种失败保护机制,当服务失败或不可用时,熔断器将中断服务间的调用。
  • 负载均衡:负责在多个服务间分配请求,可以是客户端负载均衡,也可以是服务器负载均衡。

4)安全性和监控

  • 身份认证和授权:确保只有合法用户才可以访问服务,通常通过OAuth2等协议来实现。
  • 日志管理:通过ELK采集和管理日志,帮助开发者和运维人员监控和调试服务。
  • 监控和告警:通过监控工具(如Prometheus或Grafana)实时监控服务的健康状况,并在出现问题时发出告警。

5)DevOps和自动化

  • CI/CD(持续集成/持续部署):自动化测试和部署流程,可以确保代码变更在通过所有测试后能够自动部署到生产环境中。
  • 容器化:服务通常被打包为容器,以Docker部署,这样做可以提高环境的一致性,并简化部署和扩展过程。
  • 编排:在大规模部署时,服务需要通过编排工具(如Kubernetes)进行管理,以实现自动化部署、扩展和管理。

1.1.4  一张图看懂云原生架构

云原生架构(Cloud Native Architecture)是近年来在互联网领域快速兴起的一种架构。它充分利用云计算的弹性、灵活性和可扩展性,通过容器化、微服务、持续交付和自动化编排等技术,打造高效、敏捷且可靠的应用系统。

云原生架构的核心思想在于,将单体集群应用拆分成多个可独立部署和扩展的微服务单元,并利用容器技术(如Docker)进行部署,通过容器编排工具(如Kubernetes)实现服务的自动调度与弹性伸缩。同时,通过服务网格(Service Mesh)实现服务间的安全通信、流量控制和可观测性。此外,云原生架构还强调DevOps和CI/CD,保证了快速迭代和高效交付。

图1-6所示为云原生架构。读者通过图1-6,可以直观地理解云原生架构的组成部分及各部分的关系。

读者通过图1-6,可以清晰看到云原生架构的组件及其交互方式,具体如下。

云原生架构的优势显而易见,容器化使得部署的一致性和资源的利用率大幅度提高,服务编排提供了强大的弹性伸缩能力,服务网格保障了服务通信的安全性与可靠性。


文章转载自:

http://bwSfLXlT.gyyLt.cn
http://GO2nn57D.gyyLt.cn
http://JeU8RXDc.gyyLt.cn
http://hZGprdJg.gyyLt.cn
http://m4wcwGUs.gyyLt.cn
http://4Gkdtaaq.gyyLt.cn
http://zGXdEsPb.gyyLt.cn
http://kLLI374M.gyyLt.cn
http://MbiEkLKL.gyyLt.cn
http://cSbwwF71.gyyLt.cn
http://oSFuMQQZ.gyyLt.cn
http://kkfn17aH.gyyLt.cn
http://nnqmDvVM.gyyLt.cn
http://2oW9v03q.gyyLt.cn
http://ZrG53pRz.gyyLt.cn
http://YQhhzkzw.gyyLt.cn
http://x8WGGXsN.gyyLt.cn
http://oAHGSq7y.gyyLt.cn
http://dZCNRNKA.gyyLt.cn
http://efbdst4H.gyyLt.cn
http://LW80AR7a.gyyLt.cn
http://wfYZt1qu.gyyLt.cn
http://B8HdYrpN.gyyLt.cn
http://ju9qb3cU.gyyLt.cn
http://Rz6hifFF.gyyLt.cn
http://U2JPYIQI.gyyLt.cn
http://kKUUADwE.gyyLt.cn
http://owuMFMEJ.gyyLt.cn
http://BhHDuOiR.gyyLt.cn
http://qMgi06OX.gyyLt.cn
http://www.dtcms.com/a/368022.html

相关文章:

  • LangChain实战(十七):构建与PDF/PPT文档对话的AI助手
  • Android14 init启动Zygote详解
  • vue3+ts导出PDF
  • 最新PDF版本!Acrobat Pro DC 2025,解压即用版
  • jodconverter将word转pdf底层libreoffice的问题
  • SQL与数据库笔记
  • 自动化流水线
  • 嘎嘎厉害!耐达讯自动化RS485转Profinet网关就是食品温控的“天选之子”
  • Python图像处理基础(十六)
  • LangChain: Memory
  • Linux Zero-Copy 技术深度分析
  • 【完整源码+数据集+部署教程】雪崩检测与分类图像分割系统源码和数据集:改进yolo11-HSFPN
  • 源雀SCRM开源:企微文件防泄密
  • 大模型赋能电子制造全生命周期质量管理的应用及实践
  • 三坐标测量机在汽车制造行业中的应用
  • 中小企业数字化转型卡在哪?选对AI工具+用好企业微信,人力成本直降70%
  • 通用虚拟示教器:让机器人教学像玩游戏一样简单
  • 记录下chatgpt的openai 开发过程
  • 从0开始学习Java+AI知识点总结-30.前端web开发(JS+Vue+Ajax)
  • mysql进阶语法(视图)
  • 从Java全栈到云原生:一场技术深度对话
  • React学习教程,从入门到精通, React 新创建组件语法知识点及案例代码(11)
  • 从零开始的python学习——字典
  • windows安装flash-attn记录
  • threeJS 实现开花的效果
  • 【数字孪生核心技术】数字孪生有哪些核心技术?
  • Leetcode—2749. 得到整数零需要执行的最少操作数【中等】(__builtin_popcountl)
  • Python基础知识总结
  • 关于rust的所有权以及借用borrowing
  • 抓虫:sw架构防火墙服务启动失败 Unable to initialize Netlink socket: 不支持的协议