zoukankan      html  css  js  c++  java
  • docker 环境下通过ocelot和consul 实现服务发现与自治

    Ocelot介绍

    Ocelot的目标对象是使用.NET运行面向微服务/服务的架构,需要统一的入口点进入他们的系统。

    特别是我希望与IdentityServer引用和承载令牌轻松集成。

    Ocelot是一组按特定顺序排列的中间件。

    Ocelot将HttpRequest对象操作到其配置指定的状态,直到它到达请求构建器中间件,在该中间件中,它创建一个HttpRequestMessage对象,该对象用于向下游服务发出请求。发出请求的中间件是Ocelot管道中的最后一件事。它不会调用下一个中间件。来自下游服务的响应存储在每个请求范围的存储库中,并在请求返回Ocelot管道时进行检索。有一个中间件将HttpResponseMessage映射到HttpResponse对象并返回给客户端。基本上它具有许多其他功能

    consul 介绍

    Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全服务网格。Consul需要数据平面并支持代理和本机集成模型。Consul附带一个简单的内置代理,因此一切都可以开箱即用,但也支持第三方代理集成,如Envoy。

    Consul的主要特点是:

    • 服务发现:Consul的客户可以注册服务,例如 apimysql,并且其他客户可以使用Consul来发现给定服务的提供者。使用DNS或HTTP,应用程序可以轻松找到它们所依赖的服务。

    • 运行状况检查:Consul客户端可以提供任意数量的运行状况检查,这些检查与给定服务(“是Web服务器返回200 OK”)或本地节点(“内存利用率低于90%”)相关联。运营商可以使用此信息来监控群集运行状况,服务发现组件使用此信息将流量路由远离不健康的主机。

    • KV商店:应用程序可以将Consul的分层键/值存储用于任何目的,包括动态配置,功能标记,协调,领导者选举等。简单的HTTP API使其易于使用。

    • 安全服务通信:Consul可以为服务生成和分发TLS证书,以建立相互的TLS连接。 意图 可用于定义允许哪些服务进行通信。可以使用可以实时更改的意图轻松管理服务分段,而不是使用复杂的网络拓扑和静态防火墙规则。

    • 多数据中心:Consul支持多个数据中心。这意味着Consul的用户不必担心构建额外的抽象层以扩展到多个区域。

    Consul旨在对DevOps社区和应用程序开发人员友好,使其成为现代,弹性基础架构的理想选择。

    通过consul实现动态转发

    首先搭建consul集群  docker-compose.yml如下

    consul-agent-1: &consul-agent
        image: consul:latest
        container_name: consul-agent-1
        networks: 
          - network
        command: "agent -retry-join consul-server-bootstrap -client 0.0.0.0"
    
      consul-agent-2:
        container_name: consul-agent-2
        <<: *consul-agent
      
      consul-agent-3:
        container_name: consul-agent-3
        <<: *consul-agent
    
      consul-server-1: &consul-server
        container_name: consul-server-1
        <<: *consul-agent
        command: "agent -server -retry-join consul-server-bootstrap -client 0.0.0.0"
    
      consul-server-2:
        container_name: consul-server-2
        <<: *consul-server
    
      consul-server-bootstrap:
        container_name: consul-server-bootstrap
        <<: *consul-agent
        ports:
         - "8400:8400"
         - "8500:8500"
         - "8600:8600"
         - "8600:8600/udp"
        command: "agent -server -bootstrap-expect 3 -ui -client 0.0.0.0"

    搭建成功后进入http://localhost:8500 能进入consul的管理界面并查看当前的数据中心和consul节点以及注册的服务的健康状态

    consul 集群搭建成功后,然后将自己的业务微服务注册进入consul ,相关功能的代码已经上传到github上 ,地址:https://github.com/singlewanderwolf/ConsuleRegister 可以参考下。

     记住业务微服务需要加上健康检查  不然consul是没法监控该服务的 

    当将我们的微服务注册进入consul之后,就可以通过consul来实现ocelot的自动转发了, ocelot的配置如下

    {
      "ReRoutes": [],
      "Aggregates": [],
      "GlobalConfiguration": {
        "BaseUrl": "http://phoenix.local.newv.com.cn",
        "RequestIdKey": "NewvOcRequestId",
        "AdministrationPath": "/administration",
        "ServiceDiscoveryProvider": {
          "Host": "consul-server-bootstrap",
          "Port": 8500,
          "Type": "Consul"
        },
        "DownstreamScheme": "http",
        "RateLimitOptions": {
          "ClientIdHeader": "ClientId",
          "QuotaExceededMessage": null,
          "RateLimitCounterPrefix": "ocelot",
          "DisableRateLimitHeaders": false,
          "HttpStatusCode": 429
        },
        "QoSOptions": {
          "ExceptionsAllowedBeforeBreaking": 0,
          "DurationOfBreak": 0,
          "TimeoutValue": 0
        },
        "LoadBalancerOptions": {
          "Type": "LeastConnection",
          "Key": null,
          "Expiry": 0
        },
        "HttpHandlerOptions": {
          "AllowAutoRedirect": false,
          "UseCookieContainer": false,
          "UseTracing": false
        }
      }
    }

    注意 ReRoutes中不能放入任何其他配置规则。

    配置完成后并启动服务后。浏览器中输入localhots:5000/servicename/api/v1/value,ocelot会根据url的第一段servicename 去询问consul 并得到实际的服务地址进行转发,实际转发的地址为http:servicehost:serviceport/api/v1/value  

    --------行千里路,看万卷书
  • 相关阅读:
    定时器的使用
    new LayoutParams 使用
    判断,日期是是昨天,前天 ,今天
    google推出的SwipeRefreshLayout下拉刷新用法
    Intent的Flag
    Eclipse Java注释模板设置详解
    Eclipse的模板设置代码
    Android如何在java代码中设置margin
    软键盘挡住输入框的解决方案
    Android自定义遮罩层设计
  • 原文地址:https://www.cnblogs.com/galen-huang/p/10667935.html
Copyright © 2011-2022 走看看