基于Docker Swarm的台站分布式系统设计的技术可行性分析

2020-07-18 02:13:04陆武生韦于倩李敏盛
视听 2020年7期
关键词:副本服务端台站

□ 陆武生 韦于倩 李敏盛

一、引言

Docker是一个虚拟化开源应用容器引擎,拥有秒级的启动速度,CPU和内存的资源占用少,空间占用小等优势,开发者可以把自己的程序制作成一个Docker镜像,发布到Linux和Windows机器上,并可轻松实现持续交付、部署、迁移、维护和扩展。

Docker Swarm是Docker的集群管理工具,它是将若干台已运行Docker容器引擎的物理机器或虚拟主机组成集群,抽象成一个整体。集群的活动由swarm管理器控制,加入集群的机器、主机称为一个节点(Node)。一般来说,一个集群会有多个工作节点(Worker Node)和至少一个管理节点(Manager Node),管理节点负责集群的配置,服务管理,维护集群状态,向工作节点分配任务,工作节点的任务就是运行相应的服务执行管理节点分配的任务。开发者用服务形式多副本运行自己的程序镜像,程序副本会均衡部署在各个工作节点中。管理节点默认也是工作节点,只是比工作节点多了管理功能。图1为Docker Swarm的集群架构。

图1 Docker Swarm的集群架构

目前,广西全区无线发射台站中,三级以上台站的站内自动化和远程监控系统的应用程序都部署在一台工控计算机上,当这台计算机发生故障时,所承载的应用程序就无法正常工作,从而导致台站自动化和远程监控功能失效。对此,本文提出一种设计方案,利用Docker Swarm将多台支持 Docker的Linux、Windows的计算机或嵌入式设备组成云集群,提高硬件资源的利用率、负载均衡和可拓展性。自动化和远程监控程序以多副本的形式均衡部署在Docker Swarm的工作节点中,实现应用程序分布式化。当某个节点出现故障时,Swarm管理器会在其他节点上新运行故障节点所承载的任务,确保了程序的正常运行。自动化和远程监控程序的分布式,提高了站内自动化和远程运维的稳定型、可靠性,确保了广播电视的正常播出。

二、技术可行性分析

(一)Docker Swarm的软硬件兼容性分析

Docker Swarm是Docker容器引擎自带的一个集群工具,只要安装Docker就会存在Docker Swarm。Docker容器引擎支持x86_64/amd64、ARM、ARM64等架构的主流linux,MacOS,Windows 7以上的操作系统,故 Docker和Docker Swarm能兼容主流的通用计算机、服务器和嵌入式计算机。Docker支持市面上主流的编程语言,包括c/c++,C#,go,hy,java,node,perl,php,python,rails和ruby等编程语言。目前,我们台站端的控制计算机大部分还是XP系统,小部分是Windows 7系统。未来,安装xp系统的电脑,可以更换成linux操作系统,即可以支持Docker。综上所述,Docker Swarm在硬件和软件上的兼容性良好,能满足站内自动化和远程监控系统分布式化部署的软硬件需求。

(二)Docker Swarm的启动和响应性能分析

Docker公司曾在2016年聘请了独立技术顾问杰夫·尼科洛夫来协助搭建框架,测试Docker Swarm和另外一个集群工具Google Kubernetes在1000个节点集群上运行30000个容器(每个节点30个容器)的性能,主要从容器启动时间和大负载的条件下系统列举所有运行的容器的响应时间这两项指标进行测试。测试过程中,当集群资源占用率为10%时,即100个节点和3000个容器时,Docker Swarm容器的启动时间是0.36秒,列举所有运行容器的响应时间是0.32秒,50%占用率时启动时间0.41秒,响应时间1.18秒,100%占用率时启动时间0.59秒,响应时间18.25秒。从测试数据中可以看出,Docker拥有秒级的启动速度,在未满负荷运行时,系统响应时间也是在秒级范围。图2、图3分别为Docker Swarm和Google Kubernetes的启动时间、系统响应时间对比图。

图2 Docker Swarm和Google Kubernetes的启动时间对比

图3 Docker Swarm和Google Kubernetes系统响应时间对比

(三)Docker Swarm的负载均衡测试

Docker Swarm有内部和外部两种负载均衡,集群内服务之间的相互访问需要做负载均衡,称为内部负载均衡;从集群外部访问服务的公开端口,也需要做负载均衡,称为外部负载均衡,这里主要测试Swarm集群的外部负载均衡。

1.测试方法

(1)在集群中创建一个服务,3个副本运行,对外开放并监听12345/udp端口,这个服务的功能就是再启动时创建一个随机ID,当接收到客户端发送来的数据时,就实时给客户端原路返回自己的ID和接收到的数据。

(2)然后在另外的计算机上运行多个客户端,向服务端的12345端口发送数据,当接收到服务端返回的服务ID和数据时,就打印出来,通过服务ID来判断Swarm是否通过负载均衡让服务的不同副本来处理客户端请求,从而达到测试目的。

2.测试平台

本文使用2个Raspberry 3B、1个Raspberry 3B+和1一个Raspberry 4B等4个不同型号的嵌入式硬件,统一搭载linux内核的Raspbian操作系统,组成了一个Docker Swarm集群,用作负载均衡性能的测试平台。参照官方的建议创建奇数的管理节点,故配置了3个管理节点,1个工作节点,一共4个节点。服务端软件和客户端软件使用DotNet Core框架,C#语言编写。

3.测试步骤

(1)先将服务端程序制作发布成Docker镜像,在Docker Swarm中以服务形式创建运行3个副本,对外开放12345/udp端口,这时客户端都可以通过集群的四个节点IP+12345端口对该服务进行访问。

(2)在不同的计算机上打开多个客户端软件,客户端只通过某一个节点IP+12345端口,主动不停地给服务端发送数据,再实时将服务端返回的ID和数据打印出来。通过观察数据发现,即使通过同一节点IP访问IP,不同的客户端的打印出来的服务ID也不同,说明Docker Swarm给外部访问做了负载均衡。图4为客户端打印服务端返回的ID和数据图。

图4 客户端打印服务端返回的ID和数据图

(3)同样打开多个客户端,随机选择4个节点中的一个IP访问服务端,当正常发送接收数据后,将其中正在运行服务的Swarm节点设备断电,这时有些客户端虽然还在不停的往服务端发送数据,但已无法接收到断电服务端的数据,当超过10秒钟都无数据时,客户端会再次随机从剩下的3个节点中的一个继续跟服务对接,这时客户端会收到不同ID服务端返回的数据。通过在Swarm中查询发现,节点断电后,服务的3个副本只剩下2个,但是Swarm管理器也立即在另外一个节点将1个副本运行起来,又恢复3个副本正常运行。通过测试表明了当某些节点发生故障时,剩余的节点能承担客户端的请求,Swarm集群也会在另外的节点将服务副本运行起来,恢复正常工作。

三、结语

经过上述对Docker Swarm的软硬件兼容性、启动和系统响应时间、负载均衡等三个技术方面可行性分析或测试,表明在全区无线发射台站中使用docker Swarm将多个跨平台的服务器、通用计算机、嵌入式计算机组成云化集群,自动化和远程监控程序实现分布式化部署是可行的。且台站当前的计算机电脑,可以直接或者更换操作系统方式,加入进集群中,不会造成资产浪费。站内自动化和远程监控程序的计算量并不高,无需高配置的计算机和嵌入式设备,分布式系统的实施能提高整个台站系统的资源利用率、稳定性、可靠性,也更好地保障了台站播出安全。

猜你喜欢
副本服务端台站
中国科学院野外台站档案工作回顾
气象基层台站建设
西藏科技(2021年12期)2022-01-17 08:46:38
面向流媒体基于蚁群的副本选择算法①
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
消费导刊(2018年8期)2018-05-25 13:19:48
在Windows Server 2008上创建应用
副本放置中的更新策略及算法*
基层台站综合观测业务管理之我见
西藏科技(2015年6期)2015-09-26 12:12:13
树形网络中的副本更新策略及算法*
MDOS平台台站级使用方法及技巧