1. 程式人生 > >我是服務的執政官-服務發現和註冊工具consul簡介

我是服務的執政官-服務發現和註冊工具consul簡介

服務發現和註冊

我們有了兩個服務。服務A的IP地址是192.168.0.1,埠9001,服務B的IP地址192.168.0.2,埠9002。我們的客戶端需要呼叫服務A和服務B,我們只需要在配置檔案中寫上服務A和服務B的IP地址即可。

此時,服務A的伺服器負載有點高,我們需要臨時增加服務A的例項,IP192.168.0.3,埠9001。但是我們的客戶端要怎麼才能呼叫新的例項?

常規來說,我們可以有以下幾種方法:

  • 網路代理方式
    如果是http方式通訊的服務,可以增加一個nginx做反向代理,轉發到兩個服務A的例項上。
    如果是RPC服務則可以增加一個LVS或HAProxy或者ESB之類的網路代理,客戶端配置網路代理地址。
    服務B我們再來一套一樣的配置,這時候又來了服務C、服務D、服務E...,好吧我們好還要再多維護同樣多的網路代理。此外,所有的服務呼叫服務呼叫都必須經過網路代理,我們還必須保證代理的高可用。最後,陷入運維災難。

  • DNS方式
    給服務A配置一個域名,然後通過配置兩個A記錄分別指向兩個服務A的例項,客戶端只要配置服務A的域名即可。
    這種方式也存在問題,首先DNS沒有辦法管理埠,我們的埠還是隻能寫在每個客戶端的配置檔案中。此外DNS輪詢負載均衡能力太弱,可能會導致客戶端負載的不均衡。

現在有了服務發現和註冊機制,我們可以更合理的解決這個問題。

服務發現和註冊,參考字面意思很容易理解,其核心部分可以理解為一個服務登錄檔。服務啟動時,將自己的資訊註冊到登錄檔中。登錄檔需要每一定時間訪問下已經註冊的服務,將沒有響應的服務從登錄檔中刪除。最終讓客戶端拿到正常執行的服務地址。

此時,我們的服務登錄檔必須具備分散式、高可用、強一致性等特點。

目前,業界開源的服務發現和註冊產品有很多,比較流行的主要有:ZooKeeper,Etcd,Consul,Eureka等。

下面介紹下今天的主角,Consul

Consul

Consul是一個服務發現和註冊的工具,其具有分散式、高擴充套件效能特點。

Consul主要包含如下功能:

  • 服務發現: 支援 http 和 dns 兩種協議的服務註冊和發現方式。
  • 監控檢查: 支援多種方式的健康檢查。
  • Key/Value儲存: 支援通過HTTP API實現分散式KV資料儲存。
  • 多資料中心支援:支援任意數量資料中心。

官網圖

上圖是官網提供的一個事例系統圖,圖中的Server是consul服務端高可用叢集,Client是consul客戶端。consul客戶端不儲存資料,客戶端將接收到的請求轉發給響應的Server端。Server之間通過區域網或廣域網通訊實現資料一致性。每個Server或Client都是一個consul agent。Consul叢集間使用了

GOSSIP協議通訊和raft一致性演算法。

使用Consul也非常簡單,基本可以做到開箱即用。

下載應用後可以通過簡單的指令碼啟動服務端和客戶端:

$ consul
usage: consul [--version] [--help] <command> [<args>]

Available commands are:
agent          Runs a Consul agent
configtest     Validate config file
event          Fire a new event
exec           Executes a command on Consul nodes
force-leave    Forces a member of the cluster to enter the "left" state
info           Provides debugging information for operators
join           Tell Consul agent to join cluster
keygen         Generates a new encryption key
keyring        Manages gossip layer encryption keys
kv             Interact with the key-value store
leave          Gracefully leaves the Consul cluster and shuts down
lock           Execute a command holding a lock
maint          Controls node or service maintenance mode
members        Lists the members of a Consul cluster
monitor        Stream logs from a Consul agent
operator       Provides cluster-level tools for Consul operators
reload         Triggers the agent to reload configuration files
rtt            Estimates network round trip time between nodes
version        Prints the Consul version
watch          Watch for changes in Consul

執行consul agent 加上相關的引數,就可以啟動一個consul server 或者 client。

接著,我們可以通過http api註冊服務,向/v1/catalog/register傳送PUT動作的JSON報文:

{
  "Datacenter": "dc1",   
  "Node": "foobar",      
  "Address": "192.168.10.10",  
  "Service": {             //註冊的服務資訊
    "ID": "redis1",
    "Service": "redis",
    "Tags": [
      "primary",
      "v1"
    ],
    "Address": "127.0.0.1",
    "Port": 8000
  },
  "Check": {              //註冊健康檢查
    "Node": "foobar",
    "CheckID": "service:redis1",
    "Name": "Redis health check",
    "Notes": "Script based health check",
    "Status": "passing",
    "ServiceID": "redis1"
  }
}

註冊後,我們可以在consul自帶的WEB UI中看到剛剛註冊的服務:

與Spring Cloud整合

如果你的服務正好使用spring boot構建,不妨試試Spring Cloud Consul

Spring Cloud Consul通過幾個簡單的註解,就可以整合諸多consul功能,讓你更方便的治理你的服務。

@SpringBootApplication
@EnableDiscoveryClient   //只要新增這個註解即可向配置號的consul註冊服務
@RestController
public class Application { 
    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    } 
}

同時我們可以配合spring boot actuator來註冊監控檢查:

spring:
  cloud:
    consul:
      discovery:
        healthCheckPath: ${management.contextPath}/health
        healthCheckInterval: 15s

Spring Cloud支援 Feign 或者 Spring RestTemplate 通過服務發現來呼叫服務,也可以使用org.springframework.cloud.client.discovery.DiscoveryClient:

@Autowired //注入一個DiscoveryClient
private DiscoveryClient discoveryClient;

public String serviceUrl() {
    List<ServiceInstance> list = discoveryClient.getInstances("STORES");
    if (list != null && list.size() > 0 ) {
        return list.get(0).getUri();
    }
    return null;
}

consul除了可以用作服務治理的工具,還可以利用其KV儲存能力,實現分散式服務配置或分散式鎖等功能。各位感興趣的童鞋可以去consul官網,學習更多的內容。

最後,都看到這了,就順手點個贊吧~~~

參考資料:
https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/
https://highops.com/insights/service-discovery-6-questions-to-4-experts/
https://www.consul.io/
http://cloud.spring.io/spring-cloud-consul/

相關推薦

服務執政官-服務發現註冊工具consul簡介

服務發現和註冊 我們有了兩個服務。服務A的IP地址是192.168.0.1,埠9001,服務B的IP地址192.168.0.2,埠9002。我們的客戶端需要呼叫服務A和服務B,我們只需要在配置檔案中寫上服務A和服務B的IP地址即可。 此時,服務A的伺服器負載有點高,我們需要臨時增加服務A的例項,IP192.

服務發現註冊EurekaC

歡迎使用Markdown編輯器 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。 新的改變 我們對Markdown編輯器進行了一些功能

服務發現註冊Eureka

Spring Cloud和雲端計算沒有關係,只是一個基於Spring Boot的快速構建分散式系統的工具集。 一 Spring Cloud特點 # 約定優於配置 # 開箱即用,快速啟動 # 適用於各

Spring 內部工具 : 關於配置類的發現,Bean定義的發現註冊

工具名稱 功能簡介 ConfigurationClassPostProcessor BeanDefinitionRegistryPostProcessor/BeanFactoryPostPro

Spring Cloud分散式叢集服務搭建之發現註冊

springBoot簡化了一個工程開發的配置過程,但對於叢集化服務,spring有一套叫做springCloud的解決方案,它利用Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等,都可以

zabbix自動發現註冊agent客戶端

zabbix自動發現 zabbix 1、創建自動發現規則2、查看是否發現主機3、創建自動發現的動作4、檢查主機有沒有自動添加成功zabbix自動發現和註冊agent客戶端

使用的部落格通訊工具彙總

這篇博文只是發在自己的部落格上,總結自己使用的部落格資訊以及通訊工具。如果有朋友看到了這篇文章,忽略即可! 部落格和通訊工具列表 部落格 微博及社交網站: 郵箱 詳細介紹 部落格園 簡單介紹:部落格園是我最主要的部落格戰場,最喜歡的是裡面的技術氛圍。記得之前微

U盤啟動安裝linux服務器(附帶ULtraISO工具下載地址註冊碼)

寫入 完成 文件夾 總結 roc alt+ 一個 ctrl 如果 作為一個新人,在linux這行也學習有半年之久了,一直以來我都是在VM虛擬機上進行各種實驗的操作,也沒覺得有多少毛病。直到一天“領路人”問我們:你們會在真機上安裝linux系統麽?納尼?懵逼中,晚上回家摸索了

SpringCloud(1) Eureka註冊中心 —— 服務發現服務註冊

SpringBoot 2.0+ SpringCloud Eureka註冊中心 —— 服務發現和服務註冊 **服務發現:**服務發現是微服務基礎架構的關鍵原則之一。試圖著手配置每個客戶端或某種格式的約定可以說是非常困難的和非常脆弱的。Eureka是Netflix服

Java架構學習(四十)SpringCloud基礎&網站架構演變&微服務架構概述&SpringCloud概述&服務註冊服務發現&搭建註冊中心Euraka&restfegin呼叫原理

一、網站架構演變過程 微服務架構 為什麼出現了SpringCloud 網站架構模式: 單點應用---->分散式系統面向於服務架構(SOA)體系 webservice---->微服務架構 web專案三層架構 如果在網際網路公司中,使用傳統架構技術

spring-cloud微服務之路(三):服務註冊發現之Eureka、Consul

        在上一篇spring-cloud微服務之路(二):Spring Boot 我們介紹瞭如何快速的使用 Spring Boot 搭建一個微服務專案,這一篇我們演示如何分別使用 Spring Cloud Eureka 和 Spring Cloud Consul 完成

服務學習筆記(2)——使用Consul 實現 MagicOnion(GRpc) 服務註冊發現

我會 names uid red mes tar art ret public 原文:微服務學習筆記(2)——使用Consul 實現 MagicOnion(GRpc) 服務註冊和發現1.下載打開Consul 筆者是windows下面開發的(也可以使用Docker)。 官

Marathon-lb 服務自動發現負載均衡

lb marathon Marathon-lb用途在使用Marathon+Mesos 的容器集群中,我們會構建很多個容器,這些容器在不同的slave上分配了不同的隨機端口,這些Docker容器在HA模式下運行,如果任何slave節點故障導致容器實例意外退出,它將自動重新創建到健康的節點上。 所以我們不

Spring Cloud微服務架構—服務註冊發現

開源 查看 zookeeper rest 探討 ken 並且 tin services Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理

構建微服務架構Spring Cloud:服務註冊發現(Eureka、Consul

comm 簡介 foundry 架構 eas args 包含 什麽 其他 Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全

Spring Cloud構建微服務架構服務註冊發現

springboot springcloud mybatis eureka config Spring Cloud簡介Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局

聊聊微服務服務註冊發現

ace 階段 TP 丟失 原生應用 中間件 如何 緩存 網絡規劃 摘要: 一個好的服務註冊發現中間件,應該是能完整地滿足服務開發和治理的基礎功能,然後才是性能和高可用。如果沒有想清楚前面的功能,再高的可用性和性能都是浮雲。最後,安全也同樣重要。下面將從 服務註冊、服務發現、

cloud的Eureka服務中心的建立模塊註冊服務中心

add XP fig exp data In 成功 ack gist 1.Eureka服務註冊中心構建 -加入服務端依賴 <dependency> <groupId>org.springframework.cloud</groupI

2-4服務發現調用

向上 content info 技術分享 圖片 png 輸出 nbsp inf 一下演示為在一個控制臺中請求服務,請求思路: 1.先在控制臺中安裝Consul的包。 2.創建一個Consul的客戶端對象,指向Consul服務器,讀取服務器中所有的服務信息 3.篩選服務信

關於SpringCloud微服務雲架構構建B2B2C電子商務平臺分析:服務註冊發現(Eureka、Consul

Spring Cloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。 Spring