Consul 入门-初识
背景
现状:单体架构逐渐被微服务架构所替代,原本两个功能模被拆分成了两个服务。原本两个模块块间的通信只需要函数调用就能够实现,现在却做不到了,因为它们不在同一个进程中,甚至两个服务都可能部署到不同的机房。

通信成为了迈向微服务大门的第一道难关:
- ServiceA 如何知道 ServiceB 在哪里
 - ServiceB 可能会有多个副本提供服务,其中有些可能会挂掉,如何避免访问到“不健康的”的 ServiceB
 - 如何控制只有 ServiceA 可以访问到 ServiceB
 
Consul 是什么
Consul 是一种服务网格解决方案,提供具有服务发现、配置和分段功能的全功能控制平面。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。Consul 提供的核心功能:
服务发现:服务启动时将服务相关信息(地址、端口、配置、tag等)注册到 Consul 中,由它统一管理,当需要访问其他服务时向 Consul 查询所依赖服务的相关信息。查询方式支持 HTTP、RPC、DNS等。
健康检查:在将服务注册到 Consule 时可以配置健康检查,Consul 会对其定期进行检查,如果检查失败,就会认为该服务不可用,当有其他服务过来查询这个服务的地址时,返回时可以把不可用的地址剔除(注:同一个服务一般会有多个服务/地址)。
安全服务通信:Consul 可以为服务生成和分发 TLS 证书,以建立相互的 TLS 连接。Intentions 可用于定义允许哪些服务进行通信。通过实时地更改Intentions 来管理服务服务分段,控制服务间的是非否可访问。
KV存储:Cousul 可以用来做简单的键值存储场景,比如:动态配置、功能标记、协调、领导者选举等。提供简单的 HTTP API。
多数据中心:Consul 支持开箱即用的多个数据中心,用以支持高可用的场景需要。

Consul 架构

一般会将 Server 端部署为多数据中心,如上图,DATACENTER1和DATACENTER2是相互独立的,他们之间通过 WAN GOSSIP 进行报文交互。单个 datacenter 中, 节点被划分成两种颜色, 红色的 server, 紫色的 client,  他们之间通过 RPC 进行通信(业务数据), 除此之外, Client 和 Server 之间通过还有一条 LAN Gosssip 进行通信,比如,当 Server 节点增加,或者 down 机后,Client 可以获取对应的 Server列表,去除或者增加 Server 列表。
Consul 是 Client/Server 架构,由同一套代码运行, 启动时通过参数-server=false来决定运行 Server 模式还是 Agent 模式。
Server 模式能力
- 处理查询
 - 存储注册信息
 - 参与共识仲裁、选取领导人
 - 维护周边(LAN/WAN) 节点之间的关系
 
Client 模式负责
- 通过该节点注册到 Consul 微服务的健康检查
 - 将客户端的注册请求和查询转换为 server 的 RPC 请求
 - 维护周边各节点(LAN/WAN) 的关系
 - 缓存来自服务器的数据,以提高性能和可靠性
 
结束语
本文对 Consul 进行了理论层面的介绍,Consul 出现的背景、Consul 支持的功能以及 Consul 的架构。
Consul 入门-初识的更多相关文章
- Consul入门初识
		
Consul Consul是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由HashiCrop公司用Go语言开发,基于Mozilla Public License 2.0的协议进行开源 ...
 - Consul 入门-运行
		
HashiCorp Consul 是由 HashiCorp 公司开发的,它是一家专注于 DevOps 工具链的公司,旗下的明星级产品包括 Vagrant.Terraform.Vault.Nomad 以 ...
 - Java入门——初识Java
		
Java入门——初识Java 摘要:本文主要对Java这门编程语言进行简单的介绍. Java简介 说明 Java语言历时十多年,已发展成为人类计算机史上影响深远的编程语言,从某种程度上来看,它甚至超出 ...
 - Linux入门——初识Linux
		
Linux入门——初识Linux 摘要:本文主要说明了Linux是什么,Linux发展历史,以及同Linux系统有关的一些基本知识. 简介 操作系统 Linux系统同Windows系统.Mac系统一样 ...
 - RabbitMQ入门-初识RabbitMQ
		
初识RabbitMQ 要说RabbitMQ,我们不得不先说下AMQP.AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面 ...
 - mybatis入门--初识mybatis
		
初识mybatis 今天,一起来说说mybits这个框架吧.这是一个持久层的框架.之前叫做ibatis.所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶.不是写错了,它确实就是这个样子的. ...
 - MySQL使用入门--初识数据库
		
MySQL使用入门 数据库概述 数据库是存放数据的仓库.在应用的开发中总是离不开数据的查询.处理.存储,例如图书管理系统就需要操纵和存储大量的数据.没有数据库之前我们使用文件存储数据,但是文件存储有很 ...
 - Spring Cloud Consul入门
		
1. Consul介绍 Consul是一套开源的分布式服务发现和配置管理系统,支持多数据中心分布式高可用.Consul是HashiCorp( Vagrant的创建者)开发的一个服务发现与配置项目,用G ...
 - springMvc入门--初识springMvc
		
springMvc是什么 springmvc是表现层的框架,是一个spring的表现层组件.是整个spring框架的一部分,但是也可以不使用springmvc.跟struts2框架功能类似.其中的mv ...
 
随机推荐
- 如何修改product.product的display_name的显示,解决_rec_name失效的问题
			
回顾学习 之前有讲解过display_name是怎么由来的,odoo会去取_rec_name的值,会将_rec_name的值赋值给display_name. class FandxProduct(mo ...
 - PAT乙级:1088 三人行 (20分)
			
PAT乙级:1088 三人行 (20分) 题干 子曰:"三人行,必有我师焉.择其善者而从之,其不善者而改之." 本题给定甲.乙.丙三个人的能力值关系为:甲的能力值确定是 2 位正整 ...
 - ThinkPHP5修改验证码的配置参数
			
当前使用的ThinkPHP的版本是5.0.24. 在模版试图中调用验证码生成函数:{:captcha_img()},或者<img src="{:captcha_src()}" ...
 - 如何掌握C#的核心技术
			
如何掌握C#的核心技术 感谢网友毛大神制作的图. 引子 前不久看到一个段子,某年宁波交警引进人脸识别技术抓拍行人闯红灯,结果一天下来被发现闯红灯次数最多的是珠海女子董小姐,日闯红灯3000多次.宁波交 ...
 - 第十九篇 -- QTableWidget的使用
			
QTableWidget的一些常用方法 下面两个类可以根据自己的情况自定义. 单元格类型的类: class CellType(Enum): ctKey = 1000 ctPath = 1001 ctI ...
 - homeless靶机
			
仅供个人娱乐 靶机信息 下载地址:https://www.vulnhub.com/entry/homeless-1,215/ 一.主机扫描 二.信息收集 在网页源码和页面上,我们发现User-Agen ...
 - 升级vs更新,用词莫忘准确(附PHP版本升级教程)
			
升级vs更新 Web技术日新月异,更新升级是维护工作之一,长时间不更新(升级)的程序,就如长时间不维护的建筑物一样,会加速老化.功能逐渐缺失直至无法使用.而我们最近发现,有的朋友对"更新&q ...
 - js hook
			
//cookie hook (function () { 'use strict'; var cookie_cache = document.cookie; Object.defineProperty ...
 - 95后新同事年薪35W+,老员工却“自愿申请”降薪10%,中年职场人正在崩溃
			
蔡依林在演唱会上说过的一句话:"在乐坛摸爬滚打这么多年,遭遇了那么多质疑和嘲讽还能挺立到今天,然后想说40岁是个很棒的年纪......",让很多在职场打拼多年的老员工感慨颇深. 真 ...
 - 史上最详细的Android消息机制源码解析
			
本人只是Android菜鸡一个,写技术文章只是为了总结自己最近学习到的知识,从来不敢为人师,如果里面有不正确的地方请大家尽情指出,谢谢! 606页Android最新面试题含答案,有兴趣可以点击获取. ...