哈喽各位同学们大家好呀,今天是开发者学院中课程“Spring Cloud微服务架构设计与开发实战”的章节三的“Spring Cloud微服务注册与发现 ”干货总结~是一起学习新课程吧!
课程链接以及图谱地址小编已经为大家指路了,搭配学习效果更佳👇
课程名称:Spring Cloud微服务注册与发现
课程地址:https://developer.aliyun.com/learning/course/60/detail/1095
图谱名称:Alibaba Java 技术图谱
图谱地址:https://developer.aliyun.com/graph/java
Spring Cloud微服务注册与发现
一、Spring Cloud服务注册与发现
对于微服务业务需要先进行拆分,微服务实例部署数量不固定,可以弹性伸缩,与传统架构不一样,比较靠拢云计算、云原生。
(一)服务注册与发现
解决大规模服务集群的注册和发现问题,主要为了方便客户端调用。比如开发一个微服务是订单服务,开始只启用一台服务器,客户端和客户端直接调用微服务就可以了。但如果启用两台以上,客户端直接写多台服务的IP地址做轮巡是不行的,因为如果遇到类似双11促销场景,需要增加很多台服务,且是弹性不定数量增加,这时候最好有一种方案能够解决这个问题,把客户端和服务集群结耦。
结耦里面很重要的就是注册中心,注册中心可以帮助管理服务,当只有一个、两个服务的时候,客户端可以直接和服务建立连接,当服务数量不固定,且伸缩范围很大时,需要一个专门的机构帮助管理这些服务。
服务注册与发现总结:
1. 大规模微服务集群架构;
2. 许多服务实例;
3. 客户端要找到自己调用的服务;
4. 新服务上线;
5. 某个服务宕机,下线;
6. 实时监控服务的状态。
(二)Spring Cloud Eureka服务发现与注册
在微服务架构体系里, Netflix公司贡献了其中一个很重要的项目叫Eureka,主要解决服务注册中心的问题。在大数据里面,有同类型的产品ZooKeeper,Spring Cloud通过扩展组件也可以进行集成。
本节课主要讲实战开发,建立注册中心以后,怎么样把微服务注册进去,怎么让注册中心管理服务。总结:
1. Netflix公司开源的项目,
2. Eureka:注册中心,
3. 一个基于 REST 的中心服务,管理服务,
4. 实现云端的服务注册和服务发现。
5. Eureka组件组成:Eureka服务器和Eureka客户端;
6. 竞争对手ZooKeeper;
7. 服务发现模块(Eureka)是Netflix的核心;
8. Spring Cloud Netflix提供的简化开发模板;
9. 直接使用spring boot,创建项目;
10. 添加 @ EnableEurekaServer开发注册服务中心。
(三)Spring Cloud 架构图
下图所示,是微服务架构图,有注册中心,客户端微服务上线注册,微服务实例数量是动态的,有可能是一台,也有可能是很多台,灵活弹性根据客户端的压力做弹性伸缩。
客户端调用时不是直接找微服务,先找注册中心,有哪些好的微服务,有哪些匹配的,每次搜索最新的报表,然后调用。客户端也可以按照各种负载均衡的策略去调用,或者结合一些负责运行的算法灵活调度。
二、Eureka注册中心开发实战
(一)Spring Eureka注册中心
1. 创建Eureka服务注册中心项目;
2. 添加@ EnableEurekaServer;
3. 将spring boot应用改造成Eureka服务注册中心;
4. application.properties增加配置;
5. 打包项目;
6. 运行;
7. 测试页面;
8. 参考https://spring.io/guides/gs/service-registration-and-discovery/。
(二)application.properties配置
• server.port=8761;
• eureka.client.register-with-eureka=false;
• eureka.client.fetch-registry=false;
• eureka.client.serviceUrl.defaultZone=http://localhost:${ser
ver.port}/eureka/;
• logging.level.com.netflix.eureka=OFF;
• logging.level.com.netflix.discovery=OFF;
(三)创建Spring Eureka服务项目
演示部分:
下图所示,是正常运行界面。
这里还没有服务实例,下面演示开发微服务,再把微服务注册进来。打开Eclipse开发工具,新建项目,插件里面会有New Spring Sttarter Project模板,Name 栏加入Eureka,下面直接配公司的域名就行,Group 栏输入com.alibaba,点击下一步,如下图所示:
Available栏输入Eureka,加入注册中心、服务端,为了开发调试再加入dev,用于加载动态调试工具,做动态调试服务。演示版本是2.4.1,再下一步:
下一步:
。
这里面会生成项目,Maven会自动来去拉包,第一次拉包时间比较久,网络好应该会快一点,把Maven仓库改成阿里或其他公司,国内应该有很多Maven仓库镜像。
先来改配置文件,这里关键是加注解,启用EurekaServer, EurekaServer自动跟进配置,制作在某个端口上,包括注册中心的界面,会提供注册地址,在之前的例子上是提供Rest API, 供客户端注册。
第一步是,启动@ EnableEurekaServer,使服务器具备注册中心的能力,这一步非常重要。
接下配一下配置文件,配置文件有几个核心参数,程序名和端口,程序名输入EurekaServer。端口不配的话就是默认的8080,因为官方例子是8761,我们也配置8761。还需要配置Eureka的注册客户端,如下图所示:“http://localhost:8761/eureka”是注册中心的地址,给客户端注册和查找用的。
接下来启动程序,直接右键,选Run As ,有两种启动方式,1.jave Application,2.Spring Boot APP,两种都可以启动。
启动成功之后,打开浏览器,输入http://localhost:8761回车,出现Eureka注册中心的界面。里面一有个服务实例,这个实例默认没有关掉,自己可以往自己中心的注册,正常并不需要,自己往自己中心的注册实际是多余的。在比较底的版本会显示出错。
可以配置关闭上面的服务实例,输入“eureka.client.fetch-registry=false”,“eureka.client.register-with-eurka=falsr”。
重新加载后,打开eureka界面,可以看到,自己往自己中心注册的实例就没有了。
三、Eureka底层原理与源码分析
(一)Netflix Eureka源码
•Eureka 官方源码;
•https://github.com/Netflix/eureka;
•Spring Cloud Netflix 适配 Eureka 的代码;
•https://github.com/spring-cloud/spring-cloud-netflix。
(二)Eureka源码分析
Eureka通信基于Http(s)协议的框架
1. 纯正的 servlet 应用,需构建成war包部署;
2. 使用了 框架实现自身的 HTTP接口;
3. peer之间的同步与服务的注册全部通过 HTTP 协议实现;
4. 定时任务(发送 、定时清理过期服务、节点同步等)通过 JDK 自带的 Timer 实现;
5. 内存缓存使用Google的 包实现;
(三)服务实例Instance的状态
1. Up;
2. Down;
3. Starting;
4. Out_Of_Service;
5. Unknown。