通过“定时刷盘、恢复”机制保证服务的可用性,相应逻辑封装在FailoverReactor中。
/*** FailoverReactor**/public void init() {// 故障转移executorService.scheduleWithFixedDelay(new SwitchRefresher(), 0L, 5000L, TimeUnit.MILLISECONDS);// 定时刷盘executorService.scheduleWithFixedDelay(new DiskFileWriter(), 30, DAY_PERIOD_MINUTES, TimeUnit.MINUTES);// backup file on startup if failover directory is empty.executorService.schedule(new Runnable() {@Overridepublic void run() {try {File cacheDir = new File(failoverDir);if (!cacheDir.exists() && !cacheDir.mkdirs()) {throw new IllegalStateException("failed to create cache dir: " + failoverDir);}File[] files = cacheDir.listFiles();if (files == null || files.length <= 0) {new DiskFileWriter().run();}} catch (Throwable e) {NAMING_LOGGER.error("[NA] failed to backup file on startup.", e);}}}, 10000L, TimeUnit.MILLISECONDS);}
1、DiskFileWriter
定时将 Nacos Server端的信息写入容灾缓存目录下的文件中。
2、SwitchRefresher
从容灾目录下读取Nacos Server 信息,并进行恢复。
It’s a switch file which need user create. It will be used when there are some problem between client and server. Users can create this file and set value = 1 to open client failover feature.
It’s a old logic, maybe need to discuss how to optimize it.
