前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >后台开发程序员的进阶之路

后台开发程序员的进阶之路

作者头像
腾讯大讲堂
发布2021-03-17 11:10:09
1K0
发布2021-03-17 11:10:09
举报

作者:jiantang,腾讯IEG后台开发工程师

1.  后台开发涉及的范围

简单地说,后台开发涉及的层面主要包括:网络、数据、业务逻辑、运维4个方面。如果扩展和延伸的话,可以分为以下几类:

  • 网络-分布式系统-并行计算
  • 业务逻辑-WEB-游戏-交易-搜索
  • 数据-CACHE-DB-KeyValue-文件存储服务
  • 运维-负载均衡-容错-容灾-运维工具

不同类型的业务对以上4点的要求是不同的,简单总结了一下公司已有服务器的一些偏重点:

应该说每个成功的业务服务器,都有各种的特点,高明的程序员或设计师,能够根据不同的业务特点,选择合适的架构、人力和资源,投入到自己业务最核心和最关键的功能点或模块上。

2. 后台开发的特点

a. 后台开发相对稳定

我们知道,在用户界面和表现这一块,变化是非常快的。用户总是喜欢新鲜的,更好的表现。各大公司在这块的竞争也非常多,总想把用户捆绑到自己的平台上来。各种第三方的组件、引擎都层出不穷。

例如微软就不停地发布各种API和各种开发语言。苹果兴起后,直接把一个不出名的Objective-C提升到了排行榜的第三名。

由于后台开发基本不涉及表现层,主要处理的是网络、数据和消息等。受“流行”和“时尚”的冲击比较小。无论是windows也好,MAC也好,IOS、Android,对后台架构的影响都不大。开发语言也比较稳定,主流的就是C/C++。

b.    稳定性是首要保证的

后台服务程序是为多人同时在线服务的,因此对其可靠性的要求特别高。相对客户端程序而言,如果一个进程或一台机器倒掉,客户端仅仅影响的是一个用户的体验。

而对于服务器来说,就有可能是上千人的体验,甚至是如果不幸地是关键节点出现问题,将是整个服务的不可用。游戏界因为服务器的原因失败的例子实在太多。

作为一个程序员而言,往往会有性能情结,总是希望用最少的服务器来支持更多的人数。这里不是说性能不重要,而是要根据不同的场合去区分。

例如:逆战的游戏服务器,如果不考虑性能问题,那么一台C1服务器就只能支撑200-300人,甚至对于复杂的PVE模式来说,就只能支持不到100人,单单服务器成本就会把项目拖垮。

对于御龙在天来说,如果不解决千人同屏时的系统广播压力,和竞争对手相比的一个重要卖点就完全丧失。对于某些预期压力不大,或者可以通过简单扩容来解决的问题,在初期时就不应该去死抠服务器的一点点性能,应该精力放到稳定性和可扩展性上,等有需要的时候再来解决性能问题。

而对于关系到系统基础和核心体验的性能问题,那它的优先级就是第一位的。当然,也可能存在某个服务,随着用户喜好或业务发展,从不起眼变得十分重要。这时,它的性能和稳定性都会变得十分重要。

公司的海量数据的系列课程中,有个比较著名的短语:“先抗住,再优化”,也表达了类似的意思。先要保证系统稳定可用,否则,初期用户就已经流失了,后面就再也没有优化的机会了。

当然,如果我们在设计之初,就把系统的关键路径的稳定性考虑地比较充分;那么随着业务的逐步发展,优化将是有序和可控的。 

c.     突发事件的冲击

服务器还面临着在特定时间内的特定活动,用户访问数量增加,引起雪崩的问题。从前些年的短信拜年,到双12大促,12306抢票,春节的微信红包等活动。短短时间内的访问峰值是平时的100倍甚至上千倍。

一旦并发数量上去后,平时系统中所隐含的错误、考虑不周和极限情况等,通通都会冒出来。我甚至还遇到过在冲线的关键时刻,有台比较重要的服务器宕机的事件。

服务器的业绩有很重要的一部分是在峰值期间能够提供正常服务。所有我们很多时候的工作就是为了那几个小时的“巅峰时刻”。

3.  后台开发需要长期积累

学校的计算机理论教育和实际操作中需要运用到的技术点,是会有些出入的。因此,很多人毕业后到工作单位最开始的工作就是在“补课”。

例如C/C++的开发和调试,脚本语音的学习,linux操作系统的熟悉,简单DB的操作与分析、补充硬件相关知识等。工作的重点也主要是数据统计、运维脚本的编写、小功能小需求的开发。一切顺利的话,基本能承担一个独立模块的开发,两年已经过去了。

大概做个一年的独立模块开发,经历过基本架构设计、和策划讨价还价、上线的不稳定、用户访问突然增长、服务器宕机、配置文件错误等的磨练后,终于对在线系统的开发有了比较深的认识。

这时候,大概可以升级到公司的T8-T9。经过最少3年的努力,后台开发可以入门了。后期就需要通过时间和项目进行逐步的积累。

服务器的经验累积,包括想法,架构和代码设计都需要通过实际的验证才能获得证明。线上的情况总是会出乎我们的意料。往往考虑很周详的方案落了空;而用户总是在意想不到的地方出招。

俗话说,没吃过猪肉,总见过猪跑吧。但后台的积累需要我们去吃猪肉,而不是仅仅看看猪跑。

机遇也是另一重要的因素,如果用户PCU就一直徘徊在10,20万,那就一直不会有100w在线的经验。在用户数逐步增长的过程中,会出现各种各样的问题,逐个去解决问题的过程,就是经验逐步积累和升华的过程。当然,业务能够发展的到什么程度,这个就需要看大家的选择和运气了。

4.  不能忽视运维

一般来说,作为一个后台程序员在初期的时候往往会对网络、业务逻辑和数据这三部分比较关心。运维嘛,反正有运维的同时,网络、机器和配置等事情,他们来搞定吧。

如果抱着这样想法的同学,那就等着不停在在半夜2,3点被宕机电话骚扰;在陪家人的时候,被召回公司加班;程序配错,各种指责降临;绩效考核时,程序不稳定,年终奖不佳…

大家在写代码的时候,有没有考虑过下面的问题:

  • 我写的服务运行得正常吗?怎么样才能知道它是正常的?
  • 如果运行的服务器宕机了,服务怎么样才能继续?
  • 如果网络不通了,有没有备份的链路?
  • 策划如果把配置表填错改怎么办?
  • 机器太多,不小心又把对应关系配错。
  • 运维的同学把电信的服务器配成了联通的IP,外网玩家投诉卡。

除了配置IP的问题外,其余的问题,运维的同学基本都不能帮你搞定。很多事情都有自己考虑和解决。显然,救世主不存在,系统稳定性的责任主要在项目开发组上。

5.  主动精神是唯一的法宝

前面零零碎碎讲着这么多,其实最终还是要落到一点上:主动。

程序功能完成,仅仅只是后台开发20%的工作。后台的同学还应该主动关心自己的程序实际运行的情况怎么样,日志有没有报异常,是不是有瓶颈和处理不周到的地方。

密切注意硬件和网络异常时,自己程序的表现;在策划提出新功能时,是否对现有程序有影响,是不是需要预先做一些微重构;出现错误时,不仅仅是解决问题,还应考虑怎么避免下次再犯类似的错误。

这些点点滴滴的积累,不是一蹴而就的,也不是领导对你的要求。而是需要在工作的过程中不断地总结和改进,甚至有些时候要一点“自虐”的精神。

以上就是今天全部的分享内容,谢谢大家!

近期热文

【Node开发】分布式调用限频限流的开发设计

解决单点故障 - 有状态服务的高可用

【腾讯微视】百亿数据、上百维度、秒级查询的多维分析场景的实践方案

让我知道你在看

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯大讲堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【Node开发】分布式调用限频限流的开发设计
  • 解决单点故障 - 有状态服务的高可用
  • 【腾讯微视】百亿数据、上百维度、秒级查询的多维分析场景的实践方案
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档