什么是微服务?Spring Cloud微服务介绍(Eureka介绍)

  • 微服务概述
  • Spring Cloud微服务介绍
  • Eureka
  • Eureka应用

1.1.认识微服务架构

1.1.1.单体架构

        一个典型的单体应用就是将所有业务场景的表示层、业务逻辑层和数据访问层放在一个工程中,最终经过编译、打包,部署在一台服务器上。

        以一个进存销系统的单体应用为例,架构如下图所示。

1.1.2.集群架构

        随着用户量的增加,此时单一的服务器已经无法支撑起用户的访问,动不动就挂掉的网站肯定是没有人愿意使用的。

       为了解决这个问题,人们就开始想办法,将服务器进行横向扩展,也就是把同一个war包,同时部署到多个服务器上,然后使用负载均衡技术,根据集群中每个节点的负载情况,将用户请求转发到合适的节点上。

1.1.3.分布式SOA架构

        分布式SOA架构将原来的单体架构按照功能细分为不同的子系统 SOA架构的进存销系统图所示。 

        一个完整的项目会分为多个模块,数据库也会有主库与从库两种,并且主库与从库是数据同步的

 1.1.4.微服务架构

        微服务架构可以将服务进行更细粒度的划分,并使用轻量级机制(通常是HTTP资源的API)进行通信。这些服务是围绕业务功能构建的,可以使用不同的编程语言编写程序、使用不同的数据库存储数据。

         微服务的主要特点:

        ① 每个服务按照业务划分;
        ② 服务之间通过轻量级机制(通常是 HTTP 资源的 API )进行通信;
        ③ 可以使用不同语言开发;
        ④ 可以使用不同的数据存储技术;
        ⑤ 可独立部署,服务之间互相不影响;
        ⑥ 可针对用户访问流量大的服务单独扩展,从而能够节约资源;
        ⑦ 管理自动化。

1.2.初识Spring Cloud框架的特点以及常用组件

1.2.1.Spring Cloud概述

        Spring Cloud是一个基于Spring Boot实现的微服务开发架构,它利用Spring Boot的开发便利性巧妙地简化了分布式系统的开发。例如配置管理、服务发现、断路器、智能路由、控制总线等操作,都可以使用Spring Boot开发风格做到一键启动和部署。可以说,Spring CloudSpring Boot风格进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

1.2.2.Spring Cloud微服务架构的特点

      ① 组件丰富,功能齐全

       Spring Cloud 的组件非常多,涉及微服务的方方面面。SpringCloud是一系列组件的有机集合。

       ② 开箱即用,快速启动

        Spring Cloud基于Spring Boot开发的,Spring Boot具有快速构建Spring应用、直接嵌入服务器、自动化配置的优点,Spring Cloud继承了Spring Boot快速构建和自动化配置的优点,有开箱即用,快速启动的特点

       ③ 模块部署方便,项目维护难度降低

        Spring Cloud采用模块化开发,按照项目功能,将项目拆分为不同的模块,每个模块独立开发运行,模块之间不会互相影响。维护时只需要维护具体的模块,不需要改动其他模块的代码,从而降低模块后期维护的成本。

       ④ 项目扩展性和稳定性较好

        基于Spring Cloud的微服务架构中,每个模块基本都是一个Spring Boot项目,它们都有独立的数据库,模块下的功能是横向开发的,如果需要扩展新的功能,可以新建该功能对应的独立数据库以及新的模块,不需要在之前的模块上修改,项目扩展更方便,项目稳定性更好,更容易实现敏捷开发,快速交付

       ⑤ 具有容错处理机制

        实际开发中会因为网络连接失败、超时、服务器硬件故障等原因导致其中某个模块无法正常运行,导致整个项目发生异常,所以容错机制变得尤为重要。在Spring Cloud中提供了Hystrix组件,该组件专门用于处理容错,从而能保证某个模块出错后有其他备用模块或者善后处理。

1.2.3.Spring Cloud微服务架构的常用组件以及模块

        Spring Cloud是一系列框架的有序集合,为开发人员构建微服务架构提供了完整的解决方案但是Spring Cloud并不是一个拿来即可用的框架,Spring Cloud Netflix Spring Cloud Alibaba是为开发者提供了这套规范的实现方式。

 常用的五大组件

•   Eureka 服务注册中心 ,基于 HTTP 协议 的分布式中间件,主要 用于服务管理
•   Ribbon 负载均衡 组件 ,支持多种负载均衡策略,可 配合服务发现和断路器使用, 在客户端实现负载均衡
•   Hystrix 熔断器 ,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点 , 从而 对延迟和故障提供更强大的容错能力
•   Feign :一个 REST 客户端 ,基于 Ribbon Hystrix 声明式服务调用组件
•   Zuul 服务网关 ,为微服务集群提供 代理 过滤 路由 等功能。
        通过一个图来表现。

1.2.4.Spring Cloud版本号

        Spring Cloud版本号并不是熟悉的数字版本号,而是一个名称代号,这些代号据说是根据伦敦地铁命名的,分别是AngelBrixtonCamdenDalstonEdgwareFinchleyGreenwichHoxton,其中Angel版本是第一个Release版本。

        Spring Cloud的版本名称,通常是由“版本号+小版本名称”组成的。这样设计的目的是为了更好地管理每个Spring Cloud子项目的清单,避免自己的版本号与子项目的版本号混淆。例如,Hoxton.SR9版本中, Hoxton代表的是版本号, SR9是小版本名称

Spring Cloud官方:

https://spring.io/projects/spring-cloud        https://spring.io/projects/spring-cloud

注意:Spring Cloud的版本取决于Spring Boot的版本 

1.3.Eureka介绍

        EurekaNetflix开发的服务注册与发现框架 Spring Cloud 体系中最核心的注册中心组件。服务的注册发现对于微服务来说是一个非常重要的环节。在微服务架构中,每个服务(Service)是动态变化的,难以通过静态配置的方式维护服务,需要用到服务发现框架完成服务(Service)的自动化管理

1.4.Eureka工作原理

        微服务架构中存在种角色,分别是服务提供者服务消费者和服务注册中心。

        服务提供者需要在Eureka Server完成注册服务消费者Eureka Server获取一份服务注册列表,该列表包含了所有注册的服务信息。服务消费者就会根据服务提供者的IP地址,通过HTTP远程调用服务提供者的服务。

1.5.搭建Eureka Server

        基本流程:

        1. 创建项目,引入依赖
        2. 添加 Eureka 相关配置
        3. 添加 @EnableEurekaServer 注解
        4. 测试运行

1.5.1.开始搭建

        1、创建项目,引入依赖

        使用Spring Initializr方式创建一个名称为eureka-serverSpring Boot项目,这里将Group命名为com.cg,Artifact命名为eureka-server同时添加WebEureka Server依赖(spring-cloud-starter-netflix-eureka-server )。

        2、添加Eureka的相关配置

        在全局配置文件application.yml中添加Eureka的相关配置信息。

        application.yml配置文件内容如下:

server:
  port: 8761                                        # 服务器端口号7000                           
spring:
  application:                                      #实例名称配置
    name: eureka-server                       
eureka:
  client:
    fetch-registry: false                           # 表示是否从Eureka Server获取注册信息
    register-with-eureka: false                     # 表示是否向Eureka Server注册
    service-url:
      defaultZone:
        http://localhost:8761/eureka/               #设置服务注册中心地址

 2、在项目启动类添加@EnableEurekaServer注解

        在项目启动类EurekaServerApplication上添加@EnableEurekaServer注解开启Eureka Server功能。启动eureka-server项目,在浏览器中访问http://localhost:8761/。效果如下图所示。

 1.5.2.搭建服务提供者

        基本流程:

        1. 创建项目,引入依赖
        2. 添加 Eureka 相关配置
        3. 添加 @EnableEurekaClient 注解
        4. 测试运行

        1、创建项目,引入依赖

        使用Spring Initializr方式创建一个名称为eureka-providerSpring Boot项目,这里将Group命名为com.cg,Artifact命名为eureka-provider同时添加WebEureka Client依赖spring-cloud-starter-netflix-eureka-client

        2、添加Eureka的相关配置

        在全局配置文件application.yml中添加Eureka的相关配置信息。application.yml配置文件内容如下:

server:
    port: 7006                                             
spring:
    application:  
        name: eureka-provider                      
eureka:
    client:
         service-url:
             defaultZone: http://localhost:8761/eureka/ #设置服务注册中心地址

         3、在项目启动类添加@EnableEurekaClient注解

        在项目启动类EurekaProviderApplication上添加@EnableEurekaClient注解开启Eureka Client功能。

        4、在项目中添加一个控制器提供获取商品列表服务

@RestController
public class ProductController{

    @RequestMapping("/product/list")
    public List<Product> getList(){
        Product product1 = new Product("苹果1", 20, 100,);
        Product product2 = new Product("香蕉1", 30, 200,);
        Product product3 = new Product("橘子1", 40, 300,);
        return Arrays.asList(product1 ,product2 ,product3 );
    }
}

        保证Eureka Server启动的状态下启动eureka-provider,在浏览器中访问Eureka Server的主界面http://localhost:8761/,效果如所示。 

 1.5.2.搭建服务消费者

        基本流程:

        1. 创建项目,引入依赖
        2. 添加 Eureka 相关配置
        3. 添加 @EnableEurekaClient 注解
        4. 测试运行

        1、创建项目,引入依赖

        使用Spring Initializr方式创建一个名称为eureka-consumerSpring Boot项目,这里将Group命名为com.cg,Artifact命名为eureka-consumer,添加WebEureka Client依赖。

        2、添加Eureka的相关配置

        在全局配置文件application.yml中添加Eureka的相关配置信息。application.yml配置文件内容如下:

server:
    port: 7002                                             
spring:
    application:  
        name: eureka-consumer                     
eureka:
    client:
         service-url:
             defaultZone: http://localhost:8761/eureka/

         3、在项目启动类添加@EnableEurekaClient注解

        在项目启动类EurekaConsumerApplication上添加@EnableEurekaClient注解开启Eureka Client功能。

        4、通过RestTemplate模板类调用生产者实例中的服务

        然后就可以通过RestTemplate对象调用生产者实例中的HTTP服务

1.6.测试实行 

        保证Eureka Server启动的状态下,启动eureka-consumer在浏览器访问http://localhost:7002/order获取订单信息,可以看到成功调用了eureka-provider中提供的获取商品列表的服务。效果如图所示。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kitty S'uit Roses

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值