尝试使用适用于Java的ServiceDiscovery
服务发现是什么?
这里指的是指定一种中间件,可以注册和搜索使用了微服务架构的服务。
为什么需要它呢,
-
- 動的にサービス稼働しているノードが増えたり、減ったりするのにClient側が追従する
- 各ノードへのアクセスを負荷分散させるため
可以将以下原因归为重要因素:比如等等。
将角色简洁地总结在图表中。
能够在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 Server作为war模块提供,因此在Tomcat等服务器上运行最为方便快捷。为了进行示例操作,与自行构建war相比,以下方法更为简便。
将war文件放置在Tomcat的webapps目录下,并在8080端口启动Http,以便可以查看管理控制台。这样获取不是很好吗?
http://localhost:8080/eureka
本地主机:8080/eureka
使用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年所调查的内容整理起来,以免忘记。