zoukankan      html  css  js  c++  java
  • 初识服务发现及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

  • 相关阅读:
    空气墙的制作,标签的添加
    子弹朝向问题的解决,移动方法的编写
    子弹的朝向问题
    坦克的攻击方法
    移动优先级的添加,2D渲染层级问题
    碰撞器的添加,解决抖动问题
    控制图片的移动切换
    控制玩家的移动
    游戏中预制体的制作,2D动画的制作
    场景搭建,素材的处理
  • 原文地址:https://www.cnblogs.com/newP/p/6349316.html
Copyright © 2011-2022 走看看