由于当前项目需要对接多个不同的数据源,同时涉及到多端处理,而且需要考虑海量数据处理,还有总部与分部架构部署问题,因而整体技术栈倾向于大数据和分表分库式处理数据层接入问题。
简单讲,项目分为数据中台 和业务中台两个子系统,其中数据中台主要对接不同数据源,提供数据聚合,统一的数据报表。业务中台分为基础服务和业务服务,基础服务主要是提供统一网关,统一权限,日志,定时任务等服务。
一、关键功能需求
1、实时查询统计结果(妙级返回亿级海量数据查询)
2、支持离线数据按日生成统计报告,查询的时候直接查询生成好的报告,按5分钟或者其他固定时间片生成报告。
3、支持后续的系统架构扩展,支持dubbo
框架和容器化技术。
4、支持总部和分部的数据对接。
5、支持自动化运维技术。
二、关键性能需求
1、接口s
级返回查询结果。
2、遵循CAP
原理。
3、支持TB
级别消息和海量数据存入kafka
。
三、架构图参数
主要数据采集使用到技术栈为:Hive/Hbase/Hadoop+Flink(Spark Streaming/Struct Streaming)
,其中数据层分为两块,一块是数据采集层,一块是数据服务层。数据采集层需要对接多个不同的数据源。
1、来自总部的数据源。
2、来自于plc
硬件采集的数据源。
3、来自于各个不同业务子系统接口。
数据采集层架构图参考
总部数据源对接: 总部和数据层主要通过消息队列kafka
传递数据,也可以访问总部的接口,或者总部的消息队列,或者总部调用我们的接口数据,其中采用redis
作为缓存,kafka
作为内部消息队列,Flink/Spark stream/Struct Streaming
数据解析kafka
消息队列入库到hbase
,kafka
高性能高可靠性目前是业内的一种主流技术用来解决不同系统之间的耦合问题。
plc
对接服务: 这一块主要是通过netty
服务来接收处理plc
的上传数据,然后把数据写入到消息队列,通过flink
实时解析,提供实时服务接口,并且通过分表分库插件写入关系数据库,kafka
消息队列,redis
作为缓存。
子系统对接服务: 通过统一restful
风格接口对接不同的数据源,落盘到大数据系统和关系数据库,kafka
作为消息队列,redis
作为缓存。
统一基础服务层: 基于spring cloud
技术栈,同时支持子系统未来改造服务系统。
业务层: 前段展示和业务报表等
四、关键质量需求
1、满足海量数据处理秒级返回。
2、超期数据能够妥善处理。
3、架构保持稳定性和伸缩性。
安全性:
1、防止基本SQL
注入和XSS
,CSRF
漏洞。
2、密文传输。
3、使用https
和白名单。
五、开发架构
类型 | 可选技术 |
---|---|
主机 | PC Server、IBM/HP小型机 |
操作系统 | Cendos7 |
应用服务器 | Spring Boot |
Web服务器 | Nginx |
负载均衡 | slob/Feign |
消息中间件 | kafka |
数据库 | Hbase Mysql |
版本管理 | SVN |
组件管理 | Maven |
IDE | Intelij |
MVC | Spring MVC |
页面 | FreeMarker、SiteMesh |
JS | Jquery、Jquery UI |
容器 | Spring |
持久化 | MyBatis、JdbcTemplate |
服务 | Hessian、CXF |
调度 | xxlJob |
缓存 | Redis |
日志 | SLF4J、Logback |
XML | Dom4j、Xstream |
1、可控性:在短期时间内,架构师能够精通,开发人员能够掌握。
2、可扩展:考虑非功能性需求,在特定的场景下便于扩展。
3、高可用:选择框架、定制化框架必须要保证质量。
4、高效率:框架本身处理效率高,尽可能减少重复开发工作量,易于做性能调优。
5、低成本:在满足以上原则前提下,学习成本低,有较完善的手册文档。