Java SpringCloud系列(一) —— Eureka(服务治理)简介以及搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liboyang71/article/details/81102812

首先,整个课程系列需要同学们有一定的基础技能,分别是java、springboot、github以及基础的Linux的知识,其中springboot是各位同学一定要掌握的,如果没有springboot基础可以查看我之前的博客对 java 搭建基于springboot的ssm(spring + springmvc + mybatis)的maven项目java 搭建基于springboot的ssh(spring + springmvc + hibernate)的gradle项目(基础篇) 进行学习,关于github以及Linux方面可以在使用到的时候再进行学习以及准备。
现在我们开始进入springcloud系列第一篇,关于eureka(服务治理中心的简介以及搭建)。

1.Eureka 简介

Spring Cloud Eureka是基于Netflix Eureka做的二次封装,由两个组件组成,分别是Eureka Server(注册中心)以及Eureka Client(服务注册),eureka的主要作用是用来实现各个微服务实例的自动化注册与发现。

2.使用原因

很多同学一定会想,为什么我要使用eureka,服务之间的调用我直接使用httpclient或者其他方式来调用不好吗?
首先eureka提供了 服务注册 即注册中心来将每个服务的信息进行注册,并使用心跳机制来监控各个服务的健康状态,将不健康的服务及时剔除掉,这一点可能对初学的同学来说并不是那么直观。
其次eureka提供了 服务发现 功能,即各服务之间的调用不再通过具体的实例地址来调用,而是通过服务名称来调用,想象一个场景,我的服务A要调用服务B,但是服务B我做了多份的服务负载B1,B2,B3…,这时如果我A想去调用B,我需要写清我要调用的服务B1,B2,B3的一个轮询的规则以及对应的实例地址,如果我的B1,B2,B3的服务器地址改变或者某个服务宕机我是需要修改我的代码或确认宕机服务器的(当然这种具体的轮询实现和调用是通过Ribbon来实现的,后面我们会讲到,eureka起到了基础支持),但是如果我使用eureka来维护,将B1,B2,B3统一命名为B,在我A进行调用的时候只需要通过服务名称(即B)来代替实例地址来实现调用,其中的轮询springcloud也都帮我们做好了,而且当其中某一个B服务宕机时,eureka的心跳机制会发现宕机服务并自动将它剔除到服务外,保证我们的负载服务的一个健康。

3.与Zookeeper对比

著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。在此Zookeeper保证的是CP, 而Eureka则是AP。
Zookeeper为保证一致性,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。选举leader的时间长达30 - 120s, 且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。
Eureka为保证可用性,当向注册中心查询服务列表时,可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。
所以理论上Eureka是更适合作注册中心。但是ZooKeeper基本不会遇到用做注册中心的机器一半以上都挂了的情况。所以实际上也没什么大问题。

4.Eureka搭建

4.1 环境准备

开发工具:idea
开发环境:JDK8
spring boot 版本: 2.0.3
构建工具: gradle4.5(因为springboot使用2.0所以gradle要使用4.0以上版本)

4.2 服务端

1.创建springboot项目
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
2.改造为Eureka服务端(目前先做一个单体的eureka,一会我们会改造成高可用的集群版)
这里写图片描述
这里写图片描述

#指定端口
server.port=8761
#服务名称
spring.application.name=eureka
#指定eureka地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#不注册到eureka中(后期高可用进行修改)
eureka.client.register-with-eureka=false
#是否检索服务(由于注册中心的职责就是维护服务实例,并不需要去检索服务)
eureka.client.fetch-registry=false
  1. 启动项目,访问localhost:8761,如下图所示,表示启动成功,一个最简单的eureka我们就算搭建完成了。
    这里写图片描述

4.3 客户端

既然eureka搭建好了,我们自然要看一下如何把服务注册进来了,现在我们来演示一下如何将服务注册到eureka中。

1.创建springboot项目(内容同上,改造方式同上,唯一不同如下图所示,不做赘述)
这里写图片描述
这里写图片描述
2.改造为Eureka客户端
这里写图片描述
这里写图片描述
3.启动项目,访问localhost:8761,如下图所示,表示注册成功
这里写图片描述

5.eureka的高可用搭建

这里就不像上面一个给各位同学一一截图了,说一下大概需要修改的地方,例如我们现在有三个eureka分别为eureka1(8761),eureka2(8762),eureka3(8763),括号中表示端口号,
eureka1中的写法改为
eureka.client.service-url.defaultZone=http://localhost:8762/eureka/,http://localhost:8763/eureka/
eureka2中的写法改为
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/,http://localhost:8763/eureka/
eureka3中的写法改为
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/
客户端(clientone)中的写法改为
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/

这样一个高可用的eureka就算是搭建完了,在真正开发的生产环境中我们使用这种方式即可。

猜你喜欢

转载自blog.csdn.net/liboyang71/article/details/81102812