主程的晋升攻略(7):服务器模型谈
在上一篇《 主程的晋升攻略(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):重要的引言
尽管是引言,但也非常重要. 程序猿怎样成长?这个话题百度有大约170万个相关结果,介绍了不少从菜鸟到老鸟的经验,但怎样成长为主程序猿(下面简称主程),网上的"帮助文档"不完好,也缺 ...
- 主程的晋升攻略(2):技术篇概要
技术是程序员安身立命的家伙,主程的技术不强,向下难以服众,向上有负重托. 或许有人会问:技术深度上该挖多深才能做好主程?程序员至少有两个高阶成长方向: 1.技术型专家非常热爱技术本身,往往会钻研得非常 ...
- 主程的晋升攻略(3):IP、DNS和CDN
有段时间我面试程序员时,喜欢问这个问题:局域网IP有哪些IP段?由这个问题再追问NAT(网络地址转换). 为什么不是每个设备一个公网IP? 先说个关于QQ的小故事,最早开发QQ时,小马哥他们也没想到Q ...
- 主程的晋升攻略(5):HTTP协议和二进制协议的对比
在上一篇< 主程的晋升攻略(4):TCP.消息分包和协议设计>中谈了协议设计的一些话题,这里补充聊聊HTTP协议和二进制协议的对比. HTTP协议是一种文本协议,也是一种Name-Base ...
- 程序员发展与晋升攻略
> 思想互通: 1.PC时代,学的Java SE,写的是Windows软件 2.Nokia时代,学的是Java ME,写的是Symbian应用 3.Android时代,学的是Android, ...
- 来自十年互联网人的大厂等级晋升攻略
今天给大家分享一个大厂的等级划分.这种划分其实每个大公司的内部都有,直接拿公司内部的资料来分享肯定是不妥当的,而且那些东西写得太正式,读起来很枯燥. 今天分享的这篇,是参考了一些大厂的划分,再加上自身 ...
- php yield 携程,爬取携程国内地区攻略评论
这里我们用scrapy 框架爬取数据 爬虫文件里面的代码: # -*- coding: utf-8 -*- import json import re import os import scrapy ...
- 超详细抖音运营变现攻略,教你做一个会“赚钱”的vlog博主丨国仁网络
旅行日渐成为大众生活中不可或缺的一部分,大众除了利用常规拍照.拍视频的方式,来记录旅程,volg也走入大众视线以及短视频舞台中心. 打开抖音,你能频繁刷到关于旅行.美食.学习.日常等各种主题的vlog ...
- 端游人类一败涂地正在连接服务器,人类一败涂地与好友玩无限正在连接服务器 | 手游网游页游攻略大全...
发布时间:2016-01-19 好不好玩?很多玩家都对这款游戏不了解,下面小编就为大家带来试玩图文心得,希望对各位玩家有所帮助. 游戏介绍 标签: 攻略 上手体验 人类:一败涂地 发布时间:2015- ...
最新文章
- 你真的会用 CocoaPods 吗?
- 图灵LAMP类图书精彩荟萃
- LYNC2013部署系列PART2:后端部署
- Java十个数比大小循环_java for循环完成输出(1,1,2,3,5,8,13,21,34...)求出第10个数是多少?...
- Linux 信号之mysleep
- PP视频如何更改截图保存路径及图片类型
- linux 基础 —— 网络管理
- 度假村酒店官方网站模板里面包含7个子页面,适合酒店住宿网站模板下载
- 985高校硕导跳槽高中当老师,博士扎堆中小学,是内卷还是进步?
- python+opencv代码给证件照换底色(别再用PS啦)(转载)
- 2020年四川省大型舞台艺术创作申报材料流程及申请奖励补助
- Tesseract学习(四)
- 不要让别人影响到你的心情
- Linux的常用命令有哪些?
- 扫雷• 规则: (1)随机产生 8*8 的雷分布图;• (2)用户“y”表示游戏,“q”退出游戏;• (3)让用户输入行列号,用键盘“m”标雷,“k”打开;• (4)打开区域为雷或者全部区
- youtobe和youtobeGo在不同国家码下的预置
- 孟凯:卖菜的难道一定要终身卖菜吗?
- 3个5相乘列乘法算式_初中数学 | 必考的21个知识点,开学预习必备!
- finalshell强劲功能介绍
- Word控件Spire.Doc 【书签】教程(5): 使如何在word文档的书签处插入图片
热门文章
- qt vs 插件错误
- ipv6 dns地址以及dns64地址
- Dubbo之HTTP RPC vs Dubbo RPC性能压测
- 2018年3月21日学习笔记
- R语言知道预测值和真实值,怎么计算R2
- 爱奇艺自研QAV1编码器,将在4K高清画质为用户节省36.6%的流量
- web开发报错:The origin server did not find a current representation for the target…
- 浏览器提示“您与此网站之间建立的连接不安全”如何解决
- python绘制皮卡丘 dongdong_Python画皮卡丘
- MATLAB-如何在全图中设置局部放大图