在上一篇《 主程的晋升攻略(6):CGI和FastCGI》中,讲到Web服务器和CGI/FastCGI能动态输出内容,从而提供更强大的业务处理能力。Web服务器这种架构,我称之为Web模式,与之相对的是Svr模式。Web模式和Svr模式是互联网项目的后台最常见的两种模式。先介绍几个概念。

同步通讯 vs 异步通讯

同步通讯是指在一个连接中,一个请求的应答没回来前,不能发送下一个请求,整个通讯过程是请求1-应答1-请求2-应答2……这种。异步通讯与同步通讯相反,在一个连接中,可以随意发送请求,而且收到应答的顺序可能与发送请求的顺序不一致。

从描述上就能理解,同步通讯的通讯性能比异步低,但好处是简单,不用考虑乱序应答的复杂情况。

同步逻辑 vs 异步逻辑

同步逻辑是指在代码中遇到需要等待的调用时(例如向数据库查询数据),阻塞着,一直等待调用完成。异步逻辑则是不阻塞,继续执行后续代码。

我们常见的文件IO接口read/write,网络IO接口send/recv默认都是同步的,需要执行特别的设置API才能变成非阻塞的。同步逻辑符合人脑的思维模式,写异步逻辑需要处理各种非阻塞和异常情况,极其挑战智力,就算采用有限状态机,也是件很具挑战的工作。

无状态 vs 有状态

CGI/FastCGI每次执行时,会从数据层(db或数据cache)获得数据,修改后再写回到数据层,也就是说CGI/FastCGI并不会缓存数据。这就是无状态。

无状态的架构中,请求是这台Web服务器处理,还是那台处理,都没有区别,因为数据都是从别处获得的。这种架构的扩容非常方便,但需注意,要防范一个请求同时多并发时,可能出现的数据不一致的漏洞,即要做防并发处理。后续会就防并发单独写个文章来展开说。

有状态是与无状态相对的概念,是指服务器中缓存了数据。这种架构中,因为不需要反复的从数据层取数据,性能会高很多,但因为服务器缓存了数据,为了保持数据一致性,只能把该数据的请求都分发到这台服务器来处理。对于游戏来说,每个区的用户数据是独立的,对交互的实时性要求高,采用有状态的架构正好合适。

Web模式 vs Svr模式

最早的网页游戏大多是用html+js做的客户端,如果要实现聊天功能,需要浏览器定时请求服务器获取聊天信息。Web服务器无法主动给客户端推送消息,我总结了下,Web模式的后台有这么些特点:
1、通讯是请求-应答式,即先客户端请求,才会有服务器应答,服务器无法主动推送消息到客户端;
2、是同步通讯,一个连接里,只有收到应答后才能发下一个请求;
3、是同步逻辑,Web模式很少很少采用异步逻辑;
4、是无状态架构,CGI/FastCGI每次从数据层获取数据,修改后再写回到数据层。

Svr模式就是与之相对的,客户端和服务器之间采用长连接,客户端的请求不一定会有应答,服务器还可以主动推送消息到客户端,通讯也不限定是同步的,客户端可以不断的发送请求,服务器的应答甚至可能与请求的顺序不一致。

Svr模式相对Web模式来说,通讯性能更强,因为采用了长连接和异步通讯,还能主动推送消息,这是优势。但也因为采用了长连接和异步通讯,对客户端开发的要求就更高些,需要处理好断线重连和支持响应乱序。

Web模式因为模式简单,Web服务器自己实现了HTTP协议处理和FastCGI进程管理等通用操作,FastCGI这些外部程序只需要处理业务逻辑就行,降低了很多门槛。而且因为是无状态的,扩容非常方便,直接加进程、加机器就能搞定,这个平滑扩容的优势在Web时代的作用非常大——搞性能优化、架构优化的时间成本比较大,而且不可控,如果能加硬件就能快速抗住,那么就是个优秀的架构。

-------- 分割线 ---------
主程的晋升攻略(2):技术篇概要
主程的晋升攻略(3):IP、DNS和CDN
主程的晋升攻略(4):TCP、消息分包和协议设计
主程的晋升攻略(5):HTTP协议和二进制协议的对比
主程的晋升攻略(6):CGI和FastCGI

推荐 wecode程序员云笔记──为程序员而生的 开源、 简洁高效的云笔记软件,使用有道云做云端存储。
★ 【 语法高亮】目前支持 C/C++、C#、Pascal、Java、VB.Net、XML、HTML、Python、SQL等多种方。
★ 【 云端存储】除了本地笔记本外,还增加了云存储功能,目前使用有道云笔记做为云存储。
★ 【 文档加密】提供了文档加密功能,确保敏感文档的安全性。
★ 【 多个本地笔记本】支持多个本地笔记本,你能够新建本地笔记本、打开、压缩和备份本地笔记本。
★ 【 文章附件】能够为每个文章添加多个附件,并能够在临时目录中打开附件、导出附件。有道云的附件也存储在云端。

主程的晋升攻略(7):服务器模型谈相关推荐

  1. 主程的晋升攻略(1):重要的引言

    尽管是引言,但也非常重要. 程序猿怎样成长?这个话题百度有大约170万个相关结果,介绍了不少从菜鸟到老鸟的经验,但怎样成长为主程序猿(下面简称主程),网上的"帮助文档"不完好,也缺 ...

  2. 主程的晋升攻略(2):技术篇概要

    技术是程序员安身立命的家伙,主程的技术不强,向下难以服众,向上有负重托. 或许有人会问:技术深度上该挖多深才能做好主程?程序员至少有两个高阶成长方向: 1.技术型专家非常热爱技术本身,往往会钻研得非常 ...

  3. 主程的晋升攻略(3):IP、DNS和CDN

    有段时间我面试程序员时,喜欢问这个问题:局域网IP有哪些IP段?由这个问题再追问NAT(网络地址转换). 为什么不是每个设备一个公网IP? 先说个关于QQ的小故事,最早开发QQ时,小马哥他们也没想到Q ...

  4. 主程的晋升攻略(5):HTTP协议和二进制协议的对比

    在上一篇< 主程的晋升攻略(4):TCP.消息分包和协议设计>中谈了协议设计的一些话题,这里补充聊聊HTTP协议和二进制协议的对比. HTTP协议是一种文本协议,也是一种Name-Base ...

  5. 程序员发展与晋升攻略

    > 思想互通: 1.PC时代,学的Java SE,写的是Windows软件  2.Nokia时代,学的是Java ME,写的是Symbian应用  3.Android时代,学的是Android, ...

  6. 来自十年互联网人的大厂等级晋升攻略

    今天给大家分享一个大厂的等级划分.这种划分其实每个大公司的内部都有,直接拿公司内部的资料来分享肯定是不妥当的,而且那些东西写得太正式,读起来很枯燥. 今天分享的这篇,是参考了一些大厂的划分,再加上自身 ...

  7. php yield 携程,爬取携程国内地区攻略评论

    这里我们用scrapy 框架爬取数据 爬虫文件里面的代码: # -*- coding: utf-8 -*- import json import re import os import scrapy ...

  8. 超详细抖音运营变现攻略,教你做一个会“赚钱”的vlog博主丨国仁网络

    旅行日渐成为大众生活中不可或缺的一部分,大众除了利用常规拍照.拍视频的方式,来记录旅程,volg也走入大众视线以及短视频舞台中心. 打开抖音,你能频繁刷到关于旅行.美食.学习.日常等各种主题的vlog ...

  9. 端游人类一败涂地正在连接服务器,人类一败涂地与好友玩无限正在连接服务器 | 手游网游页游攻略大全...

    发布时间:2016-01-19 好不好玩?很多玩家都对这款游戏不了解,下面小编就为大家带来试玩图文心得,希望对各位玩家有所帮助. 游戏介绍 标签: 攻略 上手体验 人类:一败涂地 发布时间:2015- ...

最新文章

  1. 你真的会用 CocoaPods 吗?
  2. 图灵LAMP类图书精彩荟萃
  3. LYNC2013部署系列PART2:后端部署
  4. Java十个数比大小循环_java for循环完成输出(1,1,2,3,5,8,13,21,34...)求出第10个数是多少?...
  5. Linux 信号之mysleep
  6. PP视频如何更改截图保存路径及图片类型
  7. linux 基础 —— 网络管理
  8. 度假村酒店官方网站模板里面包含7个子页面,适合酒店住宿网站模板下载
  9. 985高校硕导跳槽高中当老师,博士扎堆中小学,是内卷还是进步?
  10. python+opencv代码给证件照换底色(别再用PS啦)(转载)
  11. 2020年四川省大型舞台艺术创作申报材料流程及申请奖励补助
  12. Tesseract学习(四)
  13. 不要让别人影响到你的心情
  14. Linux的常用命令有哪些?
  15. 扫雷• 规则: (1)随机产生 8*8 的雷分布图;• (2)用户“y”表示游戏,“q”退出游戏;• (3)让用户输入行列号,用键盘“m”标雷,“k”打开;• (4)打开区域为雷或者全部区
  16. youtobe和youtobeGo在不同国家码下的预置
  17. 孟凯:卖菜的难道一定要终身卖菜吗?
  18. 3个5相乘列乘法算式_初中数学 | 必考的21个知识点,开学预习必备!
  19. finalshell强劲功能介绍
  20. Word控件Spire.Doc 【书签】教程(5): 使如何在word文档的书签处插入图片

热门文章

  1. qt vs 插件错误
  2. ipv6 dns地址以及dns64地址
  3. Dubbo之HTTP RPC vs Dubbo RPC性能压测
  4. 2018年3月21日学习笔记
  5. R语言知道预测值和真实值,怎么计算R2
  6. 爱奇艺自研QAV1编码器,将在4K高清画质为用户节省36.6%的流量
  7. web开发报错:The origin server did not find a current representation for the target…
  8. 浏览器提示“您与此网站之间建立的连接不安全”如何解决
  9. python绘制皮卡丘 dongdong_Python画皮卡丘
  10. MATLAB-如何在全图中设置局部放大图