当前位置: 首页 > Linux

写给傻傻的想做服务器开发的朋友

时间:2023-04-06 22:52:38 Linux

很久以前看了一篇《写给那些傻傻的,想做服务器开发的应届生》的文章,无意间看到知乎上也对这篇文章进行了热烈的讨论。我来说说我的看法。很久以前读过这篇文章,那时候还是学生,深深影响了我的学生时代和后来的人生轨迹。.我在学生时代就深受这篇文章的影响,以至于在我的印象中服务器开发的面貌和现状都是在这篇文章中描述的。我的工作经历毕业的时候想做WindowsC/C++客户端开发。当时为了做这个开发放弃了自己熟悉的flash编程和web开发。当然,工资相对较低。在做了几年Windows客户端后,毅然付出一定的代价转行做Linux服务器开发。到目前为止,我大致做过股票信息、交易系统、游戏服务器、即时通讯系统、直播服务器。架构的容量也从最初的千人在线变成了后来的百万在线。我从不后悔我转向服务器开发,我什至很高兴我做出了选择,但我可能更喜欢客户端开发。《写给那些傻傻的,想做服务器开发的应届生》文章中的一些观点,根据我的经验,我不敢认同,或者我的感受与他们有很大的不同。加班的情况首先说一下加班的情况。不管是大公司还是小公司,由于目前各种测试、预警机制、监控策略以及公司发布流程的不断完善,经常会在一个月内上报各种服务器BUG和紧急情况。加班加点的现状有了很大改善。当然,偶尔也会有为了发文或者赶项目而加班,但频率也就一个月一两次而已。如果你的团队经常修复紧迫的bug,解决服务器的稳定性问题,那么你真的需要好好想想你的做法是不是错了。服务器开发和轮子其次,服务器开发不仅仅是文中提到的使用或组装各种轮子。稳定的服务器架构必须基于设计者良好的基础知识和丰富的经验。即使使用现有的轮子,也必须熟悉轮子,才能最大程度地应用轮子。自己的公司业务。也就是说,服务器核心项目人员虽然不一定要造轮子,但一定要有造轮子的能力。开源的东西好用,但要么不会出错,一旦出错,往往很难修改。去年,我们开发了《穿越高峰》、《百万英雄》等直播答题APP。由于这些游戏都来自美国总部,国内各大公司都想通过竞争来快速抢占市场和用户。它制作和推出时间较早,所以当时我们公司的工期比较紧。那时候,我们最不想见的人就是项目经理,天天跟在我们后面督促项目进度。项目进展不说,还有一个技术挑战。由于节目的火爆程度,可能有上百万人在同一个房间同时在线,而这上百万人可能都在同一时间发弹幕。假设某一时刻,房间里有n个人,一个人发送消息,其他n-1个人收到,服务器需要推送n-1次。如果n个人同时发送消息,那么服务器会同时推送n*n。如果n等于100万,那么每秒的数据量将是非常恐怖的。这是我们需要解决的技术问题。解决方案的目标是在延迟最少的情况下,弹幕的投放率最多;另一个问题是要保证问题和答案之间没有太多延迟(小于1秒),并且在用户给出答案后,服务端可以快速统计出答案结果并回复给客户端。(没办法,这时候主持人的作用就发挥出来了,如果延迟太严重,主持人可以通过各种方式和观众聊天,当然,这是一个坏主意,如果发生这种情况经常,领导的脸肯定不好看,我们技术上没有亮脸。)那段时间基本上周六周日都要加班,甚至周末也不一定能直到凌晨才回去。注意:我没有把这个经验放在上面关于服务器开发是否经常加班的栏目下。这里要说明的并不是服务器开发要经常加班。我想说的是,如果你平时只用轮子,不注重基本内功的修炼,你是很难应对这种情况的。一是单机服务的性能必须极致,二是多个服务之间的高效协作。很多人可能认为这种场景并不难,甚至有人声称可以通过单机服务来解决。在此前的熊猫TV《穿越大会》、西瓜视频《百万英雄》等答题活动中,也曾出现服务中断或出题严重延迟的情况,甚至《百万英雄》也曾因技术问??题出现过答题活动事故那是被迫推迟的。技术和产品思维其次,在技术和产品方面,服务端开发和客户端开发的思维方式和理念其实是不一样的。如果说客户端产品是产品的脸面,那么服务端就是产品的灵魂。这里的类比可能有点不恰当。与客户端开发相比,优秀的服务端开发应该尽量在单机服务上做到极致的性能,必须用尽可能少的资源去服务尽可能多的客户端(资源总量有限的情况下,资源越少越好)用于服务单个客户端,您可以服务的客户端越多)。但是服务端开发必须有条不紊地处理好与各个客户端的交互,不能在某个客户端上纠缠或耗费资源。但客户端不同。客户端只需要管理自己的三亩地,客户端的大部分逻辑和细节都在界面(UI)逻辑中。但是我不同意作者在文章中所说的客户端代码比服务端代码少很多。相反,我经历过的项目,客户端代码比服务端代码多得多。因为客户端代码往往有很多界面逻辑,如果服务端没有UI,它的核心除了网络通信部分,剩下的就是各种业务逻辑(包括存储逻辑,即服务端既和客户端有业务逻辑,但客户端也有接口逻辑)。从开发团队的人数比例来看,单端(如pc、android、ios其中之一)的人数要小于服务端开发人员的人数,因为一般是高级客户端开发通常可以由一个人处理。端,但一般很少有高级服务器开发能够单独搞定一套服务开发。(说话是常态,请不要走极端)。服务器发展的核心词体现在“服务”上。如何为客户提供稳定、高效的服务是关键。这里的“稳定”还包括容灾和容错。通常,对于具有一定用户群体规模的产品,如果服务器不稳定,后果不堪设想。想象一下,如果QQ或者微信服务器中断一两个小时,会发生什么?客户端更注重产品细节和用户体验。当然,有些用户体验虽然可能是由服务端决定的,但最终还是要体现在客户端。不同意文章说客户端可以积累技术以外的知识,服务端开发也一样。无论是客户端还是服务端,只有具备产品思维的开发才是好的开发,功能设计和规划服务端开发一般在某个时间点先于客户端开发。具体的功能点还需要服务器开发人员与产品人员甚至客户进行沟通。最后,我们来说说薪水。一般来说,两年以上,同样工作经验的服务端开发人员,至少比客户端开发人员高出三分之一以上。当然,也不排除一些非常优秀的客户端开发者可能不在这个规则之内。结语总而言之,你选择了什么样的方式,你就选择了什么样的生活。做服务端的可以往高并发、高可用的方向进一步努力,做客户端的可以在用户体验和设计细节上下功夫。不管怎样,都是我们想要的生活,我们在这里倾注了自己的汗水,收获了属于自己的成就感。欢迎关注公众号『高性能服务器开发』。如果你需要我帮助解决任何技术或专业问题,你可以通过这个与我取得联系。本公众号不仅分享高性能服务器开发经验和故事,还免费为技术小伙伴们提供技术解答和解答。有什么问题可以直接在微信留言,我会第一时间回复您。