SpringCloud2.0 微服务介绍及Eureka服务注册(一)

1.什么是微服务

是一种软件架构方式。它将应用构建成一系列按业务领域划分模块的、小的自治服务。在微服务架构中,每个服务都是自我包含的,并且实现了单一的业务功能。

2.什么是Eureka

EurekaNetflix 开发的服务发现框架,本身是一个基于 REST 的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud 将它集成在其子项目spring-cloud-netflix中,以实现 SpringCloud 的服务发现功能。

Eureka 包含两个组件:Eureka ServerEureka Client

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样 Eureka Server 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client 是一个java客户端,用于简化与 Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
在应用启动后,将会向Eureka Server发送心跳,默认周期为 30 秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

Eureka Server之间通过复制的方式完成数据的同步,Eureka 还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性

3.eureka 架构图

SpringCloud2.0 微服务介绍及Eureka服务注册(一)_第1张图片

4、Eureka核心功能点

服务注册(register)Eureka Client 会通过发送REST请求的方式向 Eureka Server 注册自己的服务,提供自身的元数
据,比如 ip 地址、端口、运行状况指标的 url 、主页地址等信息。Eureka Server 接收到注册请求后,就会把这些元数
据信息存储在一个双层的Map中。
服务续约(renew):在服务注册后,Eureka Client 会维护一个心跳来持续通知 Eureka Server ,说明服务一直处于可
用状态,防止被剔除。Eureka Client 在默认的情况下会每隔30秒( eureka.instance.leaseRenewallIntervalInSeconds )发送一次心跳来进行服务续约。
服务同步(replicate)Eureka Server 之间会互相进行注册,构建 Eureka Server 集群,不同 Eureka Server 之间会进
行服务同步,用来保证服务信息的一致性。
获取服务(get registry):服务消费者( Eureka Client )在启动的时候,会发送一个REST请求给 Eureka Server ,获
取上面注册的服务清单,并且缓存在 Eureka Client 本地,默认缓存 30
( eureka.client.registryFetchIntervalSeconds )。同时,为了性能考虑,Eureka Server 也会维护一份只读的服务清
单缓存,该缓存每隔30秒更新一次。
服务调用:服务消费者在获取到服务清单后,就可以根据清单中的服务列表信息,查找到其他服务的地址,从而进行
远程调用。EurekaRegionZone 的概念,一个 Region 可以包含多个 Zone,在进行服务调用时,优先访问处于同
一个 Zone 中的服务提供者。
服务下线(cancel):当 Eureka Client 需要关闭或重启时,就不希望在这个时间段内再有请求进来,所以,就需要提前
先发送REST请求给 Eureka Server ,告诉 Eureka Server 自己要下线了,Eureka Server 在收到请求后,就会把该服务
状态置为下线(DOWN),并把该下线事件传播出去。
服务剔除(evict):有时候,服务实例可能会因为网络故障等原因导致不能提供服务,而此时该实例也没有发送请求给
Eureka Server 来进行服务下线,所以,还需要有服务剔除的机制。Eureka Server 在启动的时候会创建一个定时任
务,每隔一段时间(默认60秒),从当前服务清单中把超时没有续约(默认90秒,
eureka.instance.leaseExpirationDurationInSeconds)的服务剔除。
自我保护:既然 Eureka Server 会定时剔除超时没有续约的服务,那就有可能出现一种场景,网络一段时间内发生了
异常,所有的服务都没能够进行续约,Eureka Server 就把所有的服务都剔除了,这样显然不太合理。所以,就有了
自我保护机制,当短时间内,统计续约失败的比例,如果达到一定阈值,则会触发自我保护的机制,在该机制下,
Eureka Server 不会剔除任何的微服务,等到正常后,再退出自我保护机制。自我保护开关(eureka.server.enableself-preservation: false)

5.快速搭建一个eureka服务注册中心

5.1 父类pom包依赖


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0modelVersion>
    <packaging>pompackaging>
    <name>power-spring-cloud-parentname>
    <groupId>com.power.springcloudgroupId>
    <artifactId>spring-cloud-parentartifactId>
    <version>1.0-SNAPSHOTversion>
    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
        <spring-cloud.version>Finchley.RELEASEspring-cloud.version>
        <spring-boot.version>2.0.1.RELEASEspring-boot.version>
    properties>
    <modules>
        <module>power-eureka-servermodule>
    modules>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${spring-cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-dependenciesartifactId>
                <version>${spring-boot.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-compiler-pluginartifactId>
                    <version>3.5.1version>
                    <configuration>
                        <source>1.8source>
                        <target>1.8target>
                        <encoding>UTF-8encoding>
                    configuration>
                plugin>
            plugins>
        pluginManagement>

    build>

    <repositories>
        <repository>
            <id>centralid>
            <url>http://maven.aliyun.com/nexus/content/groups/publicurl>
            <name>centralname>
        repository>
        <repository>
            <id>spring-milestonesid>
            <name>Spring Milestonesname>
            <url>https://repo.spring.io/milestoneurl>
            <snapshots>
                <enabled>falseenabled>
            snapshots>
        repository>
    repositories>

project>

5.2 eureka 服务pom依赖


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-parentartifactId>
        <groupId>com.power.springcloudgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>
    <artifactId>eureka-serviceartifactId>
    <name>eureka-servicename>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>

project>

5.3 编写启动类

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

5.4添加配置文件

###服务端口号
server:
  port: 8100
###eureka 基本信息配置
eureka:
  instance:
    ###注册到eurekaip地址
    hostname: localhost
  client:
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    ###因为自己是为注册中心,不需要自己注册自己
    register-with-eureka: false
    ###因为自己是为注册中心,不需要检索服务
    fetch-registry: false
spring:
  freemarker:
    prefer-file-system-access: false

6.启动访问

SpringCloud2.0 微服务介绍及Eureka服务注册(一)_第2张图片

学习资料:
https://www.cnblogs.com/songlu/p/9962702.html

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