初识服务发现及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=dc1

N2节点

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/

http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654067913&idx=1&sn=57be320f6b196a5b74e459263ea3854d&scene=2&srcid=0909dAdQMn3SBkUyX2sNqLMu&from=timeline&isappinstalled=0&ptlang=2052&ADUIN=136208196&ADSESSION=1473379431&ADTAG=CLIENT.QQ.5485_.0&ADPUBNO=26602#wechat_redirect

https://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=208173179&idx=1&sn=392c17b136c2bf570429785702d98353&scene=0&key=dffc561732c226516d4dccb1f165c5b24e823a11384b262d55dc20e3bd0d4cd21c219e8fc2bb2817fd3ccd46f36db04a&ascene=14&uin=ODY5ODkzMzQw&devicetype=iPhone+OS8.4.1&version=16020610&nettype=WIFI&fontScale=100&pass_ticket=yxu6Cmc0yX5TWpekVDtFbQhGNYo%2BPbTVmjkpYiq2xiXv6Mbhq3rZUqZkbefMNm11

初识服务发现及Consul框架的简单使用的更多相关文章

  1. ASP.NET Core 微服务初探[1]:服务发现之Consul

    ASP.NET Core 微服务初探[1]:服务发现之Consul   在传统单体架构中,由于应用动态性不强,不会频繁的更新和发布,也不会进行自动伸缩,我们通常将所有的服务地址都直接写在项目的配置文件 ...

  2. 服务发现之consul的介绍、部署和使用

    什么是服务发现 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是我们的重点.我们看下面的一幅图片:     图中 ...

  3. 服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka

    原文:https://blog.csdn.net/dengyisheng/article/details/71215234 服务发现比较:Consul vs Zookeeper vs Etcd vs ...

  4. .Net微服务实践(五)[服务发现]:Consul介绍和环境搭建

    目录 介绍 服务发现 健康检查.键值存储和数据中心 架构 Consul模式 环境安装 HTTP API 和Command CLI 示例API介绍 最后 在上篇.Net微服务实践(四)[网关]:Ocel ...

  5. 服务发现(consul)搭建

    服务发现(consul)搭建 下载最新版 consul 本人使用的版本为1.5.1,操作系统:window server 2008 consul部署的时候分为客户端和服务端,本次操作服务器2台,客户端 ...

  6. 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例

    目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...

  7. 服务注册发现consul之三:服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka

    这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,kee ...

  8. .Net Core微服务——服务发现:Consul(一)

    先思考一些问题:它是做什么的.以及怎么使用它.带着这些问题往下走. consul是做什么的 consul用于微服务下的服务治理.服务治理是什么?它包含但不限于:服务发现.服务配置.健康检查.键值存储. ...

  9. .Net Core微服务——服务发现:Consul(二)

    今天有写文章的时间了,开心.延续上一篇的话题继续,顺便放上一篇的传送门:点这里. 服务调用 既然服务注册已经搞完了,那么现在就开始调用这些注册好的服务.先做一下准备动作,把consul容器跑起来: 打 ...

随机推荐

  1. 设计模式总结篇系列:建造者模式(Builder)

    关于建造者模式网上有很多文章,也有些不同的理解.在此结合网上其他文章对建造者模式进行总结. 总体说来,建造者模式适合于一个具有较多的零件(属性)的产品(对象)的创建过程.根据产品创建过程中零件的构造是 ...

  2. Perl IO:随机读写文件

    随机读写 如果一个文件句柄是指向一个实体文件的,那么就可以对它进行随机数据的访问(包括随机读.写),随机访问表示可以读取文件中的任何一部分数据或者向文件中的任何一个位置处写入数据.实现这种随机读写的功 ...

  3. Linux常用命令详解(week1_day1_2)--技术流ken

    本节内容 aliasunaliasunamesuhostnamehistorywhichwcwwhowhoamipingkillseqdudffreedate 命令详解 1. alias 设置.’查看 ...

  4. 对配置文件 xml 进行操作

    个人喜欢用 Linq 的方式来进行操作,方便快捷 <?xml version="1.0" encoding="utf-8" ?> <confi ...

  5. ado.net的简单数据库操作(一)

    摘要:接下来的几篇博客将要讲到如何使用ado.net实现简单的数据库操作,包括增删改等内容.首先会介绍基础的数据库操作,然后以一个实例来进行讲解,这个实例会把一个数据表读取到winform上,然后在w ...

  6. 原生JS编写兼容IE6,7,8浏览器无缝自动轮播(带按钮切换)

    项目要求页面兼容IE6,7,8等浏览器,我们可能会遇到这个轮播效果,轮播板块要求:无限循环.自动轮播和手动切换功能,每一次滚动一小格,网上有很多这类插件,例如:swiper等! 但是很多都是不兼容IE ...

  7. 在ubuntu16.04中初次体验.net core 2.0

    .net core运行在Linux中的例子.文章已经很多了,看了一些之后也想体验一下,顺便记录一下…… 环境:win10 1709.它内置的Linux子系统(这里安装的是Ubuntu 16.04) 一 ...

  8. 使用ip开头的工具,而不是只会ifconfig

    结论: 1.使用ip 开头的工具,比ifconfig显示的信息更多,并且支持的功能更强大. 2.常用的功能有: 显示接口基本信息: ip link show dev eth0 设置端口up/down: ...

  9. Easyui datagrid 实现表格记录拖拽

    datagrid 实现表格记录拖拽 by:授客 QQ:1033553122 测试环境 jquery-easyui-1.5.3 jquery-easyui-datagrid-dnd 下载地址: http ...

  10. Android为TV端助力 ViewTreeObserver(转载)

    Android ViewTreeObserver简介   一.结构 public final class ViewTreeObserver extends Object java.lang.Objec ...