1、概述
该产品部署在网络隔离装置两端,以代理程序的身份,完成两侧设备连接维护,数据转发的功能。场景简化如图所示:
软件核心是一个基于Netty的网络应用程序,考虑到系统的可维可测性,集成了web化的配置、监控和调试功能。
2、启动类是GateKeeperWebMain
public static void main(String[] args) throws Exception {
startJetty(PORT);
} private static void startJetty(int port) throws Exception {
LOGGER.debug("Starting server at port {}", port);
Server server = new Server(port);
Configuration.ClassList classlist = Configuration.ClassList
.setServerDefault(server);
classlist.clear();
classlist.add("org.eclipse.jetty.webapp.WebXmlConfiguration");
classlist.add("org.eclipse.jetty.annotations.AnnotationConfiguration");
server.setHandler(getServletContextHandler());
addRuntimeShutdownHook(server);
server.start();
LOGGER.info("Server started at port {}", port);
server.join();
}
3. web容器是jetty,在web服务启动过程中,通过spring初始化后台相关bean,并在初始化完成后启动后台监听服务。
4. 发布维护过程中的一些收获
1、功能的可用性
产品部署在全国各地多个地方,生产环境掉电重启,网络不稳定等多种异常情况都会出现。
- 软件需要保证掉电重启自动恢复等。
- 通过代理程序的心跳机制及重连机制,保证网络正常或网络断开恢复后能正常提供服务。
2、服务的可靠性
- 第三方服务端处理速度不一定快,如果是同步阻塞的话,就会加大系统自身负担,被外部拖累。
- 设备不可达等情况,应有快速失败机制。(一旦出现一定的超时,如果有多次重试的机制,可能会使得网络负担更大,造成雪崩效应。)
3、系统的维护性
- 提供版本一键安装升级工具,操作简单快速。
- 提供一键日志采集功能。获取服务器核心的操作系统日志、业务日志,便于有问题时采集分析。
- 现场人员可以通过web监控调试页面,查看当前系统状态及网络情况。便于简单问题的现场自行处理。