初识服务发现及Consul框架的简单使用
初识服务发现及Consul框架的简单使用
1.什么是服务发现?
服务发现组件记录了(大规模)分布式系统中所有服务的信息,人们或者其它服务可以据此找到这些服务。
DNS 就是一个简单的例子。
当然,复杂系统的服务发现组件要提供更多的功能,例如,服务元数据存储、健康监控、多种查询和实时更新等。
服务发现是支撑大规模 SOA 的核心服务。
2.服务发的关键特性
高可用的
服务目录
服务查找
服务注册
3.为什么要使用服务发现
假设我们写的代码会调用 WebService、Rest Api、 Thrift API 的服务。在调用过程中,为了完成一次请求,代码需要知道服务实例的网络位置(IP 地址和端口)。
整个过程,对于基于云端的、现代化的微服务应用而言,这却是一大难题。
为了更好的让大家了解服务发现的发展过程,现在举个例子。
3-1【单体应用】
假设你是项目经理或者公司的架构师,正准备组织团队开发一款产品,类似滴滴与Uber的出租车调度软件。
其中系统的核心业务有:客户端、司机端、定位、通知、支付
传统的架构图为:六边形架构(即模块化的单体是应用),也称单体式应用,如下图

单体应用的不足
这种简单方法却有很大的局限性。
一个简单的应用会随着时间推移逐渐变大。在每次的迭代中,开发团队都会面对新“故事”(需求),然后开发许多新代码。
几年后,这个小而简单的应用会变成了一个巨大的怪物。
如果有经验的管理者都知道,一旦你的应用变成一个又大又复杂的怪物,那开发团队肯定很痛苦。
敏捷开发和部署举步维艰,其中最主要问题就是这个应用太复杂,以至于任何单个开发者都不可能搞懂它。
1> 降低开发速度
2> 不利于持续性开发
3> 模块相互冲突
4> 可靠性低
5> 重构困难
3-1【微服务】
随着时间的发展和项目的发展,业务团队越来越庞大,业务越来越复杂,单体应用架构已经无法满足项目需求,所以微服务就腾空出世了。
许多公司,比如Amazon、eBay,通过采用微处理结构模式解决了单体应用出现的问题。
其思路不是开发一个巨大的单体式的应用,而是将应用分解为小的、互相连接的微服务。

微服务架构的好处
1.单个服务很容易开发、理解和维护。
2.这种架构使得每个服务都可以有专门开发团队来开发。
3.微服务架构模式是每个微服务独立的部署。
4.微服务架构模式使得每个服务独立扩展。
微服务架构的不足
微服务应用是分布式系统,由此会带来固有的复杂性。
服务地址目录,服务健康度,部署困难,服务依赖问题,数据库分区问题。
如何解决微服务出现的这些问题呢?服务发现框架在这时就闪亮登场了。
4.常见的服务发现框架有哪些
常见服务发现框架 Consul、 ZooKeeper以及Etcd
ZooKeeper是这种类型的项目中历史最悠久的之一,它起源于Hadoop。它非常成熟、可靠,被许多大公司(YouTube、eBay、雅虎等)使用。
etcd是一个采用HTTP协议的健/值对存储系统,它是一个分布式和功能层次配置系统,可用于构建服务发现系统。其很容易部署、安装和使用,提供了可靠的数据持久化特性。它是安全的并且文档也十分齐全。
|
Zookeeper |
etcd |
Consul |
|
|
产生时间 |
长 |
短 |
短 |
|
原生语言 |
JAVA |
Go |
Go |
|
算法 |
Paxos |
Raft |
Raft |
|
多数据中心 |
不支持 |
不支持 |
支持 |
|
健康检查 |
支持 |
不支持 |
支持 |
|
web管理界面 |
支持 |
不支持 |
支持 |
|
http协议 |
较为复杂 |
支持 |
支持 |
|
DNS协议 |
较为复杂 |
不支持 |
支持 |
4.Consul服务发现框架介绍
Consul是强一致性的数据存储,使用gossip形成动态集群。它提供分级键/值存储方式,不仅可以存储数据,而且可以用于注册器件事各种任务,从发送数据改变通知到运行健康检查和自定义命令,具体如何取决于它们的输出。下面两张图是Consul的原理图


4.Consul配置入门及健康监测
4-1 配置拓扑图

4-2 Consul 集群配置
服务端配置
N1节点
consul agent -server -bootstrap-expect 2 -data-dir ./tmp/consul -node=n1 -bind=192.168.109.241 -ui-dir ./dist -dc=dc1N2节点
consul agent -server -bootstrap-expect 2 -data-dir ./tmp/consul -node=n2 -bind=192.168.109.203 -ui-dir ./dist -dc=dc1
客户端配置
C1节点
consul agent -data-dir ./tmp/consul -ui-dir ./dist -bind=192.168.109.204 -dc=dc1
4-3 Consul 服务注册及健康检验
客户端配置
consul agent -data-dir ./tmp/consul -ui-dir ./dist -bind=192.168.109.204 -dc=dc1 -config-file=./conf查看集群命令
consul info 查看当前consul 信息,里面可以找到state属性
consul members 查看consul成员
健康监测
监测Service1.svc服务是否正常
{ "log_level": "TRACE", "encrypt": "7TnJPB4lKtjEcCWWjN6jSA==", "service": { "name": "web3", "tags": ["master"], "address": "127.0.0.1", "port": 80, "checks": [ { "http": "http://127.0.0.1:1111/Service1.svc", "interval": "10s" } ] } }
5 C#调用Consul源码
https://github.com/PlayFab/consuldotnet
参考资料
http://consul.la/start
http://www.alauda.cn/2016/07/20/microservices-service-discovery/
初识服务发现及Consul框架的简单使用的更多相关文章
- ASP.NET Core 微服务初探[1]:服务发现之Consul
ASP.NET Core 微服务初探[1]:服务发现之Consul 在传统单体架构中,由于应用动态性不强,不会频繁的更新和发布,也不会进行自动伸缩,我们通常将所有的服务地址都直接写在项目的配置文件 ...
- 服务发现之consul的介绍、部署和使用
什么是服务发现 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是我们的重点.我们看下面的一幅图片: 图中 ...
- 服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka
原文:https://blog.csdn.net/dengyisheng/article/details/71215234 服务发现比较:Consul vs Zookeeper vs Etcd vs ...
- .Net微服务实践(五)[服务发现]:Consul介绍和环境搭建
目录 介绍 服务发现 健康检查.键值存储和数据中心 架构 Consul模式 环境安装 HTTP API 和Command CLI 示例API介绍 最后 在上篇.Net微服务实践(四)[网关]:Ocel ...
- 服务发现(consul)搭建
服务发现(consul)搭建 下载最新版 consul 本人使用的版本为1.5.1,操作系统:window server 2008 consul部署的时候分为客户端和服务端,本次操作服务器2台,客户端 ...
- 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例
目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...
- 服务注册发现consul之三:服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka
这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,kee ...
- .Net Core微服务——服务发现:Consul(一)
先思考一些问题:它是做什么的.以及怎么使用它.带着这些问题往下走. consul是做什么的 consul用于微服务下的服务治理.服务治理是什么?它包含但不限于:服务发现.服务配置.健康检查.键值存储. ...
- .Net Core微服务——服务发现:Consul(二)
今天有写文章的时间了,开心.延续上一篇的话题继续,顺便放上一篇的传送门:点这里. 服务调用 既然服务注册已经搞完了,那么现在就开始调用这些注册好的服务.先做一下准备动作,把consul容器跑起来: 打 ...
随机推荐
- JSP面试题都在这里
下面是我整理下来的JSP知识点: 图上的知识点都可以在我其他的文章内找到相应内容. JSP常见面试题 jsp静态包含和动态包含的区别 jsp静态包含和动态包含的区别 在讲解request对象的时候,我 ...
- [二十二]JavaIO之LineNumberReader
功能介绍 LineNumberReader是提供了行号的具体的装饰器类 跟踪行号的缓冲字符输入流 此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用 ...
- ASP.NET MVC ETag & Cache等优化方法
背景 最近有一个项目是用SmartAdmin + Jquery + EasyUI 一个ASP.NET MVC5的项目,一直存在一个性能问题,加载速度比较慢,第一次加载需要(在没有cache的情况下)需 ...
- mybatis和hibernate的区别
1. hibernate是全自动,而mybatis是半自动 hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql.而mybat ...
- 关于HTML相关知识随记
HTML是构成网页文档的主要语言,它由HTML标签和字符信息组成.HTML标签可以标识文字.图形.动画.声音.表格.超链接等网页对象,字符信息用以传达网页内容,如标题.段落文本.图像等. HTML4文 ...
- shell编程练习(四): 笔试31-68
笔试练习(四): 31.找查较多的SYN连接 netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uni ...
- JavaWeb学习日记----SAX解析XML
1.SAX解析XML文档的方式: 与DOM方式解析不同,DOM方式解析是根据XML的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象.优点是可以很方便实现增删改操作.缺点是,如 ...
- 当input框输入到限定长度时,自动focus下一个input框
需求背景 需要输入一串15位的数字,但是要分为3个输入框,每个输入框限定长度5位,当删除当前输入框的内容时,focus到上一个输入框: 实现方法 var field = $('.phone-fiel ...
- #WEB安全基础 : HTML/CSS | 0x11 浅谈GET和POST
HTTP中的GET和POST请求方法 我上次提到了GET和POST,现在就让你来认识一下这些新朋友 请看图 POST和GET都是将用户输入到浏览器的数据发送给服务器,不过采用了两种不同的方式,POST ...
- OPC协议解析-关于OPC协议的几个问题
1 什么是OPC协议? 为了便于自动化行业不同厂家的设备和应用程序能相互交换数据,定义了一个统一的接口函数,就是OPC协议规范.有了OPC就可以使用统一的方式去访问不同设备厂商的产品数据. OP ...

