后台编程最关心的事

       虽然现在很多人都去搞智能APP开发了,但是作为有后台的项目,服务器上编程仍然很重要并需要深厚的技术功底。做了4年手机软件开发之后,团队需要,又捡起在PC上开发程序的技术来。项目有后台程序有数据库,如果交给php开发的小伙子们也能凑合,但是一旦有复杂的应用逻辑和更多的性能和容量需求,还是首选C/C++编程。

       既然是后台程序,要有很多手机/PC终端接入,可能要高并发高负载架构;可能还要加密链路通讯(SSL/TLS);通讯过程一般还需要日志,结果还要写到数据库;

       高并发高负载,涉及分布式程序设计,能把你的程序部署到不同的主机服务器上,能分担负载协调工作;架构设计优先考虑分布式策略,数据库的分片策略;还要考虑一台主机最多允许多少客户端接入(可以使用配置文件设定); (根据主机内存和cpu配置灵活调整这个参数。有可能出错的地方一般总会出错,先设计好架构,通盘考虑负载在哪里,怎么均衡,怎么调优)

       既然有复杂的应用逻辑,一般还会用到多线程编程技术,数据同步:互斥锁,读写锁,信号量,条件变量,文件与记录锁;内存映射;消息传递:FIFO,消息队列,管道;

       socket编程:select/poll/epoll, (windows下)IOCP;

       STL:list,map,vector,string,time;

       pattern: singleton,observer,object pool,Lock;

      多线程设计时,考虑线程个数如何分配给工作线程;不同功能模块在应用逻辑中担负的工作量和工作频率是不同的,要小心设计;最好可以配置,这样在产品上线以后,也能根据实际需要来灵活调整;

      数据库操作要充分理解数据库的工作方式:例如频繁的访问数据库不如把多条SQL语句放到一起再访问数据库,以提高数据库执行效率;数据库连接是会失败的,要把自动重连功能用上(mysql)。产品上线后,最好还要经常检查sql日志,找到慢查询,并想办法处理(存储过程,临时表);重要的数据如果没有来得及写到数据库,就要能从日志中恢复到数据库中,这是就需要知道sql日志的时间顺序,记得给每条sql语句日志加上时间戳信息;

      既然要写日志,就好好设计一下日志格式,和哪些重要数据必须写日志,哪些可写可不写,哪些方便查找bug;格式设计好就能使用脚本工具对日志进行类grep操作,甚至可以修复重要的数据遗漏;

     写日志牵涉到磁盘IO慢动作,最好放到内存中,赞够一定数量再往磁盘上写;如果“一定数量”太大,写日志到磁盘时就会较慢,可能影响同步产生的日志写到内存,就考虑调整这个参数,并使用双缓存方法;

      多线程必然会有同步问题,锁加多了导致串行处理增多,效率地下;可以不用锁的地方尽量不用锁,比如对竞争资源仅仅作read only操作的模块部分的代码,就尽量在代码中增加检测满足条件,并try catch失败;这时的失败是我们设计高效执行代码的策略,而不是错误;

     代码设计&&编写中要时刻区分清楚哪些是机制(功能),哪些是策略;机制尽量内聚,策略尽量可定制(配置);

     只有深刻理解Linux/windows内核运行机制,才能写出高质&&高效的代码。

     大家常说程序员自己测不出自己程序的bug,这只能反映程序员水平和心态,也映射出开发团队的研发文化问题。

     作者:张 2012.9.8  [email protected]

    

       

你可能感兴趣的:(后台编程最关心的事)