信号强度诊断(系统架构)
设计策略
本项目前后端的设计结构,了解前端使用了哪些技术,后端使用了哪些技术
系统的设计方法是采用面向对象的设计。本系统前端页面交互主要采用B/S的结构,采用MVC及流式数据的设计思路进行规划设计。
前端数展现使用Echarts技术。与地图相关的报表使用百度地图提供的API。
后端实时数据,实时接入mysql。为了不影响线上系统的正常使用,同时能够将数据发送到大数据平台,本项目使用Canal来解析实时数据,Flume收集数据并数据发送到实时计算业务流程和离线计算两个流程中。实时数据处理流程使用Canal+Flume+Kafka+SparkStreaming等技术。离线计算使用HDFS+Hive+Azkaban等技术。
设计过程中对系统的可靠性、可扩展性以及性能进行了充分考虑和研究分析,争取通过良好的设计,在实现系统功能的前提下,最大化的提高系统性能和扩展性,减少将来的维护代价和其他成本。
技术选型
每个层次、每个阶段使用到了哪些软件,以及软件的版本
技术选型 |
组件名称 |
版本号 |
描述 |
表现层框架 |
SpringMVC (Pivotal) |
4.0.6 |
表现层MVC框架,易于上手,高效稳定,是使用 Servlet 和JSP技术的一种MVC实现,可帮助开发者控制WEB项目中的变化并提高专业化水平,减少开发者在运用MVC设计模式开发WEB应用的时间。 |
逻辑控制框架 |
Spring (Pivotal) |
4.0.6 |
提供事务管理、逻辑控制等功能,框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。 |
持久层框架 |
Hibernate (Red Hat) |
4.2.12 |
持久层框架,对JDBC进行了非常轻量级的对象封装,使得JAVA程序员可以随心所欲的使用对象编程思维来操纵数据库。 |
分布式系统架构 |
Hadoop |
2.7.5 |
Hadoop是以一种可靠、高效、可伸缩的方式对大量数据进行分布式处理的软件框架。它适用于任何规模的非结构化数据,并具有极强的容错能力。 |
分布式计算平台 |
Spark |
2.1.0 |
Spark是一种粗粒度数据并行(data parallel)的计算范式,同时Spark与Hadoop可以无缝结合,并且在保证容错的前提下,用内存来承载工作集,极大地提升了运算速度。 |
流式处理平台 |
Kafka |
1.0.0 |
Kafka是一个完整的系统,它提供了一个高吞吐量、高可靠性、持久性高、以及多样化的消费处理模型,可以用来解决百万级别的数据中生产者和消费者之间数据传输的问题。 |
实时计算开发语言 |
Scala |
2.11 |
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在Java虚拟机上,并兼容现有的Java程序。 |
Mysql日志数据解析 |
Canal |
1.0.19 |
canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL。 |
数据收集组件 |
Flume |
1.6.0 |
Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。 |
数据库(业务+结果数据) |
Mysql |
5.1.73 |
MySQL是一个关系型数据库管理系统, 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 |
数据仓库 |
Hive |
1.1 |
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。 |
工作流调度 |
Azkaban |
Azkaban 是一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban 定义了一种 KV 文件格式来建立任务之间的依赖关系,并提供一个易于使用的 web 用户界面维护和跟踪你的工作流。 |
|
实时查询数据库 |
Hbase |
1.2.0 |
HBase是一个分布式的、面向列的开源数据库。是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。 |
实时查询引擎 |
Phoenix |
4.14 |
Phoenix是构建在HBase上的一个SQL层,能让程序员用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。 |
模块分解策略
离线数据入库、离线数据整理、实时数据入库、实时数据计算、报表数据创建索引
离线数据入库
离线数据,大多为历史已经存在的、用于进行宏观统计分析,对于时效性不高的业务场景所使用的数据。本项目的离线分析数据均来源于此。
离线数据入库,即将数据加载到数据仓库内。首先将数据传入服务器,在大数据集群环境就绪的前提下,将数据上传到海量数据存储的HDFS 之上。
在Hive数据库中,创建数据库,创建相应的数据表(外部表),最后将HDFS上离线数据加载到数据表中。
离线数据整理
离线分析业务场景数据的整理与计算
项目中使用到的原始数据表为6张数据表。结果数据表同样为6张数据表。从原始数据表到结果数据表,需要经过业务需求的转换,表数据的加工等操作。
业务需求转换是将数据在原始数据中抽取出来,根据业务需求对数据进行处理,例如系统与版本号合并,合并成系统+版本号。单部分数据的版本号中已经存在了系统,此时是要版本号内的数据即可,不需要拼接。 例如获取数据所属的地标(数据点所属的类别),数据中含有经纬度数据,此经纬度点属于哪一类,业务需求需要提取出这些信息。最终将这这数据映射到结果表的字段中。
表数据的加工。数据经过业务处理后,需要将数据添加到结果表中。数据查询引擎Phenix直接作用在结果表之上。由于查询引擎Phenix对数据的分割是使用逗号的(“,”)。而部分数据中存在逗号,这样会破坏数据与结果表之间的关系。例如结果表有10个字段,经过业务处理后的数据字段也是10个字段,字段之间的分隔符是逗号,但数据中部分字段内部含有逗号,这样这些数据在phenix看来就不是10个字段,而是多于10个字段,在加载数据时字段和数据的对应关系就会混乱。表数据的加工主要目的就是解决这个问题。
最终将补充好的数据加载到结果表中。
实时数据生产及采集
实时分析业务场景数据生产与采集
项目实时数据源是mysql实时新增的数据。实时业务所需的数据来源需要编写代码实时向mysql添加数据。新数据的添加会记录到相应的日志中。Canal实时解析日志中数据的所有变化,将新增的数据解析出来,保存到本地。
Flume监控读取Canal写入本地的数据,将数据写入kafka一份,用于实时业务的计算。写入HDFS一份,用于离线数据的计算。
实时数据计算
实时分析业务场景根据业务需求数据计算
实时数据写入kafka(kafka为临时的数据存储), SparkStreaming 读取kafka内的数据根据业务需求进行相应的指标计算。计算完毕后将数据写入结果数据表。
报表数据索引
对结果数据创建索引
实时的业务需求,离线的业务需求全部计算完毕后写入结果数据表(Phenix)。前端报表查询的数据来源于结果表。但由于部分需求所需的数据为明细数据(一个查询可能需要成千上万条数据)数据量较大,导致数据查询的效率很低。所以需要对结果数据创建索引,以起到加速查询的效果。
创建索引不能一个需求创建一个,这样会有大量的数据冗余,所以在创建索引之前需要对所有业务需求的SQL进行整理,尽量整理出相似的SQL。尽量创建一个索引能够解决多个需求的查询效率问题。
整理完毕后,根据整理的相似SQL 的个数,创建相应的索引。
地标 Landmark 配置
地标配置文件的配置方式和内容
项目的业务需求中需要根据数据的经纬度获取出数据所属的地标。此时需要一份经纬度点与所属地标的对应关系。此对应关系很难获取。有部分企业提供了这个对应关系,但是需要通过次数进行收费。对于企业来将此成本较大,且效益不高,不可取。
本项目采取了自维护数据的方式编写了landMark.xml,此xml内部是经纬度范围与地标的对应关。
landmark配置
系统中关于landmark配置的说明,配置文件名称为landMark.xml
配置文件格式为
<?xml version="1.0" encoding="UTF-8"?>
<!--用户请注意,经纬度提示:
<allresource> <resourceitem> <lowerLeftLon>左下角经度</lowerLeftLon> <lowerLeftLat>左下角纬度</lowerLeftLat><topRightLon>右上角经度</topRightLon><topRightLat>右上角纬度</topRightLat><category>一级地标(所属分类) </category><landMarkName>二级地标 (地标名称)</landMarkName></resourceitem>
</allresource>
-->
<allresource> <resourceitem> <lowerLeftLon>116.36827</lowerLeftLon> <lowerLeftLat>39.964199</lowerLeftLat><topRightLon>116.37657</topRightLon><topRightLat>39.971249</topRightLat><category>university</category><landMarkName>北京师范大学</landMarkName></resourceitem><resourceitem> <lowerLeftLon>116.322924</lowerLeftLon> <lowerLeftLat>40.004059</lowerLeftLat><topRightLon>116.341752</topRightLon><topRightLat>40.014891</topRightLat><category>university</category><landMarkName>清华大学</landMarkName></resourceitem><resourceitem> <lowerLeftLon>116.440283</lowerLeftLon> <lowerLeftLat>39.895452</lowerLeftLat><topRightLon>116.441396</topRightLon><topRightLat>39.895846</topRightLat><category>hotel</category><landMarkName>7天连锁酒店</landMarkName></resourceitem> <resourceitem> <lowerLeftLon>116.445097</lowerLeftLon> <lowerLeftLat>39.903917</lowerLeftLat><topRightLon>116.445259</topRightLon><topRightLat>39.904069</topRightLat><category>hotel</category><landMarkName>锦江之星酒店</landMarkName></resourceitem>
</allresource>
需要添加新地表时,在现有文件中按以上格式添加即可,新数据获取后,配置文件会自动生效。
浏览器兼容性
对IE8以上版本、火狐、谷歌浏览器兼容 (偶尔会有 Flash 动画需要更新)
信号强度诊断(系统架构)相关推荐
- 灰度发布系统架构设计
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:https://www.toutiao.com/i69 ...
- 深度学习利器: TensorFlow系统架构及高性能程序设计
2015年11月9日谷歌开源了人工智能平台TensorFlow,同时成为2015年最受关注的开源项目之一.经历了从v0.1到v0.12的12个版本迭代后,谷歌于2017年2月15日发布了TensorF ...
- 强烈推荐|我做系统架构的一些原则
本文已授权自骨灰级技术专家陈皓 原文:https://coolshell.cn/articles/21672.html 读完受益匪浅,强烈推荐给大家,都是非常宝贵的经验,希望大家也有收获! 工作 20 ...
- 腾讯云低延时直播系统架构设计与弱网优化实践
"直播带货"可能是2020年最具代表性的词汇之一,那么传统电商该如何融合直播系统,直播过程如何保障用户的最佳观看体验?本文由腾讯云资深架构师何书照在LiveVideoStack线上 ...
- 美团配送系统架构演进实践
写在前面 美团配送自成立以来,业务经历了多次跨越式的发展.业务的飞速增长,对系统的整体架构和基础设施提出了越来越高的要求,同时也不断驱动着技术团队深刻理解业务.准确定位领域模型.高效支撑系统扩展.如何 ...
- 智能驾驶功能软件平台设计规范 第一部分:系统架构
智能驾驶功能软件平台设计规范 第一部分:系统架构 2020-07-29 发布 1 规范应用范围 本规范规定了智能驾驶功能软件平台的系统架构.功能模块和算法组件划分. 本规范适用于 GB/T<汽车 ...
- 左耳朵耗子:我做系统架构的一些原则
作者:左耳朵耗子 原文地址:https://coolshell.cn/articles/21672.html 工作 20 多年了,这 20 来年看到了很多公司的很多的系统架构,也看到了很多问题,在跟这 ...
- 智慧医院新系统架构设计与建设
一.建设背景 我国医院信息系统经过近40年的发展,大部分医院已经被架构陈旧的HIS制约业务发展.一方面HIS厂商的技术人员流动,致使HIS对需求变更的响应越来越慢,成本越来越高,用户满意度越来越低:另 ...
- 安卓linux层,Android 系统架构各层介绍
android的系统架构采用了分层架构的思想,作为android开发猿还是有必要大概了解一下的,先看一下系统架构图 20190626110750560.png Linux 内核 Android 平台的 ...
- 智能制造系统架构和标准体系结构
导读: 智能制造是基于先进制造技术与新一代信息技术深度融合,贯穿于设计.生产.管理.服务等产品全生命周期,具有自感知.自决策.自执行.自适应.自学习等特征,旨在提高制造业质量.效率效益和柔性的先进生产 ...
最新文章
- python 回归去掉共线性_一文讲解机器学习算法中的共线性问题
- 087_html5表单元素
- 区块链BaaS云服务(25)边界智能 IRITA服务
- ObjectFactory对象工厂类
- 如何设置 homestead zhong redis 开机自启_CentOS安装Redis
- 阿里 蚂蚁自研 IDE 研发框架 OpenSumi 正式开源
- MySQL 左右两表比较问题
- 485.最大连续1的个数
- 实习日记——Day48
- 基于开源的BPM流程引擎VS天翎自研BPM流程引擎
- Win7 - 隐藏计算机中收藏夹和库
- 串口协议和RS-232标准,RS232电平与TTL电平的区别,以及USB/TTL转232“模块(CH340芯片为例)的工作原理
- adobe acrobat DC没有最近打开文件
- 应用调试(三)oops
- SPI MOSI和MISO 相位不同
- Task 3: Subword Models (附代码)(Stanford CS224N NLP with Deep Learning Winter 2019)
- 使用python在excel表格中增加新的sheet表
- 过新版狗php一句话,整理的最新WebSHell (php过狗一句话,过狗菜刀,2016过狗一句话,2016php免杀一句话)...
- 手机发射机的功能电路(4)---上变频器、功率放大器
- 如何评估一款AR眼镜——常见的AR功能与眼镜参数
热门文章
- 手把手的 Numpy 教程
- 数字通信中为什么需要时钟线
- JS创建对象和事件绑定
- Android中APK打包流程
- 【漏洞复现】永恒之蓝 MS17-010 远程溢出漏洞(CVE-2017-0143)
- row xxxx doesn't contain data for all columns
- android之broadcastreceiver 耳机按键,Android BroadcastReceiver 实时监听耳机拔出事件
- 绝世舞姬计算机弹音乐,张晓涵/戚琦《绝世舞姬》[FLAC/MP3-320K]
- 项目案例:网上书店数据库设计
- 随机变量的函数的分布