服务注册与发现(Docker+Consul+Registrator)

服务注册中心引言

服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态 LB 机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。

CAP理论是分布式架构中重要理论

一致性(Consistency)(所有节点在同一时间具有相同的数据)
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partitiontolerance)(系统中任意信息的丢失或失败不会影响系统的继续运作)

服务注册中心软件

ZooKeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是 Hadoop 和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括∶ 配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

Eureka
Eureka是基于REST(Representational State Transfer)服务,主要以AWS云服务为支撑,提供服务发现并实现负载均衡和故障转移。我们称此服务为Eureka服务。Eureka提供了Java客户端组件,Eureka Client,方便与服务端的交互。客户端内置了基于round-robin实现的简单负载均衡。在 Netflix,为 Eureka提供更为复杂的负载均衡方案进行封装,以实现高可用,它包括基于流量、资源利用率以及请求返回状态的加权负载均衡。

Etcd
etcd 是一个分布式键值对存储系统,由 coreos 开发,内部采用 raft 协议作为一致性算法,用于可靠、快速地保存关键数据,并提供访问。通过分布式锁、leader 选举和写屏障(write barriers),来实现可靠的分布式协作。etcd集群是为高可用、持久化数据存储和检索而准备。

Consule
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案比如 Airbnb 的 SmartStack 等相比,Consul 的方案更"一站式",内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等)。使用起来也较为简单。 Consul 用 Golang 语言实现,因此具有天然可移植性(支持 Linux、windows 和 Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。

Consul介绍

Consul是一个分布式,高可用且支持多数据中心的服务发现,配置和编排工具。Consul支持大规模部署,配置和维和面向服务的体系结构。

Consul主要功能:

服务发现
通过DNS或HTTP接口使得消费者发现服务,应用程序可以轻松找到所依赖的服务。

健康检查
防止将请求转发不健康的主机。

键值存储
可以使用分层建/值存储,比如功能标记、动态配置等。

多数据中心
开箱即用,不需要复杂的配置。这就意味着不用建立抽象的逻辑来扩展多个地区。

1)Cnsul agent是fonsul核心组件,分为client和server两种工作模式。
a.默认以client模式运行,提供服务注册、健康检查、转发查询给server leader。
b.server模式启动时使用-server选项指定,用于维护Consul集群状态、Raft协议进行选举。

2)agent必须在每个Consul节点运行,所有运行Consul agent节点构成Consul集群。

3)官方建议Consul集群至少3或5个节点运行Consul agent server模式,client节点不限。

4)通过join或rejoin选项加入集群。一旦加入,集群信息使用gossip算法同步到整个集群节点。
架构设计

在现实工作中,我们一直渴望着追求提供高质量、高可用的服务架构体系,同时减少不 必要的部署和维护代价,减少容错率。面对如此高的要求,可以有两种架构方案:
Docker+Etcd+Confd+Neinx
Docker+Consul+Nginx

使用 Docker 将 Consul、Consul Template、Registrator和Nginx 组装成一个值得信任且可扩展的服务框架,这套架构在这个框架中添加和移除服务,不需要重写任何配置,也不需要重启任何服务,一切都能正常运行。工作流程很简单:

架构优势

Docker+Consul+Nginx虽然看起来是三个组件的运用,但却证明是一个有机的整体。它们互相联系、互相作用,完全满足我们对高可用、高效服务架构方案的需求,是 Docker 生态圈中最理想的组合之一,具有以下优势:

  1. 自动发现与注册组件consul使用 Raft 算法来保证一致性,比复杂的Paxos 算法更直接。相比较而言,zookeeper 采用的是 Paxos,而 etcd 使用的则是 Raft;
    2.支持多数据中心,多数据中心集群可以避免单数据中心的单点故障,zookeeper 和 etcd
    均不提供多数据中心功能的支持;
  2. 自动、实时发现及无感知服务刷新,具备资源弹性,伸缩自如;
  3. 支持健康检查,负载能动态在可用的服务实例上进行均衡,etcd 不提供此功能;
  4. 支持足够多台 Docker 容器(前提架构资源足以保证性能支撑);
  5. 支持http 和dns 协议接口,zookeeper 的集成较为复杂,etcd 只支持 http 协议;
  6. 服务规模方便进行快速调整,官方提供 web 管理界面,tcd 无此功能;
  7. Consul template 搭配 consul使用,支持多种接入层,如 Nginx、Haproxy。

你可能感兴趣的:(K8S,docker,golang,功能测试,算法)