版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、服务器通信技术方案 前言11 .服务器通讯需要解决的问题2嵋脚闰属物瘗雨尻赖例腌。1.1 单台RCU 设备通讯情况2 S5急J沟熠爱掩谴净祸洲。1.2 上万个RCU甚至达到将近百万终端与服务器同时通讯1.2.1 单台服务器 2/铜极(朗镇桧猪1ft锥SOB巴。1.2.2 集群月艮务器 2弹贸摄尔霁毙AK专卤尻诒尔肤。2 .目前服务器通讯主流技术方案3 养拉箧SB睾慰类蒋蔷黑占斜杂2.1网上常用主流方案简介与比较厦礴恳蹒骈畤需i继骚音癞2.1.1传统的socket通讯模型3茕桢广鲍螂选块网踊泪镀齐金匀o鹅娅尽揖鸽惨魔茏!赖繁诘H。2 1 2 Windows 下 IOCP 模型 3籍丛妈逐为瞻债蛭
2、练浮楮挞咦。2.1.3 linux 下 epoll 模型 42.1.4 其它的网络通讯第三方开源库简介及比较5圣僮蕨龈讶骅汆附。13 / 82.2月艮务器集群方案 6渗叙呛俨匀遇鳖调现金帛钞。帝凤袜备轩尚(轮烂蔷幸艮赢无3 .根据项目情况选择最合适方案8钱言朱卧泻噬圣骋腕而熊逢勘黑3.1 推荐选择linux系统下的epoll及开源库Boost:asio83.2 可能问题8 9s熟俣闻蕨直阊邺钱崎嗣汉靠。修订记亲序号版本号修订内容修订人修订日期第一个版本颜冬2013.()9.071.00.000、/ 、. 刖BGSM基站定位,内置ENG、ABS、ETC 等)GPS, GPRS系统提供远程实时监测
3、状态数据等。坛搏乡RCU-U设备采集数据如:车辆诊断,通过 数据,对车辆各个系统的运行状况(如:K忏篓锲铃*波跻金勺。因此如何实现这种多设备数蜡建夥痛宰艮依铉锚金巾赘建这些数据的网络通讯平台,则由服务器提供的通讯技术来实现,据同时接收的技术方案很重要。本文将详细介绍相关技术及提出方案o服务器通讯需要解决的问题单台RCU设备通讯情况主要通讯数据:设备端,刚连接时登陆验证(设备端信息验证);设备端,诊断数据及其它采集数据上传到服务器(估计频率每秒发一次);服务器端,发送指令,实现对设备端的远程配置;RCU设备工程师估计的数据:1每个RCU设备每秒钟产生一条数据,每条数据大概100个字节左右(0.1
4、K左右);2可以假设每台车每天平均开动1小时或2小时(实际产生数据时间);RCU数量(个)1秒10.1kb1万1000kb0.97M100万100,000kb97M1000 万1000,000kb970M1小时2小时360kb720kb3515M3.43G7030M6.86G343G686G3430G3.35TB6860G6.70TB从上数据显示如果达到:100万级别的 RCU用户量,需要服务器有近百兆的网络带宽吞吐量 1000万级别的 RCU用户量,需要服务器有近千兆的网络带宽吞吐量上万个RCU甚至达到将近百万终端与服务器同时通讯1.2.1 单台服务器如果按照经典的server/client
5、通讯模型,当有一个设备通过(TCP/UDP )连接服务器时,服务端单独开一个线程为这个设备数据服务,显然,当路数越多,我们的设备又是长连接方式,很快服务器将在设备近千路时服务器资源将达到上限,弁且存在大量线程切换与管理问题。这时如果我们能合理利用单台服务器资源(如: windows下iocp模式,linux下的epoll网络通信模式等),在更优的管理模式下,将能接更多设备的服务(网上资料预估几千路的长 连接甚至硬件较好配置下达到万路以上)。上面我们能在单台服务器在较好硬件配置和软件优化的模型管理下,能解决几千路上万路设备的长连接。蜩而黯曾昙唐遥闫撷凄届嫡擞。1.2.2 集群服务器但是,如果几十
6、万台甚至接近百万级别的设备数量同时访问服务端时,这个时候需要涉及到一种合理的集群服务器架构模式。理论上,为了达到 1:10000的连接,可以采用 Server-Client的连接方式,而为了达到1:10000*100的连接,我们怎么办呢? 一般会采用Client-ConnServer - LogicServer 。相当于有一批服务器来合理布局解决设备的大弁发通讯问题。M飙搬踪韦麟维飙铳麦。ConnServer在接受完 Client的连接后,将 Logic Server暴露给 Client,弁立刻断开连接,称之为短连接。以后的数据交互就和Conn Server没有关系了,让 Logic Serv
7、er直接跟client再长连接通讯,这种架构有很多的优势。H跟震彦法绥饴夏锦琼针。主从浜巩1期双机 在悌嘉境回配正力省的Id mat可解端登录失败与黄瑞朝镇I 图一:标准集群Server架构方案目前服务器通讯主流技术方案2.1 网上常用主流方案简介与比较2.1.1 传统的socket通讯模型socket 有两种:流式 Socket ( SOCK_STREAM )和数据报式 Socket ( SOCK_DGRAM )。流 式是一种面向连接的Socket,针对于面向连接的 TCP服务应用;数据报式 Socket是一种无连接的Socket ,对应于无连接的 UDP服务应用。 猫右腕绘燎W诛髅肌庞献1
8、缩。一般小型的c/s通讯系统利用socket API和结合一个线程对应一个客户的开发模式。如果路数增多,容易耗尽服务端资源。该通讯模型利用硬件资源效率不高。锹籁饕迳琐肇禊鸥娅蔷口,黯时宾。2.1.2 Windows 下 IOCP 模型IOCP 完成端口模型又是怎样实现的呢?首先我们创建一个完成端口CreateIOCompletionPort 。绑定端口之后,建立一个监听线程,用来监听客户端的连接,当有连接进来时,将该连接的套接字加入到IOCP对队列中,同时再创建几个工作线程( CPU数*2+2 ),工作线程调用 getQueuedCompletionStatus方法在关联到这个完成端口上的所有
9、套接字上等待 I/O的完成,再判断完成了什么类型的I/O ,然后接着发出 WSASend 和WSARecv ,这样在该连接发生请求时,IOCP模型就会在工作线程通知,这样我们就可以在工作线程中,完成对客户端的请求做出一系列响应。情氽300(饨芹龈话警因激焉I。完成端口提供了一个高效复杂的内核对象,使得非I/ O处理和I/ O处理能重叠弁行地操作。该对象通过指定工作线程的数量,对重叠的I/O操作进行处理。当一个事件发生,此完成端口就被操作系统加入一个队列中,然后应用程序可以对核心层进行查询以得到此完成端口。IOCP的核心思想简单说就是:将所有用户的请求都投递到一个消息队列中,利用事 先创建好的若
10、干个工作线程逐一从消息队列中取出消息弁加以处理。这样不仅减少了线程资源,也大大提高了线程的利用率。要注意的是,所谓完成端口,实际上是Windows采用的一种I/ O构造机制,弁非通常所说的端口(如Port: 80)。H峰隔槿跳痔独!虢索蟒锢帧跳至工连接主晦(口升gr线程主环开始工作膏线押想J+接受新的建楼谋求精选接关联刎充成蜩u操作系统内核桁定下,厚物】,我作道行谶片的1悝法作编畸!曲8修嘛fc 独据处瞠图1 lot?的,fr流程2.1.311 nux 下 epoll 模型epoll是Linux下多路复用IO接口 select/poll的增强版本,它能显著提高程序在大量弁发连接中只有少量活跃的
11、情况下的系统CPU利用率。因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的电平触发(Level Triggered )外,还提供了边沿触发( Edge Triggered ),这就使得用户空间 程序有可能缓存IO状态,减少 epoll_wait/epoll_pwait 的调用,提高应用程序效率。尧侧绛绚蛆督凝批女离。传统的select/poll另一
12、个致命弱点就是当你拥有一个很大的socket集合,不过由于网络延时,任一时间只有部分的 socket是“活跃”的,但是select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。但是epoll不存在这个问题,它只会对“活跃”的socket进行操作-这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么,只有“活跃”的socket才会主动的去调用 callback函数,其他idle状态socket则不会。 识tifi金昆缢爵与1W俨凄侬减携通讯模型主要优点一主要缺点传统socket适合于连接量较小的通讯情况,通过socet API建立 C/S通讯。服务
13、连接路数小,IO没有复用, 一般是一个线程对应终端的服务 模式。通讯情况下,每个socket句柄,包含不活跃 的连接也会需要遍历。Windows 下 IOCP适合于大量连接数(上万路),IO复用,消息队列,可指定相应工作线程数,轮询端口的事件,充分利用多核,高效率地服务于多弁发。只跑在 windows服务器下,如 果数据库平台为linux服务器, 影响系统功能模块整合。linux 下 epoll适合于大量连接数(上万路),多路复用IO接口,只遍历那些被内核IO事件异步唤醒而加入 Ready队列的 描述符集合。通讯情况下,只对活跃 的连接遍历,提高了效率。当前主流ET和LT模式下,其中LT模 式
14、比较复杂,较难处理数据收 发。服务器为linux,也有系统优势。基于以上比较,我们服务器的操作系统平台是linux下(大数据库的平台也是),显然大并发访问通讯模型linux下epoll更合适我们项目实际需求。濂皱劳月匐错痫立帚胫汆钺照鹦。2.1.312 的网络通讯第三方开源库简介及比较Libeventlibevent是一个事件触发的网络库,适用于 windows、linux、bsd等多种平台, 内部使用 select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based ,而且libevent在使用上可以做到跨平台,而且根据lib
15、event官方网站上公布的数据统计,似乎也有着非凡的性能。的揩金有灭萦欢蜴鹫金帛聪樱郊。libevent包括事件管理、缓存管理、 DNS、HTTP、缓存事件几大部分。事件管理包括各种IO ( socket)、定时器、信号等事件;缓存管理是指evbuffer功能;DNS是libevent提供的一个异步DNS查询功能;HTTP是libevent的一个轻量级http实现,包括服务器和客户端。libevent也支持ssl,这对于有安全需求的网络程序非常的重要,但是其支持不是很完善,比 如http server的实现就不支持 ssl。鲨用何出神金甲沏濯统摇饬缗。Libevlibev是libevent之后
16、的一个事件驱动的编程框架,其接口和libevent基本类似。 据官方介绍,其性能比libevent还要高,bug比libevent还少。硕阳K顽泞t搠篙SI毅鹫胶据。ACE有人评价其框架模式很值得学习,但是其网络应用效率和开发应用相比其他开源库较差,这也是其主要用于研究很少用于商业应用的原因,这方面不像boost应用广泛。应用中需要充分理解其复杂的架构模式。这不是短时间可掌握和灵活运用的,相对来说其他第三方网络开源库相对模式精简很多。阕擞帔踹柬迁择植秘坡弟屏ICEZeroC ICE 是指 ZeroC 公司的 ICE (Internet Communications Engine )中间件平台。
17、对于客户端和服务端程序的开发提供了很大的便利。氮噜麻鼠贸恳弹演颔杲纷金L郃。目前 ICE 平台中包括 Ice, Ice-E , Ice Touch 。C+ , Java, C# (和Ice为主流平台设计,包括 Windows和Linux ,支持广泛的语言,包括其他.Net 的语言,例如 Visual Basic ) , Python , Ruby , PHP 和 ActionScript 。也包括所有的赳鸽资赢市it孙ta市赘麽猴ICE 服务,例如 Ice Grid , IceStorm 等。C+和嵌入式操作系统,例如 WindowsIce上提供的各种服务。因此,通 怂阐言普统迳醇啸重畏凉驯鸨
18、搐。Object-C 映射,支持Iphone OS ,弁为Ice-E是Ice在资源受限的平台上的一个实现,支持CE, Linux。Ice-E本身不包含任何服务,但是可以利用在 过Ice-E ,移动设备也能无缝的集成到分布式系统中。Ice Touch是为iphone和ipod touch 开发的版本,包括MAC OS X 开发图形界面应用程序提供完整的Cocoa框架的访问。谚辞湖担筑谄动律泻堇觐鸾Boost:asioBoost.Asio是利用当代C+的先进方法,跨平台,异步I/O模型的C+网络库,ASIO在Linux平台 下的实现基于epoll,在windows下基于iocp。具商业应用非常广泛
19、。Boost库本身还支持很多常有用的开源库,如 regex正则表达式算法,它本身是基于 STL的二次开发。啜觐旌缘锄嗫偏错镂IS恳迹。Muduomuduo是一个基于 Reactor模式的现代 C+网络库,它采用非阻塞IO模型,基于事件驱动和回调,原生支持多核多线程,适合编写Linux服务端多线程网络应用程序。 这是一个国内个人写 的开源库,有专门介绍的书, 网上热评较多,据其书上测试数据所描述,其性能要稍好于libevent 与boost。受绐铤g(律鹰辎械库圆IS缄。Node.jsNode.js是一套用来编写高性能网络服务器的JavaScript工具包。Node.js可以在不新增额外线程的情
20、况下,依然可以对任务进行弁行处理,Node.js是单线程的。它通过事件轮询(eventloop )来实现弁行操作。帽渍蟆倬阅剜鲫都!藏阕簧择。但它是一个新兴的后台语言,网络资源相对较小,需要对 javascript的事件驱动非常熟悉。调试方面比较困难。后期维护较难。纣忧蒋羸3(卷悯警觐值!。开源库主要优点主要缺点Libevent跨平台/支持安全机制ssl/有事件机制/DNS支持基于其上开发网络库,还需要 实现很多网络模块。Libev类似libevent,包含它的所启功能,目方描述其性能比它好。网上评价相对来说libevent应用较广泛。ACE封装程度高,模式框架强,支持事件驱动, 跨平台。学生
21、用于论文研究开发的网络通讯库, 学术性强, 应用及 性能较差,模式复杂。ICE支持分布式系统,支持多语言,多操作系统, 是一个zeroc公司开发的库,应用不是很广 泛,被称为 ACE的轻量级别。应用不太广泛, 是一个公司的 网络开源通讯库。二次开发待 验证。Boost:asio跨平台,本身利用 epoll与iocp模型就为了支 持多路连接弁发考虑的库。商业应用非常广泛,其库有可能纳入C+规范里面做教材用充分了解boost开源库需要一 定时间,其主要利用泛型编程 模式。Muduo非阻塞,多线程,支持linux平台,其利用通讯模型epoll实现应用。书中的测试数据显示, 单台服务器 (硬件配置 8
22、核CPU , 16G内存) 已经实现10000台终端连接数,弁有与其他 开源库测试性能比较。个人网络库,知名度应用方面 不如libevent与boost,但是其 书热评很多。Node.js官方描述,高性能网络服务器的JavaScript工具包。Node.js可以在不新增额外线程的情 况下,依然可以对任务进行弁行处理,Node.js是单线程的。它通过事件轮询(eventloop )来实现弁行操作基于javascript的新型网络库,应用时间较短,调试麻烦, 后期维护困难。它的单线程模式, 对现在的硬 件多核处理器来说,利用耳、了 多核的优势。基于以上比较, 主要选商业应用较广泛,开源时间较长,
23、库功能丰富的 Boost:asio第三方开源库,另外两个个人与公司的开源库Muduo和ICE待验证作为备选。颖刍堇蚊悖亿顿袅赔跳涨负也。2.2 服务器集群方案主从浜巩1期双机 在悌嘉境Ccffin 匕 UEerLctnn 0堂”6工小帼 ServerI掰窑正如MH解端登录失败图一:标准集群 Server架构方案DNS均衡服务器原理:就是1个主机纪录对应多个IP Address(不同的多台服务器或多张网卡),实现不同DNS客户的均衡轮询。滥醪瞻朗四减栖粽。我们先来了解下集群式服务器开发的常用几个技术知识:1:线程2:线程池3:内存池线程,在服务器开发中,线程是一个非常重要的概念,尤其是现在多核服
24、务器的发展。当然,提到了线程自然应该说到线程之间的互斥。这也是服务器开发者们在开发最初最容易出现的问题。体现在一个资源或者多个资源在多个线程中共享使用如何避免出现脏数据的问题。跳鳏脐鳗鸿镒tasw京金厨幸艮。线程池,池,这里相当是一个存储容器。这是一个由多个线程组成的一个队列,当有事情发生时候,我们把当前的空闲的线程丢给他,为他服务。当下一个事件发生的时候,我们又从池里面取一个空闲的线程丢给他,为他服务。当服务完毕,把线程丢回池中。起到反复利用的目的。这样比程序处理业务时,反复申请与关闭线程对资源的利用更有效率。挤贴电爰结直U哓类芈噩鸨。 内存池,同样也是一个池。这个概念的产生是为了避免服务器
25、频繁的分配内存,而采取预先分配一定数目的对象,弁将对象们放到队列中,当需要的时候,从该队列中取出,当用完, 就返回池中。比如我们的Server可能会存在10000 个连接,我们预先开辟10000 个Client对象,存储在list pFreeClientsList 中,当需要的时候,从队列中pop 一个出来,当使用完毕就丢回pFreeClientsList 。这种机制很好的起到了避免频繁开辟内存对象的目的,可以很好的提高系统的性能。赔刘女轲咨病骤辽辈袜金卷趣噜辫。从上面集群Server架构方案图,我们可以理解出如下服务器通讯过程: Conn Serve 里面存在一个 List_LogicSer
26、ver 对象,该对象监听端口,当有LogicServer连接过来,将该 LogicServer 存入队列,并实时获取该Server 当前的压力情况,可以起到一个负载均衡的作用。而保持的 List_LogicServer 队列,当客户端连接过来, Conn Server 则从List_LogicServer 中将当前currentConn 最小的服务器发送给客户端,以后客户端将同该、填碾籍储决稳赛金卜册领适维。LogicServer发起连接。在该系统中,当我们的 Conn Server 不够的时候,可以考虑架设多台 Conn Server ,当客户端无法连接时候, 程序自动连接下一台 Conn
27、Server. 这个由图上的 DNS 均衡服务器实现,使得大量移动终端同时访问时,由 DNS 均衡服务器,分配当前压力较小的 Conn Server 去短连接并验证,验证登陆成功后,再把该Conn Server 下对应的压力较小的 Logic Server 与该终端长连接TCP 通讯(域名服务有利于服务器端动态IP 变换而设备终端不受影响,只需要记住一个总的服务器域名即可)。袅檬祕UMI颤谚剿芈蔺递灿扰。DNS 域名服务器:使得终端只需要记住一个固定的域名就行,服务器IP 变换不会影响到终端的更新。终端访问域名后,实际会把终端信息转接到均衡服务器上来,均衡服务器先把压力最小的Conn Server 分配给它让它登陆验证。登陆验证成功后, Conn Server 再分配具体的 LogicServer与它长连接进行业务数据通信。仓姬维黜嘱珑言古除酬罐。均衡服务器,就是管理分配
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长治医学院《卫生法律与监督学》2025-2026学年期末试卷
- 锡林郭勒职业学院《西方文论》2025-2026学年期末试卷
- 扎兰屯职业学院《中国文学与文化》2025-2026学年期末试卷
- 长治幼儿师范高等专科学校《金融科技》2025-2026学年期末试卷
- 2024年全国教师资格之中学生物学科知识与教学能力考试压轴试题(详细参考解析)
- 2024年全国中级注册安全工程师之安全生产管理考试重点试题详细参考解析336
- 2024年人员培训计划
- 2024年社区消防宣传标语篇
- 2024年办公楼房屋租赁合同参考
- 2024年电大儿童家庭教育指导期末重点复习试题
- 2026云南省投资控股集团有限公司招聘168人笔试历年参考题库附带答案详解
- 机器学习系统与优化 课件 第一章 最优化理论
- 2025年二级造价工程师考试建设工程造价管理基础知识真题及答案解析
- 高中主题班会 高二上学期《学会专注、高效学习》主题班会课件
- 学校2026年春季学期师德师风工作计划(附每周工作行事历)
- 湖北省鄂东南五校一体联盟联考2026届数学高一下期末质量跟踪监视模拟试题含解析
- 2026四川成都市锦江发展集团下属锦发展生态公司下属公司项目制员工第一次招聘7人笔试备考试题及答案解析
- 铁路劳保用品培训课件
- 模具制造车间绩效考核方案
- GB/T 14993-2008转动部件用高温合金热轧棒材
- 跨国公司营销管理课件
评论
0/150
提交评论