Spring Cloud简介及Eureka 环境搭建

微服务简介

微服务是由单一的应用程序构成的小服务,拥有自己的进程和轻量化处理。服务依业务功能设计,以全自动方式部署,与其他服务使用HTTP API 的通讯。同时同时服务使用最小规模的集中管理技术,服务可以使用不同的编程语言和数据库实现。

单体应用的特点

  • 部署成本高(每次代码的修改都要全量替换)
  • 改动影响大,风险高(不论代码改动多小,成本都想同)
  • 无法快速满足扩容,弹性伸缩,无法适应云环境特点等问题

微服务的特点

  • 优点:针对特定服务发布,影响小,风险小,成本低,低成本扩容
  • 缺点:部署,测试,监控的成本问题(如:分布式事务,CAP的相关问题)

CAP定理 CAP是指在分布式系统中Consistency(数据一致性),Availablity(可用性),Partintion tolerance(分区容错性),三者不可兼得。

应用架构的迁边(单体架构 -> SOA架构 -> 微服务架构)

单体架构的优缺点(把所有的业务逻辑都写在一个程序中)
  • 架构简单,项目开发和维护成本低。
  • 所有项目模块部署到一起,对于小型项目来说,维护方便。
  • 系统启动慢,一个进程包含了所有的业务逻辑,涉及到的启动模块过多,导致系统的启动、重启时间周期过长
  • 可伸缩性差:系统的扩容只能只对这个应用进行扩容,不能做到对某个功能点进行扩容;
SOA架构(面向服务的架构)

面向服务架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。 SOA架构中有两个主要角色:服务提供者(Provider)和服务使用者(Consumer)。而软件代理则可以扮演这两个角色。
该consumer层是用户与SOA交互的点,和provider层则由SOA架构内的所有服务所组成。

Spring Cloud 简介

Spring Cloud 是一个服务治理平台,提供了一些服务框架。包含了:服务注册与发现、配置中心、消息中心、负载均衡、数据监控等。
Spring Cloud 是一个微服务框架,相比SOA框架而言,SpringCloud提供了全套的分布式解决方案。

Spring Cloud 的常用组件

  • Spring Cloud Netflix Eureka (主要做:服务注册中心)
  • Spring Cloud Netflix Ribbon(主要做:远程调用、负载均衡)
  • Spring Cloud OpenFeign(服务的远程调用)
  • Spring Cloud Netflix Hystrix(调拨器功能)
  • Spring Cloud Config(配置中心,配置文件的统一管理)
  • Spring Cloud Gateway(网关,路由管理)
  • Spring Cloud Stram (消息的流式传递)

Spring Cloud Eureka 简介

Eureka 是Netfix开发的服务发现框架,本身是一个基于REST的服务。在SpringCloud中将它集成在子项目spring-cloud-netfix中,以实现SpringCloud的服务发现功能。
Eureka 中包含两组件Eurake Server(提供服务注册) 和 Eurake Client(与服务端进行交换,其中又包含两个角色Application Service (提供服务方,注册服务到Eureka Server 服务中)和 Application Client(发现服务并使用))

Eureka Server 环境搭建

引入依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--引入Eureka Server 依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

		<!-- spring boot security安全认证启动器 -->
		<dependency>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-security</artifactId>
		</dependency>	
修改application.yml配置文件
  • 第一个Eureka服务端配置文件
server:
  port: 7001
spring:
  # 开启基于http basic的安全认证
  security:
    basic:
      enabled:true
    # 设置安全认证用户名
    user:
      name: test
      # 设置安全认证密码
      password: 123456
      
eureka:
  server:
  	 	# 通过 Eureka 的自我保护机制,可以让 Eureka Server 集群更加的健壮、稳定。默认是开启不建议修改
 	   enable-self-preservation: false
   	#设置清理间隔(单位:毫秒 默认是60*1000)
     eviction-interval-timer-in-ms: 4000 
  instance:
  		# 服务端实例名称
     hostname: eureka7001.com
  client:
  	   # 是否将自己注册到Eureka-Server中,默认的为true,(不把自己作为一个客户端注册到自己身上)
     register-with-eureka: false
     # 是否从Eureka-Server中获取服务注册信息,默认为true(因为在这里自己就是服务端,而且已经禁用自己注册了)
    fetch-registry: false
    service-url:
      	# defaultZone:  http://${eureka.instance.hostname}:${server.port}/eureka/ #单机版
      	defaultZone: http://test:[email protected]:7002/eureka/ #集群版 将当前的 Eureka Server 注册到 7002 上
  • 配置第二个Eureka服务端配置文件
server:
  port: 7002
spring:
  # 开启基于http basic的安全认证
  security:
    basic:
      enabled:true
    # 设置安全认证用户名
    user:
      name: test
      # 设置安全认证密码
      password: 123456

eureka:
  server:
  	 	# 通过 Eureka 的自我保护机制,可以让 Eureka Server 集群更加的健壮、稳定。默认是开启不建议修改
 	   enable-self-preservation: false
   	#设置清理间隔(单位:毫秒 默认是60*1000)
     eviction-interval-timer-in-ms: 4000 
  instance:
  		# 服务端实例名称
     hostname: eureka7002.com
  client:
  	   # 是否将自己注册到Eureka-Server中,默认的为true,(不把自己作为一个客户端注册到自己身上)
     register-with-eureka: false
     # 是否从Eureka-Server中获取服务注册信息,默认为true(因为在这里自己就是服务端,而且已经禁用自己注册了)
    fetch-registry: false
    service-url:
      	# defaultZone:  http://${eureka.instance.hostname}:${server.port}/eureka/ #单机版
      	defaultZone: http://test:[email protected]:7001/eureka/ #集群版 将当前的 Eureka Server 注册到 7002上
  • 由于开启了http basic 安全认证则添加此配置
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        // 关闭csrf 防护
        http.csrf().disable();
    }
}
启动类配置
@SpringBootApplication
@EnableEurekaServer
public class App7001 {
    public static void main(String[] args) {
        SpringApplication.run(App7001.class,args);
    }
}
  • 运行结果
    Spring Cloud简介及Eureka 环境搭建_第1张图片

由于我们是在本地搭建的 Eureka Server 集群,因此我们需要修改本地的 host 文件,Windows 操作系统的电脑在 C:/Windows/System/drivers/etc/hosts 中修改,Mac 系统的电脑则需要在 vim/etc/hosts 中修改,修改内容如下:
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com

Eureka 的自我保护机制而出现的。默认情况下,如果 Eureka Server 在一段时间内(默认为 90 秒)没有接收到某个服务提供者(Eureka Client)的心跳,就会将这个服务提供者提供的服务从服务注册表中移除。 这样服务消费者就再也无法从服务注册中心中获取到这个服务了,更无法调用该服务。但在实际的分布式微服务系统中,健康的服务(Eureka Client)也有可能会由于网络故障(例如网络延迟、卡顿、拥挤等原因)而无法与 Eureka Server 正常通讯。若此时 Eureka Server 因为没有接收心跳而误将健康的服务从服务列表中移除,这显然是不合理的。而 Eureka 的自我保护机制就是来解决此问题的。所谓 “Eureka 的自我保护机制”,其中心思想就是“好死不如赖活着”。如果 Eureka Server 在一段时间内没有接收到 Eureka Client 的心跳,那么 Eureka Server 就会开启自我保护模式,将所有的 Eureka Client 的注册信息保护起来,而不是直接从服务注册表中移除。一旦网络恢复,这些 Eureka Client 提供的服务还可以继续被服务消费者消费。

Eureka Client 环境搭建(Provider 和 Consumer 的配置一样只需更改端口即可)

引入依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--引入Eureka Server 依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
修改application.yml 文件
server:
  port: 8001

spring:
  application:
    name: provider

# eureka 服务端实例名称
eureka:
  instance:
    prefer-ip-address: true
    ip-address: localhost:8001
  client:
    service-url:
      # defaultZone:  http://${eureka.instance.hostname}:${server.port}/eureka/ #单机版
      defaultZone: http://test:[email protected]:7001/eureka/,http://test:[email protected]:7002/eureka/ #集群版

配置启动类
@EnableEurekaClient
@SpringBootApplication
public class ProviderApp {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApp.class,args);
    }
}
运行结果

Spring Cloud简介及Eureka 环境搭建_第2张图片

你可能感兴趣的:(spring,cloud,微服务)