
个人觉得golang十分适合进行网游服务器端开发,写下这篇文章总结一下。从网游的角度看:要成功的运营一款网游,很大程度上依赖于玩家自发形成的社区。只有玩家自发形成一个稳定的生态系统,游戏才能持续下去,避免鬼城的出现。而这就需要多次大量导入用户,在同时在线用户量达到某个临界点的时候,才有可能完成。因此,多人同时在线十分有必要。再来看网游的常见玩法,除了排行榜这类统计和数据汇总的功能外,基本没有需要大量CPU时间的应用。以前的项目里,即时战斗产生的各种伤害计算对CPU的消耗也不大。玩家要完成一次 *** 作,需要通过客户端-服务器端-客户端这样一个来回,为了获得高响应速度,满足玩家体验,服务器端的处理也不能占用太多时间。所以,每次请求对应的CPU占用是比较小的。网游的IO主要分两个方面,一个是网络IO,一个是磁盘IO。网络IO方面,可以分成美术资源的IO和游戏逻辑指令的IO,这里主要分析游戏逻辑的IO。游戏逻辑的IO跟CPU占用的情况相似,每次请求的字节数很小,但由于多人同时在线,因此并发数相当高。另外,地图信息的广播也会带来比较频繁的网络通信。磁盘IO方面,主要是游戏数据的保存。采用不同的数据库,会有比较大的区别。以前的项目里,就经历了从MySQL转向MongoDB这种内存数据库的过程,磁盘IO不再是瓶颈。总体来说,还是用内存做一级缓冲,避免大量小数据块读写的方案。针对网游的这些特点,golang的语言特性十分适合开发游戏服务器端。首先,go语言提供goroutine机制作为原生的并发机制。每个goroutine所需的内存很少,实际应用中可以启动大量的goroutine对并发连接进行响应。goroutine与gevent中的greenlet很相像,遇到IO阻塞的时候,调度器就会自动切换到另一个goroutine执行,保证CPU不会因为IO而发生等待。而goroutine与gevent相比,没有了python底层的GIL限制,就不需要利用多进程来榨取多核机器的性能了。通过设置最大线程数,可以控制go所启动的线程,每个线程执行一个goroutine,让CPU满负载运行。同时,go语言为goroutine提供了独到的通信机制channel。channel发生读写的时候,也会挂起当前 *** 作channel的goroutine,是一种同步阻塞通信。这样既达到了通信的目的,又实现同步,用CSP模型的观点看,并发模型就是通过一组进程和进程间的事件触发解决任务的。虽然说,主流的编程语言之间,只要是图灵完备的,他们就都能实现相同的功能。但go语言提供的这种协程间通信机制,十分优雅地揭示了协程通信的本质,避免了以往锁的显式使用带给程序员的心理负担,确是一大优势。进行网游开发的程序员,可以将游戏逻辑按照单线程阻塞式的写,不需要额外考虑线程调度的问题,以及线程间数据依赖的问题。因为,线程间的channel通信,已经表达了线程间的数据依赖关系了,而go的调度器会给予妥善的处理。另外,go语言提供的gc机制,以及对指针的保护式使用,可以大大减轻程序员的开发压力,提高开发效率。展望未来,我期待go语言社区能够提供更多的goroutine间的隔离机制。个人十分推崇erlang社区的脆崩哲学,推动应用发生预期外行为时,尽早崩溃,再fork出新进程处理新的请求。对于协程机制,需要由程序员保证执行的函数不会发生死循环,导致线程卡死。
本文主要介绍服务器的概念、常见的服务器技术和架构组成,此外将详细介绍磁盘、RAID知识,网卡概念、分类和主流厂商和产品,内容大致分为3部分。
第1章、服务器通用基础知识
简单来说,服务器就是在网络中为其他客户机提供服务的计算机;具有高性能、高可靠、高IO数据传输能力等特点,企业从基础的邮件、打印到核心应用如ERP、数据库等业务,再到我们所熟悉的互联网业务,创新大数据服务、天气预报HPC高性能计算等都离不开大规模服务器的支持。
服务器主要由CPU、内存、硬盘、模组、RAID卡组成,配合电源、主板、机箱等基础硬件组成。
CISC :主要是两家,包括IntelCPU(非安腾系列)、AMD CPU。
RISC: 服务器领域主要是IBM Power系列、Sun Spark系列,消费级的代表是ARM架构的CPU。
2017年7月,Intel正式发布了代号为Purley的新一代服务器平台,包括代号为Skylake的新一代Xeon CPU,命名为英特尔至强可扩展处理器(Intel Xeon Scalable Processor,SP),也宣告了延续4代的至强E5/E7系列命名方式的终结。
Xeon至强可扩展处理器不再以E7、E5的方式来划分定位,而代之以铂金(Platinum)、金(Gold)、银(Silver)、铜(Bronze)的方式。Skylake是新命名方式的第一代产品,Cascade Lake是是二代,共用Purley平台。
大型机 :普通人很少接触,用于大规模计算的计算机系统大型机通常用于政府、银行、交通、保险公司和大型制造企业。特点是处理数据能力强大、稳定性和安全性又非常高
小型机 :往往应用于金融、电力、电信等行业,这些用户看重的是Unix *** 作系统和专用服务器RAS特性、纵向扩展性和高并发访问下的出色处理能力。这些特性是普通的X86服务器很难达到的,所以在数据库等关键应用一般都采用“高大贵”的小型机方案。
x86服务器 :采用CISC架构处理器。1978年6月8日,Intel发布了一款新型的微处理器8086,意味着x86架构的诞生,而x86作为特定微处理器执行计算机语言的指令集,定义了芯片的基本使用规则。
ARM服务器 :ARM全称为Advanced RISC Machine,即进阶精简指令集机器。ARM是RISC微处理器的代表作之一,最大的特点在于节能。
C/S是Client/Server的缩写,服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQLServer,客户端需要安装专用的客户端软件。
B/S是Browser/Server的缩写,客户机只要安装浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQLServer等数据库。在这种结构下,用户界面完全通过浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。
网卡在TCP/IP的模型中,工作在物理层和数据链路层,用来接收和发送数据。除了数据的收发,网卡还有一些其他功能:
1、代表固定的地址: 数据发送出去,发给谁,又从哪里接收。这都是通过IP区分的
2、数据的封装、解封: 比如寄一封信,信封里的信纸是data,信封是帧头和帧尾。
3、链路管理 :因为以太网是共享链路的,在使用时候可能会有其他人也在发送数据。如果同时发送,就会产生冲突,这就要求在发送的时候,检测链路的状态是否空闲;
4、数据的编码和译码 :在物理介质中,传送的是电平或光信号。这时就需要将二进制数据转换成电平信号或光信号。
5、发送和接收数据
我们再来说说网卡的分类。随着计算机网络技术的飞速发展,为了满足各种环境和层次的应用,出现了不同类型的网卡。
总线分类 :PCIe、USB、ISA、PCI,ISA/PCI等总线是比较早期的网络总线,现在已很少用了,USB接口的网卡主要用在消费级电子中。
结构形态:集成网卡(LOM)、PCIe标卡网卡、Mezz卡。
应用类型 :按网卡所应用的的计算机类型来区分,可以将网卡分为应用于工作站的网卡和应用于服务器的网卡。
电口,PC上常见到的那种网口接口,这种接口叫RJ45,使用的是普通的网线
光口,用于连接光模块,网卡上用于插光模块的接口,我们叫光笼子。
光模块按封装形式,可以分为SFP+、SFP28、QSFP+,其中SFP+和SFP28在结构外观上是一致的,可以相互兼容,只是SFP28支持的速率更高,可以达到25G,而SFP+一般只到10G。QSFP+在外观形态上与SFP+差异很大,两者不兼容。QSFP+应用在40G以上速率上。
DAC线缆是直连铜缆,这种铜缆的模块头是和线缆一体的,不需要再配置光模块。电缆的衰减大,一般只有1m,3m,5m长度的,但价格便宜,是短距离传输的最佳解决方案。
AOC叫做有源光缆,一根AOC线缆相当于两个光模块+光纤,也是一体的,这种线缆数据传输可靠性高,但价格贵。
你说这个问题,提得不够准确。磁盘是指什么,IO又是什么。别人难以把握你的问题精华,难以处理你的提问。我这样认为:
磁盘现在大多是指硬盘,以前有144MB软盘,亦可讲为磁盘;每秒多少次IO这种提法是错误的。因为磁盘,最主要是指硬盘参数,它有它的参数标准的,好像硬盘转速、硬盘接口是IDE口的还是SATA口、是机械或固态硬盘的,是容量大的小,还是容量小的,现在单个硬盘指机械硬盘已经去3TB,容量是非常大。如果将北京最的图书馆的全部藏书文字转为电脑的文字,它所占的容量大概是5-10GB,当是10GB,你说3000GB可以容量多少北京图书馆藏书,大约是300个。你说大不大?
其实你提的问题,应该是说硬盘的转速是怎样的?我可以告诉你啦。比较早期的硬盘,以及现在大多的硬盘是机械硬盘,有碟片的,是可以转动的。至于磁盘碟片转动的讲法,是以每分钟多少转来计算的。早期的硬盘转速有5400转\分,后来的硬盘转速有7200转\分,如果是服务器的硬盘转速可以达10000转\分。现在因为有些硬盘生产面向固态硬盘,它是有大量的集成IC,没有碟片,亦是没有转速的,但它的运行速度比较快,读取数据、写入数据相当的快,缺点是价钱相当的昂贵。
就是接口吧 比如,与FLASH有关的插件的IO:
IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。
比如你打开浏览器,访问新浪首页,浏览器这个程序就需要通过网络IO获取新浪的网页。浏览器首先会发送数据给新浪服务器,告诉它我想要首页的HTML,这个动作是往外发数据,叫Output,随后新浪服务器把网页发过来,这个动作是从外面接收数据,叫Input。所以,通常,程序完成IO *** 作会有Input和Output两个数据流。当然也有只用一个的情况,比如,从磁盘读取文件到内存,就只有Input *** 作,反过来,把数据写到磁盘文件里,就只是一个Output *** 作。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)