http://dgd2010.blog.51cto.com/1539422/1730263

上篇文章《Consul实践之相关计划与相关问题》给Consul的相关事情开了个头,这篇文章首先回答Consul是什么的问题。文中难免有一些关于Consul以及其他的某些知识需要提前了解,文中还可能有些比较难以理解的词汇或者说法,还请批评指正&留言询问。
A. Consul是什么?

Consul是一个两年前由hashicorp组织发起的开源项目,因此至今有两年以上的历史。Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。Consul有一组组件,因此能提供多种功能,目前主要的功能就是服务发现,其他的附加功能,比如自动编排,key-value数据库等,暂时归属为附加价值。
服务发现(service discovery)与简单服务发现协议有概念相似之处,目前还没有比较好的解释。根据个人理解,服务发现就是将自己(己方)已知的的服务信息(服务包含许多服务信息,如IP地址、端口号、路径名称等等,这些信息通常会以某种特定的格式(数据交换格式)存储)以主动或被动的方式告知需要知道的那一方。至于谁是己方,谁是对方,根据实际来定。在Consul的服务发现定义中,应用服务(如Web服务、数据库服务、Redis服务等)在向Consul服务注册的过程中是作为提供服务方(具体是由Consul Agent实现的,后面会提到),Consul是接受服务方,服务信息由Consul Agent提供给Consul Server。在除了向Consul服务注册的过程的其他过程中可能会反过来,Consul Server可能会主动质询Consul Agent。
先举一个虚拟的例子。
例如邮递员去某公司一栋大楼投递快件,向门卫询问员工甲在哪一个房间,门卫拿起桌上的通讯录查询,告知邮递员员工甲在具体什么位置。假如公司来了一个员工乙,他想让邮递员送过来,就要先让门卫知道自己在哪一个房间,需要去门卫那边登记,员工乙登记后,当邮递员向门卫询问时,门卫就可以告诉邮递员员工乙的具体位置。门卫知道员工乙的具体位置的过程就是服务发现,员工乙的位置信息可以被看作服务信息,门卫的通讯录就是上文中提到的数据交换格式,此例中员工乙就是上文的已方,门卫就是服务发现的提供者。
再举一个实际的例子。
最终用户向某个网站A提交用户信息,这个网站要先从其他网站B上获取这个用户在网站B的其他信息,而其他网站B上的服务模块是有多个的,也就是说网站B的后端还有其他提供服务的其他服务模块b1、b2、b3、bn...。那么网站B是如何把这些其他提供服务的其他服务模块b1~bn的信息整合进来呢?此时在网站B的可以借助Consul来实现。网站B上服务模块将自己的服务信息告诉Consul,并且有Consul检测服务模块的健康状态,当服务模块不可用时将此服务模块从Consul中移除,当网站B需要从这些服务模块来提供服务时,就从Consul上获取服务模块的信息,或者由Consul主动告诉网站B有哪些服务模块可以使用以及这些可用的服务模块的信息是什么。
借助Consul,被服务者可以从Consul那里获得到提供服务者提供了哪些可用的服务、应用。这些服务、应用是随时可以添加或移除的,借助负载均衡设备或软件可以非常容易实现高可用、可扩展的、弹性的应用服务架构。

B. Consul解决了什么问题?

Consul解决了动态提供服务信息、动态更改服务配置的问题。Consul可像Dubbo一样,解决Dubbo能解决的一些问题,如“服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。”
Consul还能解决其他问题,可以参见下方的“Consul可以应用到哪些场景?”

C. Consul可以应用到哪些场景?

在已有的应用的基础上,经过简单一些修改,Consul就可以非常容易的构建高可用、可扩展的服务系统或提高系统的可用性、可扩展性。
借助Consul可以实现配置共享,需要读取配置的服务可以从Consul中读取到准确的配置信息。
借助Consul,可以使得第三方应用更轻松的集成自己开发的应用,可以第三方提供更清晰的服务接口声明、保证可用的服务信息。
Consul可以整合多种环境,能将复杂系统中的多种环境整合到一起,开发者或者用户不需要关心系统的复杂性和多种组件之间的复杂联系,通过Consul可以直接查询获得自己可以使用哪些服务。比如系统中有些数据库可以使用,有哪些redis可以使用。
Consul可以帮助系统管理者更清晰的了解复杂系统内部的系统架构,运维人员可以将Consul看成一种监控软件,也可以看成一种资产(资源)管理系统。
关于Consul部署的环境要求。Consul可以部署在物理机环境、也可以部署在操作系统虚拟化环境、也可以部署到Docker(应用虚拟化)环境,也可以部署物理机、虚拟机和Docker三种环境都有的混合环境中。
Consul是支持多数据中心的,多个数据中心要求每个数据中心都要安装一组Consul Cluster,每一个Consul Cluster中有一个Server,Server与另一个数据中心的server建立连接,根据Consul 架构的描述(点这里,CONSUL ARCHITECTURE),Consul实现多个数据中心依赖于gossip protocol协议,不需要依赖于除了Consul外的其他的组件。
Consul易于使用,可供多种角色人员使用,使用Consul的可以是系统运维管理人员、软件开发人员以及其他相关的技术人员。

D. Consul的更多信息

可以参考Consul的官方网站和其他网站上提供的信息。本文列举一些可用参考的资源如下:
Consul官方网站 https://www.consul.io/
Consul Github地址 https://github.com/hashicorp/consul 
Consul-template Github地址 https://github.com/hashicorp/consul-template
Consul官方介绍 https://www.consul.io/intro/index.html
Consul 系统架构 https://www.consul.io/docs/internals/architecture.html
Consul与其他开源软件或解决方案的对比 https://www.consul.io/intro/vs/
Dubbo用户指南 http://dubbo.io/Home-zh.htm 通过此指南可以了解Dubbo是什么,能做什么
借助 Consul 和 Docker 支持即插即用的服务发现 (service discovery) http://www.ibm.com/developerworks/cn/cloud/library/cl-plug-and-play-service-discovery-with-consul-and-docker-bluemix/
使用Terraform与Consul自动化现代数据中心 http://www.infoq.com/cn/news/2015/05/hashimoto-modern-datacenter
基於swarm+consul+nginx達到HA和auto scaling的架構 http://genchilu-blog.logdown.com/posts/317095-based-on-swarm-and-consul-ha-and-dynamically-extensible-architectures
使用Docker、Registrator、Consul、Consul Template和Nginx实现高可扩展的Web框架 http://dockone.io/article/272
Consul入门 http://blog.csdn.net/viewcode/article/details/45915179
Consul多数据中心配置 https://www.consul.io/docs/guides/datacenters.html
consul实践 http://blog.sina.com.cn/s/blog_72ef7bea0102vuc5.html
文档更新时间: 2019-06-20 01:56   作者:月影鹏鹏