Spring Cloud微服务之eureka+client入门

谈到服务,想到一种“懒人思维”。家政服务为懒人收拾家务提供一种便利,快餐服务为不爱做饭的懒人提供一种方便.....等等。

说到微服务,顾名思义,就是把服务再细微化。比如需要送女友一束花表达情意,又不想自己去花店,去花店又不想等,这里面就有了定花服务,包花服务,送花服务等,如下图所示。

对于这样的一个流程服务,如果需要一种架构为开发的,可以有以下三种架构形式。

一、由架构形式谈到微服务

1、完成这个逻辑可以使用单体架构

单体架构:将整个定花、包花和送花涉及的业务所有功能集中在一个项目中开发,比如这里就包含了定花模块、包花模块、送花模块等等,这个程序在部署时就是一个进程,比如就把一个war包部署到tomcat中。

这种架构会有一些问题:

(1)所有业务的功能模块都聚集在一起,如果代码量多,可能在定花,包花,送花代码实现过程中有共同的代码,不同业务的需求开发同时进行的时候,维护起来有点麻烦

(2)由于是单体,对请求的并发量,有限制,一个tomcat,并发量千级左右

(3)由于代码都堆在了一起,部署起来慢

(4)后期再进行扩展,成本会很高,假设需要替换更加爽一点的内存以及高效的磁盘。但在这种单体架构上 无法针对单个功能模块进行扩展。

(7)前后端不分离,后端开发人员可能要具备相应的前端知识

2、使用这个逻辑可以使用分布式构架

分布式架构:根据整个定花、包花和送花涉及的业务功能对系统做拆分,每个业务成为一种服务,定花成为定花服务,包花成为包花服务,送花成为送花服务。不同的服务分布在不同的服务器节点,共同构成的系统称为分布式系统,这些服务器可能放在不同的机柜中,也可能在不同的机房中,甚至分布在不同的城市。在空间部署上是可以随意分布的。如下图所示。

这里要注意区分出分布式和集群的区别,分布式在于多个服务器做不同的事情,单纯谈集群只是多台服务器完成相同的几种服务。

集群原理图如下。

集群架构只是改善了,单体架构的单点故障问题和提高请求的并发数

而对分布式结构来说,虽然服务已经分开,降低服务耦合,但服务拆分的粒度如何去界定,服务之间调用如何更好的管理也会发生问题。需要制定一套行之有效的标准来约束分布式架构。

3、完成这个逻辑使用微服务。

微服务拆分粒度会更小,每一个服务都对应唯一的业务能力,做到单一职责。采取自治的特点,团队独立、技术独立、数据独立、独立部署和交付,服务提供统一标准的接口,与语言和技术无关,尤其是网络的容错性方面,由于网络之间需要通信,一旦节点出现故障,就会出现重发或者失败的信息,服务调用能够做好隔离、容错、降级,避免出现级联问题。

图中所显示的可能也只是定花、包花、送花三个服务微服务中的冰山一角,还可以有微信订花,公众号订花,定制包花,定点送花等等,包括订花失败服务,包花异常服务,送花异常服务等等,在微服务的细微颗粒化中,只有想不到的服务,没有完善不了的服务。这样的一个一个的小服务就是微服务。

其实微服务就是在给分布式架构定制一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。

因此,我们可以认为微服务是一种经过良好架构设计的分布式架构方案。

Spring cloud具备了微服务框架结构。

二、spring cloud

Spring Cloud是一系列框架的有序集合。其利用了Spring Boot的开发便利性巧妙地应用了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

微服实际就是业务垂直拆分的再次拆分,划分的服务粒度更细。

其优点在于: 每个子项目功能单一,结构清晰,代码易维护。同时错误大量减少,出现BUG几率也小,开发效率高,代码量小,数据库分开随之带来数据库访问压力急剧降低。

其也有一定的缺点: 系统多了,系统之间调用变复杂,代码跨网络需要转换成二进制字节流,就涉及到序列化和反序列化,这样耗费时间长,####如果网络不稳定也会影响程序的稳定性。

三、微服务架构图

微服务在架构上需要有注册中心,通过注册中心注册服务,有统一的网关路由,也可以跟踪链路......等,具体需要的结构组件如下图所示。

在这几个结构组件中,能够通过注册中心注册,统一配置来进行协调工作,具体组件流程框架如下图所示。

图中 涉及到Eureka注册中心,服务提供者,业务消费者,Ribbon负载均衡(类似nginx的功能),Feign REST封装, Hystrix 断路器,Zuul API网关, SpringCloudConfig配置中心,数据存在Git,版本控制

Eureka注册中心,服务提供者和服务消费者之间协调工作如下:

1.注册中心 : Eureka server, 负责"保存"的服务(服务指的service子级项目的controller配置路径)

2.生产者: Eureka Client, 负责将服务发送到注册中心,由注册中心负责保存.

3.消费者: Eureka Client, 作用: 用户就是消费者,在客户端输入访问地址(地址服务),如果在注册中心由服务,就去访问,

4.如果在注册中心没有改服务,就报404

注册中心, 生产者, 消费者 三者之间的关系总结起来通过心跳机制来管理服务,如下图所示。

注意它的特点,结构类似于消息队列,不管是服务提供者还是服务消费者都注册到注册中心。而且不会每次都去注册中心获取,而是有本地缓存,加快访问性能。内部含有心跳机制,当注册中心信息改变,自动快速获取新的信息到本地。心跳机制还保证分布式环境下,某个服务失败后,自动列表从注册中心移除。注册中心中保证所有可用的链接。

同时,还要注意分布式系统中最核心最重要的理论有一个CAP原则,CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

如下图所示。

图中Consistency表示一致性,表示所有客户端总是展现同样的数据。
图中Avaliability表示可用性,表示每个客户端总是能读写。
图中Partition Tolerance表示分区容错性,表示当集群中的某些节点无法联系时,仍然能正常提供服务。
图中CA是一致性和可用性的统一,表示有一致性和可用性的系统,通常可扩展性能不高,不具备分区容错性,如传统的关系数据库。
图中CP是一致性和分区容错性统一,表示为满足一致性,在系统分区期间会停止服务,直到数据恢复。
图中AP是可用性和分区容错性的统一,表示通常注重系统性能和扩展性,而非强调一致性。

图中所示的分布式系统的CAP理论,这个理论首先把分布式系统中的三个特性进行了如下归纳:

一致性说明在分布式系统中的所有数据备份,在同一时刻是否同样的值,等同于所有节点访问同一份最新的数据副本。

可用性说明在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求,等同于对数据更新具备高可用性。

分区容错性说明以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

前面是理论,后面是实践,光说不练,假把式。

下面进入微服务服务端和客户端入门的初步。

四、微服务EurekaServer的建立

1、点击File--->New---->Project.....,如下图。

2、在弹出的地话框中,左边点击Spring Initializr,表示Spring的初始程序,右边在默认的地方可能会初始化失败,需要选择自定义的地址:http://start.aliyun.com。如右图所示。

3、在接下来的弹出框中输入spring cloud项目名称的Group和artifactId。如下图所示。

4、点击Next进入下一步,左边先点击Web,右边点击Spring web可以建立Web应用程序。如下图。

5、继续在这个对话框中,左边点击Spring Cloud Discovery,右边点击Eureka Server,如下图所示。

6、然后点击Next进入到“下一步”,会出现对话框。如下图所示。

7、在出现的对话框中,点击Finish后完成项目的构建向导。

项目框架建立后,修改主程序中的主类,如下图所示。

8、在打开的主程序中,加入注解@EnableEurekaServer。

eurekaserver的程序代码如下。

package com.myfirsteurekabalance.myfirsteurekabalance;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class MyfirsteurekabalanceApplication {public static void main(String[] args) {SpringApplication.run(MyfirsteurekabalanceApplication.class, args);}}

9、下面需要编辑resources下面的application.yml文件,在原来的resouces目录下只有application.properties,需要把application.properties改成application.yml。然后编辑该文件。

10、application.yml的文件内容如下。

# 应用名称
spring:application:name: myfirsteurekabalance
# 应用服务 WEB 访问端口
server:port: 8011
eureka:client:register-with-eureka: truefetch-registry: falseservice-url:defaultZone: http://localhost:8011/eurekainstance:hostname: myprovider1

其文件内容的解释如下图.

二、Eureka客户端的搭建

1、同样点击File--->New----->Project....,如下图所示。

2、在打开的对话框中,左边继续点击Spring Initializr,表示Spring的初始程序,右边在默认的地方可能会初始化失败,需要选择自定义的地址:http://start.aliyun.com。如下图所示。

3、点击Next,然后在出现的对话框中输入项目名称。如下图所示。

4、在接下来出现的对话框中,左边选择Web,右边选择Spring Web。如下图所示。

5、继续在这个对话框中,左边选择Spring Cloud Discovery,右边选择Eureka Discovery Client。如下图所示。

6、然后点击下一步即Next,在出现的对话框中直接点击Finish完成项目建立的向导。如下图所示。

在主程序中输入EnableEurekeClient或者是@EnableDiscoveryClient都可以实现Eureka客户端的发现。

客户端的代码如下。

package com.myfirsteurekaclient01.myfirsteurekaclient01;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class Myfirsteurekaclient01Application {public static void main(String[] args) {SpringApplication.run(Myfirsteurekaclient01Application.class, args);}}

现在可以做一个controller的package包,然后定义一个RestController的控制器。代码如下。

package com.myfirsteurekaclient01.myfirsteurekaclient01.controller;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@RestController
public class PageController {@GetMapping("/hello/{name}")public String hello(@PathVariable("name")String name){return "hello,"+name;}
}

现在再次修改application.yml文件。如下图所示。

然后,application.yml的具体内容如下所示。

# 应用名称
spring:application:name: myfirsteurekaclient01
# 应用服务 WEB 访问端口
server:port: 8008
eureka:client:service-url:defaultZone: http://localhost:8011/eureka

其内容的大体解释如下。

现在可以先运行EurekaServer的程序,然后再运行客户端的主程序。

注册中心的访问http://localhost:8011,效果如下。

客户端启动后,可以访顺具体的请求地址,http://localhost:8080/hello/lili。访问效果如下图。

这时,客户端启动成功。

欢迎继续关注博客,后续带来微服务其他组件。

码云地址:

https://gitee.com/who_moved_my_cigarette/spring_cloud_server_client_Intruduction/tree/master/

Spring Cloud微服务之eureka+client入门相关推荐

  1. Spring Cloud微服务系列-Eureka Client源码解析(二)

    导语   上一篇博客中介绍了关于Eureka Client源码的基础部分,如果对于基础部分不是很了解的读者可以点击下面的连接进入到源码分析一中,从头开始学习 Spring Cloud微服务系列 Dis ...

  2. Spring Cloud微服务系列-Eureka Client源码解析(一)

    导语   Eureka Client 是为了简化开发人员的开发工作,将很多的Eureka Server交互的工作进行了封装,在使用的时候自动完成,在应用的不同阶段来完成不同的功能实现.下面就来了解一下 ...

  3. spring cloud微服务治理eureka、hystrix、zuul代码例子

    spring cloud微服务中台服务代码例子,包括eureka.hystrix.zuul https://github.com/birdstudiocn/spring-cloud-sample/tr ...

  4. 通过Feign实现Spring Cloud微服务调用

    我们在上一篇文章通过restTemplate实现Spring cloud微服务的调用中介绍了spring cloud微服务的一种调用方式,本文我们介绍另一种调用spring cloud微服务的方式-- ...

  5. Spring Boot+Eureka+Spring Cloud微服务快速上手项目实战

    说明 我看了一些教程要么写的太入门.要么就是写的太抽象.真正好的文章应该是快速使人受益的而不是浪费时间.本文通过一个包括组织.部门.员工等服务交互的案例让刚接触spring cloud微服务的朋友快速 ...

  6. (十七)spring cloud微服务分布式云架构-eureka 基础

    在构建项目之前,我们先学习一下eureka,这是官方的讲解,我这边再重新帮大家回顾一下: 服务发现:Eureka客户端 Spring Cloud大型企业分布式微服务云架构源码请加一七九一七四三三八零 ...

  7. 视频教程-Spring Cloud微服务--入门到精通-Java

    Spring Cloud微服务--入门到精通 本系列课程由多位老师共同录制而成,旨在为想要学习Java的用户提供一套系统的成长方案. Java从入门到进阶 ¥59.00 立即订阅 扫码下载「CSDN程 ...

  8. Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 11.1 Spring Cloud Alibaba Nacos 概述

    11.1 Spring Cloud Alibaba Nacos 概述 11.1.1 Spring Cloud Alibaba 简介 在一开始,我们先简单介绍下Spring Cloud Alibaba的 ...

  9. Spring Cloud微服务系列文,服务调用框架Feign

    之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON.    这种 ...

最新文章

  1. 独家 | 从零开始用python搭建推荐引擎(附代码)
  2. webClient 利用代理连接Rss资源
  3. GroovyQ | 关注Groovy社区动态,分享Groovy开发经验。
  4. Fedora 31安装RPMFusion源的方法
  5. bzoj2424 订货
  6. 2020-11-23(dll注入方法)
  7. C语言博客作业--结构体
  8. 开始使用gitlab
  9. linux 压缩为多个文件,在Linux中,如何将输入流压缩为多个输出文件?
  10. 黑客攻防技术宝典Web实战篇第2版—第8章 攻击访问控制
  11. oracle 数据补齐月份,Oracle自定义函数--增加月份
  12. 【Java数据结构与算法】第六章 算法的时间复杂度、算法的空间复杂度和排序算法的介绍
  13. web页面防盗链功能使用--request.getHeader(Referer)
  14. PyCharm无法找到已安装的Python类库的解决方法
  15. LEADTOOLS v19试用版安装指南图文详解
  16. Java面试:应聘Java开发工程师的基本要求是什么?
  17. ESP8266WIFI模块连接原子云及手机APP
  18. 计算二叉树叶子结点数目(C语言)
  19. R3黯然史:从昔日最风光,到如今危机重重
  20. 新手焊接电路板_手把手教您如何掌握焊接电路板基础知识

热门文章

  1. guacamole 源码_Guacamole学习笔记
  2. 智慧大厅综合管理平台 解决方案
  3. 王老吉地震营销的网络推广
  4. 计算机的历史——到底谁是第一台计算机?
  5. 强大算力哪里寻?华为鲲鹏920闪耀乌镇
  6. 获得Ubuntu系统的安装时间
  7. Nvidia推锁定开发者及迷你AI计算机
  8. JS--事件的委托(代理)--使用/教程/实例
  9. JSON重要工具: json.js
  10. IPGUARD客户端与应用程序冲突