system: [SYSTEM]

user: 3. 难点技术的解决方案 通信网络运行监测管理平台所管理的数据来源多样，既有网络链路检测、机房环境检测、各种视屏监控等硬件设备，又有正在运行中的各种网络平台管理软件，它们分布在不同区域，运行于不同的系统环境，且生成的数据格式不一 [ 3 ] 。为满足这些需求，我们需要一个虚拟的分布式数据采集和处理的集群，它能兼容各种生产环境，分布式处理各自特有的数据格式，实时的将其转化成统一的标准数据格式。为平台的监测、统计、分析和评估提供数据基础。 3.1. 基于Docker集群的系统架构 考虑到上面分析的情况，Docker集群将是一个非常适合的选择 [ 4 ] 。Docker作为一种新兴的虚拟化方式，跟传统的虚拟化方式相比具有众多的优势。首先，Docker容器的启动可以在秒级实现，这相比传统的虚拟机方式要快得多。其次，Docker对系统资源的利用率很高，一台主机上可以同时运行数千个Docker容器。Docker彻底释放了虚拟化的威力，极大的降低了云计算资源供应成本。 针对不同的硬件设施和软件产生的数据，都应该有相应的驱动软件来处理，这些驱动软件运行在不同的操作系统之上，这就要求节点的Docker容器中包含对应的数据处理程序，将数据转化成标准数据格式存储于数据容器中。系统总的架构如图1所示。 从上图可以看出系统分为四层。最下层为数据源，可以是视屏监控、光纤链路运行状况、通信网络运行状况、机房或产业园的环境检测数据、监控软件的检测数据等，它们共同组成了数据源。数据源上一层是数据源收集的运行环境，称为采集环境。它们可能是不同的系统运行环境或运行软件，例如视频监控软件可以连接在不同的操作系统上收集视频数据、监控软件可以运行在服务器或企业内部主机。为了方便对采集环境采集的数据进行处理和集成，我们在采集环境的宿主主机上创建虚拟化的Docker容器层，Docker容器层实现对原始采集数据的标准化处理、分布式存储、远程传输等。位于最上层的是提供服务器功能的Docker集群的Master节点，实现不同节点数据同步、数据实时传输、数据分析展示、预警提示等功能。 3.2. Swarm集群设计 Swarm是一套工具，用以管理Docker集群，使得Docker集群暴露给用户时相当于一个虚拟的整体 [ 5 ] 。Swarm使用标准的Docker API接口作为其前端访问入口。各种形式的Docker Client (dockerclient in go， docker_py， docker等)均可以直接与Swarm通信。Swarm的设计和其他Docker项目一样，遵循“batteries included but removable”原则。 通信网络监管平台需要数据实时更新和分析处理，我们将数据的处理工作分别分发到不同的Docker节点处理，既能保证数据的统一标准化处理又能极大的减轻主服务器的负载，每个节点的处理工作因底层的数据采集环境的不同而不同，这也极大的降低了服务器端的复杂度。Swarm集群架构如图2所示。 图中Swarm的Hander节点负责监控整个集群网络和通信维护。Swarm与每个Docker主机交互并确定他们的标记、健康状况以及资源使用量，并维护后端和它们元数据的列表。Swarm守护进程本身相当于是一个调度器和一个路由器。它实际上并没有运行容器，也就是说，如果Swarm服务停止了，它在终端Docker主机上已分配好的容器仍然是开启的。Swarm支持负载均衡，能够有效的将service给scale up，借助Raft Consensus算法，将系统的robustness做得非常好，最大限度能够容忍(n − 1)/2个故障节点，n为集群中节点的个数。 图中Cluster节点因数据采集环境的不同可能运行在不同的区域和系统环境，因此Cluster节点中Docker数据处理container所运行的处理程序不同，我们通过不同的数据处理容器将采集数据处理成平台 图1. 系统总框架 统一的数据格式。下节介绍数据的统一化处理。 3.3. Docker节点设计 采集环境采集到的数据主要分为两种：多媒体数据和日志数据。多媒体数据包括监控产生的视频数据、音频数据、图片数据等，多为二进制数据；日志数据包括节点主机运行状态数据、通信链路运行状态数据、机房或生产区域环境检测数据、监控软件产生的日志文件等，它们多为文本文件。 对于多媒体数据，因采集设备的不同，很可能产生不同格式的二进制文件(视频文如dav，mp4，avi，rec等)，我们有时需要实时的将其转化为平台统一的格式，以备后期平台展示和维护。日志文件的数据记录字段和样式多样，同样需要将它们转化为标准的数据格式，通常使用json和xml存储传输。 数据处理Docker容器的结构图如图3所示。每个Docker Node中包含的数据处理容器和数据存储容器因采集数据的不同而不同。 经过处理的多媒体数据和日志文件数据，可以存储在各自节点的存储容器中，也能同步更新到主节点的存储容器中。对于多媒体数据而言，由于其产生数据的速度较快，且大多数情况不需要实时的传输，因此使用定期更新同步的方式。但我们也会有想实时查看的需求，因此单独提供大量数据实时传输的接口。对于日志数据而言，由于其数据比较小，且大多有实时查看和检测的需求，因此提供实时的数据同步接口。 图2. 集群框架 图3. Docker Node设计 3.4. 节点数据安全传输 由检测数据产生的实际环境决定了Docker Node将分散不同的物理区域，它们之间通过网络进行通信和数据同步，为了保证企业数据的安全稳定，采用TLS协议对数据进行加密传输。通信过程如图4所示。 Certificate Authority证书分三种：外部第三方CA；组织内部CA；自签名证书。外部CA是一个受信的第三方公司，它提供证书的创建，颁发，吊销和管理。许多组织选择去实现自己的CA和PKI。常见的例子是使用OpenSSL和Microsoft Active Directory。在这种情况下，公司拥有CA需要承担CA的相 关工作。对于一个大的组织来说，它可以比使用第三方CA减少花费。因此，平台使用OpenSSL自创建的CA证书，可定期由维护人员更新集群证书。 3.5. 节点数据同步 通信网络运行监管平台所形成的集群是一个中心化的集群，集群中的Master节点基本不会改变或很少改变(有固定的服务器和备用服务器)，Docker Node节点一般不会承担服务器功能，对外提供数据展示、数据分析、监督警报等功能，Docker Node节点仅实现对不同数据的处理和分布式存贮功能，所以通信网络运行检测管理平台实际上是一个分布式的数据库集群。 因此可以将平台抽象化为数据库集群，如图5所示。 从图中可以看出集群节点数据同步其实就是数据从节点到数据主节点的过程，其中主节点可以存储数据也可以不存储数据，直接由从节点提供上层应用需要的基础数据。对于一些实时数据可以直接由从节点为服务器应用提供数据服务，对于数据分析服务可以由主节点定期收集从节点数据，然后为服务器应用提供数据支持。 3.6. 数据分析 一个检测管理平台不应该只提供数据统计和警报功能，我们通过历史数据的分析得到的预测模型也能达到未雨绸缪的功能。例如可以实现预测通信链路负载情况和出现损坏的可能性、预测机房中服务运转状况、主机硬盘是否会出现损坏等。 数据分析对输入数据的格式有严格的要求，因此我们需要对原始数据进行处理，使其适应相应的分析算法。数据处理和分析分析过程如图6所示。 平台采取的通用数据分析过程如图7所示，前期数据处理的数据对后面数据分析有很大的影响，因此数据分析部分的重点应该是前期数据的处理工作，数据分析的算法只起到辅助决策的作用。