当前位置 > it书童 > java > 正文

微服务管理及初识 Eureka

java it书童 2020-09-11 10:05:04 0赞 0踩 44阅读 0评论

手动实现微服务的弊端

微服务场景模拟

简单回顾一下,我们写了什么:

  • service-provider:一个提供根据id查询用户的微服务。

  • Service-customer:一个服务调用者,通过 RestTemplate 远程调用 service-provider

存在什么问题?

  • 在consumer中,我们把url地址硬编码到了代码中,不方便后期维护

  • consumer需要记忆provider的地址,如果出现变更,可能得不到通知,地址将失效

  • consumer不清楚provider的状态,服务宕机也不知道

  • provider只有1台服务,不具备高可用性

  • 即便provider形成集群,consumer还需自己实现负载均衡

其实上面说的问题,概括一下就是分布式服务必然要面临的问题:

  • 服务管理

    • 如何自动注册和发现

    • 如何实现状态监管

    • 如何实现动态路由

  • 服务如何实现负载均衡

  • 服务如何解决容灾问题

  • 服务如何实现统一配置

以上的问题,我们都将在SpringCloud中得到答案。接下来先从 Eureka 入手

如何管理服务

首先我们来解决第一问题,服务的管理。

在刚才的案例中,service-provider 对外提供服务,需要对外暴露自己的地址。而consumer(调用者)需要记录服务提供者的地址。将来地址出现变更,还需要及时更新。这在服务较少的时候并不觉得有什么,但是在现在日益复杂的互联网环境,一个项目肯定会拆分出十几,甚至数十个微服务。此时如果还人为管理地址,不仅开发困难,将来测试、发布上线都会非常麻烦,这与DevOps的思想是背道而驰的。

这就好比是 网约车出现以前,人们出门叫车只能叫出租车。一些私家车想做出租却没有资格,被称为黑车。而很多人想要约车,但是无奈出租车太少,不方便。私家车很多却不敢拦,而且满大街的车,谁知道哪个才是愿意载人的。一个想要,一个愿意给,就是缺少引子,缺乏管理啊。

此时滴滴这样的网约车平台出现了,所有想载客的私家车全部到滴滴注册,记录你的车型(服务类型),身份信息(联系方式)。这样提供服务的私家车,在滴滴那里都能找到,一目了然。

此时要叫车的人,只需要打开APP,输入你的目的地,选择车型(服务类型),滴滴自动安排一个符合需求的车到你面前,为你服务,完美!

Eureka就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。

同时,服务提供方与Eureka之间通过 “心跳” 机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。

这就实现了服务的自动注册、发现、状态监控。

原理图

原理图

  • Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址

  • 提供者:启动后向Eureka注册自己信息(地址,提供什么服务)

  • 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新

  • 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态

搭建 EurekaServer

接下来我们创建一个项目,启动一个 EurekaServer

依然使用 spring 提供的快速搭建工具

选择依赖:EurekaServer-服务注册中心依赖,Eureka Discovery-服务提供方和服务消费方。因为,对于eureka来说:服务提供方和服务消费方都属于客户端

image-20200911095831807

编写application.yml配置:

server:
    port: 10086

spring:
    application:
        name: itshutong-eureka # 将来作为微服务名称注入到 eureka 容器

eureka:
    client:
        service-url:
            defaultZone: http://localhost:${server.port}/eureka

修改引导类,在类上添加 @EnableEurekaServer 注解:

package com.itshutong.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer // 启用 eureka 服务端
public class ItshutongEurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(ItshutongEurekaApplication.class, args);
    }

}

启动服务,并访问:http://127.0.0.1:10086

image-20200911095939510

转载须注明出处:https://www.itshutong.com/articles/705/microservice-management-and-initial-knowledge-of-eureka
关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
发表评论
我有句话,不知当讲不当讲?
要讲之前请先 登录