简单概括一下当前接手的网络诊断工具的组件架构。
应用背景
当前客户场景,客户的应用部署在海量的私有云服务器(虚拟机)上,虚拟机之间存在跨域转发,流量外出等多种网络通信场景,服务之间的通信报文经过多个节点或者交换机,如果出现网络通信问题,运维人员难以快速定界,亟需自动化工具改善,该网络诊断工具由此诞生。
网络诊断工具主要提供两个功能:可视化的拨测和抓包。
拨测任务提供主动探测链路状况的能力,创建任务阶段,组件根据前端输入的源IP和目的IP查询流量的途径节点,返回整条流量路径。任务执行阶段,流量途径节点上已经部署好的agent服务启动抓包,流量起始节点的agent服务在起始节点基于任务的源IP和目的IP构造染色报文,染色报文在经过各个途径节点时,被agent服务过滤抓取,发送给分析器,由分析器来解析流量是否存在丢失和时延,返回给前端。
抓包任务提供一键抓包能力,运维人员无需挨个登录节点抓包定界,只需要在前台输入源IP和目的IP,由网络诊断工具部署在各个流量节点上的agent服务进行抓包。抓包结束后,运维人员在前台下载抓包文件,进行分析定界。
组件分布
组件主要包括前端、和前端交互的API服务,负责处理请求、下发任务的Controller服务、数据库服务、解析器服务以及部署在各个流量节点的agent服务组成。
前端使用JS,API服务使用JAVA,Controller,Redis,Analyzer,agent服务使用golang,底层抓包组件使用gopacket+ovs。
除了agent服务需要部署在各个流量节点上以外,其它服务一起部署在一台虚拟机上,基于节省资源的角度,没有开启主备模式。