微服务生态

在如今互联网盛行的今日,谈及架构,分布式微服务的理论应该火遍大江南北,其中以Spring家族发展而来的生态更是当今必备技能。
Spring是一个全家桶,集合了众家所长,俨然成为编程行业的春天,SpringBoot则简化了Spring中繁杂的配置,实现了自动装配,而SpringCloud则用于管理一个个的SpringBoot开发出的微服务。
因此说SpringCloud是一门技术不如说是一个生态。
SpringCloud主要用来解决由网络的不可靠而引发的一系列问题。

服务很多,客户端该如何访问?
众多的微服务该如何通信?
这么多服务该如何治理?
如果服务挂了该怎么办?

而为了解决这些问题,市面上出现了很多套解决方案,我认为都可以将其列入SpringCloud生态。
而SpringCloud NetFlix无疑是最火的,它完美的兼容了Spring生态,而最近出现的SpringCloud Alibaba更是势头正盛。

SpringCloud五大神器

Spring Cloud为了解决这一系列问题,推出了五大神器,分别为

  • 服务网关——Netflix Zuul
  • 客户端端负载均衡——Netflix Ribbon
  • 服务发现——Netflix Eureka
  • 断路器——Netflix Hystrix
  • 分布式配置——Spring Cloud Config

在讨论SpringCloud之前我们先来聊聊Dubbo,同样是为了解决微服务的管理问题,Dubbo更倾向于通信,因此对于通信,Dubbo采取了一种新的通信协议,RPC协议,而SpringCloud则采用原始的Http协议,这无疑使Dubbo在通信方面强于SpringCloud,但Dubbo生态只解决了通信与服务的治理问题,其他则需要自研或者集成其它组件,因此是不完整的。可是Dubbo表示它并不是想要与SpringCloud竞争,只是想单纯的做一款RPC通信的框架。

通信(对比Dubbo)

对于通信,SpringCloud采取的是使用RestTemplate的一个对象,通过客户端使用RequestMapping等方法传入客户端url,可以调用对象的方法,传入三个参数,分别为服务端url,传入的参数,返回的class对象来实现客户端任意网址访问服务端特地网址,可以保障安全性。而Dubbo则是通过@Reference注解来引用服务端的对象,直接调用对象中的方法,这种方式需要有相同的接口。

Zuul

为了解决服务很多,客户端如何访问的问题,SpringCloud Netflix采取了Zuul组件,Zuul其实是增加了一层api网关,类似nginx,反向代理的功能,不过Zuul自己增加了一些配合其他组件的特性。而Dubbo则没有这方面功能。

Ribbon

Ribbon是为了解决负载均衡而产生的组件,是为了使服务器之间的压力更加平均,不至于造成某些服务器并发量特别大,而其他的服务器基本没什么人访问。常用的策略有轮询、随机等……
相比于Ribbon,还有一个社区版组件Feign,它的使用方式更符合java后端开发的习惯,它是以接口的方式来调用的。而Dubbo则没有这方面功能。

Eureka(对比Zookeeper)

Eureka是SpringCloud中用于解决服务注册与发现的组件,有一个监控界面用来查看集群部署以及服务的注册。
这里存在一个CAP原则。

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

在这里容错性是必须要兼顾的,但鱼与熊掌不可兼得,在这里Eureka选择了AP原则,即首先保证了可用性和容错性,Eureka中集群之间的地位是平等且互相依赖的,有点类似于区块链,当一个服务器崩掉的时候并不会造成服务瘫痪,而是继续运转,与此同时Eureka的自我保护机制也会使崩掉的服务不会马上被杀死,而是继续保留等待它重新连接,因此在Eureka中服务可以保持长久可用,但数据不一定是最新的。
Zookeeper则是选择了CP原则,其有一个主服务器,下面有附属服务器,当一个服务器崩掉的时候则整个服务不可维持,但可以保证数据的准确性。

Hystrix

Hystrix断路器是为了防止服务雪崩,以及服务降级操作,同样有一个监控界面用来观察服务的状态,例如一个微服务需要调用A服务,A又需要调用B,此时B服务不可用,如果不做处理则会报出404、500等错误,但有了Hystrix的熔断机制,我们可以运行另一套方案,此时可以给用户返回一个错误的信息,告诉用户现在服务器有错误,而不会任其超时或者报错。
服务降级则是在某个时间点,有些服务器并发很高,有些则没什么用户时,服务器比较空闲的服务可以给出一个提示告诉用户服务暂时关闭,让用户去其他地方办理业务,从而将更多的资源倾斜向资源更紧张的服务器。

Spring Cloud Config

Spring Cloud Config通过客户端连接服务端,服务端连接远程服务器(如Git)实现远程动态修改配置,只需配置远程git的url等地址可以实现不修改源码,运维人员可以动态修改任意配置的操作。

五大神器的分工合作

正是因为有这五大神器,使得SpringCloud可以使各大系统之间协调合作,使开发变得更加简单。

SpringCloud五大神器(对比Dubbo+Zookeeper)相关推荐

  1. 微服务四个常见问题,以及SpringCloud Netflix和SpringCloud Alibaba和Apache Dubbo zookeeper区别

    微服务的四个问题 1.服务很多,客户端该怎么访问? 2.这么多服务? 服务之间如何通信? 3.这么多服务? 如何治理? 4.服务挂了怎么办? 提出三种解决方案 1.spring cloud NetFl ...

  2. 微服务概念及SpringCloud五大神兽介绍

    1.微服务概述 1.1 技术维度理解 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独 ...

  3. spring boot 整合Dubbo/Zookeeper

    spring boot 整合Dubbo/Zookeeper 只是一个简单的整合demo,只做思路分析叙述,具体功能不做描述. 一.技术介绍 •ZooKeeper ZooKeeper 是一个分布式的,开 ...

  4. SpringCloud系列之Nacos+Dubbo+Seata应用篇

    SpringCloud系列之Nacos+Dubbo+Seata应用篇 原文链接:https://www.cnblogs.com/chinaWu/p/13671620.html ---------- 源 ...

  5. 学习 SpringCloud 五大组件后的总结 一

    学习 SpringCloud 五大组件后的总结 一 1.什么是微服务? 把某一功能独立出来单独作为一个进程类似的微小的服务.独立做某件事,与其他的服务直接不影响. 微服务之间的优缺点? 优点:每个服务 ...

  6. springcloud五大神兽之Eureka介绍

    一.springcloud简介 1.0 什么是微服务? ① 业务角度 从业务角度分析,就是将整体项目(传统的一站式应用)按照业务拆分,将每个业务拆分为一个个独立的服务,彻底解除业务模块之间的耦合,每个 ...

  7. 【转】程序员最喜欢的五大神器

    程序员留给大家的印象,不修边幅,沉默寡言.但程序员对于自己使用的神器,相当舍得花钱.今天咱们梳理下程序员最喜欢五大神器. 作者 | 阿阳啊啊 原文 | http://www.jianshu.com/p ...

  8. Java程序员最喜欢的五大神器

    程序员留给大家的印象,不修边幅,沉默寡言.但程序员对于自己使用的神器,相当舍得花钱.今天咱们梳理下程序员最喜欢五大神器. 分享之前我推荐下我自己建的Java学习群:Java进阶群:766529531, ...

  9. springCloud五大核心组件介绍

    目录 一.首先看一张springCloud的图片 二.简单介绍下什么是springCloud? 三.为了方便理解假设一个业务场景 四.SpringCloud核心组件Eureka(类似于zookeepe ...

最新文章

  1. uva 544(kruskal 变形)
  2. 手把手教你安装Flutter(Flutter起步之安装)
  3. 4dda在linux中的意思,Evvail | MaxQuant-蛋白质组DDA数据分析金标准 | Omics - Hunter
  4. mac+php7+mysql.so_在Mac上编译安装PHP7的开发环境
  5. linux7配置开启防火墙,CentOS7防火墙设置
  6. vuejs滚动条_vuescroll-一款基于vuejs2.x的虚拟滚动条
  7. 代码安全招聘岗位火热来袭(职位更新)
  8. 日志的处理 —— 使用 log4j
  9. android 计算圆周率方法,android Math的使用
  10. ubuntu 时区 修改时间 保存 重启 变化等
  11. Dev C++下载地址和安装教程(图解)
  12. 复旦大学网络认证linux,复旦大学校园网有线上网认证流程
  13. 电脑博主fps测试软件,APP性能测试—帧率
  14. CPP 获取目录下的文件
  15. 推荐系统(6):推荐算法之基于内容的推荐算法
  16. 解析SSH和SSM两大框架的组成及其区别
  17. 判断单双周java_单双周计算
  18. Flask入门flask-script 蓝本 钩子函数(3)
  19. 【转】主板上的电压符号:vdd,vddq,5vsb,3.3sb,vcc3.3,Vdimm
  20. 3.15 study 简单移动动画js实现

热门文章

  1. 太平歌词 - 《白蛇传》
  2. TCP为什么需要三次握手四次挥手
  3. IE无法打开的原因及解决办法
  4. 王者荣耀交流协会PSP Daily项目Postmortem结果
  5. 【内网安全】135端口的入侵与防御
  6. vue下载excel文件的方法
  7. 还不会 Vue3 ?一篇笔记带你快速入门
  8. 自问自答——使用视图能提高查询效率么?
  9. 【数据库原理与SQL Server应用】Part03——T-SQL语言
  10. stm32F429HAL库使用DS18B20输出温度到电脑串口助手