本文主要做技术分享,如有侵权请通知作者删除

项目背景

该项目是d市的政府项目,需要从n(n>10000)台公交车中收集车上数据,包括驱动、电池、发动机、报警等共计100余种车辆信息,需要基于国标32960协议完成数据的接收与应答,并基于海量的车上数据做大数据分析,报表展示,更需要车辆报警信息作应急处理,对实时性有很高的要求,基于此需要在车上安装车载终端(一种可以嵌入到车上的硬件设备,支持can协议读取数据,材料需要满足防火防水等要求),该车载终端我们暂且叫dbox(非真实名称)。

项目技术选型

Netty,Kafka,Redis,SpringCloud,SpringBoot,MySQL,FastDFS,Docker,K8s,Jekin,Nacos,Hadoop,HBase,Spark等等一些系列技术(本文重点在Netty)

系统整体架构

       以上是整体系统架构图(图画的有点糙,博主是个粗人),整体的数据流向为:

  1. 车载终端通过平台登入与车辆登入(后面会详细解释该过程,读者暂时当做“黑盒”来理解)上报数据
  2. 车载终端上报数据由netty服务端接收并根据GB32960协议解码成POJO对象,并把解码对象放入kafka中
  3. 大数据平台通过kafka采集数据,做数据分析,统计,日志等处理(不是本文的重点)
  4. 数据检查模块需要检查解码数据是否有异常(协议中规定为异常,报警),把异常数据分析的结果再次放入到kafka,并把解码数据原封不动的放入到Redis中,供admin模块调用(4过程与3过程异步同时进行,互不影响)
  5. admin模块从kafka中获取到异常数据的分析结果,从Redis,Mysql数据库中获取数据,并做基本的添删该查等业务处理

协议简介

GB32960协议是根据有关电动汽车远程服务而设计的协议,通过该协议可以从车上获取指定车辆的数据,他的数据格式是以16进制0x230x23开头的协议(注:该部分读者不感兴趣可以直接跳过,该协议理解需要花一定时间,限于篇幅,只简单介绍数据格式,不影响后面的代码阅读),具体数据格式如下图:

       一些重要的数据格式解读:

  • 唯一识别码vin:车辆的vin识别码,由17个Byte字节组成,车辆的唯一标识
  • 数据单元长度:描述数据单元的长度,后续涉及的半包读(粘包粘包)解码方案与该项有关
  • 数据单元:这一包数据,包含各种数据来源,驱动电机,发动机,电池等种类数据

    技术难点

在项目中需要解决的技术难点有很多,也涉及到一些技术解决方案,以下是该项目面临的部分难点

  • 如何解决车载终端接入增多问题,如何解决海量的设备接入与实时性的要求
  • 如何基于GB32960协议完成数据的粘包和粘包操作(半包读写问题)
  • 如何处理大数据包的拆分情况,数据的分包与合包如何处理
  • 如何更加高效的解码数据包,与应答车载终端
  • 后端服务如何高可用高性能
  • 数据检查过程中如何快速筛选异常数据,并解决高并发环境下的数据共享问题
  • 车载终端如何升级车载程序与获取终端配置

参考资料

  • 《Netty权威指南》第二版 李林锋著
  • Stevens W R, Fenner B, Rudoff A M. UNIX network programming[M]. Addison-Wesley Professional, 2004.
  • http://ifeve.com//谈谈netty的线程模型
  • 计算机网络, 谢希仁
  • JamesF.Kurose, KeithW.Ross, 库罗斯, 等. 计算机网络: 自顶向下方法 [M]. 机械工业出版社, 2014.
  • W.RichardStevens. TCP/IP 详解. 卷 1, 协议 [M]. 机械工业出版社, 2006.

网络|基于Netty构建的高性能车辆网项目实现(一)相关推荐

  1. 蚂蚁课堂-第四期-基于springcloud构建微服务电商项目_阿里巴巴29个屌炸天的开源项目,你用过几个?附编程资料!!!...

    1. 分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案.此项目包含开发分布式应用服务 ...

  2. 利用vue-cli(脚手架)一步一步构建一个仿当当网项目

    项目图 开发环境的搭建 这里我就不多叙述了,直接看我的这个文章有详细步骤 vue项目构建步骤 开发环境统一化 用一个插件 ESLint 我用的是vscode,所以就直接在插件里面下载了. 项目中已经自 ...

  3. 基于 Netty 如何实现高性能的 HTTP Client 的连接池

    使用netty作为http的客户端,pool又该如何进行设计.本文将会进行详细的描述. 1. 复用类型的选型 1.1 channel 复用 多个请求可以共用一个channel 模型如下: 模型 特点: ...

  4. 基于owncloud构建私有云储存网盘

    注意事项:需要ping通外网 需要LAMP架构 yum -y install httpd php php-mysql mariadb-server mariadb sqlite php-dom php ...

  5. 基于MINA构建简单高性能的NIO应用-优化指南

    优化指南 MINA默认配置的性能并不是很高的,部分原因是MINA目前还保留初期版本的架构,另外一个原因是因为JVM的发展. 首先我们关闭默认的ThreadModel设置 IoAcceptor acce ...

  6. 谈谈如何使用Netty开发实现高性能的RPC服务器

    RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道 ...

  7. AsyncHttpClient源码分析-基于Netty的连接池实现

    原文地址:asynchttpclient源码分析-基于Netty的连接池实现 最近项目重构,有了个机会更多接触一个有别于HttpAsyncClient的异步网络框架AsyncHttpClient,是个 ...

  8. Netty学习笔记(五) 使用Netty构建静态网页服务器

    昨天在继续完善基于Netty构建的聊天室系统的过程中,发现了一个有意思的知识点,特此拿来做一个简单的静态网页服务器,好好的玩一玩Netty. 但是不管怎么说利用netty实现各种功能的流程都是类似的 ...

  9. 基于Netty的联机版坦克大战

    基于Netty的联机版坦克大战 项目介绍 项目github地址:基于Netty的联机版坦克大战 该项目实现了联机版坦克大战,项目包括客户端与服务端 项目使用技术: 使用Netty实现客户端和服务端之间 ...

最新文章

  1. MXNET源码中TShape值的获取和打印
  2. 波士顿动力机器狗量产版首次亮相:先造100台,能当警犬能工地巡逻
  3. SQL实现分组查询取前几条记录
  4. 默认析构函数与空析构函数并不完全等价
  5. 计算机游戏的作文,玩电脑游戏作文
  6. ArcGIS实验教程——实验十七:缓冲区分析(Buffer Analysis)
  7. python任务调度平台 界面_分布式任务调度平台XXL-JOB搭建教程
  8. IOS 学习笔记 2015-04-15 手势密码(原)
  9. [转]iOS SDK:iOS调试技巧
  10. java随机加法题_Java简单随机加法算式
  11. rsa加密算法_cryptography---RSA算法
  12. 服务器如何修改内存大小,如何限制docker容器的内存大小
  13. linux安装yum
  14. Python实现批量Word转PDF
  15. Linux文件系统和磁盘分区
  16. Android报unable to instantiate application怎么解决
  17. (转载)SoftIce的安装、配置以及一些基本操作
  18. 3G、4G移动数据网络业务流程
  19. 谷歌插件数据爬取:基本信息采集
  20. 几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。本次上机要求编写一个简化的创建游戏角色的程序。

热门文章

  1. 国内外大型系统架构设计准则和设计案例
  2. 自带谷歌“血缘”,越超Oracle,“蟑螂”成为分布式数据库新标杆?
  3. 自由自在亮法宝 远离流感提升免疫力
  4. Pyecharts 风景名胜区数据可视化分析
  5. shell脚本编写思路和实例讲解
  6. Ps 初学者教程「70」如何轻松灵活地为作品上色?
  7. C/C++ 纳尼?你还不知道控制台窗口可以修改名字?
  8. C练习记录8——数字字符转换成相对应的数值
  9. 四川多多开店:拼多多购买水果退货有什么条件
  10. 今天lol服务器维护什么时候结束,英雄联盟维护到几点今天 lol维护公告最新