微服务+云原生:打造高效、灵活的分布式系统

news2024/11/19 11:38:19

🐇明明跟你说过:个人主页

🏅个人专栏:《未来已来:云原生之旅》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、云原生概述

2、微服务概述

二、微服务架构基础

1、微服务架构的定义与特点

2、微服务与单体应用的对比

3、微服务架构的核心组件

3.1 服务注册与发现 

3.2 API网关

3.3 服务间通信

3.4 负载均衡

4、微服务架构的设计原则


一、引言

1、云原生概述

云原生是一种利用云计算平台及其服务来构建和运行应用程序的方法。云原生应用旨在充分利用云环境的灵活性、可扩展性和弹性。其核心理念是通过微服务架构、容器化、持续集成/持续交付(CI/CD)、无服务器架构等技术,使得应用能够更快速地开发、部署和运行。

2、微服务概述

微服务(Microservices)是一种软件架构风格,它将一个复杂的大型应用程序拆分成多个小的、独立部署的服务。每个服务只负责单一的功能或业务能力,通过轻量级的通信机制(通常是 HTTP/REST 或消息队列)进行交互。微服务架构强调服务的松耦合和高内聚,使得应用程序更加灵活、可维护和可扩展。

二、微服务架构基础

1、微服务架构的定义与特点

微服务架构是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。它围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。

微服务架构的特点
1. 独立部署

  • 每个微服务可以独立开发、测试、部署和扩展,不需要停止或重启整个系统。


2. 单一职责

  • 每个微服务专注于一个特定的业务功能,确保代码的高内聚和低耦合,符合单一职责原则(SRP)。


3. 轻量级通信

  • 微服务之间通过轻量级的通信协议(如HTTP/REST、gRPC、消息队列等)进行交互,保持服务的松耦合。


4. 自治性

  • 每个微服务拥有自己的数据存储和业务逻辑,能够独立运行和演进,不依赖其他服务。


5. 多技术栈

  • 各个微服务可以使用不同的编程语言、框架和技术栈,根据具体的业务需求和团队技术专长进行选择。


6. 去中心化治理

  • 微服务架构鼓励去中心化的管理和治理,团队可以自主选择适合的技术工具和开发方法。


7. 容错性和弹性

  • 微服务架构支持服务的隔离和容错设计,一个服务的故障不会影响整个系统的可用性,同时支持服务的自动扩展和恢复。


8. 持续交付与持续部署(CI/CD)

  • 微服务架构支持持续集成和持续交付,使得新功能和修复能够快速上线,缩短开发周期和反馈时间。

2、微服务与单体应用的对比

单体应用(Monolithic Application):

  • 单体应用将所有功能模块和组件集成在一个单一的代码库和部署单元中。整个应用程序作为一个整体进行开发、测试、部署和扩展。


微服务架构(Microservices Architecture):

  • 微服务架构将应用程序拆分为一组独立的小服务,每个服务负责一个特定的业务功能。这些服务可以独立开发、测试、部署和扩展,通过轻量级的通信机制(如HTTP/REST或消息队列)进行交互。


单体应用的优点:

1. 简单性:

  • 初始开发和部署较为简单,所有代码在一个项目中,方便管理。


2. 性能:

  • 在同一进程内调用方法,性能较好,没有网络通信的开销。


3. 一致性:

  • 所有组件共享同一个数据库,数据一致性管理较为简单。


单体应用的缺点:

1. 可维护性差:

  • 随着代码库的增大,代码的复杂度也增加,维护变得困难。


2. 部署困难:

  • 任何一个小改动都需要重新部署整个应用,风险和成本较高。


3. 扩展性差:

  • 无法针对某个模块单独扩展,所有模块必须一起扩展,资源浪费严重。


4. 灵活性低:

  • 技术栈难以更换,某个模块需要新技术时,整个应用都要受影响。

微服务架构的优点:

1. 独立部署:

  • 各个服务可以独立开发、测试、部署和扩展,不影响其他服务。


2. 技术多样性:

  • 每个服务可以使用最适合的技术栈,满足不同的业务需求。


3. 可维护性高:

  • 每个服务职责单一,代码量小,维护和理解起来更容易。


4. 弹性和容错:

  • 一个服务的故障不会影响整个系统,易于实现高可用和容错设计。


5. 独立扩展:

  • 可以根据业务需求单独扩展某个服务,提高资源利用率。


微服务架构的缺点:

1. 分布式系统复杂性:

  • 服务间通信、数据一致性、服务发现、负载均衡等分布式系统的复杂性增加。


2. 运维复杂性:

  • 多个服务的部署、监控、日志管理变得更加复杂,需要完善的运维工具。


3. 网络延迟:

  • 服务间通过网络通信,引入网络延迟和可靠性问题,需要优化通信机制。


4. 数据管理复杂性:

  • 数据去中心化,跨服务的数据一致性和事务管理变得复杂。

3、微服务架构的核心组件

3.1 服务注册与发现 

什么是服务注册与发现?


服务注册与发现是微服务架构中的一种机制,用于让分布式服务自动找到彼此。想象一下,有很多小商店(微服务)分布在城市的各个角落,每个商店提供不同的商品或服务。为了方便顾客(其他服务或客户端)找到这些商店,我们需要一个“服务登记处”(服务注册中心),顾客可以通过它找到并访问商店。

服务注册与发现的工作流程


1. 服务注册:

  • 每个商店(服务)开业时都会到“服务登记处”(服务注册中心)登记自己的信息,比如地址、电话、提供的服务等。
  • 例如,一个提供用户认证的服务启动后,会告诉服务注册中心:“我在这里,我的地址是这个,我提供用户认证服务”。


2. 服务发现:

  • 当顾客(其他服务或客户端)需要某项服务时,他们会到服务登记处询问这项服务的具体位置。
  • 例如,一个订单处理服务需要验证用户身份时,它会问服务注册中心:“用户认证服务在哪里?” 服务注册中心就会告诉它:“在这个地址,你可以联系它”。


服务注册中心就像是一个“电话簿”或“黄页”。

  • 电话簿中登记了所有商店的联系信息(服务地址)。
  • 任何人(服务或客户端)都可以通过电话簿找到需要的商店(服务)。


服务注册就像是商店在开业时向电话簿公司登记自己的信息。

  • 每个商店(服务)开业时都会打电话给电话簿公司(服务注册中心),说:“请把我的信息登上去,让大家知道我在哪里”。


服务发现就像是顾客通过电话簿找商店。

  • 当顾客需要某种服务时,他们会翻开电话簿(查询服务注册中心),找到提供这种服务的商店(服务)的地址和电话。

3.2 API网关

什么是API网关?
API网关(API Gateway)是微服务架构中的重要组件,充当客户端和微服务之间的中介。它接收所有客户端请求,将这些请求路由到适当的微服务,并把微服务的响应返回给客户端。API网关可以处理各种任务,如请求路由、负载均衡、缓存、鉴权和监控等。


可以把API网关想象成一个餐厅的前台。顾客(客户端)到餐厅(系统)来点菜(请求),前台(API网关)接待顾客,并把订单分发给后厨的不同厨师(微服务)来准备不同的菜品(处理请求)。然后,前台再把准备好的菜品送到顾客桌上(返回响应)。

API网关的核心功能
1. 请求路由:

  • 将客户端请求路由到对应的微服务。例如,用户服务请求被路由到用户微服务,订单服务请求被路由到订单微服务。


2. 负载均衡:

  • 将请求分发到多个服务实例,以均衡负载,提升系统的可用性和性能。


3. 认证与鉴权:

  • 处理用户认证和权限检查,确保只有经过授权的请求才能访问相应的服务。


4. 聚合请求:

  • 将多个微服务的请求聚合为一个请求,减少客户端的请求次数。例如,客户端需要用户信息和订单信息,可以通过一次请求获取。


5. 缓存:

  • 对常用数据进行缓存,以减少微服务的负载和响应时间。


6. 日志和监控:

  • 记录请求日志和监控请求流量,以便进行故障排除和性能优化。


7. 速率限制:

  • 限制每个客户端在一定时间内的请求次数,防止服务过载。


8. 安全:

  • 提供统一的安全策略,如SSL终止,防止恶意攻击和数据泄露。

为什么需要API网关?
1. 简化客户端开发:

  • 客户端只需与API网关交互,而不需要了解各个微服务的具体地址和接口,简化了客户端开发和维护。

2. 集中管理:

  • 安全、认证、日志、监控等功能集中在API网关上,简化了各微服务的实现,使它们专注于自身业务逻辑。

3. 提升性能:

  • 通过缓存和负载均衡,API网关可以提升系统的性能和响应速度。

4. 增强安全性:

  • API网关可以提供统一的安全策略和认证机制,提升系统的整体安全性。


举个简单的例子
假设你有一个电商平台,有三个微服务:用户服务、订单服务和商品服务。

  • 用户服务:处理用户的注册、登录、信息更新等操作。
  • 订单服务:处理用户的下单、支付、订单查询等操作。
  • 商品服务:处理商品的展示、查询、库存管理等操作。


当用户在客户端进行下单操作时,客户端会通过API网关发送请求。API网关根据请求内容,将请求路由到相应的微服务。具体流程如下:

  1. 用户登录:客户端发送登录请求到API网关,API网关将请求转发到用户服务进行身份验证。
  2. 商品查询:客户端发送商品查询请求到API网关,API网关将请求转发到商品服务获取商品信息。
  3. 下订单:客户端发送下订单请求到API网关,API网关将请求转发到订单服务处理订单。


API网关在这个过程中,还可以对请求进行鉴权、限流和日志记录,确保系统的安全和稳定。通过API网关,客户端可以简化与微服务的交互,而微服务可以专注于各自的业务逻辑,提升了系统的可维护性和扩展性。

3.3 服务间通信


在微服务架构中,应用被拆分为多个小而独立的服务,每个服务负责特定的业务功能。这些服务需要相互协作才能完成复杂的业务逻辑,因此服务间通信成为微服务架构的核心组件之一。服务间通信指的是这些独立的服务如何相互传递数据和指令,以实现系统的整体功能。

服务间通信的两种主要方式
1. 同步通信:

  • REST(Representational State Transfer):
    • 基于HTTP协议的同步通信方式,使用标准的HTTP方法(如GET、POST、PUT、DELETE)进行数据交换。REST API是最常用的同步通信方式。
  • gRPC(Google Remote Procedure Call):
    • 基于HTTP/2协议的高性能RPC框架,使用Protocol Buffers作为接口定义语言(IDL)。gRPC支持双向流、负载均衡、认证和多语言开发。


2. 异步通信:

  • 消息队列(Message Queue):
    • 使用消息中间件(如RabbitMQ、Kafka)进行异步通信。服务发送消息到消息队列,接收方服务从消息队列中消费消息。消息队列保证消息的可靠传输和顺序处理。
  • 事件驱动(Event-Driven):
    • 使用事件总线(如Kafka、EventBridge)进行异步事件传播。服务发布事件到事件总线,订阅者服务接收和处理事件。事件驱动架构解耦了服务间的依赖关系。


同步通信:像是打电话。一个服务(A)打电话给另一个服务(B),双方需要同时在线,A提出请求,B即时响应。
异步通信:像是发邮件。服务A发送邮件给服务B,B可以在任何时间接收并处理邮件,双方不需要同时在线。


为什么需要服务间通信
1. 分布式架构:

  • 微服务架构将单体应用拆分为多个独立服务,这些服务需要通过通信协作完成复杂业务。


2. 解耦和独立部署:

  • 服务间通信使得各个服务可以独立开发、测试、部署和扩展,而无需担心其他服务的实现细节。


3. 提高系统的可扩展性和容错性:

  • 服务间通信支持水平扩展,消息队列和事件驱动方式还提供了天然的容错机制,可以提高系统的可用性和可靠性。

3.4 负载均衡

负载均衡(Load Balancing)是一种技术,用于将网络流量或请求均匀分配到多个服务器上,以确保系统的高可用性和高性能。它是微服务架构中的关键组件之一,能够有效避免单点故障,提高系统的响应速度和处理能力。

负载均衡的工作原理
负载均衡器位于客户端和后端服务之间,接受客户端请求并将其分配给后端的一台或多台服务器。负载均衡器通常基于某些算法或策略来决定如何分配请求,例如轮询、最少连接、加权轮询等。

负载均衡的类型
1. 硬件负载均衡:

  • 使用专用的硬件设备进行负载均衡,如F5、Citrix NetScaler。硬件负载均衡器通常具有高性能和高可靠性,但成本较高。


2. 软件负载均衡:

  • 使用软件解决方案进行负载均衡,如HAProxy、Nginx、Apache Traffic Server。这些软件可以部署在通用服务器上,成本较低且易于配置和扩展。


3. DNS负载均衡:

  • 基于DNS(域名系统)的负载均衡,通过返回不同的IP地址将流量分配到不同的服务器。适用于分布在不同地理位置的服务器之间的流量分配。


负载均衡的算法
1. 轮询(Round Robin):

  • 按顺序将请求依次分配给后端服务器,简单且常用。


2. 最少连接(Least Connections):

  • 将请求分配给当前处理连接最少的服务器,适用于长连接的场景。


3. 加权轮询(Weighted Round Robin):

  • 根据服务器的性能分配权重,将请求按权重比例分配给服务器。


4. 源地址哈希(Source IP Hash):

  • 基于客户端IP地址的哈希值进行分配,确保同一IP地址的请求分配到同一台服务器上,适用于需要会话保持的场景。


想象一个繁忙的餐厅,有多个服务员为顾客提供服务。负载均衡就像餐厅的经理,他负责将到来的顾客分配给空闲的服务员,以确保每个顾客都能尽快得到服务,而不会有某个服务员过于忙碌或闲置。

4、微服务架构的设计原则

1. 单一职责原则(Single Responsibility Principle)

  • 每个微服务应只负责一个特定的业务功能。这样,服务的职责清晰,代码简单,易于理解和维护。单一职责原则有助于在变更时减少影响范围,从而提高系统的稳定性和可维护性。

2. 独立部署(Independent Deployment)

  • 微服务应独立部署,独立更新。这样可以实现快速迭代和发布,而不会影响其他服务。独立部署要求服务之间的依赖性尽量减少,避免紧耦合。

3. 去中心化治理(Decentralized Governance)

  • 微服务架构提倡去中心化治理,每个服务可以使用最适合其功能和团队的技术栈和工具。这样可以避免单一技术的局限性,发挥团队的技术特长。

4. 去中心化数据管理(Decentralized Data Management)

  • 每个微服务应拥有自己的数据存储,避免共享数据库。这样可以使服务独立,降低耦合度,提高系统的弹性和扩展性。

5. 接口契约(API Contracts)

  • 微服务之间的通信应通过明确的API契约来定义。这些API契约应稳定且明确,避免随意变更接口,从而保证服务之间的互操作性和可靠性。

6. 弹性设计(Resilience Design)

  • 微服务应设计为在故障情况下能够自动恢复,确保系统的高可用性。使用熔断器、重试机制、超时设置等技术来增强服务的弹性。

7. 服务发现(Service Discovery)

  • 微服务架构中,服务实例的数量和位置是动态变化的,因此需要服务发现机制。服务发现可以自动注册和查找服务实例,实现服务的动态扩展和负载均衡。

  💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于云原生的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

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

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

相关文章

ADS SIPro使用技巧之数据分坐标轴显示

在SIPro data display页面中显示数据时,逐个显示数据非常地麻烦,可读性也较差; 常规的做法,是将数据拖入到一个显示窗口中进行显示,但是,当数据量较多或者各数据之间的数值差异较大时,可视化效果…

大模型管理平台:one-api使用指南

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模…

想让梦想照进现实?六西格玛绿带培训为你架起桥梁

六西格玛,这个源自摩托罗拉的质量管理方法论,如今已成为全球众多企业追求卓越的秘诀。它强调以数据为基础,通过减少变异和浪费,提高流程效率和质量,进而提升企业整体绩效。而六西格玛绿带培训,则是这个强大…

书籍论坛系统

摘 要 本论文基于JavaWeb技术,旨在设计和实现一个功能完善的书籍论坛系统。随着互联网的快速发展,人们对于获取和分享知识的需求日益增加。书籍论坛系统作为一种在线交流平台,为用户提供了一个便捷的方式来讨论、分享和借阅书籍。通过该系统…

[leetcode]rotate-array 轮转数组

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:void reverse(vector<int>& nums, int start, int end) {while (start < end) {swap(nums[start], nums[end]);start 1;end - 1;}}void rotate(vector<int>& nums, int k) {k % num…

等保1.0与2.0:物理环境安全的演进之路

在信息安全的大厦中&#xff0c;物理环境安全是那坚实的基础&#xff0c;承载着整个信息系统的稳定与安全。随着时间的推移&#xff0c;我国的信息安全等级保护标准也在不断地进化与完善&#xff0c;从等保1.0到等保2.0&#xff0c;不仅仅是数字上的递增&#xff0c;更是对物理…

电子元器件RoHS认证:环保与质量的双重保障

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139954415 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

openEuler离线安装nginx

目录 1.创建储存目录 2.切换到储存目录 3.首先在外网的环境下下载nginx的rpm包 4.目录打包tar包拷贝到离线路径 5.安装nginx 6.启动 nginx 7.停止 nginx 8.重新加载 nginx 配置 9.重新启动 nginx&#xff08;先停止再启动 nginx&#xff09; 10.检查 nginx 服务…

『亚马逊云科技产品测评』程序员最值得拥有的第一台专属服务器 “亚马逊EC2实例“

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 引言 自2006年8月9日&#xff0c;在搜索引擎大会&#xff08;SES San Jo…

视频智能分析平台LntonAIServer视频监控系统工业排污检测算法算法价值

LntonAIServer工业排污检测算法是一种集成了先进的人工智能、图像识别、数据分析和深度学习技术的解决方案&#xff0c;专门用于实时监测和评估工业排污情况。以下是关于该算法的详细解释&#xff1a; 1. 技术特点 实时监测&#xff1a;算法能够实时监测工业排污行为&#xff…

4_FOC之Clarke变换原理及推导_1

三相PMSM的数学模型是一个比较复杂且强耦合的多变量系统。为了便于后期控制器设计&#xff0c;必须选择合适的坐标变换对数学模型进行降阶和解耦变换。 1、什么是Clark变换 静止abc轴系与αβ轴系如上图。为满足功率不变约束&#xff0c;在图中设αβ轴系中定子绕组以及转子绕组…

并发编程理论基础——合适的线程数量和安全的局部变量(十)

多线程的提升方向 主要方向在于优化算法和将硬件的性能发挥到极致想要发挥出更多的硬件性能&#xff0c;最主要的就是提升I/O的利用率和CPU的利用率以及综合利用率操作系统已经解决了磁盘和网卡的利用率问题&#xff0c;利用中断机制还能避免 CPU 轮询 I/O 状态&#xff0c;也提…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《兼顾配电网韧性提升的电动汽车换电站容量优化配置方法 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

土耳其-加拉太塔

加拉太塔&#xff08;Galata Tower&#xff09;是位于土耳其-伊斯坦布尔的一个著名地标&#xff0c;它提供了城市的壮丽全景。如果有计划前往这座塔楼打卡的话&#xff0c;可以先了解下这座历史悠久的塔楼&#xff0c;让自己感兴趣&#xff0c;才能体会到它的独特之处&#xff…

Linux基础 - RAID 与 LVM 磁盘阵列技术

目录 零. 简介 一. RAID 二. LVM 三. 总结 零. 简介 在 Linux 中&#xff0c;RAID&#xff08;Redundant Array of Independent Disks&#xff0c;独立磁盘冗余阵列&#xff09;和 LVM&#xff08;Logical Volume Manager&#xff0c;逻辑卷管理器&#xff09;是两种常用的…

PointCloudLib NDT3D算法实现点云配准 C++版本

0.实现效果 效果不咋好 ,参数不好调整 1.算法原理 3D NDT(Normal Distributions Transform)算法是一种用于同时定位和地图生成(SLAM)的机器人导航算法,特别适用于三维点云数据的配准。以下是关于3D NDT算法的详细解释: 算法原理 点云划分与分布计算:3D NDT算法首先将…

VS2019中解决方案里的所有项目都是 <不同选项> 的解决方案

以上等等&#xff0c;全部是 <不同选项>。。。 这样的话&#xff0c;如何还原和查看原有的值呢&#xff0c;就这么丢失掉了吗&#xff1f; 不会&#xff0c;需要解决方案里配置一下。 解决&#xff1a; 解决方案右键属性 -> 配置属性 -> 配置 -> 将所有配置改…

Qt | 子类化 QStyle(Qt自带图标大全)

01、简介 1、把绘制自定义部件外观的步骤大致分为三大板块,如下: ①、样式元素:即指定需要绘制的图形元素(比如焦点框、按钮,工具栏等)。样式元素使 用 QStyle 类中的一系列枚举(共有 11 个枚举)进行描述。 ②、样式选项:包含了需要绘制的图形元素的所有信息,比如包含…

使用AES,前端加密,后端解密,spring工具类了

学习python的时候&#xff0c;看到很多会对参数进行加密&#xff0c;于是好奇心驱使下&#xff0c;让我去了解了下AES加密如何在java中实现。 首先 npm install crypto-js 然后在你的方法中&#xff0c;给你们前端源码看看&#xff0c;因为我用的ruoyi框架做的实验&#xff…

DelayQueue详解

目录 DelayQueue详解1、DelayQueue简介2、DelayQueue适用场景3、DelayQueue继承体系4、DelayQueue构造函数5、DelayQueue数据结构DelayQueue类的属性注释&#xff1a;DelayQueue使用示例Delayed接口的作用 6、DelayQueue的put方法7、DelayQueue的take方法8、DelayQueue的poll方…