synchronized void refresh(List<RemoteInstance> instanceList) {
        if (gauge == null) {
            gauge = moduleDefineHolder.find(TelemetryModule.NAME)
                                      .provider()
                                      .getService(MetricsCreator.class)
                                      .createGauge(
                                          "cluster_size", "Cluster size of current oap node", MetricsTag.EMPTY_KEY,
                                          MetricsTag.EMPTY_VALUE
                                      );
        }
        try {
            if (log.isDebugEnabled()) {
                log.debug("Refresh remote nodes collection.");
            }

            instanceList = distinct(instanceList);
            Collections.sort(instanceList);

            gauge.setValue(instanceList.size());

            if (log.isDebugEnabled()) {
                instanceList.forEach(instance -> log.debug("Cluster instance: {}", instance.toString()));
            }

            if (!compare(instanceList)) {
                if (log.isDebugEnabled()) {
                    log.debug("ReBuilding remote clients.");
                }
                reBuildRemoteClients(instanceList);
                moduleDefineHolder.find(CoreModule.NAME)
                       .provider()
                       .getService(ServerStatusService.class)
                       .rebalancedCluster(System.currentTimeMillis());
            }

            printRemoteClientList();
        } catch (Throwable t) {
            log.error(t.getMessage(), t);
        }
    }
Refresh the remote clients according to OAP server list. Make the OAP server orderly because of each of the server will send stream data to each other by hash code.
oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/remote/client/RemoteClientManager.java