原文地址:http://www.jt808.com/?p=1282

在开发一个大规模的部标GPS监控平台的时候,就算我们花费再多的时间设计和规划,我们也并不能准确的预测出自己未来的车载终端接入量有多大,而且一开始就为了我们宏伟的设计蓝图,投入大规模的服务器硬件设备和网络带宽,这会带来极高的成本投入,也会在早期造成大马拉小车,空耗+复杂度过高。所以大多数的平台一定是从一两台服务器搭建运营环境, 随着车载终端量级越来越大,并发越来越高,业务模式也越来越复杂,我们需要将程序解构,从一个模块拆出多个模块,从单机运行变成多台服务器分布式部署,从单进程变成多服务模式。所以我们设计的时候,就必须要构建这种可扩展的由1变成N的架构,必须要有一个可扩展的高可用的基于部标jt808协议的服务器。

我们这里所说的10万+终端接入,首先是10万+在线的,另外并不是简单的接入,后续肯定还要保证实时数据推送、数据入库、报警分析和复杂的业务逻辑计算都能稳定的运行。在这种场景下,单台服务器或者单进程的一个808网关服务器是很难支撑到的。我们需要保证的是从前到后一系列的稳定运行指标:

1) 接入:10万+终端接入不出现排队和无法接入现象,由于一般的基于JT808协议的终端设备,都是基于TCP长连接通信,UDP的很少,10万+长连接的维持对服务器的压力可想而知非常大。一般的服务器带宽不够的时候,或者由于服务器处理速度慢,造成连接无法及时归还连接池,造成服务器接入的时候,就卡壳。我们一般采用Netty来做为JT808服务器的NIO Socket服务器框架,而Netty在开发的时候就要求在Handler中,获取的连接数据的时候,必须不能做耗时的操作。这就要求我们必须要异步处理。

2)   实时性 : 虽然终端接入了,但是后续的逻辑处理模块如果处理速度过慢,即使是异步的,也会造成数据在内存中排队等候处理的情况,这样当数据传递到web用户面前的时候,就是滞后的,不满足用户对实时性的要求。如报警弹窗,位置显示等都是对实时性有要求的功能。

3)   数据入库:并发的连接,必然会造成对数据库并发请求加大,要求及时入库的GPS数据也是海量的,一分钟将有几十万级别的GPS数据等待入库,而且根据jt808协议,一条0×0200指令的定位数据包,经过服务器解析和逻辑计算后,又衍生出报警记录,油量温度记录,里程统计记录等等,数据量也非常的大。虽然并发是提高入库效率的手段,但是并发过高,超过数据库服务器承载的能力,又会造成数据库服务器卡壳,进而造成连锁反应,web用户经常会看到页面打开过慢,数据显示不出来,其实不是web服务器的问题,是数据库的压力太大,难以及时响应。所以一个能承受10万+终端的部标808服务器,并不简单的是要求代码写的好性能高,前期数据库的设计和规划能力和实际的承载能力也必须要跟得上,这就是一条流水线,那个环节掉链子,都是多米诺效应的崩溃。

在实际的运营中,单台的阿里云服务器并不贵,带宽的运营成本要高于服务器的成本,所以我们在设计架构的时候,必须要保证部标808服务器是可以像刀片一样是可以插拔的,通过分散压力,来保证系统的稳定运行。当某一个服务器模块停用或者上线,是不需要整个平台调整或者改造开发的,web平台是无感的。

所以我们不能让Web平台直接面对808服务器,而是在808服务和Web平台之间,增加一个Redis缓存服务器,808服务器的实时GPS数据直接push到Redis缓存中,web平台获取实时数据的时候,不是通过RPC调用808服务器的实时服务,而是通过Redis的API,直接从Redis缓存中获取。利用Redis的Pipeline模式,可以批量获取所需的实时数据。

在Web平台给终端下发指令的时候,如何知道终端是在那一台服务器上,这个是通过在Redis中缓存一个Sim卡号和部标808服务器Id的映射关系表,当终端接入的某台服务器的时候,808服务器会自动在Redis上更新映射表,这样web平台下发指令的时候,就知道通过那个部标808服务器下发指令。

由于Redis有消息队列的功能,对于报警推送等实时性要求高的场合,当部标808服务器解析报警后,可以直接推送给Redis队列,然后web平台通过订阅消息队列,获取报警消息,然后再经由Websocket推送给前端平台。可以看出整个报警的推送路径发生了重大改变,不再是从数据库读取出来,而是通过典型的分布式内存,不断的推送。不单提高了报警响应的速度,更重要的是,大部分的GPS平台,报警误报频繁,频繁的插入数据库,对数据库压力非常的大。

基于Redis构建10万+终端级的高性能部标JT808协议的Gps网关服务器(转)的更多相关文章

  1. 基于Java Netty框架构建高性能的Jt808协议的GPS服务器(转)

    原文地址:http://www.jt808.com/?p=971 使用Java语言开发一个高质量和高性能的jt808 协议的GPS通信服务器,并不是一件简单容易的事情,开发出来一段程序和能够承受数十万 ...

  2. 基于Java Netty框架构建高性能的部标808协议的GPS服务器

    使用Java语言开发一个高质量和高性能的jt808 协议的GPS通信服务器,并不是一件简单容易的事情,开发出来一段程序和能够承受数十万台车载接入是两码事,除去开发部标808协议的固有复杂性和几个月长周 ...

  3. Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架

    Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...

  4. 一种基于Redis的10行代码实现IP频率控制方法

    优点:可支持海量访问的频率控制,只需要增加Redis机器,单个Redis节点(只占用一个cpu core)即可支持10万/s以上的处理. 基于IP频率限制是种常见需求,基于Redis可以十分简单实现对 ...

  5. 基于Nginx实现10万+并发,你应该做的Linux内核优化

    由于默认的linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的性能: 在优化内核时,可以做的事情很多, ...

  6. Matching Engine For Laravel(基于redis的撮合引擎),PHP高性能撮合引擎

    Laravel Package for Matching Engine 快速开始 github地址 安装: composer require sting_bo/mengine 复制配置文件: php ...

  7. 基于Java语言开发jt808、jt809技术文章精华索引

    很多技术开发人员喜欢追逐最新的技术,如Node.js, go等语言,这些语言只是解决了某一个方面,如只是擅长异步高并发等等,却在企业管理后台开发方面提供的支持非常不够,造成项目团队技术选项失败,开发后 ...

  8. 基于java spring框架开发部标1078视频监控平台精华文章索引

    部标1078视频监控平台,是一个庞杂的工程,涵盖了多层协议,部标jt808,jt809,jt1078,苏标Adas协议等,多个平台功能标准,部标796标准,部标1077标准和苏标主动安全标准,视频方面 ...

  9. 基于Java Mina框架的部标jt808服务器设计和开发

    在开发部标GPS平台中,部标jt808GPS服务器是系统的核心关键,决定了部标平台的稳定性和行那个.Linux服务器是首选,为了跨平台,开发语言选择Java自不待言.需要购买jt808GPS服务器源码 ...

随机推荐

  1. servlet匹配路径时/和/*的区别(转)

    本文转自https://blog.csdn.net/rongxiang111/article/details/53008829 一.<url-pattern>/</url-patte ...

  2. EntityFramework:迁移工具入门

    背景 刚毕业做项目的时候,没有用“迁移”这个概念,系统发布和更新的过程让人非常痛苦,在学习 Ruby On Rails 的过程解除了“迁移”,以后的所有项目都会先确定好“迁移”的方案,本文介绍一下En ...

  3. 代码规范审查 – Sonar分析项目

    Sonar搭建成功之后,就可以通过简单的CMD指令进行项目分析,此篇主要介绍使用Sonar来分析.net项目. 扫描步骤: a.    打开CMD,切换到指定的项目根目录,和.sln同级目录即可(此处 ...

  4. 用mappedbytebuffer实现一个持久化队列【转】

    自从前段时间的一个事故让队列里缓存的大量关键数据丢失后,一直琢磨着弄一个能持久化到本地文件的队列,这样即使系统再次发生意外,我也不至于再苦逼的修数据了.选定使用mappedbytebuffer来实现, ...

  5. iOS:视图切换的第一种方式:模态窗口

    一.UIModalController:模态窗口(一个控制器模态出另一个控制器的模态窗口) 当我们在view controller A中模态显示view controller B的时候,A就充当pre ...

  6. 图片变换【Matrix】矩阵 简介

    Matrix矩阵介绍 官方文档地址:https://developer.android.com/reference/android/graphics/Matrix.html 在Android中,对图片 ...

  7. Thinkphp学习笔记1-URL模式

    PATHINFO模式 PATHINFO模式是系统的默认URL模式,提供了最好的SEO支持,系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境.对应上面的URL模式,PATHINFO模式下面的 ...

  8. JS-获取图片地址

    var url=document.getElementById("a001").src; 或var url=document.getElementById("a001&q ...

  9. HTML5 Canvas(画布)实战编程初级篇:基本介绍和基础画布元素

    欢迎大家阅读HTML5 Canvas(画布)实战编程初级篇系列,在这个系列中,我们将介绍最简单的HTML5画布编程.包括: 画布元素 绘制直线 绘制曲线 绘制路径 绘制图形 绘制颜色,渐变和图案 绘制 ...

  10. css 小问题解决方法整理

    1,图片垂直居中: 设置包括图片的div:height=20px:line-height=20px. 设置图片vertical-align:middle 就可以. 2,行内块元素有3px bug,可通 ...