关于车联网系统设计思路(一)

车联网是一个新兴概念,但是无论国内外做这个,在深圳起码有上千家,但实际上能做得好的没有多少家。

鄙人就业时间不长,而且之前二分之一的时间在游戏公司就业,但是有幸一开始接触了很多业内做的比较好的企业,无论是国内老牌诊断行业巨头,还是借车联网行业东风起航新兴企业,对他们的一些方案都有不少研究,当然自己的心得也是不少。

对于这样企业,当然不会有太多高新技术,也不会有很多牛逼之处。当然像华为,腾讯,淘宝这些大厂商,技术确实足够,但是对于一个行业来说,外行想要摸清楚里面的东西,门槛并不算低。

我在这里就无私奉献一下,当然核心的一些东西,请允许我个人不回答。


国内搞车联网的,一般有几种企业,原来搞GPS定位出身的,这个就比较多了,还有搞车辆诊断出身,像元征,还有一些传统硬件行业,另外就是it行业。

哦还有就是车辆生产厂,奔驰宝马这些。

它们各自有擅长的地方,但是并没有一家能够做到融合。

先从我熟悉的说起吧,毕竟我是搞应用出身。

国内大部分车辆网采用的方案是。后端与设备连接大部分用c++编写,小部分采用C#,数据展现等C#或者java等不一而论。

数据库方案大部分是mysql或者sql server,很少使用mongodb等nosql,写入cache基本没有,这和业务有关,下位机数据基本上都是要求实时入库,读取也是要求实时。

性能基本上是保证每台服务器接入2000~8000左右设备的量。

设备与服务器连接,绝大部分采用TCP协议,小部分采用UDP(据我所知就南京电信交通基地),奇葩点的还有http协议。

流程基本上就是设备->网络传输->服务器->入db这么一个结构。

当设备多了的时候,就有负载均衡的问题,负载均衡有各种解决办法,土豪的有硬件负载均衡,文艺点的自己写负载均衡,笨点的直接按设备写死负载均衡。


工作模型有gateway-worker,也有直接worker的。各种各样,有些我就快笑死了。比如上次见到一家直接把数据解析提交到某个http接口……我就不说这个效率,设备一多直接死掉。


基本上层次就是client->client_service(gateway)->worker->input_db。各个层直接可以作为独立组件,我也确实见过这样的设计,好处是耦合性低,可以分开给各个人开发,而不用每个人都清楚业务。


我个人的设计是单worker模型,通过一个connection管理器来部署的分布式系统,每个worker上的连接都是完整独立的部件,能独立连接分布式db,实际生产环境,每个worker都能接受连接,并连接到统一的connection服务器上,所有的设备连接,都能直接在connection服务器查询,这里用了Redis作为连接管理的cache层。


我这样做的原因没有别的,就是我一个人就能做完了,简单而且各个层直接无需进程间交换,都是程序内交互,速度效能都很高,也能独立进行db的连接,db的分库分表使用散列计算分布式设计,这些都能由一个worker完成,扩展也非常简单,直接增加worker即可,部署也只要一个同样的config即可。某个worker死掉,也不会影响其他的worker。

鄙人不会cpp,当然我那点cpp水平,绝对是不能登堂入室的,我也不敢用自己这么粗浅的技术去玩cpp,我用的是java的mina框架。

至于性能在我个人垃圾之极的笔记本上表现还可以,5k连接,只消耗20%的cpu和250M的内存,这里是连接mongo写入,1包/s。至于更多的测试,我就没有在做。

这是在服务器表现,负载非常低,这里大概连入具体数量在3000左右


可以看到java的性能其实还是不错的。

db采用mysql+mongodb设计,mongo用于记录大量的零散数据,而mysql主要是基础表单,比如一些id对应关系。


待续



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值