分布式计算实验4 随机信号分析系统

这篇具有很好参考价值的文章主要介绍了分布式计算实验4 随机信号分析系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验要求

利用MOM消息队列技术实现一个分布式随机信号分析系统,具体要求:
1.随机信号产生器微服务每隔100毫秒左右就产生一个正态分布的随机数字,并作为一个消息发布。
2.一个随机信号统计分析微服务,对信号进行如下分析:

  (1) 计算过去N个随机信号的均值和方差(N为常量,可设置);

  (2) 计算所有历史数据中的最大值和最小值;

  (3) 定时地将分析结果打包成一个新消息并通过MOM发布出去。

3.一个实时数据显示微服务:

  (1) 实时绘制过去一段时间内随机信号的折线图;

  (2) 实时显示随机信号统计分析结果。

二、设计说明

1. 面向消息的中间件MOM

  MOM(Message Oriented Middleware)是面向消息的中间件,使用消息提供者来协调消息传送操作。这种松耦合的通信机制有助于降低客户端和远程服务之间的依赖性。

  生产者负责向分布式消息队列中发送消息,消费者从队列中取出消息。生产者不必关心消费者是谁,反之亦然,这降低了分布式节点之间的耦合度,提升了系统的通信效率。当消费者未上线或者消费者速度慢于生产者时,生产者可以将消息先缓存于消息队列中,待消费者上线后,消费者可以继续从队首取出消息,这种模式提高了系统的容错能力。

2. ActiveMQ

  ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件,完全兼容JMS(Java Message Service),能够为多种编程语言提供客户端API。本实验主要基于ActiveMQ和JMS实现了题目相关要求。

3. 基于ActiveMQ的随机信号分析系统
(1) 设计思想

   (a) 随机信号发生微服务作为生产者,每隔100ms生成一个高斯分布随机值并且作为消息发布出去,主题名为RandGaussian

   (b) 信号分析微服务作为消费者,订阅主题名为RandGaussian的消息,每次从消息队列中取出一个随机信号加入自己维护的数组中,然后对数组中的元素进行处理,得到信号的统计分析结果(均值、方差、最小值、最大值等等)。与此同时,该分析器还作为生产者,每隔2s将先前得到的信号分析结果以空格隔开,打包成字符串形式的消息发布出去,主题名为AnalysisRes

   © 分析结果可视化微服务同样作为消费者。由于题目要求将过去一段时间的信号动态显示出来,也要求把信号分析结果显示出来,因此我让信号分析微服务在发送消息时,把当前的信号值也封装在消息中,这样可视化微服务只需要订阅主题为AnalysisRes的消息即可获取全部所需数据。在获取到所需数据后,我利用tablesaw可视化工具提供的折线图绘制功能将数据可视化到了网页页面中,一幅折线图中集成了当前信号值、过去N个数的均值以及历史最大最小值,且用不同颜色加以区分,可以达到一个比较好的视觉效果。

(2) 具体实现步骤

 为了具体实现题目要求,我编写了3个.java文件,分别为Publisher.javaAnalyzer.javaVisualizer.java,这3个模块分别负责实现随机信号产生器微服务、随机信号统计分析微服务和实时数据显示微服务。

  Publisher.java文件中只有一个Publisher类。首先定义实例构造函数Pulisher(String topicName),通过该函数我们可以实例化一个新的、绑定名为topicName(本实验中即为RandGaussian)的主题的publisher对象并且启动与MOM的连接。其次,我定义了一个sendNum(double mu ,double sigma)函数,功能是根据用户输入的高斯分布的均值和方差产生一个符合该分布的随机数值,并利用producer.send()将该数值的字符形式当成消息发布出去。最后,还定义了一个sendAnalysis(int num, int N, double value, double mean, double var, double min, double max)函数,该函数负责将信号分析结果封装成以空格分隔的字符串消息并发布出去。在Publisher类的主方法中,首先需要用户输入高斯分布的均值和方差,然后程序循环生成随机数并发布,间隔100毫秒后发布下一条消息。

  Analyzer.java文件中有两个类,第一个是public class Analyzer类,主要实现对消费者对象的初始化(绑定主题RandGaussian)、获取用户输入的N值以及设置消息监听器,最后启动与MOM的连接。另一个类是MyListener1,即消息监听类。在该类中我重写了onMessage函数,使其能够实现题目的要求:开辟一个动态数组,每隔一段时间从消息队列中取得一个随机数并加入该数组,然后利用该数组即可求出过去N个信号的均值和方差,也可以求出全局的最小值和最大值。在得到一次分析的所有结果后,只需实例化一个publisher2对象,再调用Publisher类提供的sendAnalysis方法即可将分析结果打包成字符串发布出去(主题设为AnalysisRes)。

  Visualizer.java文件中有两个类,public class Visualizer类负责初始化消费者对象(订阅主题为AnalysisRes的消息)、设置监听器以及开启连接。另一个类是MyListener2,即消息监听类。在onMessage函数中,首先需要对得到的消息进行解包,这里我利用的是String.split(" ")函数对字符串进行分解,再将结果传入analysis数组中。解包之后,便可以将各类统计数据分别add到相应的动态数组中保存,便于后续的可视化操作。最后,设置一个Thread.sleep(2000),即实现每隔2s从消息队列中取一个随机信号进行分析。

   在可视化模块,我采用的是tech.tablesaw工具包中的Plot.show(LinePlot)函数。由于我想在同一幅图中将若干统计结果一起绘制出来,则需要将各个统计结果的横轴数值数组、纵轴数值数组和类型名数组分别合并到3个大数组中,这导致有一部分的代码显得比较冗长。由于在Visualizer.java中设置了Thread.sleep(2000),因此在可视化模块中只需要不断地取出统计分析结果,即可实现每隔2s显示可视化结果。如果sleep时间设置得太短,则会导致瞬间产生很多统计图表,人眼看不过来,所以为了简洁,我将sleep时间设为了2s,可以起到接近实时的效果。

三、实验结果

在Visualizer主类的命令行中,是实时显示的统计分析结果(过去N个信号的均值、方差和全局最小值最大值等):
分布式计算实验4 随机信号分析系统
浏览器页面在不断实时显示随机信号统计分析的可视化折线图,各种统计量的变化一目了然:
分布式计算实验4 随机信号分析系统
补充说明:可视化部分我采用的工具tablesaw在渲染HTML页面时调用的是https://cdn.plot.ly/plotly-latest.min.js提供的JavaScript代码,而该CDN节点有时存在不稳定的情况,可能导致页面渲染失败,但仍能从网页源代码处看到图表背后的数据,例如:
分布式计算实验4 随机信号分析系统文章来源地址https://www.toymoban.com/news/detail-424880.html

源码:分布式计算实验4 随机信号分析系统

到了这里,关于分布式计算实验4 随机信号分析系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云计算实验2 Spark分布式内存计算框架配置及编程案例

    掌握分布式多节点计算平台Spark配置,Spark编程环境IDEA配置,示例程序启动与运行 Linux的虚拟机环境、线上操作视频和实验指导手册 完成Spark开发环境安装、熟悉基本功能和编程方法。 请按照线上操作视频和实验指导手册 ,完成以下实验内容: 实验2-1 Spark安装部署:Standal

    2023年04月13日
    浏览(38)
  • 大数据 | 实验零:安装 Hadoop 伪分布式系统

    👀 前言 :本篇是个人配置环境的总结,基于指导书,补充了许多在配置过程中出现的问题的解决细节。希望能帮到你😄。 Vmware workstation pro 16 Ubuntu 20.04 JDK 1.8 Hadoop 3.2.2 下边资源是本篇博客会用到的相关文件 (建议直接下载,相关代码直接对应的下述文件, 下载完先不要动

    2023年04月17日
    浏览(34)
  • 头歌Educoder云计算与大数据——实验五 Java API分布式存储

    原始电商数据都是存储在关系型数据库或 NoSQL 数据库上的,是面向OLTP(联机事务处理过程)的;数据都是面向业务的,而不是面向分析。因此数据比较复杂,表很多关联的数据是分散的,不利于统计分析;因此需要把数据从多个表里导出来、联合起来,找出分析所需要的数据项

    2023年04月09日
    浏览(41)
  • 分布式任务调度系统分析

    首先,我们来思考一些几个业务场景: XX 信用卡中心,每月 28 日凌晨 1:00 到 3:00 需要完成全网用户当月的费用清单的生成 XX 电商平台,需要每天上午 9:00 开始向会员推送送优惠券使用提醒 XX 公司,需要定时执行 Python 脚本,清理掉某文件服务系统中无效的 tmp 文件 最开始,

    2023年04月22日
    浏览(53)
  • Ceph分布式存储系统优化分析

            Ceph支持多种存储访问接口,现有的多种性能测试工具都可用于Ceph的性能测试,如测试块接口性能的fio,iometer等;测试CephFS接口的filebench,fio等;测试对象接口的cosbench等。Ceph有专用的基准测试集CBT,其包含radosbench,librbdfio,kvmrbdfio和rbdfio。radosbench基准测试使用

    2024年02月12日
    浏览(27)
  • 【分布式技术】ELK大型日志收集分析系统

    目录 步骤一:完成JAVA环境部署 步骤二:部署ES节点(三台主机) 步骤三:内核参数修改 步骤四:web端查看验证 步骤五:yum安装nginx  步骤六:完成logstash部署 步骤七:部署kibana  步骤八:测试ELK

    2024年01月20日
    浏览(36)
  • 分布式ELK 企业级日志分析系统

    ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch :是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。Elasticsearch 是用

    2024年02月16日
    浏览(28)
  • Java分布式系统和云计算教程

    Java分布式系统和云计算教程 大规模学习分布式 Java 应用程序、并行编程、分布式计算和云软件架构 课程英文名:Distributed Systems Cloud Computing with Java 此视频教程共4.0小时,中英双语字幕,画质清晰无水印,源码附件全 课程编号:324 百度网盘地址:https://pan.baidu.com/s/1qGJzKMXt

    2024年02月01日
    浏览(33)
  • 分布式系统之P2P,云计算,雾计算

    一.P2P cs构架的问题:负载(If too many users access the server/s at the same time, such architecture can suffer from network overload problem.(slow down, long Queues, carsh)同时太多的用户访问服务器就会影响服务器性能) 定义:计算任务由多个节点协同完成,而不是依赖于一个中心节点或服务器。 每个节

    2024年02月02日
    浏览(32)
  • 【Distributed】分布式ELK日志文件分析系统(一)

      日志主要包括系统日志、应用程序日志和安全日志。系统远维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。   往往单台机器的日志我们使用

    2024年02月15日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包