在上一篇《主程的晋升攻略(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时代的作用非常大——搞性能优化、架构优化的时间成本比较大,而且不可控,如果能加硬件就能快速抗住,那么就是个优秀的架构。
相关推荐
最后,"自动提升" 指的是该工具可能具有自动提升用户权限的功能,比如从普通成员晋升为管理员,这涉及到Discord API的管理权限接口。 【描述】分析: 描述部分简单地重述了标题中的功能,即一个工具具备创建Discord...
Tomcat7是Apache Tomcat服务器的一个版本,主要负责运行Java Servlets和JavaServer Pages(JSP)。优化Tomcat7的目标是为了提高网站的并发处理能力,确保在高流量环境下仍然能保持良好的响应速度和服务稳定性。这...
### JVM内存模型与垃圾收集详解 #### 一、引言 在现代软件开发领域,Java作为一门广泛应用的编程语言,其运行环境Java虚拟机(JVM)对于程序的性能有着极其重要的影响。特别是在服务器端程序中,合理的内存管理和...
这是主从复制模型中明显的竞争条件客户端 A 获取主服务器的锁。在将密钥的写入传输到从属设备之前,主设备崩溃了。从属设备晋升为主机。客户端 B 获取了对 A 已持有锁的同一资源的锁。违反安全规定!RedLock 算法...
当主节点发生故障时,从节点可以自动或手动晋升为主节点,保持服务的连续性。复制还支持分布式读取,可以将读请求分散到从节点,减轻主节点压力。同时,复制集便于执行备份、重建索引和压缩等操作,而不会影响在线...
- **主内存与工作内存**:Java内存模型中的概念,线程有自己的工作内存,共享数据存放在主内存。 **类加载器**: - **双亲委派模型**:类加载请求首先交给顶层的启动类加载器,再依次向下,防止类重复加载。 - **...
2. **职务晋升**:员工职务晋升时,角色随之升级,相应权限自动增加。 3. **临时任务**:为短期项目创建临时角色,项目结束后,角色和权限可以撤销。 实施RBAC系统时,还需要考虑以下要素: - **角色分配策略**:...
Java面试宝典是每个Java开发者在求职或晋升时不可或缺的参考资料。这份压缩包"JAVA面试宝典.zip"包含了2020年最新的程序员面试必备知识,涵盖了多个热门技术领域,如Java、Redis、SpringBoot、Netty、虚拟机、前端、...
基于历史数据、市场调研和经济模型,报告可能对未来的薪酬走势做出预测,以帮助行业内的公司和求职者做出更好的规划。 以上内容是对一份高科技互联网服务器行业薪酬报告可能包含知识点的梳理。为了深入理解报告中的...
2. **控件模型**:ASP.NET提供了丰富的服务器控件,如TextBox、Button等,便于开发者快速创建用户界面。 3. **状态管理**:ASP.NET提供多种状态管理机制,包括视图状态、控制状态、隐藏字段、Cookie等,确保在页面...
Java内存监控是Java应用程序性能优化的关键环节,它可以帮助开发者识别并解决内存泄漏、垃圾收集问题以及潜在的服务器性能瓶颈。本文将深入探讨Java内存监控的相关知识点,并提供实用的命令工具来帮助你查找和解决...
Node.js以其高效的非阻塞I/O模型和JavaScript的便利性,使得它成为构建Web服务的理想选择。下面将详细阐述相关知识点。 一、Node.js基础 Node.js是一个开放源代码、跨平台的JavaScript运行环境,它允许开发者在...
- **集群部署**:系统部署在多台服务器上,构成分布式集群,以提高处理能力和稳定性。 - **资源管理**:YARN(Yet Another Resource Negotiator)作为Hadoop的资源调度器,负责分配计算资源给Spark作业。 - **...
同时,人力资源管理系统还可以帮助企业管理人员的招聘、入职、晋升、离职等整个生命周期的过程。 二、人力资源管理系统的设计 人力资源管理系统的设计基于 B/S 架构。B/S 架构是一种基于浏览器/服务器模式的架构,...
- 认证的作用:提升个人品牌,证明专业技能,助力求职晋升。 - 认证类型:基础级、进阶级、专家级等。 - 考试流程:报名、学习、考试、认证颁发。 2. **操作系统与服务器管理**: - 微软MCSA/MCSE:Windows ...
管理路线主要包括从初级运维工程师逐步晋升为高级运维、运维主管、经理直至CTO;技术路线则涵盖了从初中级运维工程师到高级运维架构师的提升;边缘路线可能涉及运维开发、售前支持、售后支持以及DBA等专业领域。 1....
2. ER模型:在设计数据库时,可能采用了实体关系模型,将业务实体与它们之间的关系映射成数据库表。 3. SQL:系统通过SQL(结构化查询语言)来创建、查询、更新和管理数据库中的数据。 三、软件/插件 1. 开发工具:...
2. 集群复制:主节点可以有多个从节点,实现数据备份和故障转移。当主节点故障时,从节点可以晋升为主节点。 3. 集群容错:Redis集群通过Gossip协议检测节点状态,自动处理故障,保持服务的可用性。 三、Redis特性 ...
2. 运行项目:使用Python运行主程序文件,启动服务器。 3. 浏览网页:在浏览器中输入服务器地址,查看并测试系统功能。 4. 学习源码:逐个研究每个文件,理解各部分的功能和实现原理。 5. 自定义扩展:根据实际需求...
- 这种模式常用于构建高可用集群,当主节点出现问题时,可以从节点中选取一个晋升为主节点。 7. **Redis事务**: - Redis支持事务,用户可以一次性发送多条命令,保证这些命令要么全部执行,要么全部不执行。 8....