尝试使用适用于Java的ServiceDiscovery

服务发现是什么?

这里指的是指定一种中间件,可以注册和搜索使用了微服务架构的服务。

为什么需要它呢,

    • 動的にサービス稼働しているノードが増えたり、減ったりするのにClient側が追従する

 

    各ノードへのアクセスを負荷分散させるため

可以将以下原因归为重要因素:比如等等。

将角色简洁地总结在图表中。

Network Diagram.png

能够在Java中使用的东西 Java de

我认为虽然有很多选择,但作为主流的-应该是

    • Zookeeper

 

    • etcd

 

    • Consul

 

    Eureka

有几个选项,其中Eureka是专为Java设计的。

这次我们来看一下Consul和Eureka。原因是它们都有管理界面,并且都有客户端库。

关于另外两个问题,

    • etcdはKVSを拡張したような感じと見受けられたので、直接マイクロサービスの基盤として使うにはちょっと気が引けたので未着手

 

    Zookeeperは、Kafkaなどでも利用しているので見てみようかと思ったが、ServiceDiscoveryとしては少し古い的な話が多かったので、これも気が引けて未着手

那感觉如此。

领事

Hashi Corp社是开发者。
这个软件是用Go语言编写的,所以只需下载并执行每个平台对应的二进制文件就可以启动。

除了ServiceDiscovery,还有KVS(Key/Value Storage)功能。

启动Consul

虽然大多数案例是基于Docker构建的,但通常也可以在常规操作系统上运行。

基本上来说,只需要一条命令行。

consul agent -server -bootstrap -client=127.0.0.1 -dc=local -data-dir=/tmp/consul -bind 127.0.0.1 -node agent-hoge -ui-dir /opt/consul/ui -config-dir /opt/consul/consul.d/

在中文中,提供以下的表述:
Consul的配置是通过命令行参数进行设置的。
提及-ui-dir,它是用于启动Consul集群管理UI的选项。
只需下载和解压Consul二进制文件,然后指定生成的目录作为启动选项即可。

(UI演示请点击此处)
http://demo.consul.io/ui/

使用Java进行服务注册

通常,如果要在Java中注册服务,使用开源软件库是常见的做法。

如果你读了上面提到的两个文档,应该就能大致理解使用方法了。

体检

有多种类型的健康检查可用作领事的健康检查。

    • Script + Interval

 

    • − HTTP + Interval

 

    • TCP + Interval

 

    • Docker + Interval

 

    TTL

除TTL之外的部分将作为来自Consul向服务端的健康检查。

在命令行启动时,可以通过 -config-dir 选项指定的目录中填写健康检查的配置。或者,似乎可以通过 Consul 的 HTTP API 注册健康检查配置。

伊庚卡

Netflix社发布的Java基础的ServiceDiscovery,作为OSS开放源代码。
它是为AWS设计的,并可在本地数据中心运行。

Eureka画像

看下面的内容应该可以大概了解如何操作样本。

Eureka服务器已启动。

Eureka Server作为war模块提供,因此在Tomcat等服务器上运行最为方便快捷。为了进行示例操作,与自行构建war相比,以下方法更为简便。

将war文件放置在Tomcat的webapps目录下,并在8080端口启动Http,以便可以查看管理控制台。这样获取不是很好吗?

http://localhost:8080/eureka
本地主机:8080/eureka

Untitled.png

使用Java注册服务。

建议查看示例以了解设置详细内容,并应参考官方文档以获取更多帮助。

如果要启动示例服务,只需要将GitHub克隆到本地并确保Java路径正确,然后可以按以下步骤进行。

./gradlew :eureka-examples:runExampleService

客户端访问负载平衡功能

可以获取注册了Consul和Eureka服务的主机的IP地址和端口号。

    consul-clientの例
Consul consul = Consul.builder().build(); // connect to Consul on localhost
HealthClient healthClient = consul.healthClient();
List<ServiceHealth> nodes = healthClient.getHealthyServiceInstances("DataService").getResponse(); 
    Eureka Clientの例

在Eureka客户端中,尽管会很辛苦地写,但似乎是可行的。这是参考示例的事情。

nextServerInfo = DiscoveryManager.getInstance()
                    .getEurekaClient()
                    .getNextServerFromEureka(vipAddress, false);

同样,示例程序可以在下方启动。

./gradlew :eureka-examples:runExampleClient

不管选择哪个,对于访问负载均衡,我们都希望使用相同的Netflix开源软件Ribbon。

特别是与同为Netflix公司开发的Eureka的联动,还有一些模块,看起来很容易安装。

总结

我整理了Consul和Eureka的简单设置作为服务发现。

    • Consul

 

    • Javaでの利用に特化しているわけでもなく、かつService Discoveryだけでなく、KVSやDNS連携もあり広範囲な使い方を想定したミドルウェアのようだ

 

    • Eureka

 

    Javaでマイクロサービスを構築するためのService Discoveryに特化しており、他のNetflix製OSSと組み合わせることでJavaにおいては大幅な実装削減が期待できると感じた。

在GW的时候,将2016年所调查的内容整理起来,以免忘记。

广告
将在 10 秒后关闭
bannerAds