分布式理论

分布式理论是计算机科学中的一个重要领域,它研究如何在多个计算机节点之间共享资源、协调任务和处理数据。分布式系统是由多个独立的计算机节点组成的,这些节点通过网络连接在一起,共同完成一个任务。

分布式理论主要关注以下几个方面:

  1. 一致性:分布式系统中的节点需要保持一致的状态,即使在面对网络故障或节点故障的情况下也要保持一致。一致性模型包括强一致性、弱一致性和最终一致性等。

  2. 可靠性:分布式系统需要具备高可靠性,即使在节点故障或网络故障的情况下也能够正常运行。为了实现可靠性,分布式系统通常采用冗余备份、容错机制和故障恢复等技术。

  3. 可扩展性:分布式系统需要具备良好的可扩展性,即能够根据需求增加或减少节点数量,以适应不断变化的工作负载。可扩展性可以通过水平扩展和垂直扩展来实现。

  4. 并发性:分布式系统需要能够处理大量并发请求,保证系统的性能和响应时间。并发性问题包括资源竞争、锁机制和分布式事务等。

  5. 安全性:分布式系统需要具备良好的安全性,保护系统免受恶意攻击和数据泄露。安全性问题包括身份认证、访问控制和数据加密等。

分布式理论的研究成果为实际的分布式系统设计和开发提供了理论基础和指导。在实际应用中,分布式系统广泛应用于云计算、大数据处理、分布式数据库和分布式存储等领域,为提高系统的性能、可靠性和可扩展性提供了解决方案。

RPC

RPC(Remote Procedure Call)是一种远程过程调用的技术,允许一个计算机程序调用另一个地址空间(通常是另一台机器上)的子程序,而不需要程序员显式编写远程调用的细节。RPC使得分布式系统中的不同节点能够像调用本地函数一样调用远程函数,从而简化了分布式系统的开发。

RPC的工作原理通常包括以下几个步骤:

  1. 客户端调用:客户端程序调用本地的客户端存根(stub),并传递参数。

  2. 数据封装:客户端存根将参数封装成消息,并通过网络发送给远程服务端。

  3. 网络传输:消息通过网络传输到远程服务端。

  4. 服务端接收:远程服务端接收消息,并将消息解封装,提取参数。

  5. 服务端调用:服务端调用本地的服务端存根,执行相应的远程过程。

  6. 结果返回:服务端执行完远程过程后,将结果封装成消息返回给客户端。

  7. 客户端接收:客户端接收结果消息,提取结果并返回给调用方。

RPC的优点包括:

  • 封装性:隐藏了网络通信的细节,使得远程调用看起来像本地调用一样简单。

  • 模块化:提供了模块化的设计,使得分布式系统的开发更加灵活和易于维护。

  • 效率:相比其他远程调用方式,RPC通常具有较高的效率和性能。

微服务架构

微服务架构是一种软件架构模式,将一个应用程序拆分成一组小型、独立的服务,每个服务都运行在自己的进程中,并通过轻量级的通信机制相互协作。微服务架构的核心理念是将复杂的单体应用拆分成多个小型服务,每个服务都专注于特定的业务功能,通过独立部署和扩展来提高灵活性和可维护性。

微服务架构的特点包括:

  1. 服务拆分:将单体应用拆分成多个小型服务,每个服务都专注于特定的业务功能,如用户管理、订单处理、支付服务等。

  2. 独立部署:每个微服务都可以独立部署,不影响其他服务,从而提高灵活性和快速迭代的能力。

  3. 轻量级通信:微服务之间通过轻量级的通信机制进行通信,如 HTTP、RPC 等,实现松耦合。

  4. 自动化部署和运维:通过自动化工具和容器技术,实现微服务的自动化部署和运维,提高可靠性和可维护性。

  5. 多语言支持:微服务架构允许使用不同的编程语言和技术栈来实现不同的服务,提供了更大的灵活性。

  6. 去中心化治理:微服务架构通常采用去中心化的治理模式,每个微服务都有自己的数据存储和业务逻辑,降低了系统的复杂性。

微服务架构的优点包括:

  • 灵活性:每个微服务都可以独立开发、部署和扩展,提高了灵活性和快速迭代的能力。

  • 可维护性:微服务架构使得系统更加模块化,每个微服务都专注于特定的业务功能,易于维护和升级。

  • 可扩展性:可以根据需求对每个微服务进行独立的扩展,提高了系统的可扩展性。

  • 技术多样性:允许使用不同的编程语言和技术栈来实现不同的服务,提供了更大的灵活性。

  • 容错性:由于微服务之间是松耦合的,一个服务的故障不会影响其他服务,提高了系统的容错性。

然而,微服务架构也面临一些挑战,如分布式系统的复杂性、服务间通信的开销、数据一致性和跨服务的事务管理等问题,需要综合考虑和解决。

微服务架构4个核心问题

  • 服务很多,客户端怎么访问

  • 这么多服务,服务之间如何通信

  • 这么多服务,如何治理

  • 服务挂了怎么办

解决方案

springcloud netflix 一站式解决方案

api网关 zuul 组件

feign ---httpclient------http通信,同步,阻塞

服务注册发现: eureka

熔断机制:hystrix

.....

dubbo + zookeeper 半自动,需要整合别人的

spring cloud alibaba 新的一站式解决方案

新概念 服务网格

Spring Cloud

Spring Cloud

参考网站:Spring Cloud中文网-官方文档中文版

Spring Cloud 是一个基于 Spring Boot 的开源微服务框架,提供了一系列开发工具和组件,用于快速构建分布式系统中的微服务架构。Spring Cloud 提供了诸多功能,包括服务发现、服务注册、负载均衡、断路器、网关等,帮助开发者轻松构建和管理分布式系统。

Spring Cloud 的核心组件包括:

  1. Eureka:服务注册与发现组件,用于构建高可用的服务注册中心,实现微服务架构中的服务注册和发现。

  2. Ribbon:负载均衡组件,提供客户端负载均衡的功能,使得服务消费者可以根据负载情况自动选择合适的服务提供者。

  3. Feign:声明式的 HTTP 客户端,简化了服务之间的调用,使得远程调用看起来像本地调用一样简单。

  4. Hystrix:容错管理组件,提供了断路器、隔离、快速失败、缓存等功能,增强了分布式系统的容错能力。

  5. Zuul:API 网关组件,提供了动态路由、访问控制、日志记录等功能,用于构建微服务架构中的网关服务。

除了上述核心组件外,Spring Cloud 还提供了一系列其他组件和工具,如Config、Bus、Sleuth、Stream 等,用于解决微服务架构中的配置管理、消息总线、分布式跟踪、消息驱动等问题。

Spring Cloud 的优势在于与 Spring Boot 紧密集成,提供了丰富的功能和组件,使得开发者可以快速构建和部署分布式系统中的微服务架构。同时,Spring Cloud 社区活跃,提供了丰富的文档和示例,为开发者提供了良好的学习和使用体验。

Spring Cloud 和 Spring Boot 的关系

Spring Cloud 是基于 Spring Boot 的开源微服务框架,它提供了一系列开发工具和组件,用于快速构建分布式系统中的微服务架构。Spring Cloud 与 Spring Boot 之间存在着密切的关系,可以从以下几个方面来详解它们之间的关系:

  1. 基于 Spring Boot 构建:Spring Cloud 是基于 Spring Boot 构建的,它充分利用了 Spring Boot 的自动化配置、快速开发和便捷部署等特性。因此,使用 Spring Cloud 可以充分发挥 Spring Boot 的优势,快速构建和部署微服务架构。

  2. 丰富的功能和组件:Spring Cloud 提供了一系列丰富的功能和组件,如服务注册与发现、负载均衡、断路器、API 网关等,这些功能和组件都是基于 Spring Boot 构建的,可以直接在 Spring Boot 项目中使用,无需额外的配置和集成。

  3. 简化微服务架构的开发:Spring Cloud 通过与 Spring Boot 的紧密集成,简化了微服务架构的开发和部署过程。开发者可以通过简单的配置和引入依赖,即可使用 Spring Cloud 提供的各种功能和组件,快速构建和管理分布式系统中的微服务架构。

  4. 社区活跃和丰富文档:Spring Cloud 社区活跃,提供了丰富的文档和示例,与 Spring Boot 社区相互支持,为开发者提供了良好的学习和使用体验。开发者可以通过社区的支持和资源,更好地理解和使用 Spring Cloud 和 Spring Boot。

综上所述,Spring Cloud 是建立在 Spring Boot 基础之上的微服务框架,通过与 Spring Boot 的紧密集成,为开发者提供了丰富的功能和组件,简化了微服务架构的开发和部署过程,同时也得到了活跃的社区支持和丰富的文档资源。因此,Spring Cloud 和 Spring Boot 之间是一种基于依赖和支持的关系,共同为开发者提供了构建高效、稳定的微服务架构的解决方案。

Spring Cloud RestTemplate

Spring Cloud RestTemplate 是 Spring Cloud 提供的一个用于进行 RESTful 服务调用的模板工具。它基于 Spring 的 RestTemplate 进行了封装和扩展,提供了一系列便捷的方法和功能,用于简化在微服务架构中进行服务间通信的操作。

功能和特点

  1. 简化 HTTP 请求:RestTemplate 提供了丰富的方法,用于发送 HTTP 请求并处理响应,包括 GET、POST、PUT、DELETE 等常见的 HTTP 请求方式,以及对请求参数、请求头、响应处理等的支持。

  2. 服务间通信:在微服务架构中,RestTemplate 可以用于实现服务间的通信,例如一个微服务可以通过 RestTemplate 调用另一个微服务提供的 RESTful API。

  3. 负载均衡:Spring Cloud RestTemplate 集成了 Ribbon 负载均衡器,可以通过服务名来调用其他微服务,而不需要硬编码服务的具体地址和端口。

  4. 服务发现:结合 Eureka 服务注册中心,RestTemplate 可以通过服务名来发现和调用其他微服务,实现了服务注册与发现的功能。

  5. 断路器支持:RestTemplate 可以与 Hystrix 断路器进行集成,实现了对服务调用的容错和熔断功能,提高了系统的稳定性和可靠性。

  6. 简化配置:Spring Cloud RestTemplate 的配置相对简单,可以通过注解和配置文件来实现对 RestTemplate 的配置和使用。

使用示例

// 创建 RestTemplate Bean
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

// 在业务类中使用 RestTemplate 进行服务调用
@Autowired
private RestTemplate restTemplate;

public void callOtherService() {
    // 通过服务名调用其他微服务的 RESTful API
    ResponseEntity<String> response = restTemplate.exchange("http://other-service/api/resource", HttpMethod.GET, null, String.class);
    String responseBody = response.getBody();
    // 处理响应数据
}

上述示例中,首先通过 @LoadBalanced 注解创建了一个具有负载均衡能力的 RestTemplate Bean,并在业务类中注入了该 RestTemplate 实例。然后在业务方法中,通过调用 RestTemplate 的 exchange 方法,实现了对其他微服务的 RESTful API 的调用,并处理了响应数据。

适用场景

  • 在微服务架构中进行服务间的通信和调用。

  • 需要实现负载均衡和服务发现的场景。

  • 需要实现断路器支持,提高系统的容错和稳定性。

Eureka

Eureka 是 Netflix 开源的一款提供服务注册和发现的组件,用于构建高可用的服务注册中心,实现微服务架构中的服务注册和发现。Eureka 由 Eureka Server 和 Eureka Client 两部分组成,Eureka Server 用于提供服务注册和发现的功能,Eureka Client 用于向 Eureka Server 注册服务并从中发现其他服务。

Eureka Server

Eureka Server 是服务注册中心,负责接收来自 Eureka Client 的服务注册信息,并维护服务实例的状态信息。Eureka Server 通过心跳机制定期检查注册的服务实例是否存活,同时将服务实例的状态信息同步给 Eureka Client,以便其他服务能够发现和调用这些服务。

Eureka Server 的特点包括:

  • 高可用性:Eureka Server 支持多节点部署,通过互相注册和相互复制的方式实现高可用性,保证了服务注册中心的稳定性和可靠性。

  • 服务注册:Eureka Server 接收来自 Eureka Client 的服务注册信息,包括服务名、实例 ID、IP 地址、端口号等,用于维护服务实例的注册信息。

  • 服务发现:Eureka Server 维护了所有注册的服务实例信息,其他服务可以通过 Eureka Client 向 Eureka Server 发起查询,从而发现和调用其他服务。

  • 自我保护机制:Eureka Server 支持自我保护机制,当出现网络故障或其他异常情况时,能够保护注册信息不被过期剔除,确保服务的稳定性。

Eureka Client

Eureka Client 是服务注册和发现的客户端组件,用于向 Eureka Server 注册服务并从中发现其他服务。每个微服务都需要作为 Eureka Client 注册到 Eureka Server 上,以便其他服务能够发现和调用它。

Eureka Client 的特点包括:

  • 服务注册:Eureka Client 向 Eureka Server 注册服务实例的信息,包括服务名、实例 ID、IP 地址、端口号等,以便其他服务能够发现和调用它。

  • 服务发现:Eureka Client 从 Eureka Server 获取其他服务实例的信息,包括服务名、实例 ID、IP 地址、端口号等,以便发现和调用其他服务。

  • 心跳检测:Eureka Client 定期向 Eureka Server 发送心跳信息,以保持服务实例的存活状态,并接收来自 Eureka Server 的健康检查信息。

  • 负载均衡:Eureka Client 集成了 Ribbon 负载均衡器,可以通过服务名来调用其他微服务,而不需要硬编码服务的具体地址和端口。

Eureka 的优势

  • 简单易用:Eureka 提供了简单易用的服务注册和发现功能,使得微服务架构的开发和部署更加便捷。

  • 高可用性:Eureka 支持多节点部署,通过互相注册和相互复制的方式实现高可用性,保证了服务注册中心的稳定性和可靠性。

  • 自我保护机制:Eureka 支持自我保护机制,能够保护注册信息不被过期剔除,确保服务的稳定性。

  • 集成负载均衡:Eureka Client 集成了 Ribbon 负载均衡器,可以通过服务名来调用其他微服务,实现了负载均衡的功能。

  • 活跃的社区支持:Eureka 作为 Netflix 开源的组件,得到了活跃的社区支持和丰富的文档资源,为开发者提供了良好的学习和使用体验。

Eureka server配置

导入依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>3.1.1</version>
</dependency>

application.yml

server:
  port: 7001


eureka:
  instance:
    hostname: localhost
  client:
    regigister-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      #defaultZone: http://localhost:7001/eureka/

注解配置

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer_01 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer_01.class,args);
    }
}

Eureka client配置

导入依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.7.RELEASE</version>
</dependency>

application.yml

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka/
  instance:
    instance-id: ${spring.cloud.client.ipAddress}:${spring.application.instance_id:${random.value}} # 注册到eureka上的服务名称

注解配置

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class provider {
    public static void main(String[] args) {
        SpringApplication.run(provider.class,args);
    }
}

Eureka 自我保护机制

Eureka 是 Netflix 开源的一款服务注册与发现组件,用于构建高可用的服务注册中心,实现微服务架构中的服务注册和发现。Eureka 自我保护机制是 Eureka 为了保证自身高可用性而设计的一种保护机制,用于应对网络故障或其他异常情况下的服务注册中心的保护和恢复。

机制原理

Eureka 自我保护机制的原理是基于 Eureka 服务注册中心的心跳机制和实例剔除机制。当 Eureka 服务注册中心在一定时间内没有收到来自客户端的心跳时,会认为客户端出现了故障或网络异常,此时会触发自我保护机制,保护注册中心自身不受影响。

具体来说,Eureka 服务注册中心会维护一个服务实例的存活阈值,默认情况下为 85%,即当服务实例的心跳续约次数低于 85% 时,Eureka 就会认为该服务实例可能出现了故障。此时,Eureka 服务注册中心会进入自我保护模式,不再剔除任何服务实例,以确保服务注册中心的高可用性。

作用和意义

Eureka 自我保护机制的作用和意义在于保护服务注册中心自身不受网络故障或其他异常情况的影响,确保服务注册中心在面对异常情况时能够继续提供服务注册和发现的功能。

具体来说,Eureka 自我保护机制的作用包括:

  1. 保护注册中心:在面对网络故障或其他异常情况时,Eureka 服务注册中心会进入自我保护模式,不再剔除任何服务实例,以确保注册中心自身不受影响,继续提供服务注册和发现的功能。

  2. 避免误剔除:通过自我保护机制,避免了由于网络故障或其他异常情况导致的误剔除健康的服务实例,确保了服务实例的稳定性和可靠性。

  3. 保障服务可用性:保护注册中心自身的高可用性,确保了服务注册和发现功能在面对异常情况时能够继续提供服务,保障了整个微服务架构的可用性。

配置和调优

Eureka 自我保护机制的配置和调优可以通过 Eureka 服务注册中心的配置参数来实现,例如可以通过以下参数进行配置:

  • eureka.server.enable-self-preservation:用于开启或关闭自我保护机制,默认为 true。

  • eureka.server.renewal-percent-threshold:用于设置服务实例的存活阈值,默认为 85%。

通过合理的配置和调优,可以根据实际情况来调整自我保护机制的触发条件和保护策略,以满足不同场景下的需求。

总结

Eureka 自我保护机制是 Eureka 为了保证自身高可用性而设计的一种保护机制,通过维护服务实例的存活阈值和触发自我保护模式,保护注册中心自身不受网络故障或其他异常情况的影响,确保了服务注册和发现功能的稳定性和可靠性。通过合理的配置和调优,可以根据实际情况来调整自我保护机制的触发条件和保护策略,以满足不同场景下的需求。