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

详解分布式微服务架构

目录

一、微服务简介

1、分布式微服务架的诞生

2、微服务架构与SOA架构的区别

3、微服务框架引来的问题

二、服务通信

RESTful API:

消息队列(如RabbitMQ、Kafka):

gRPC:

GraphQL:

Service Mesh(如Istio):

三、去中心化数据管理

1、独立数据库:

2、API暴露数据:

3、降低依赖关系:

4、灵活性和可维护性:

5、数据一致性:

6、安全性:

7、分布式事务的挑战:

四、 自动化部署和扩展:

1. 独立部署的优势:

2. 自动化部署工具和流程:

3. 微服务的独立扩展:

4. 弹性和容错:

五、 弹性和容错

1. 弹性的定义:

2. 容错机制:

3. 弹性和容错的目标:

4. 实现弹性的挑战:

六、独立团队开发

1. 团队独立性:

2. 快速推出新功能:

3. 降低沟通成本:

4. 需要协同:

七、分布式治理

1. 服务注册与发现:

2. 负载均衡:

3. 分布式追踪:

4. 日志收集:

八、容器化

1. 容器的优势:

2. 容器编排工具:

九、 DevOps文化

1. 协同开发与运维:

2. 持续交付:

3. 自动化测试:

4. 迭代改进:


一、微服务简介

1、分布式微服务架的诞生

分布式微服务架构的演进是一个渐进的过程,没有一个确切的“诞生”时间点。然而,可以追溯到过去十年左右,特别是随着云计算和大规模Web应用的发展,人们对传统单体架构的挑战逐渐加深,推动了分布式微服务架构的兴起。

以下是分布式微服务架构逐步演进的一些关键时刻和趋势:

  1. 云计算的兴起(2000年代中期至今): 云计算技术的发展为分布式架构提供了更好的基础设施。云服务提供商(如AWS、Azure、Google Cloud)的出现使得开发者能够更容易地构建、部署和管理分布式系统,无需过多关注底层的硬件和网络。

  2. Web 2.0时代(2000年代初至今): 随着Web应用的普及,对于更灵活、可伸缩、易于维护的架构需求逐渐增加。大型互联网公司(如Google、Facebook、Netflix)开始探索微服务架构的概念,以适应不断增长的用户量和复杂的业务需求。

  3. 容器技术的崛起(2013年至今): Docker容器技术的崛起为分布式系统带来了新的变革。容器提供了一种轻量级、一致性的环境,使得应用可以在不同的环境中运行,同时容器编排工具(如Kubernetes)简化了容器的管理和部署。

  4. 微服务的概念日益成熟(2010年代至今): 微服务架构的概念逐渐成熟并被广泛传播。Martin Fowler等人的著作对微服务的定义和实践提供了理论基础,使得开发者更容易理解和采用这种架构风格。

  5. Netflix的经验分享(2015年): Netflix是微服务架构的早期采用者之一,他们在2015年开源了一系列与微服务相关的工具,包括Eureka(服务注册与发现)、Hystrix(断路器模式)等。这些工具为其他组织提供了实践微服务的范本。

  6. 业界实践和成功案例(2015年至今): 许多大型企业开始采用微服务架构,如Uber、Airbnb、Spotify等。这些企业通过成功实践证明了微服务在应对复杂业务需求、提高可伸缩性和灵活性方面的优势。

综合这些趋势和时刻,我们可以说,分布式微服务架构是在过去十年中逐渐形成的,并且在不断地演进和发展。随着技术的不断进步和实践经验的积累,分布式微服务架构将继续成为构建大规模、高可用性应用的主流架构之一。

2、微服务架构与SOA架构的区别

微服务架构(Microservices Architecture)和面向服务的架构(Service-Oriented Architecture,SOA)都是用于构建分布式系统的架构风格,但它们在许多方面存在区别。以下是微服务架构与SOA架构的一些主要区别:

  1. 规模和粒度:

    • 微服务架构: 微服务强调将应用拆分成小的、自治的服务,每个服务专注于解决特定的业务问题。微服务通常具有更小的粒度,每个服务都是独立部署和扩展的。
    • SOA架构: SOA的服务通常更大,它将应用拆分为一系列的服务,但这些服务可以涵盖较广泛的功能。SOA服务通常被设计为复用,提供一组相关的功能。
  2. 独立性和自治性:

    • 微服务架构: 微服务是独立的实体,每个服务都有自己的数据库、业务逻辑和用户界面。微服务是自治的,可以独立开发、测试、部署和扩展,服务之间的耦合度较低。
    • SOA架构: SOA服务通常是更集中式的,可能共享相同的基础设施和数据库。服务之间的协同更强,可能存在较高的耦合度。
  3. 通信协议:

    • 微服务架构: 微服务之间通常采用轻量级的通信协议,如HTTP/REST或消息队列,以实现松散的耦合。
    • SOA架构: SOA服务通常使用更重型的协议,如SOAP(Simple Object Access Protocol)。
  4. 数据管理:

    • 微服务架构: 微服务通常拥有自己的数据库,服务之间通过API进行通信。每个微服务负责自己的数据管理。
    • SOA架构: SOA服务可能共享相同的数据存储,数据管理更为集中。
  5. 技术栈:

    • 微服务架构: 微服务架构通常采用轻量级的技术栈,如Spring Boot、Node.js等,以支持独立的服务。
    • SOA架构: SOA服务可能使用较为重量级的技术,如企业服务总线(Enterprise Service Bus,ESB)。
  6. 部署和扩展:

    • 微服务架构: 微服务可以独立部署和扩展,每个服务可以有自己的生命周期。
    • SOA架构: SOA服务的部署和扩展可能需要更多的协调,因为它们可能共享相同的基础设施和资源。
  7. 目标和文化:

    • 微服务架构: 微服务强调团队的自治和快速交付,鼓励小团队独立工作,关注业务问题的解决。
    • SOA架构: SOA更强调企业的整体架构,服务的复用和集成,可能需要更多的中央规划。

总体而言,微服务架构是SOA的一种演化形式,更加强调服务的独立性和自治性,采用更轻量级的通信协议和技术栈。SOA则更多地关注服务的复用和集成,可能在一些情况下更适合大型企业的集中式需求。选择使用哪种架构取决于具体的业务需求和组织文化。

3、微服务框架引来的问题

尽管微服务架构带来了许多优势,但也引发了一些挑战和问题。以下是一些微服务架构可能面临的问题:

  1. 分布式系统复杂性: 微服务将应用程序拆分成小的、自治的服务,但这也带来了分布式系统的复杂性。服务之间的通信、数据一致性、事务管理等问题都需要谨慎处理。

  2. 服务间通信开销: 微服务之间的通信是通过网络进行的,可能导致一定的延迟和开销。在大规模系统中,服务之间的通信成本可能会成为性能瓶颈。

  3. 服务发现和治理: 随着服务数量的增加,服务的发现、注册和管理变得更加复杂。需要有效的服务发现和治理机制来确保服务的可用性和稳定性。

  4. 数据一致性: 微服务通常有自己的数据存储,这可能导致数据一致性的挑战。在分布式环境中,确保数据的一致性变得更为复杂。

  5. 事务管理: 跨服务的事务管理是一个复杂的问题。由于每个微服务都有自己的数据库,跨多个服务的事务可能需要采用分布式事务或补偿性事务的机制。

  6. 版本控制: 微服务的独立部署可能导致服务版本的不一致。在系统中管理不同服务的兼容性和版本升级变得更加关键。

  7. 安全性: 微服务架构中需要处理跨服务的安全性问题。确保服务之间的通信是安全的,同时对每个服务进行适当的身份验证和授权是一个挑战。

  8. 分布式跟踪和监控: 在微服务架构中,需要有效的工具和机制来进行分布式跟踪和监控,以便快速定位和解决问题。

  9. 团队结构和沟通: 微服务推崇小团队独立开发和部署,但这也要求团队有更强的沟通和协作能力。如果团队结构不合理或沟通不畅,可能导致服务之间的不一致和合作问题。

  10. 运维复杂性: 微服务的独立部署和自治性带来了更大的运维挑战。需要有效的运维工具和流程来确保整个系统的稳定性和可用性。

二、服务通信

 微服务通过网络进行通信,采用不同的通信协议,如RESTful API、消息队列(例如RabbitMQ、Kafka)、gRPC等。RESTful API通常用于简单的HTTP请求和响应,消息队列则适用于异步通信,gRPC提供了高效的远程过程调用。选择适当的通信方式取决于业务需求和性能要求。

以下是一些常见的微服务通信方式:

  1. RESTful API:

    • 特点: RESTful(Representational State Transfer)是一种基于HTTP协议的轻量级通信方式。它通过使用标准HTTP方法(GET、POST、PUT、DELETE等)来进行通信,资源通过URI进行标识,数据交换通常使用JSON或XML格式。
    • 优点: 简单、易于理解和使用,适用于Web应用和移动应用。由于使用HTTP标准,与现有的Web基础设施集成较为容易。
    • 适用场景: 同步请求和响应、简单的CRUD操作、无状态通信。
  2. 消息队列(如RabbitMQ、Kafka):

    • 特点: 消息队列提供了异步通信的方式,允许微服务之间通过消息进行解耦。生产者将消息发送到队列,而消费者从队列中获取消息进行处理。常见的消息队列包括RabbitMQ、Apache Kafka等。
    • 优点: 异步通信、解耦服务、提高系统的可伸缩性和弹性。
    • 适用场景: 事件驱动、异步处理、解耦合作的微服务。
  3. gRPC:

    • 特点: gRPC是一种高性能、开源的RPC(远程过程调用)框架,基于Protocol Buffers进行通信。它支持多种编程语言,提供了强类型、双向流、高效的远程调用能力。
    • 优点: 高性能、多语言支持、强类型约定、支持双向流通信。
    • 适用场景: 高性能要求、多语言支持、复杂服务间的远程调用。
  4. GraphQL:

    • 特点: GraphQL是一种用于API的查询语言,允许客户端指定其需要的数据结构。与REST相比,GraphQL允许客户端精确获取所需的数据,避免了过度获取和传输不必要的数据。
    • 优点: 灵活、精确获取所需数据、减少网络传输数据量。
    • 适用场景: 需要灵活数据获取、前端需要多种数据组合的场景。
  5. Service Mesh(如Istio):

    • 特点: Service Mesh是一种用于处理服务间通信、监控和安全的基础设施层。它通过在微服务之间插入轻量级代理(sidecar),提供负载均衡、故障恢复、安全等功能。
    • 优点: 提供了对微服务通信的全面控制和监控。
    • 适用场景: 复杂的微服务网络、需要强大的监控和治理。

在选择服务通信方式时,需要根据具体的业务场景和需求权衡各种优缺点。通常,不同的微服务可能采用不同的通信方式,以满足其特定的功能和性能要求。

三、去中心化数据管理

每个微服务都有自己的数据库,这使得数据的管理更为分散。微服务通过API向外部暴露数据,而不是直接访问其他微服务的数据库。这种去中心化的数据管理降低了服务之间的依赖关系,提高了系统的灵活性和可维护性。

  1. 1、独立数据库:

    • 每个微服务维护着自己的独立数据库,这个数据库与该服务的业务功能直接相关。每个微服务都有自己的数据模型和数据结构,这使得微服务可以更好地独立开发、测试、部署和维护。
    • 服务的数据存储可以选择适合其需求的数据库类型,例如关系型数据库(MySQL、PostgreSQL)、NoSQL数据库(MongoDB、Cassandra)等。
  2. 2、API暴露数据:

    • 微服务通过定义API向外部暴露数据,其他微服务可以通过这些API访问需要的数据。这种方式通过明确的接口规范降低了服务之间的耦合度,每个微服务只需关注自己的数据模型和API。
    • 数据的访问受到服务本身的控制,不同微服务之间可以采用标准化的协议和格式进行数据交互,如JSON或者XML。
  3. 3、降低依赖关系:

    • 微服务之间的依赖关系被降低到最小,因为它们不直接访问彼此的数据库。一个微服务只需知道如何使用其他服务提供的API,而不需要了解其内部数据存储的具体细节。
    • 这种松耦合的设计使得系统更容易扩展,新增、修改或删除一个微服务不会对其他微服务产生重大影响。
  4. 4、灵活性和可维护性:

    • 去中心化数据管理提高了系统的灵活性。每个微服务都可以选择最适合自己业务需求的数据存储方式,而不受其他微服务的限制。
    • 可维护性也得到提高,因为更改一个微服务的数据模型或数据库实现不会对整个系统造成连锁影响。这使得开发团队更容易推进自己的节奏,而不会受到其他团队的制约。
  5. 5、数据一致性:

    • 由于每个微服务维护自己的数据存储,数据的一致性可能需要通过一致性协议、事件驱动机制等手段来保障。微服务之间可能会采用异步事件或事务性的方式来确保数据一致性。
  6. 6、安全性:

    • 数据的访问通过API进行,可以通过身份验证和授权机制来保障数据的安全性。微服务可以根据需要进行访问控制,确保只有合适的服务或用户能够访问其数据。
  7. 7、分布式事务的挑战:

    • 由于微服务之间避免直接访问彼此的数据库,分布式事务可能成为一个挑战。采用分布式事务需要谨慎处理,可以考虑补偿性事务或分布式事务协调器等机制。

四、 自动化部署和扩展:

微服务的独立性使得它们可以独立部署,不影响系统的其他部分。采用自动化工具和流程,如持续集成和持续交付(CI/CD),可以实现自动化部署。此外,每个微服务都可以根据负载的变化进行独立的扩展,从而提高整个系统的可伸缩性。

1. 独立部署的优势:

微服务的独立性使得每个服务都可以独立开发、测试、部署,不影响系统的其他部分。这种独立性通过自动化工具和流程实现持续集成和持续交付(CI/CD),使得代码变更可以快速、可靠地部署到生产环境。

2. 自动化部署工具和流程:

采用自动化工具,如Jenkins、Travis CI等,配合版本控制系统(如Git),实现自动化的构建、测试和部署。CI/CD流程可以自动触发,确保代码变更经过全面测试后能够被快速推送到生产环境。

3. 微服务的独立扩展:

每个微服务都可以根据自身负载情况独立扩展,无需整体系统的停机或重启。采用容器化技术(如Docker)可以更加灵活地进行扩展,提高系统的可伸缩性。自动化扩展可以根据实时负载情况进行动态调整,确保系统在高峰时段能够应对更大的请求量。

4. 弹性和容错:

在自动化部署和扩展的同时,引入弹性和容错机制是至关重要的。断路器模式、重试机制、降级策略等可以帮助系统在面对服务故障或异常情况时保持稳定性。这些机制有助于提高系统的鲁棒性,确保即便部分服务发生问题,整个系统仍能正常运行。

五、 弹性和容错

 弹性是分布式微服务架构的关键特性,能够在面对部分组件故障时保持系统的稳定性。引入容错机制,如断路器模式、重试、降级,有助于处理服务间通信的错误和异常情况,提高系统的健壮性。

1. 弹性的定义:

弹性是指系统在面对异常情况时,能够适应性地调整自身的行为,保持稳定性。在微服务架构中,弹性体现在对服务故障、高负载、网络问题等情况的适应性处理。

2. 容错机制:

  • 断路器模式: 当某个服务出现故障时,断路器可以迅速中断对该服务的访问,避免连锁故障。
  • 重试机制: 对于短暂的故障,通过重试可以尝试恢复服务正常。
  • 降级策略: 在面对高负载时,可以通过降级策略临时关闭某些功能,确保核心功能正常运行。

3. 弹性和容错的目标:

  • 快速恢复: 系统应该尽快从异常状态中恢复,减少影响范围。
  • 透明处理: 弹性机制的处理过程对终端用户来说应该是透明的,不应该暴露过多技术细节。
  • 适应性: 系统应该能够根据不同的异常情况调整自身行为,保证在各种情况下都能够提供可接受的性能。

4. 实现弹性的挑战:

  • 分布式事务: 弹性机制的实现需要考虑分布式事务的问题,确保在异常情况下数据的一致性。
  • 监控和反馈: 弹性的实施需要监控系统的状态,及时发现异常并采取相应的措施。

六、独立团队开发

 每个微服务由独立的团队负责开发和维护,这使得团队可以选择最适合其需求的技术栈和开发方法。独立团队有助于提高开发效率,加速新功能的推出,并降低沟通和协作的成本。

1. 团队独立性:

每个微服务由独立的团队负责,这意味着团队可以选择最适合其需求的技术栈和开发方法,有更大的自主权。

2. 快速推出新功能:

独立团队开发有助于快速推出新功能,每个团队专注于自己的微服务,无需等待其他团队的进度。

3. 降低沟通成本:

团队间的独立性降低了沟通和协作的成本,每个团队可以自主决策并推进项目,不会受到其他团队的制约。

4. 需要协同:

尽管各团队独立开发,但仍需要一定的协同机制,确保各个微服务之间的接口和协作是无缝的。

七、分布式治理

分布式系统需要适当的治理工具,包括服务注册与发现(如Consul、Eureka)、负载均衡(如Zuul、Nginx)、分布式追踪(如Zipkin)、日志收集(如ELK Stack)等。这些工具有助于监控、管理和维护整个微服务生态系统。

1. 服务注册与发现:

使用服务注册与发现工具(如Consul、Eureka)实现微服务的动态注册与发现,确保服务间的有效通信。

2. 负载均衡:

利用负载均衡工具(如Zuul、Nginx)平衡各个微服务的请求流量,提高整体系统的性能和稳定性。

3. 分布式追踪:

采用分布式追踪工具(如Zipkin)监控微服务间的调用关系,方便快速定位和解决问题。

4. 日志收集:

使用日志收集工具(如ELK Stack)对微服务的日志进行集中管理和分析,帮助排查问题和监控系统状态。

八、容器化

微服务通常被打包成容器,如Docker容器。容器化提供了一致的运行环境,解决了“在我的机器上可以运行”的问题,并简化了部署和维护的流程。容器编排工具,如Kubernetes,能够有效地管理大规模容器化应用。

1. 容器的优势:

将微服务打包成容器(如Docker),提供了一致的运行环境,解决了“在我的机器上可以运行”的问题。

2. 容器编排工具:

容器编排工具(如Kubernetes)可以有效地管理大规模容器化应用,实现自动化部署、扩展和负载均衡。

九、 DevOps文化

 与分布式微服务架构结合的是DevOps文化,它强调开发和运维团队之间的协作、自动化工具的使用以及持续交付。DevOps文化有助于缩短软件交付周期,降低发布风险,提高团队的整体效率。

1. 协同开发与运维:

DevOps文化强调开发和运维团队之间的协作,通过自动化工具和流程,实现开发、测试、部署和运维的高度集成。

2. 持续交付:

DevOps倡导持续交付,通过自动化流程实现快速、可靠的软件交付,缩短发布周期,降低发布风险。

3. 自动化测试:

DevOps文化下,自动化测试是保障质量的关键步骤,通过自动化测试工具确保代码变更不会引入大量错误。

4. 迭代改进:

DevOps文化注重迭代改进,通过监控和反馈机制,及时发现和解决问题,不断提高团队的整体效率和产品质量。

相关文章:

详解分布式微服务架构

目录 一、微服务简介 1、分布式微服务架的诞生 2、微服务架构与SOA架构的区别 3、微服务框架引来的问题 二、服务通信 RESTful API: 消息队列(如RabbitMQ、Kafka): gRPC: GraphQL: Service Mesh&…...

Navicat 技术指引 | 适用于 GaussDB 的用户权限设置

Navicat Premium(16.2.8 Windows版或以上) 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构同步、协同合作、数据迁移等),这…...

究极短的快排代码【QuickSort】

快排 QuickSort 两边向中间扫描法:取一个基点值,从左往右扫描,基点值左边所有元素小于它,遇到大于基点值的则停下,开始从右往左扫描,右边所有元素大于他,遇到小于基点值则停下,如果…...

MUYUCMS v2.1:一款开源、轻量级的内容管理系统

MuYuCMS:一款基于Thinkphp开发的轻量级开源内容管理系统,为企业、个人站长提供快速建站解决方案。它具有以下的环境要求: 支持系统:Windows/Linux/Mac WEB服务器:Apache/Nginx/ISS PHP版本:php > 5.6 (…...

⑩【Redis Java客户端】:Jedis、SpringDataRedis、StringRedisTemplate

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Jedis、SpringDataRedis、StringRedisTemplate…...

什么是自动化测试po模式,po分层如何实现?

一、什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! 主要分三层: 1.基础层BasePage:封装一些最基…...

Redis-缓存高可用集群

Redis集群方案比较 哨兵模式 性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况。另外哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过…...

Docker的入门

Docker的入门 防火墙Docker的命令镜像相关的命令运行容器容器相关的命令 Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中。 docker有3大核心&#xf…...

AJAX技术-04-- 跨域说明

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1 同源策略同源策略介绍规定要求 请求协议://域名:端口号 关于同源策略练习关于同源策略总结 2.JSONPJSONP原理说明关于JSONP优化 3.CORS介绍介绍不允许跨域说明跨域…...

蓝桥杯每日一题2023.11.23

题目描述 题目分析 本题使用递归模拟即可,将每一个大格子都可以拆分看成几个小格子,先将最开始的数字进行填入,使每一个对应小格子的值都为大格子对应的数,搜索找到符合要求的即可 (答案:50 33 30 41&am…...

20231124给RK3399的挖掘机开发板在Andorid10下加鼠标右键返回

20231124给RK3399的挖掘机开发板在Andorid10下加鼠标右键返回 2023/11/24 12:19 百度:RK3399 Android10 右键返回 https://blog.csdn.net/danhu/article/details/122467256 android9/android10 鼠标右键返回(已验证) danhu 于 2022-01-13 09:46:42 发布 android10 …...

云计算实验如何结合AI来提高效率!

随着AI助手的流行,我们现在无论是学习还是工作都会带着一个他/她,如何让AI助手提高我们的工作效率是我们需要进化的方向。下面结合“云计算实验”来分享一下如何让AI帮助我们学得更快学得更好。 一、学习某个软件或复杂命令 比如在学习RockyLinux9.2中…...

前端路由hash和history的六大区别

前端路由hash和history的区别 前言谁的URL有#回车刷新时hash和history变化 谁支持低版本浏览器hash不会重新加载页面谁有历史记录谁需要后台配置hash缺点 前言 本文主要讲解hash和history路由的区别,那么好本文正式开始。 谁的URL有# 路由Hash的地址上有#,而hist…...

解决多选删除页面不同步问题

多选删除一般有两种情况: 1,删除接口支持传多个id,这是最理想的方法,建议大家积极与后端进行沟通解决。之后只需要判断接口回调刷新页面即可! 2,删除接口不支持传多个id,这就是接下来我们要处…...

QQ空间上传一次 500张限制突破记录

手机又好多照片了,用手机上传耽误时间,就导出到电脑了,上传到qq空间去。 结果发现不开通黄钻无法上传原图,那就开通吧! 开通了黄钻,居然不能一次上传超过 500 张,开通有何用? 五千…...

springboot3.x+springsecurity6.x多种方式登录验证

最新的 Spring Security 5.7 及以上版本,更新了不少内容,之前的 WebSecurityConfigurerAdapter 已经被废弃了,而且,要同时实现用户名密码登录、手机验证码登录、邮箱、微信小程序等登录方式,跟之前的配置方式都会有所不…...

【数据结构实验】图(二)将邻接矩阵存储转换为邻接表存储

文章目录 1. 引言2. 邻接表表示图的原理2.0 图的基础知识a. 类型b. 表示 2.1 有向权图2.2 无向权图2.3 无向非权图2.4 有向非权图 3. 实验内容3.1 实验题目(一)数据结构要求(二)输入要求(三)输出要求 3.2 算…...

【LeetCode】挑战100天 Day15(热题+面试经典150题)

【LeetCode】挑战100天 Day15(热题面试经典150题) 一、LeetCode介绍二、LeetCode 热题 HOT 100-172.1 题目2.2 题解 三、面试经典 150 题-173.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站,提供各种算法和数据结构的题目&…...

面试:RabbitMQ相关问题

文章目录 简单介绍RabbitMQRabbitMQ架构什么是 RabbitMQ?有什么显著的特点?RabbitMQ 有那些基本概念?RabbitMQ routing 路由模式消息怎么路由?RabbitMQ publish/subscribe 发布订阅(共享资源)能够在地理上分开的不同数据中心使用 …...

SpringMVC系列-7 @CrossOrigin注解与跨域问题

背景 前段时间帮同事分析了一个跨域问题,正好系统分析和整理一下。 1.跨域 理解同源策略是理解跨域的前提。同源策略定义如下: 在同一来源的页面和脚本之间进行数据交互时,浏览器会默认允许操作,而不会造成跨站脚本攻击&#x…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)​现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

C++ 设计模式 《小明的奶茶加料风波》

👨‍🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...