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

分布式微服务系统简述

distributed microservice

分布式与微服务的定义及关系;分布式微服务架构里的各组件,如:配置中心、服务注册/发现、服务网关、负载均衡器、限流降级、断路器、服务调用、分布式事务等;spring cloud 介绍及实现案例,如:spring cloud netflix(eureka、ribbon、feign、hystrix、zuul)、spring cloud alibaba(nacos、sentinel、seata、schedulex、rocket mq、sidecar)等。


—— 2025 年 1 月 5 日 甲辰年腊月初六 小寒

版本

  • jdk: 17
  • spring boot: 3.3.6
  • spring cloud: 4.1.2
  • spring cloud alibaba: 2023.0.1.2

目录

    • distributed microservice
      • 1 分布式与微服务
        • 1.1 分布式
        • 1.2 微服务
      • 2 分布式微服务系统
        • 2.1 配置中心
        • 2.2 注册中心
        • 2.3 网关
        • 2.4 调用
        • 2.5 负载均衡
        • 2.6 限流、降级和熔断
        • 2.7 分布式事务
      • 3 spring cloud
        • 3.1 简介定义
        • 3.2 版本命名
        • 3.3 实现案例(netflix & alibaba)
        • 3.4 nacos 与 eureka 的区别
        • 3.5 gateway 与 zuul 的区别

1 分布式与微服务

  分布式:分散的是压力;微服务:分散的是能力。这句话并非绝对地定义了分布式与微服务,而是我们可以从这个角度来区别二者。

  微服务架构是分布式架构的一种解决方案。因此,微服务架构是分布式架构,但分布式架构不一定是微服务架构。

1.1 分布式

  分布式是计算机科学中的一个研究方向,它研究如何把一个需要巨大计算能力或资源才能解决的问题分成若干个小部分,然后把这些部分分配给多个计算机进行处理,最后把这些结果综合起来得到最终结果。即分散压力。换言之,当程序和数据需要通过网络分布在多个计算机上时,我们就称它是分布式的。如分布式计算、分布式存储、分布式数据、分布式缓存、分布式文件系统等。

  分布式系统的主要目标(优点)和缺点如下:

  • 主要目标(优点):
    • 高并发:分布的目的就是为了突破单节点性能屏障。
    • 高性能:分散了压力,各节点的处理速度将只受限于硬件的性能。
    • 高可用:多节点避免了单节点故障导致系统不可用。
    • 可扩展:可通过水平增加或删除节点的方式应对不同计算场景。
    • . . .
  • 缺点:
    • 复杂度增加:由于程序和数据的分布性,设计开发时则需要考虑网络通信、数据一致性和故障处理等问题。
    • 数据一致性:由于存在多节点,故需要考虑各节点间的数据一致性。
    • 性能问题:由于各节点间需要通过网络通信,网络会有些许延迟,故对性能有一定影响。
    • 故障排查难度增加:在分布式系统中,数据可能会流转在多个节点,当出现故障时,则需要考虑多个节点的交互。
    • 部署和维护成本增加:由于多节点,则会增加部署、维护和监控的成本。
    • . . . (尽管它存在这些缺点,但它带来的收益却是不可估量的!)

  与分布式对应的是集中式,二者区别如下:

  • 直观区别:集中式中程序、数据和资源等集中在中心节点上,中心节点来处理计算任务。而分布式则将这些分布在多个节点上,且每个节点都可以处理计算任务。
  • 集中式的优点为系统复杂度低,不用考虑数据一致性,故障排查难度低,部署和维护成本低;缺点为:可靠性差、性能受限于硬件性能,扩展性低。
1.2 微服务

  微服务是一种架构风格,是分布式架构的一种解决方案,其由 soa 架构演变而来。其作用是将一个大型应用以业务为界限划分成多个小型应用,每个小型服务独立设计开发、测试维护,且都具备独立的自制能力。即分散能力。其具有以下特点:

  • 服务拆分:微服务最重要就是服务拆分,如按业务拆分等。拆分维度和粒度是关键。
  • 松耦合:服务拆分后,将以微服务为单位进行设计开发、测试部署和运行维护,各服务之间通过轻量级的通信机制通信。同时,每个服务单独演化,将影响范围缩小至该服务对应的业务内,提高了系统的可用性。
  • 可扩展性:可根据不同服务对应的业务场景,来动态增加/删除该服务对应的节点数量,以应对不同的流量场景。

  总之,分布式是一种思想,微服务也是一种思想,两者有互通之处,因为微服务更偏向于落地,所以可以把微服务架构理解为分布式架构的一种解决方案;又因为分布式架构的应用范围更广,微服务架构是分布式架构,但分布式架构不一定是微服务架构。常见的如 kafka、flink、spark、redis、bigtable、fastdfs、minio、zookeeper 等都是分布式系统。常见的 web 领域的大型系统大多都可以理解为微服务系统,当然,你也可以称它是分布式的。

2 分布式微服务系统

  如下图所示,一个简单的分布式微服务系统架构图大概长这样。访问者可以是移动端、PC 端和其它服务等;nginx 作为整个系统对外入口网关;服务网关作为系统中所有服务的统一入口(后文会说明 nginx 网关与服务网关的区别);注册配置中心用来配置和管理各服务;各服务之间可通过 http、rpc 调用;服务间调用可通过负载均衡来调配资源;可通过限流、熔断来进行服务流量控制和服务保护;同时也需要支持分布式事务;当然在数据存储方面也需要的分布式存储、缓存和消息队列等的支持。

distributed-microservice

  分布式微服务系统中,常用组件有:配置中心、注册中心、网关、调用组件、负载均衡器、限流熔断(降级)组件和分布式事务组件等。其各组件作用及详细说明如下。

2.1 配置中心

  顾名思义,配置中心的作用是为系统中各服务提供配置。单体应用中,配置通常和程序代码一起打包部署。而在分布式系统中,通常会存在多个应用,相对应的就会存在多个配置,显然配置和程序代码一起打包部署的方式不太合理,耗时费力(总不能每改动一次配置就要重新打包部署或重启服务吧,想想就觉得可怕)。配置中心通常以外部化的方式为应用提供配置。其优点如下:

  • 便于管理配置:将配置外部化,只需通过可视化操作即可完成对应用配置的管理。
  • 环境隔离:每个应用通常会存在开发、测试和生产等多个环境的配置,配置中心可方便切换不同环境配置。
  • 提高程序安全性:将配置信息存储在代码库或应用程序文件中可能会被意外泄漏或恶意攻击,从而造成安全风险。通过配置中心可对配置信息进行加密保护,且可进行访问权限控制。
  • 动态更新配置:配置信息之所以放在配置文件中是因为配置信息可能随改动,一般情况下,修改配置后需要重启应用以使配置生效。而配置中心则支持动态更新配置,即配置变更后不需要重启应用就可使配置生效。
2.2 注册中心

  微服务与传统单体应用架构最大的区别就是强调软件模块的拆分。在单体应用架构下,一个应用内可能涵盖了系统的多个模块,这些模块会在一个进程内部署运行,模块之间的调用直接通过方法调用即可完成。但在微服务系统中,通常会根据系统的功能特点或业务逻辑,按照一定粒度的拆分后进行单独部署运行,以便实现模块内的高内聚。模块间的低耦合,实现整个微服务系统的高可扩展性。此时,就会出现不同模块间的跨进程跨主机调用。因此,如何让微服务系统能够像单体应用那样提供统一对外的服务调用能力,则成为微服务架构层面需要重点解决的问题之一。

registry-center

  如上图所示,通过在微服务系统中引入一个叫做注册中心的组件,来作为协调者。其大致原理为,所有微服务应用在启动时会将自身的服务名称、ip 地址和端口号等信息注册到注册中心,然后各服务在处理请求的过程中会根据服务名称到注册中心中查找对应服务的 ip 地址和端口号来进行服务间的调用(当然实际调用可能需要借助其它组件)。

2.3 网关

  微服务系统中的网关主要有以下功能:

  • 路由与负载均衡:可根据请求的目标地址和定义的路由规则将请求路由到合适的服务实例。同时可以使用负载均衡算法来均匀分配请求负载,以确保每个服务实例都能承担适当的负载。
  • 认证与授权:可集中处理身份认证与授权问题。验证请求中的身份信息,确保只有经过授权的用户才可访问特定的服务。
  • 安全性:可以通过安全策略来增加整个系统的安全性,以防止常见的攻击如 SQL 注入、跨站脚本,并对传输数据进行加密。
  • 请求过滤与转换:可对请求进行预处理。如校验特定参数、转换请求格式和增加请求头等。通过统一处理重复的请求逻辑来减轻各个微服务的负担。
  • 监控与日志:可记录请求和响应信息,以便故障排查和性能优化;同时可实时监控各个服务的运行状态,以便及时发现并处理异常情况。

  nginx 网关与微服务网关的区别

  • 首先,nginx 通常作为独立的服务部署在网络入口(如客户端与服务端之间),而微服务网关通常作为整个服务集群的入口。
  • 其次,nginx 主要提供高性能的代理和负载均衡功能。一般作为初级网关将流量分发到微服务网关集群。
  • 然后,nginx 更为稳定但不便扩展;而微服务网关较为复杂但便于扩展。
  • 最后,二者作为微服务系统中的重要节点,通常要求其具有极高的性能和极稳定的运行。
2.4 调用

  微服务系统中各服务之间的调用通常有 httprpc 两种方式。二者是两种不同的网络通信协议,它们在定义、用途、通信模式、数据传输格式、安全性和适用场景等方面存在显著区别,主要如下:

  • 定义和用途:http 是一种应用层协议,或者试一个请求-响应协议,主要用于在 web 浏览器和服务器之间传输数据;rpc 是一种远程过程调用协议,允许程序调用另一个地址空间的过程或方法,就像这些过程和方法在本地一样,主要用于分布式系统中,特别是需要高性能和低延迟的场景下。
  • 通信模式:http 是无状态协议,两个请求之间无直接联系,即意味着 http 的通信是不可靠的;rpc 则是有状态协议,客户端与服务器之间建立的是长连接,通信更加可靠。
  • 数据传输格式:http 通常使用文本格式(如 json 或 xml)来传输数据,具有良好的可读性和可扩展性,但其体积较大故较耗时;rpc 使用二进制协议(如 protocol 或 thrift)来传输数据,虽然可读性和可扩展性较差,但体积小且效率高。
  • 安全性:http 通常使用 SSL/TLS 协议来加密传输数据,以确保通信安全,但 http 协议本身在传输过程中容易被中间人攻击,导致数据泄露或篡改;rpc 同样支持加密和身份验证来确保通信安全,但其还提供了更加丰富的安全机制,如访问控制和签名等(http 也可以有访问控制和签名!(很大声那种!))。
  • 适用场景:http 主要适用于浏览器和 web 应用程序之间的通信;rpc 主要用于分布式系统中,特别是高性能和低延迟的场景下。

  看到这里你不会以为在微服务系统 rpc 一定优于 http 吧,显然不是!因为 rpc 有一个最大的缺点,即它要求调用方和提供方使用相同的技术或语言。这在很大程度上限制了其适用范围。

2.5 负载均衡

  负载均衡是一种通过将网络流量均匀的分配到多个服务实例上,来提高系统性能和可用性的技术。它可以有效防止单点故障,并提升系统的响应速度。可从以下几个方面理解:

  • 高可用性:当某个实例故障时,确保流量能够被其它实例接管,避免服务中断。
  • 性能优化:可根据每个实例的软硬件条件来均匀分配流量,以避免某一实例过载,影响用户体验。
  • 可扩展性:支持根据不同的流量情况,动态增加或减少服务实例。

  常见的负载均衡策略如下:

  • 轮询:将请求以此分发到每个实例。适用于请求处理时间相近的场景。
  • 加权轮询:给每个实例分配权重,根据权重比例分发请求。适用于各实例性能(如网络、硬件等资源)差异较大的场景。
  • 最少连接:将请求分发到当前连接数最少的实例上。适用于连接时间不均匀的场景。
  • IP 哈希:根据请求源 ip 的哈希值来确定目标实例。适用于同一用户的请求始终需要同一实例处理的场景。
2.6 限流、降级和熔断

  限流、降级和熔断是三种不同的系统稳定策略,它们在高并发场景下尤为重要。

  • 限流:限流是一种控制系统并发流量的技术手段,通过限制请求频率或数量来防止系统过载或崩溃,以提高系统稳定性。限流是针对服务提供者的一种策略,可通过设定流量阈值并采取排队、拒绝请求或返回错误信息等方式来控制流量。

    常见的限流算法有:

    • 漏桶算法:请求先进入漏桶,再从漏桶中逐一取出进行处理,控制漏桶的流量。
    • 令牌桶算法:请求会从令牌桶中得到一个令牌,然后处理,控制令牌桶中令牌的数量。
    • 计数器算法:请求被计数,通过比较当前请求数与限流阈值来判断是否限流。
    • 固定窗口限流算法:即设置单位时间内的请求数阈值,超过阈值的请求被拒绝掉,知道下一个窗口。
    • 滑动窗口限流算法:将单位时间周期分为多个小周期,每个小周期内独立统计请求次数,过期的小周期会被删除。窗口内的小周期越多,限流统计就越精确。
  • 降级:在系统过载时通过关闭非核心功能或当服务异常时响应默认值或备用值来保证服务的可用性。降级在服务提供端和消费端都可实现,如关闭核心功能等可在提供端实现(当然消费端也可以);服务提供端可能会因限流或异常不可用,此时则可在消费端做降级策略,如返回默认值等。

  • 熔断:熔断是一种保护机制,用来保护因服务调用失败而引起的雪崩效应。熔断器在检测到服务调用失败达到一定阈值时,会暂时中断对该服务的调用,并在一定时间后尝试恢复。尤其是在分布式系统中,熔断显得尤为重要。分布式系统中为了保证系统的可用性和数据的一致性,会引入重试机制,重试机制可以解决实际问题,但同时也会带来其它问题。在高并发场景下,若某个服务或接口调用失败,则调用者会不断进行重试,这时候就会对服务造成二次伤害。但要注意,有些重试是无法避免的,如果为了避免雪崩效应而不适用重试机制,可能会因小失大。

2.7 分布式事务

  首先,关于普通事务相关我们移步 史上最烂 spring transaction 原理分析 这篇文章。显而易见,在分布式微服务系统中的事务它就叫分布式事务。分布式事务具有分库分表、跨库和跨服务的特点,明显,传统的事务方式并不适用于分布式事务。那么,那些默默无闻的拓路者便总结出了以下四种解决方案:

  • AT 模式:AT 模式是一种无侵入的分布式事务解决方案。用户只需关注自己的业务 sql,AT 模式会自动生成事务的二阶段提交和回滚操作。一阶段,AT 模式 会拦截业务 sql,解析 sql 语义,找到要更新的业务数据,并保存快照数据和行锁。二阶段,如果是提交,则清理快照数据;如果是回滚,则根据快照数据恢复业务数据。
  • TCC 模式:侵入性强,但性能高。该模式需要用户自己根据业务场景实现 try、confirm 和 cancel 操作。此三种操作分别对应事务的开启、二阶段事务提交和二阶段事务回滚。该模式适用于对中间状态有约束的业务,如订单业务。
  • Saga 模式:该模式适用于长事务,由事件驱动,各个参与者之间异步执行。如果任何一个正向操作失败,该模式会执行前面各个参与者的逆向回滚操作,回滚已提交的参与者。该模式的优点是并发度高,无长期资源锁定。
  • XA 模式:XA 模式是利用事务资源对 XA 协议的支持,以 XA 协议的机制来管理分支事务。XA 模式是两阶段提交模式,通过资源管理器和事务协调者来保证事务的原子性。该模式的优点是数据的一致性较好,缺点是实现复杂度较高。

3 spring cloud

3.1 简介定义

  spring cloud 是 spring 团队提供的用来帮助开发人员快速构建分布式微服务系统的一站式解决方案或规范。提供以微服务为核心的分布式系统构建标准。它并不是一个开箱即用的框架,而是一个解决方案或规范。其特性如下:

  • Distributed/versioned configuration: 分布式版本配置
  • Service registration and discovery: 服务注册和发现
  • Routing: 路由
  • Service-to-service calls: 服务调用
  • Load balancing: 负载均衡
  • Circuit breakers: 断路器
  • Distributed messaging: 分布式消息

  spring cloud 并不完全负责以上这些特性的落地或实现,而是基于这些规范整合了市面上的优秀框架,并基于微服务的格式,对这些组件进行了封装,屏蔽掉了复杂的配置或实现原理,提高了开发体验。因此,也可以将其理解为一系列框架的有序集合。

3.2 版本命名

  spring cloud 集成了大量由外部公司维护的组件,故使得其较为复杂。为避免 spring cloud 本身版本与各组件的版本歧义,其在版本命名上并没有采用传统的数字版本格式,而是经历了以下两个阶段:

  • 早期阶段:早期版本使用了英国伦敦地铁站名称来命名,以地铁站英文名称首字母 A - Z 的顺序来迭代,如:
    • Angel
    • Brixton
    • Camden
    • Dalston
    • Edgware
    • Finchley
    • Greenwich
    • Hoxton
  • 当前阶段:当前阶段版本带上了时间前缀,如:
    • 2020.0.x aka Ilford
    • 2021.0.x aka Jubilee
    • 2022.0.x aka Kilburn
    • 2023.0.x aka Leyton
    • 2024.0.x aka Moorgate

  注:由于 spring cloud 依赖于 spring boot,故在使用 soring cloud 是需注意其与 spring boot 的版本对应,详细可见 spring cloud 官网 spring cloud 官网。

3.3 实现案例(netflix & alibaba)

  spring cloud 规范中定义的组件的相关实现有很多,但被 spring cloud 官网认证的却只有两个系列,分别是 spring cloud netflix 系列和 spring cloud alibaba 系列。其中 spring cloud netflix 是 spring cloud 官网认证的第一代实现,2018 年 netflix 宣布停止维护其核心组件。2019 年 spring cloud 宣布 spring cloud alibaba 毕业,正式成为 spring cloud 的第二代实现。

  spring cloud netflix 由美国网飞公司实现,其核心组件如下:

  • eureka: 服务注册和发现
  • ribbon: 负载均衡
  • feign: 服务调用
  • hystrix: 断路器
  • zuul: 网关

  spring cloud alibaba 由中国阿里巴巴公司实现,其核心组件如下:

  • nacos: 服务注册和发现、配置中心
  • sentinel: 限流降级
  • seata: 分布式事务
  • schedulex: 分布式定时任务
  • rocket mq: 分布式消息
  • sidecar: 异构服务
  •  注:dubbo 是阿里巴巴实现的高性能 RPC 框架,其完全适配 spring cloud alibaba 生态。现已捐给 apache。

  除了第三方组件外,spring cloud 自己也实现了相关优秀组件,如:

  • spring cloud gateway: 服务网关
  • spring cloud loadbalancer: 负载均衡器
  • spring cloud openfeign: 服务调用(netflix 停止维护 feign 后,spring cloud 基于 feign 开发了 openfeign)
3.4 nacos 与 eureka 的区别
eurekanacos
研发公司Netflix(美)阿里巴巴(中)
核心功能服务注册与发现服务注册与发现、配置中心、动态 DNS
CAP 支持AP(可用性优先)CP(强一致性)为主,支持 AP 模式
健康检查被动(客户端心跳)主动(服务端通过 http、tcp 等协议检查)、被动(客户端心跳)
服务发现协议httphttp、rpc、dns
持久化不支持支持 mysql 等持久化方式
客户端支持主要支持 java 语言支持 java、go、node.js 等
生态支持spring cloud 第一任官配(spring cloud netflix)spring cloud 第二任官配(spring cloud alibaba)
扩展性弱(不行!)强(行!)

注:关于 nacos 更详细介绍,还请移步 nacos 官网。

3.5 gateway 与 zuul 的区别
zuulgateway
研发公司NetflixSpring
技术背景基于阻塞 IO,使用 servlet 技术,不支持长连接基于非阻塞 IO,使用 webflux + netty + reactor 实现的响应式网关,支持长连接
路由方式基于 servlet 的路由方式,较为单一支持基于路径、服务、请求参数等多种路由规则来实现请求的路由和转发,更加灵活
过滤器基于 servlet,不支持异步基于 webflux,支持异步
性能阻塞 IO(不行!)非阻塞 IO,性能是 zuul 的 1.6 倍(行!)

  综上所述,分布式微服务架构的组合拳可由 spring cloud 和 spring cloud alibaba 组成(截至公历 2025 年 1 月 5 日,农历甲辰年腊月初六(小寒))。

  注:spring cloud alibaba 使用示例见下篇文章(我就是下篇文章《spring cloud alibaba 使用示例》,戳我!)。

相关文章:

分布式微服务系统简述

distributed microservice 分布式与微服务的定义及关系;分布式微服务架构里的各组件,如:配置中心、服务注册/发现、服务网关、负载均衡器、限流降级、断路器、服务调用、分布式事务等;spring cloud 介绍及实现案例,如…...

【Linux】列出所有连接的 WiFi 网络的密码

【Linux】列出所有连接的 WiFi 网络的密码 终端输入 sudo grep psk /etc/NetworkManager/system-connections/*会列出所有连接过 Wifi 的信息,格式类似 /etc/NetworkManager/system-connections/AAAAA.nmconnection:pskBBBBBAAAAA 是 SSID,BBBBB 是对…...

电脑无法开机,重装系统后没有驱动且驱动安装失败

电脑无法开机,重装系统后没有驱动且驱动安装失败 前几天电脑突然坏了,电脑卡住后,强制关机,再开机后开机马上就关机。尝试无数次开机后失败,进入BIOS界面,发现已经没有Windows系统了。重新安装系统后&…...

基于SpringBoot格式化实体的时间类型以及静态注入依赖

一. 场景描述 在进行前后端交互时,发现实体的LocalDateTime返回的格式是这样的: 这不符合我们日常习惯的格式 “年-月-日 时:分:秒”,于是上网学习了前辈 励碼的文章SSM项目中LocalDateTime格式化最佳实践_localdatetime 格式化-CSDN博客解决…...

技术总结:FPGA基于GTX+RIFFA架构实现多功能SDI视频转PCIE采集卡设计方案

目录 1、前言工程概述免责声明 3、详细设计方案设计框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGBFDMA图像缓存RIFFA用户数据控制RIFFA架构详解Xilinx 7 Series Integrated Block for PCI ExpressRIFFA驱动及其安装QT上位机HDMI输出RGB转BT…...

Flink读写Kafka(Table API)

前面(Flink读写Kafka(DataStream API)_flink kafka scram-CSDN博客)我们已经讲解了使用DataStream API来读取Kafka,在这里继续讲解下使用Table API来读取Kafka,和前面一样也是引入相同的依赖即可。 <dependency> <groupId>org.apache.flink</groupId&…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.2 ndarray解剖课:多维数组的底层实现

1.2 《ndarray解剖课&#xff1a;多维数组的底层实现》 内容介绍 NumPy 的 ndarray 是其核心数据结构&#xff0c;用于高效处理多维数组。在这篇文章中&#xff0c;我们将深入解析 ndarray 的底层实现&#xff0c;探讨其内存结构、维度、数据类型、步长等关键概念&#xff0c…...

冯诺依曼架构和哈佛架构的主要区别?

冯诺依曼架构&#xff08;Von Neumann Architecture&#xff09;和哈佛架构&#xff08;Harvard Architecture&#xff09;是两种计算机体系结构&#xff0c;它们在存储器组织、指令处理和数据存取等方面有明显的不同。以下是它们的主要区别&#xff1a; 1.存储器结构 冯诺依曼…...

Gurobi基础语法之字典

Python中的字典&#xff1a;dict 我们先来介绍一下Python语法中的 dict 类型, 字典中可以通过任意键值来对数据进行映射&#xff0c;任何无法修改的python对象都可以当作键值来使用&#xff0c;这些无法修改的Python对象包括&#xff1a;整数(比如&#xff1a;1)&#xff0c;浮…...

ceph新增节点,OSD设备,标签管理(二)

一、访问客户端集群方式 方式一: 使用cephadm shell交互式配置 [rootceph141 ~]# cephadm shell # 注意&#xff0c;此命令会启动一个新的容器&#xff0c;运行玩后会退出&#xff01; Inferring fsid c153209c-d8a0-11ef-a0ed-bdb84668ed01 Inferring config /var/lib/ce…...

利用metaGPT多智能体框架实现智能体-2

1.一些帮助理解的概念 智能体 在MetaGPT看来&#xff0c;可以将智能体想象成环境中的数字人&#xff0c;其中 智能体 大语言模型&#xff08;LLM&#xff09; 观察 思考 行动 记忆 这个公式概括了智能体的功能本质。为了理解每个组成部分&#xff0c;让我们将其与人类进…...

Hadoop 与 Spark:大数据处理的比较

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…...

Django 日志配置实战指南

日志是 Django 项目中不可或缺的一部分,它帮助我们记录应用程序的运行状态、调试信息、错误信息等。通过合理配置日志,我们可以更好地监控和调试应用程序。本文将详细介绍如何在 Django 项目中实现日志文件分割、日志级别控制以及多环境日志配置,并结合最佳实践和代码示例,…...

传输层协议TCP与UDP:深入解析与对比

传输层协议TCP与UDP&#xff1a;深入解析与对比 目录 传输层协议TCP与UDP&#xff1a;深入解析与对比引言1. 传输层协议概述2. TCP协议详解2.1 TCP的特点2.2 TCP的三次握手与四次挥手三次握手四次挥手 2.3 TCP的流量控制与拥塞控制2.4 TCP的可靠性机制 3. UDP协议详解3.1 UDP的…...

doris:JSON导入数据

本文介绍如何在 Doris 中导入 JSON 格式的数据文件。Doris 支持导入标准 JSON 格式数据&#xff0c;通过配置相关参数&#xff0c;可以灵活地处理不同的 JSON 数据结构&#xff0c;并支持从 JSON 数据中抽取字段、处理嵌套结构等场景。 导入方式​ 以下导入方式支持 JSON 格式…...

Ubuntu18.04 搭建DHCP服务器

在Ubuntu系统中&#xff0c;DHCP&#xff08;动态主机配置协议&#xff09;服务通常由isc-dhcp-server软件包提供。要配置和使用DHCP服务&#xff0c;你可以按照以下步骤操作&#xff1a; 1. 安装DHCP服务器 首先&#xff0c;你需要安装isc-dhcp-server。打开终端并输入以下命…...

Spring Boot 邂逅Netty:构建高性能网络应用的奇妙之旅

一、引言 在当今数字化时代&#xff0c;构建高效、可靠的网络应用是开发者面临的重要挑战。Spring Boot 作为一款强大的 Java 开发框架&#xff0c;以其快速开发、简洁配置和丰富的生态支持&#xff0c;深受广大开发者喜爱。而 Netty 作为高性能、异步的网络通信框架&#xff…...

【云安全】云原生-Docker(五)容器逃逸之漏洞利用

漏洞利用逃逸 通过漏洞利用实现逃逸&#xff0c;主要分为以下两种方式&#xff1a; 1、操作系统层面的内核漏洞 这是利用宿主机操作系统内核中的安全漏洞&#xff0c;直接突破容器的隔离机制&#xff0c;获得宿主机的权限。 攻击原理&#xff1a;容器本质上是通过 Linux 的…...

九、CSS工程化方案

一、PostCSS介绍 二、PostCSS插件的使用 项目安装 - npm install postcss-cli 全局安装 - npm install postcss-cli -g postcss-cli地址&#xff1a;GitHub - postcss/postcss-cli: CLI for postcss postcss地址&#xff1a;GitHub - postcss/postcss: Transforming styles…...

gradle创建springboot单项目和多模块项目

文章目录 gradle创建springboot项目gradle多模块项目创建 gradle创建springboot项目 适用IDEA很简单&#xff0c;如下图 gradle多模块项目创建 首选创建父项目&#xff0c;然后删除无用内容至下图 选择父项目目录&#xff0c;右键选择模块&#xff0c;创建子项目&#xff08…...

Vue实现div滚动,并且支持top动态滚动

如果你知道距离目标 div 顶部的像素值&#xff0c;并希望通过传入 top 参数来实现滚动到对应区域&#xff0c;可以使用 window.scrollTo 方法。 编写滚动方法 const scrollToDiv (targetDiv, top) > {if (targetDiv) {top top * targetDiv.value.scrollHeight / data.he…...

Elasticsearch 中,分片(Shards)数量上限?副本的数量?

概念 ElasticSearch高可用集群架构实战 分片数量1 在 Elasticsearch 中&#xff0c;分片&#xff08;Shards&#xff09;是数据存储和索引的基本单位。创建分片时需要考虑多个因素&#xff0c;包括集群的配置、硬件资源&#xff08;如磁盘空间、内存等&#xff09;以及性能要…...

Unity入门1

安装之后无法获得许可证&#xff0c;可以考虑重装 新建项目 单击空白处生成脚本 双击c#文件 会自动打开vstudio 检查引用 如果没有引用&#xff0c;重开vstu&#xff0c;或者重新加载项目 hierarchy层级 scenes场景 assets资产 inspector督察 icon图标 资源链接&…...

网络模型简介:OSI七层模型与TCP/IP模型

计算机网络是现代信息社会的基石&#xff0c;而网络通信的基础在于理解网络模型。网络模型是对通信过程的抽象&#xff0c;它帮助我们理解数据从源到目的地的传输过程。常见的网络模型有 OSI 七层模型 和 TCP/IP 模型&#xff0c;这两种模型在理论和实践中都起着重要作用。 一、…...

软件测试压力太大了怎么办?

本文其实是知乎上针对一个问题的回答&#xff1a; 目前在做软件测试&#xff0c;主要负责的是手机端的项目测试&#xff0c;项目迭代很快&#xff0c;每次上线前验正式都会发现一些之前验测试包时候没有发现的问题&#xff0c;压力太大了&#xff0c;应该怎么调整 看过我之前其…...

微信小程序-点餐(美食屋)02开发实践

目录 概要 整体架构流程 &#xff08;一&#xff09;用户注册与登录 &#xff08;二&#xff09;菜品浏览与点餐 &#xff08;三&#xff09;订单管理 &#xff08;四&#xff09;后台管理 部分代码展示 1.index.wxml 2.list.wxml 3.checkout.wxml 4.detail.wxml 小结优点 概要…...

转换算术表达式

文章目录 构造二叉树表示的算术表达式&#xff1a;按先序次序输入二叉树中结点的值(操作数及运算符均以一位字符表示&#xff0c;注意转换)&#xff0c; #字符表示空树&#xff0c;如上图的算术表达式 输入2##*3##4## 输入格式 第一行输入表示要计算的算术表达式的二叉树结点的…...

99.17 金融难点通俗解释:归母净利润

目录 0. 承前1. 简述2. 比喻&#xff1a;小明家的小卖部2.1 第一步&#xff1a;计算收到的所有钱2.2 第二步&#xff1a;减去各种支出2.3 第三步&#xff1a;计算能带回家的钱 3. 生活中的例子3.1 好的经营情况3.2 一般的经营情况3.3 不好的经营情况 4. 小朋友要注意4.1 为什么…...

【Flutter】旋转元素(Transform、RotatedBox )

这里写自定义目录标题 Transform旋转元素可以改变宽高约束的旋转 - RotatedBox Transform旋转元素 说明&#xff1a;Transform旋转操作改变了元素的方向&#xff0c;但并没有改变它的布局约束。因此&#xff0c;虽然视觉上元素看起来是旋转了&#xff0c;但它仍然遵循原始的宽…...

MYSQL学习笔记(六):聚合函数、sql语句执行原理简要分析

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇是内容较少&#xff0c;主要讲解&#xff1a;聚合函数和简要介绍sql语句执行过…...