初识服务发现及Consul框架的简单使用

1.什么是服务发现?

服务发现组件记录了(大规模)分布式系统中所有服务的信息,人们或者其它服务可以据此找到这些服务。

DNS 就是一个简单的例子。

当然,复杂系统的服务发现组件要提供更多的功能,例如,服务元数据存储、健康监控、多种查询和实时更新等。

服务发现是支撑大规模 SOA 的核心服务。

2.服务发的关键特性 

      高可用的

      服务目录

      服务查找

      服务注册

3.为什么要使用服务发现

      假设我们写的代码会调用 WebService、Rest Api、 Thrift API 的服务。在调用过程中,为了完成一次请求,代码需要知道服务实例的网络位置(IP 地址和端口)。

      整个过程,对于基于云端的、现代化的微服务应用而言,这却是一大难题。

为了更好的让大家了解服务发现的发展过程,现在举个例子。

3-1【单体应用】

      假设你是项目经理或者公司的架构师,正准备组织团队开发一款产品,类似滴滴与Uber的出租车调度软件。

      其中系统的核心业务有:客户端、司机端、定位、通知、支付

      传统的架构图为:六边形架构(即模块化的单体是应用),也称单体式应用,如下图

  image 

单体应用的不足 

     这种简单方法却有很大的局限性。

      一个简单的应用会随着时间推移逐渐变大。在每次的迭代中,开发团队都会面对新“故事”(需求),然后开发许多新代码。

      几年后,这个小而简单的应用会变成了一个巨大的怪物。

      如果有经验的管理者都知道,一旦你的应用变成一个又大又复杂的怪物,那开发团队肯定很痛苦。

      敏捷开发和部署举步维艰,其中最主要问题就是这个应用太复杂,以至于任何单个开发者都不可能搞懂它。

            1> 降低开发速度

            2> 不利于持续性开发

            3> 模块相互冲突

            4> 可靠性低

            5> 重构困难

3-1【微服务】

      随着时间的发展和项目的发展,业务团队越来越庞大,业务越来越复杂,单体应用架构已经无法满足项目需求,所以微服务就腾空出世了。

      许多公司,比如Amazon、eBay,通过采用微处理结构模式解决了单体应用出现的问题。

      其思路不是开发一个巨大的单体式的应用,而是将应用分解为小的、互相连接的微服务。

image

微服务架构的好处

      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的原理图

image

 

image

4.Consul配置入门及健康监测 

4-1 配置拓扑图

image

 

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属性

image

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

posted @ 2017-01-25 12:36  傲翼飞寒  阅读(21734)  评论(1)    收藏  举报