网站开发部门结构/企业在线培训系统
用了一段时间得eureka,近期又在用consul 会用但是很多模糊知识点不是很清楚,目前正在查找相关资料,先贴上找到得一篇介绍erueak 好文地址
https://blog.csdn.net/liman65727/article/details/82226380
言归正传,结合实际做下自我总结
Erueak 相关
erueak 服务端提供端配置
项目引入jar包-- jar包引入方式看上面连接
appliction.properties 配置文件中配置
'#由于该应用为注册中心,所以设置为false。表示不想注册中心注册自己
eureka.client.register-with-eureka=false
'#注册中心的职责就是维护服务实例,并不需要去检索服务,因此也设置为false。
eureka.client.fetch-registry=false
springboot项目 启动类Application 上添加 @EnableEurekaServer
server.port=8898
启动服务即可
服务注册者搭建
指定服务注册中心的地址 ,如果双节点注册中心,则使用逗号分隔
eureka.client.service-url.defaultZone:http://localhost:8898/eureka/
指定服务的名称--两台或多台服务提供者,便于注册中心识别服务
spring.application.name=service-helloworld
消费端端口号
server.port=8897
为尽量保证高可用,一般使用双节点注册中心或者三节点注册中心
双(三)节点注册中心:两个server情况下,需要同时往两(三)台服务器(erueak)上注册,同时多台服务器互相注册;
Eureka互相注册要求各个Eureka实例的eureka.instance.hostname不同
高可用参考:https://www.cnblogs.com/Dev0ps/p/9899621.html
Consul相关
最近一份工作刚刚主题架构为 springcloud Greenwich.RELEASE、zuul、consul、springboot 2.1.2 来实现
先说踩坑:本地服务启动两个,后面启动的服务注册到consul时会将前面服务挤出去,这个会在后面讲到解决方法_
官网下载consul 如果时windows 启动 命令行(管理员身份运行)
consul服务端启动
cd 到consul 目录
consul agent -dev 即可
springboot服务端
application启动类 新增注解 -- 不需要@springbootApplication
@EnableDiscoveryClient
@SpringCloudApplication
springboot 下面配置 yml 文件
server:
port: 8013
spring:
cloud:
consul:
host: localhost # consul的地址
port: 8500
discovery:
healthCheckPath: /health
healthCheckInterval: 15s #每隔多长时间进行一次健康检查
instance-id: id-hello-world #生成一个唯一的id
application:
name: hello-world
启动服务 访问 localhost:8500 刚开始未进行健康检查会仅有一个
consul 服务器集群部署推荐参考如下
https://www.cnblogs.com/xiaohanlin/p/8016803.html
关于踩坑多服务注册问题 参考
多实例注册的问题,多实例的项目如果serviceid相同会造成覆盖之前的实例,但是如果使用随机数来注册实例项目重启或别的情况会造成无效实例过多
https://blog.csdn.net/yuancao24/article/details/84581988
关于consul与eureka区别
CAP定理:指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可同时获得。
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(所有节点在同一时间的数据完全一致,越多节点,数据同步越耗时)
可用性(A):负载过大后,集群整体是否还能响应客户端的读写请求。(服务一直可用,而且是正常响应时间)
分区容错性(P):分区容忍性,就是高可用性,一个节点崩了,并不影响其它的节点(100个节点,挂了几个,不影响服务,越多机器越好)
CAP理论:
就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡
C A 满足的情况下,P不能满足的原因:
数据同步(C)需要时间,也要正常的时间内响应(A),那么机器数量就要少,所以P就不满足
CP 满足的情况下,A不能满足的原因:
数据同步(C)需要时间, 机器数量也多(P),但是同步数据需要时间,所以不能再正常时间内响应,所以A就不满足
AP 满足的情况下,C不能满足的原因:
机器数量也多(P),正常的时间内响应(A),那么数据就不能及时同步到其他节点,所以C不满足
Zookeeper和Consul :
CP设计,保证了一致性,集群搭建的时候,某个节点失效,则会进行选举行的leader,或者半数以上节点不可用,则无法提供服务,因此可用性没法满足
Eureka:
AP原则,无主从节点,一个节点挂了,自动切换其他节点可以使用,去中心化
结论:分布式系统中P,肯定要满足,所以只能在CA中二选一
没有最好的选择,最好的选择是根据业务场景来进行架构设计
如果要求一致性,则选择zookeeper、Consul,如金融行业
如果要求可用性,则Eureka,如电商系统