写给那些傻傻想作服务器开发的朋友

好久之前看过一篇标题为《写给那些傻傻的,想作服务器开发的应届生》文章,无心中看到知乎上也对这篇文章进行了激烈的讨论。下面谈谈个人见解。linux

写在前面的话

我在七八年前就看过这篇文章,那个时候我仍是一名学生,它深深地影响了我学生时代以及后来的人生轨迹。(因此原文绝对不是首次发表于2015年,我猜测多是后来的做者2015年修改了原做者的一些内容,并增长了一些本身的东西,让它"与时俱进")。我学生时代深受这篇文章的影响,以致于我印象中的服务器开发的样子和地位就是这篇文章中所描述的。ios

个人工做经历

我毕业的时候,一心想作出Windows C/C++客户端开发,当时为了作这个开发放弃了我熟悉的flash编程和web开发,固然薪资也是比较低的。作了几年Windows客户端后,我毅然以必定的代价转到了linux服务器开发。到今天为止,大体作过股票资讯、交易系统、游戏服务器、即时通信系统和直播类型的服务器,架构的能力也由最初的千人到后来的百万在线。我从不后悔我当初转行服务器开发,甚至很庆幸当初的抉择,然而我可能更喜欢的仍是客户端开发。web

写给那些傻傻的,想作服务器开发的应届生》一文中的有些观点,根据个人经历,我不敢赞同,或者说个人感觉与之截然不同。编程

加班的状况

首先说下加班的状况,无论是大公司仍是小公司,因为如今的各类测试、预警机制、监控策略和公司发布流程的不断完善,一个月内常常为各类服务器bug、和应急的状况加班的现状已经大为改善很多,固然偶尔发版或者赶项目加班仍是有的,不过一个月的频率也就那么一两次。若是大家团队频繁地为了修正紧急bug、解决服务器稳定性问题,那么大家真要好好考虑大家的方法是否是有问题了。服务器

服务器开发与轮子

其次,服务器开发,不只仅如文中所说的,利用或者组装各类轮子。一个稳定的服务器架构,必须是创建在设计师良好的基础知识和见多识广的经验基础上,即便是使用现有的轮子,也是对这个轮子足够熟悉的基础上,才能让轮子最大地适用本身的公司的业务。也就是说,服务器核心项目人员虽然不必定要造轮子,但必定要具有造轮子的能力。开源的东西好用是好用,可是要么不出问题,一旦出问题每每很难修改。咱们去年作相似“冲顶大会”、“百万英雄”这类直播答题应用,因为这类游戏是从美国HQ刮过来的风,国内各大公司为了迅速抢占市场与用户,都想着要比别人早点作出来上线,因此咱们公司当时deadline压得比较紧。咱们那个时候,最不想看到的人就是项目经理,每天跟着咱们后面催项目的进度。项目进度紧不说,另外还有一个技术挑战,因为节目比较火热,同一个房间里面可能会达到百万人同时在线,而这百万人可能同时都会发弹幕消息。假设某个时刻,房间里面有n我的,某我的发一条消息,其余n-1我的收到,服务器须要推送n-1次。若是n我的同时发消息,那么服务器同一时间就要推送n*n,若是n等于1百万的时候,那么单秒的数据量将很是恐怖,这个是咱们须要解决的一个技术难题,解决目标是最少延迟的状况下,弹幕最多的送达率;另一个难题就是,保证出题和答案不能有太多的延时(小于1秒),并在用户给出答案后,服务器可以迅速统计出答案结果并应答客户端。(没办法,因此此时主持人的做用就发挥了,万一延迟太厉害,主持人能够和观众各类唠嗑,固然这是下下策,若是频繁出现这种状况,领导的脸色确定也很差看,咱们作技术的脸上也没有光彩。)那段时间基本上是周六周日都要加班,甚至连周末均可能要到凌晨才能回去。注意:我把这段经历并无放在上面的关于服务器开发是否频繁地加班的栏目下,这里我想说明的并非服务器开发要常常加班,我想说的是,若是你日常只会用轮子,而不注重基础内功的修养,这种场景你是很难应对的,首先是单机服务性能要作到极致,其次是多个服务之间的高效配合。不少人可能以为这种场景也不难,甚至有的人号称单机服务就能解决,这些都是站着说话不腰疼了。像熊猫tv的“冲顶大会”和西瓜视频的“百万英雄”前几回的答题活动中,也出现了服务中断或者题目延迟厉害,甚至“百万英雄”还出现过一次因技术问题答题活动被迫延期的事故。微信

技术与产品思惟

接着说下,技术和产品方面的,服务器开发与客户端开发的思惟方式和理念实际上是不同的,若是说客户端产品是一个产品的脸面,那么服务器端就是产品的灵魂。这里可能比喻有点不恰当,与客户端开发相比,优秀的服务器开发应该尽可能在单机服务上的性能作到极致,必须尽可能利用少的资源给尽量多的客户端服务(在资源总量有限的状况下,你为单个客户端服务使用的资源越少,你才可能为越多的客户服务)。而服务器开发必须有条不紊地处理与每一个客户端的交互,不能纠结或把资源花费在某一个客户端上。可是客户端不同,客户端只须要管理好本身的一亩三分地就能够了,并且客户端的大多数逻辑和细节在界面(UI)逻辑上。可是我不同意文中做者所说的客户端代码比服务器代码少不少,相反,我经历过的项目,都是客户度代码比服务器代码多不少。由于客户端代码每每有大量的界面逻辑,若是服务器端没有UI的话,其核心除了网路通讯部分,剩下的就是各类业务逻辑(包括存储逻辑,也就是业务逻辑服务器和客户端都有,可是客户端还有界面逻辑)。而从开发团队的人数配比上来讲,通常单个端(好比pc、安卓、ios中的一端)的人数要小于服务器开发人员的数量,由于通常一个高级客户端开发,每每能够一我的搞定一个客户端,可是通常不多有一个高级服务器开发能够单独搞定一套服务开发的。(说的是一般情形,请不要走极端)。服务器开发的核心字眼体如今“服务”上,如何为客户端提供稳定的、高效的服务,这是关键的地方。这里“稳定”也包括容灾容错。大凡是有必定规模的用户群体的产品,若是服务器不稳定,那后果将是灾难性的,试想QQ或者微信服务器中断一两个小时,后果会怎样?而客户端更侧重的就是产品的细节、用户的体验,固然尽管有些用户体验多是由服务器端决定的,可是最终仍是由客户端反映出来。我不赞同文章中说,客户端更能积累除了技术之外的其余知识,服务器开发也同样的,无论是客户端仍是服务器,只有具备产品思惟的开发才是好的开发,而功能的设计与规划服务器端的开发在时间点上通常先于客户端开发的。而具体的功能点,也是须要服务器开发人员与产品人员乃至客户沟通的。架构

薪资方面

最后说下,薪资方面。通常大于两年且一样的工做年限的服务器开发人员要比客户端开发人员高至少三分之一左右。固然不排除一些很是优秀的客户端开发人员可能不在这个规则内。并发

结语

总结起来,选择了哪条路就选择了什么样的生活。作服务器开发的能够在高并发、高可用方向进一步努力,而作客户端开发能够在用户体验、设计细节方面下功夫。无论怎样,都是咱们想要的生活,那里倾洒了咱们的汗水,也收获了咱们本身的成就感。高并发

 

欢迎关注公众号『easyserverdev』。若是有任何技术或者职业方面的问题须要我提供帮助,可经过这个公众号与我取得联系,此公众号不只分享高性能服务器开发经验和故事,同时也免费为广大技术朋友提供技术答疑和职业解惑,您有任何问题均可以在微信公众号直接留言,我会尽快回复您。性能

输入图片说明

相关文章
相关标签/搜索