这里是修真院后端小课堂,每篇分享文从
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】
八个方面深度解析后端知识/技能,本篇分享的是:
【springcloud Eureka 】
大家好,我是IT修真院深圳分院第十三期学员,一枚正直纯洁善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务四里面的一个扩展:初识springboot和freemarker。
1 背景介绍
1.1 springcloud是什么
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。 本质是一个基于springboot的一体系微服务框架。
1.2 eureka是什么?
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
2 知识剖析
2.1 eureka的特点
1、Eureka包含两个组件:Eureka Server和Eureka Client。
2、Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
3、Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
4、在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
5、Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API.
2.2 eureka和zookeeper对比
1、著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)、和P(分区容错性)。由于分区容错性P在分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。Zookeeper保证的是CP, Eureka则是AP。
2、Zoopkeeper保证CP:
当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但是不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样的一种情况,当master节点因网路故障与其他节点失去联系时,剩余的节点会重新进行leader选举。问题在于,选举leader的时间太长,30~120s,且选举期间整个zk集群是都是不可用的,这就导致在选举期间注册服务瘫痪,在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。
3、Eureka保证AP:
Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册时如果发现连接失败,则会自动切换至其他的节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证一致性)。除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:
3.1.Eureka不再从注册列表中移除因为长时间没有收到心跳而应该过期的服务
3.2.Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
3.3.当前网络稳定时,当前实例新的注册信息会被同步到其它节点中
3.常见问题
eureka server避免注册自己
4 解决方案
在application配置文件加入:
eureka:
client:
register-with-eureka: false
fetch-registry: false1234
5.编码实战
6.扩展思考
2、除了freemarker还有什么模板引擎比较流行
除了freemaker还有theamleaf模板引擎,目前springboot官方的模板引擎就是theamleaf,使用theamleaf的好处是theamleaf使用过的就是html文件,不需要想freemarker一样去修改文件后缀为ftl。
7.参考文献
CSDN、百度百科
8 更多讨论
1、springcloud 可以结合zookeeper吗?
springcloud可以使用zookeeper作为注册中心,也可以用consul作为注册中心,并非一定要用eureka。只不过使用eureka的话,能共使用Netflix的oss组件,搭建起来更加方便。
2、eureka中的角色是怎么划分?
eureka中的角色划分分为server和client。其中server提供注册服务,client是需要注册的服务,其中client还分为生产者和消费者。一个生产者既可以是生产者也可以消费者。
3、eureka如何做集群?
eureka做集群也很容易,只需要把eureka的server注册中心的配置文件添加:
server:
port: 8761
profiles: peer1
eureka:
instance:
hostname: http://peer2:8762/eureka/
server:
port: 8762
profiles: peer2
eureka:
instance:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。