Eureka 的竞品分析:Nacos、ZooKeeper、Etcd
=================================
服务发现是一个古老的话题,当应用开始脱离单机运行和访问时,服务发现就诞生了。目前的网络架构是每个主机都有一个独立的IP地址,那么服务发现基本上都是通过某种方式获取到服务所部署的IP地址。DNS协议是最早将一个网络名称翻译为网络IP的协议,在最初的架构选型中,DNS+LVS+Nginx基本可以满足所有的RESTful服务的发现,此时服务的IP列表通常配置在Nginx或者LVS。后来出现了RPC服务,服务的上下线更加频繁,人们开始寻求一种能够支持动态上下线并且推送IP列表变化的注册中心产品。
Eureka
======
Spring Cloud Eureka所选择的是AP,采用的是去中心化结构,放弃了强一致性。也就是说Eureka集群中的各个结点都是平等的,没有主从的概念。通过互相注册的方式来进行消息同步和保证高可用。并且一个Eureka Server结点挂掉了,还有其他同等的结点来提供服务,并不会引发服务的中断
Eureka只能当注册中心,想搞配置中心的话,还得搭配Spring Cloud Config+Spring Cloud Bus。其中后者支持Rabbiimq和Kafka两种模式。
使用Java语言来开发的,并且也是Spring Cloud的子项目,所以可以直接通过引入jar包的方式来集成Eureka,这点非常方便
1. ZooKeeper
=============
这是一款经典的服务注册中心产品(虽然它最初的定位并不在于此),在很长一段时间里,它是国人在提起RPC服务注册中心时心里想到的唯一选择,这很大程度上与Dubbo在中国的普及程度有关。
Apache Zookeeper所选择的是CP,也就是放弃了高可用性。Zookeeper集群在进行消息同步的时候,必须有一半以上结点完成了同步才会返回;而当Master结点挂了或者集群中有过半的结点不能工作了,此时就会触发故障恢复,重新进行Master选举。在这个过程中,整个Zookeeper集群无法对外提供服务,从而实去了A(可用性)
为了达到C,Zookeeper采用的是自己的ZAB协议。
2. Nacos
=========
Nacos是阿里巴巴旗下的开源项目,在2018年开源,携带着阿里巴巴大规模服务生产经验,试图在服务注册和配置管理这个市场上,提供给用户一个新的选择。
Nacos一大特性是即支持CP,也支持AP。可以根据需要灵活选择。
Nacos除了注册中心之外,也能充当配置中心的作用。且配置中心可以按照namespace,group等维度来进行数据隔离,来达到不同环境之间配置隔离的功能。
值得一提的是,Nacos作为配置中心的持久化机制可以依赖于Mysql来完成(默认依赖于内置数据库)。只需要将Nacos目录下的sql脚本放到mysql中执行(会生成11个表),然后在nacos配置文件里面配一下mysql的账号密码即可。这样使用mysql作为数据源的方式相比于nacos内置数据库来说更容易管理
3. Consul
==========
Consul是HashiCorp公司推出的一个开源工具。
Consul是用Go语言编写的,所以无法像Eureka那样直接引入jar包就能集成,它还需要去服务器中进行额外的安装。
除了注册中心的功能之外,Consul还能起到配置中心的作用。
Consul它保证的是CP,使用raft协议,要求必须有过半的结点都写入成功才算是注册成功了,并且它也有Master和Follower的概念,在Master挂掉后,也需要自己内部进行
4. Etcd(待续)
============
对比SpringCloud,Kubernetes也提供完整的分布式微服务管理框架,几乎所有组件都有对应的产品,其中Etcd也可以提供类似Eureka的注册中心。
在 Go 生态中,还可以选择基于 Etcd 作为注册中心,Etcd 是由 CoreOS 团队维护的、高可用分布式键值存储数据库,可用于为集群提供配置和服务发现功能,Google 开源的容器管理工具 Kuberbetes 就是基于 Etcd 的。
和 Consul 一样,Etcd 也是基于 Raft 协议作为分布式一致性算法来解决领导者选举和日志复制问题,同样也是 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 基于 Go 语言编写。
Etcd 也支持代理模式(proxy),只不过在 Etcd 中,代理模式和 Consul 的客户端代理模式类似,安装在部署服务的节点上,用来转发请求到 Etcd 集群,本身不存储任何数据,Etcd 集群相当于 Consul 中以服务端模式运行的 Consul 集群,通常要求配置三个及以上节点(不要太多,3~5就够了,以便可用性和性能上达到平衡),负责真正的请求处理 —— 服务注册与发现。
在目前最新版本的 Etcd v3中,通过网关模式(gateway)取代了 V2 版本中的代理模式(proxy)。
从服务发现的实现原理上来说,Consul 和 Etcd 的基本设计思路是一致的,Etcd 更简单,Consul 则更像一个全栈的解决方案,功能比 Etcd 要更丰富,比如支持可视化的 Web UI 管理界面、支持多数据库中心、安全层面除了 HTTPS 外还支持 ACL、更加全面的健康检查功能、内置 DNS Server 等,这些都是 Etcd 所不具备的,但是更全面的功能往往意味着更高的复杂性,针对微服务的服务注册和发现场景,Etcd 完全够用了。
Spring Cloud 全家桶的简介
===================
Spring Cloud Config:配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git 以及 Subversion。
Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与 Spring Cloud Config 联合实现热部署。
Eureka:云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
Hystrix:熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
Zuul:Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
Archaius:配置管理 API,包含一系列配置管理 API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
Consul:封装了 Consul 操作,Consul 是一个服务发现与配置工具,与 Docker 容器可以无缝集成。
Spring Cloud for Cloud Foundry:通过 Oauth2 协议绑定服务到 CloudFoundry,CloudFoundry 是 VMware 推出的开源 PaaS 云平台。
Spring Cloud Sleuth:日志收集工具包,封装了 Dapper 和 log-based 追踪以及 Zipkin 和 HTrace 操作,为 Spring Cloud 应用实现了一种分布式追踪解决方案。
Spring Cloud Data Flow:大数据操作工具,作为 Spring XD 的替代产品,它是一个混合计算模型,结合了流数据与批量数据的处理方式。
Spring Cloud Security:基于 Spring Security 的安全工具包,为你的应用程序添加安全控制。
Spring Cloud Zookeeper:操作 Zookeeper 的工具包,用于使用 Zookeeper 方式的服务发现和配置管理。
Spring Cloud Stream:数据流操作开发包,封装了与 Redis、Rabbit、Kafka 等发送接收消息。
Spring Cloud CLI:基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。
Ribbon:提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。
Turbine:Turbine 是聚合服务器发送事件流数据的一个工具,用来监控集群下 Hystrix 的 Metrics 情况。
Feign:Feign 是一种声明式、模板化的 HTTP 客户端。
Spring Cloud Task:提供云端计划任务管理、任务调度。
Spring Cloud Connectors:便于云端应用程序在各种 PaaS 平台连接到后端,如:数据库和消息代理服务。
Spring Cloud Cluster:提供 Leadership 选举,如:Zookeeper,Redis,Hazelcast,Consul 等常见状态模式的抽象和实现。
Spring Cloud Starters:Spring Boot 式的启动项目,为 Spring Cloud 提供开箱即用的依赖管理。
本书适合具有一定Java基础和Spring MVC基础的人群以及希望往架构师方向发展的开发者阅读。
书籍教程结构
======
本书共分四部分,从基础到实战,讲解了基于Spring Cloud的常用组件。
第一部分(基础篇):第1~4章
第二部分(实战篇):第5~10章
第三部分(高级篇):第11~13章
第四部分(部署篇):第14~15章
第一部分(基础篇)
=========
第1章微服务概述
我们要学习微服务架构,就要了解它,本章将带领大家初步了解微服务,为后面系统学习微服务架构奠定良好的基础。
第2章Spring Boot基础
本书以实战为导向,讲解了如何使用Spring Cloud开发微服务项目,而Spring Cloud基于SpringBoot,所以本章先来初步了解如何使用Spring Boot搭建框架。
第3章Spring Boot核心原理
通过第2章的学习,读者应该对Spring Boot有了一个大致的认识,利用Spring Boot可以极大地简化应用程序的开发,这都归功于Spring Boot的四大核心原理:起步依赖、自动配置、Actuator 和Spring Boot命令行。本章中,我们将深入探讨Spring Boot的核心原理,以便读者能更好地学习和使用Spring Boot。
第4章Spring Cloud概述
从本章开始,我们将正式踏上探索Spring Cloud秘密的旅程。学完本书后,读者将学会搭建一个完整的分布式架构,从而向架构师的目标靠近。
第二部分(实战篇)
=========
SpringCloud实战演练文档K8S+实战+笔记+项目教程转发+评论,关注我私信回复"笔记"即可免费获取
第5章 项目准备阶段
本章中,我 将开始 个大型实战项目一一博客网站。通过“以战代练”的方式来学习如何构建Spring loud 微服务架构,让读者走出理论的丛林,在实践中玩转微服务架构。
第6章 公共模块封装
从本章开始,我们将学习框架的搭建。由于代码量巨大,本书不可能全部贴出,所以只展示一些核心代码。全部源码可以从本书配套源码中查看。
第7章 注册中心: Spring Cloud Netflix Eureka
通过前面的学习,我们可以总结出来,注册中心是整套微服务架构的核心,即系统的心脏,它能够帮助我们管理所有的微服务,精确定位到具体的服务就是通过注册中心来实现的。构建注册中心的好处也是不言而喻的,通过注册中心,我们可以实现服务的负载均衡。配置的统-管理。服务间的通信等。目前。我们可以采用多种技术实现注册中心,如Eureka. ZooKeeper. Consul 等,本书采用SpringCloud默认集成的Eureka 框架来构建注册中心。
第8章 配置中心: Spring Cloud Config
我们知道,一个微服务系统可能由成千上万的服务组成,每个服务都会有自己的配置,不同服务之间的有些配置是相同的,比如数据库。如果对于每个服务,我们都复制相同的配置,一旦该配置发生了变化,那么每个服务都需要修改,代价可想而知。Spring Cloud已经考虑到了这一点, 它为我们提供了一整套解决方案, 那就是强大的Spring CloudConfig。
第9章 服务网关: Spring Cloud Gateway
本将介绍的微服务的又一大组件一一服务网关。我们需要服务网关,还有一些很重要的因素,比如服务网关会对接口进行统一拦截并做合法性校验,一个服务可以启动多个端口,利用服务网关进行负载均衡处理等。目前市面上有很多产品可以实现服务网关这一功能, 如Nginx. Apache. Zuul 以及Spring CloudGateway等。Spring Cloud集成了Zuul 和Gateway,我们可以很方便地实现服务网关这一功能。
第10章 功能开发
通过前几章的学习,我们已经搭建好了博客网站的基本框架。本章我们将正式开始网站的功能开发。
第三部分(高级篇)
=========
SpringCloud实战演练文档K8S+实战+笔记+项目教程转发+评论,关注我私信回复"笔记"即可免费获取
第11章 服务间通信: Spring Cloud Netflix Ribbon和Spring Cloud OpenFeign