Git地址

服务端实现代码路径:https://gitee.com/yicj/web-server1

客户端实现代码路径:https://gitee.com/yicj/web-client1

本文旨在实现一个简单的高可用方案。示例工程使用了Servlet模拟实现controller层对外提供服务,实际的项目中基本上都是SpringMVC的方式(或者Struts2)。当一个单体项目性能遇到瓶颈的时候,可以考虑部署水平复制进行扩展。说的通俗一点就是原来一个tomcat运行一个项目,现在运行多个tomcat,每个tomcat还是运行同样的一个项目。如果是正式环境,我推荐使用nginx来实现反向代理和负载均衡。如果你不想增加系统的复杂度,可以考虑使用zookeeper来实现服务的注册和发现,同样可以实现系统的高可用和负载均衡(这篇只是简单的随机算法,如果有具体的业务需要,修改服务发现的算法即可)。

一、服务端的实现

1.创建maven webapp项目,并添加相关依赖

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_大数据

2.使用了servlet注解,在3.0之后添加的新特性,避免了xml中的配置。必须使用修改web.xml为3.0(如果仍有错误提示,需要修改settings目录下的文件,将内容中的2.3修改为3.0)。

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_服务端_02

3.定义实体类User,模拟用户数据

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_java_03

4.定义控制层UserController,并模拟生成用户列表数据

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_java_04

servlet初始化加载的时候执行init方法,这时进行服务的注册。

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_运维_05

5.服务注册过程,注册的原理就是将服务的IP地址和端口写入zookeeper的服务节点。

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_客户端_06

6.服务提供的配置信息conf.properties

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_服务端_07

7.本地服务运行使用jetty插件

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_运维_08

二、客户端的实现

1.创建一个maven的Java项目,并添加相关依赖。

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_客户端_09

2.使用客户端发起调用请求,这里使用了2个工具类。

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_运维_10

3.ZkUtil 服务发现的具体实现

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_客户端_11

4.HttpUtil 发送get请求

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_java_12

5.客户端同样也需要连接到zookeeper,需要zk的相关配置conf.properties

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_运维_13

三、测试服务端和客户端的连通性。

1.启动本地zookeeper服务

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_服务端_14

2.启动web-server的服务,选中项目 -> 鼠标右键 -> Run As --> Maven build... ,在Goals中输入  jetty:run  ,然后点击 Run 按钮即可。从日志中可以看到服务端口为8080.

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_大数据_15

3.为了模拟实际生产环境的多个运行环境。需要修改conf.properties中SERVER_IP_PORT=127.0.0.1:8081,pom.xml中<port>8081</port>。

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_服务端_16

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_服务端_17

4.修改完成后,安装上面的操作步骤再次启动服务。从日志中看出服务端口为8081.

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_客户端_18

5.再次修改上述2个文件的端口,修改为8082,并启动服务

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_大数据_19

6.执行客户端的main方法。从打印的日志可以看出,这3个服务提供者都有被调用。

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_大数据_20

所谓高可用就是任何一个服务宕机,服务调用依然能够正常返回。

客户端调用时,获取服务地址,使用的随机数。

hive 高可用注册zookeeper失败 zookeeper怎么实现高可用_客户端_21

这个地方可以按照实际的业务场景进行定制:比如轮询,使用一个变量,从0开始累加,到达最大值后重置为0,重新开始计算。