应用软件>程序员必备知识(一)

应用软件>程序员必备知识(一)

随着时代的发展与进步,虽然Web服务器、应用服务器、代理服务器等的界限越来越模糊,但作为软件程序员的我们,想要有更广阔的视野,还需要有更系统的知识,用以支撑我们最初的“梦想”。
举个例子:想要看懂开源中国中的部分项目分类,我们就需要了解HTTP服务器、Web容器、应用服务器、代理服务器等的概念和基本原理。
本文着重介绍,Web服务器、Web容器、应用服务器、反向代理服务器等的基本概念及基本原理。
https://my.oschina.net/llzhang/blog

一、应用软件与系统软件的概念

1. 系统软件定义

  • 是指控制和协调计算机及外部设备,支持应用程序开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统;
  • 负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。
  • 系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。

2. 应用软件定义

  • 应用软件(application software)是用户可以使用的各种程序设计语言编制的应用程序的集合,分为应用软件包和用户程序。
  • 应用软件包是利用计算机解决某类问题而设计的程序的结合,以供用户使用。

二、应用软件>程序员眼中的电脑


三、服务器软件简介

先简单了解几个概念
- HTTP: 是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个http请求到服务器上指定端口,我们称这个客户端为用户代理程序
- 用户代理(User Agent): 是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。例如:
Firefox 4.0.1 – Windows
User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

1. Web服务器(也称HTTP服务器)

HTTP协议基于TCP协议上,是一个应用层协议,用于用户代理程序和Web服务器进行通信,Web服务器通常采用一问一答的方式进行工作。下面简单简单介绍其工作原理。


  • TCP监听模块: 服务器监听某个端口,以建立和用户代理之间的连接,一旦建立连接,用户代理的后续HTTP请求将不再进入监听模块。

  • 预处理: 从TCP报文中获取HTTP请求报文,根据和用户代理的协商进行解密,解压,安全处理等,再根据服务器自身的配置进行安全处理,建立会话状态等。

  • URL路由: 解析URL字符串和动作,以确定所请求的资源,根据匹配规则路由到静态或动态资源处理模块。

  • 静态资源处理模块: 负责找到静态资源,比如HTML/JavaScript/CSS文件、图片或视频,确定内容是字符流或字节流,并确定对应MIME,比如:
    HTML生成MIME为text/html的字符流,mpeg视频文件生成MIME为video/mpeg的字节流。

  • 动态资源处理模块: 运行业务逻辑处理,动态决定返回的资源内容和类型,处理原则同上。

  • 后处理: 根据用户协商的协议进行加密,压缩,安全处理等。

  • 资源输出模块: 把处理好的内容和类型封装成HTTP报文,往TCP连接另一头的用户代理发送。

2. Web容器

随着各企业应用业务快速的发展,迫使Web开发人员面对新的挑战:如何快速写出鲁棒(健壮),可靠,符合业务需求的程序并部署。

一个解决办法是:创造一个Web程序开发框架(含运行环境,比如解释执行JSP等),这个框架解决鲁棒性,可靠性问题,提供快速开发接口。开发人员只需要专注于实现业务本身,这个框架的另外一个名字是Web容器。下面简单介绍其工作原理。


上图黄色模块URL路由及动态资源处理模块,是实现业务程序的主要使用模块。相比于Web服务器,新增或强化了以下模块:
- 分配线程池资源: 容器为每个请求分配一个线程进行处理,通常采取线程池的方式,是为高效利用CPU资源。
- 封装Request上下文: 一个请求对应一个Request上下文,它主要封装了用户请求的主要构成:URL,HTTP请求头,以及基于请求头构建的Session,Cookie等对象,方便编程使用。
- 封装Response上下文: 一个请求对应一个Response上下文,主要用于向用户代理程序返回资源,可以在其中写入输出流,或者重定向,或者返回错误码等等。
- URL路由: 在容器里,运行开发人员可以设置不同的路由匹配规则。
- 动态资源处理模块: 通常具体的容器和开发语言都有自己的高效开发模型。
- 回收资源: 回收线程资源,为了线程复用,除非服务器空闲,否则一般会将线程返回线程池。

Web容器(开发框架)本身具备了作为一个Web服务器的功能,事实上通常实现Web容器功能的服务器就是一个Web服务器。

3. 应用服务器

应用服务器早于Web服务器就出现并发展,其大部分产品都指定了“封闭的”产品专用通信协议,随着HTTP的发展,应用服务器开始添加越来越多的基于HTTP的通信功能,现在Web服务器和应用服务器的界限越来越模糊。以下为应用服务器的结构图,仅供参考。


  • 从图中可以看到,应用服务器包括了Web容器,同时内置了支持企业应用的事务、安全、集成、通信、高可用等功能,极大的减少重复开发量,保障了业务系统快速开发和部署,而它本身也算是一个Web服务器。

4. 代理服务器

代理服务器的两种重要功能:实现科学上网和负载均衡。一般可以分为正向代理与反向代理。


正向代理
  • 概念: 作为一个媒介,将互联网上获取的资源返回给相关联的客户端。正向代理是从客户端角度出发的,客户端向代理服务器发出请求,并指定目标访问服务器,代理再向目标服务器转交请求,并将获得的内容转交给客户端。
  • 作用:

    1. 访问本无法访问的服务器:比如翻墙,VPN。
    2. 加速访问服务器:比如代理服务器都是高带宽链路。
    3. Cache(缓存)作用:代理服务器都具有此功能,即一段时间内保存用户访问过的数据,当其他用户也访问此数据时,就不用去目标服务器下载了。
    4. 客户端访问授权:即代理控制客户端的权限。
    5. 隐藏访问者的行踪。
  • 用户使用: 客户端必须设置正向代理服务器,前提是要知道正向代理服务器的IP地址和代理程序端口。

反向代理
  • 概念: 它根据客户端的请求,从后端的服务器上获取资源,然后再将这些资源返回给客户端。反向代理一般是从服务端出发,根据客户端发向反向代理的请求,反向代理服务器收到后判断请求走向何处,获取结果后再反馈给客户端。

  • 作用:

    1. 保护和隐藏原始资源服务器。
    2. 负载均衡和Cache,反向代理可以做成集群,反向代理可以缓存资源,特别是一些静态数据。如果反向代理服务器和用户来自同一个网络,那么用户访问的速度就会很高,这也是CDN技术的核心。CDN(Content Delivery Network内容分发网络):是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥堵,提高用户访问响应速度和命中率。
    3. 安全防火墙、外网发布、突破互联网封锁、解决跨域问题等。
  • 基本工作原理: 黄色模块是对外网报文的处理,灰色模块是对内网报文的处理


    1. TCP监听模块: 监听TCP请求,该请求指报文内容是某应用层协议(如HTTP、FTP、EMALL等应用层协议)的请求。至于是否会单独产生线程处理,由服务器自己决定,目前最流行的是先入消息队列,然后异步处理,这样能极大提高代理的吞吐量和稳定性。
    2. 匹配被代理服务器: 代理服务器根据一个表(存放外网URL和内网服务器的对应关系,通常需人工设置),如果匹配到则继续处理,否则依据外网协议返回错误信息,比如HTTP返回404(找不到对象,请求失败,资源不存在)。
    3. 应用负载均衡策略: 比较大型的互联网应用,为了整体系统稳定性,解决单点问题,需要根据自定义策略合理的转发报文给被代理服务器。简单的策略是哈希分发或随机分发,一般可以由用户进行配置和选择。
    4. 预处理: 依据协商好的外网应用进行解密,安全,会话,解压等处理。
    5. 新生成网络报文: 依据协商好的内网应用协议生成网络报文,可能会进行加密,安全,会话,压缩等处理。
    6. 转发给被代理的服务器: 把新生成的网络报文发送给内网服务器(肯能是Web服务器、FTP服务器、邮件服务器等)。
    7. 接收网络报文: 接收内网服务器反馈的网络报文。
    8. 后处理: 依据协商好的外网应用协议进行加密,安全,会话,压缩等处理。
    9. 资源输出模块: 生成满足外网应用协议要求的报文,并发送到外网连接的另一端。
透明代理
  • 概念: 客户端不需要知道有代理服务器的存在,它改编你的报文,并会传送真实IP,加密的透明代理属于匿名代理,意思是不用设置使用代理。

  • 作用: 比如:行为管理软件:用户并不知道行为管理设备充当透明代理,当用户向目标服务器提交请求时,透明代理设备根据自身策略拦截并修改用户的报文,并作为实际的请求方向目标服务器发送请求,当接到信息回传,透明代理再根据自身的设置把允许的报文发回给用户。

VPN
  • 概念: 代理服务器是一种代理网络用户去取得网络信息的,是一种网络信息中转站,而VPN(Virtual Private Network)即虚拟专用网络:是一种常用于连接中、大型企业或团体与团体间的私人网络的通讯方法。也就是说,VPN是一种虚拟出来的企业内部专线,通过在公用网络上建立专线网络,来进行加密通讯。VPN是代理服务器的一种形式

  • 作用: 对比:代理服务器是处理内部网络访问外部网络的问题,而VPN大多是解决外部网络访问内部网络的问题。

代理引发的安全问题
  • 虽然代理服务器会为我们提供安全性和匿名性,但代理服务器也对通过它发送的数据解码,这意味着,你的所有行为尽在它的掌握之中。
  • 除了找到可信赖的服务器外,还可以采用其它安全措施,比如:使用SSL安全协议链接,SSL(Secure Sockets Layer安全套接层)及其继承者传输层安全TLS(Transport Layer Security)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

5. 总结与应用

实际应用过程中,由于具体应用的原因,这些概念之间的边界越来越模糊。如下图,仅供参考:


本文部分参考链接,借此感谢先行的前辈们

http://www.cnblogs.com/vipyoumay/p/7455431.html

http://digi.163.com/17/0407/06/CHD8VM0U001680N8.html

http://z00w00.blog.51cto.com/515114/1031287

如有不妥之处,欢迎批评指正,感谢CSDN做出的贡献,本人C链接如下:
http://blog.csdn.net/oboluochuixue12

https://my.oschina.net/llzhang/blog

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为程序员,编程必备基础知识非常重要,并且下载CSDN网站上的资源将对我们很有帮助。 首先,计算机基础是程序员必备的基础知识之一。这包括计算机体系结构、计算机网络、操作系统等方面的知识。了解计算机的工作原理,对于编写高效、可靠程序至关重要。在CSDN网站上,我们可以下载各种教程或书籍,学习这些基础知识。 其次,编程语言是程序员必备的基础知识之一。不同的编程语言适用于不同的应用场景,例如C语言用于系统开发,Python用于数据分析和人工智能等。在CSDN网站上,我们可以下载各种编程语言的学习资料和示例代码,帮助我们快速入门和提高编程能力。 此外,算法和数据结构是程序员必备的基础知识之一。良好的算法和数据结构设计可以提高程序的性能和效率。在CSDN网站上,我们可以下载各种经典算法和数据结构的实现代码,学习它们的原理和应用,提升我们的算法和编程能力。 最后,软件工程和项目管理是程序员必备的基础知识之一。了解软件开发过程、版本控制、测试和质量保证等方面的知识,可以提高我们的团队协作和项目管理能力。在CSDN网站上,我们可以下载各种软件工程和项目管理的书籍和工具,帮助我们学习和应用这些知识。 总而言之,计算机基础、编程语言、算法和数据结构、软件工程和项目管理是程序员必备的基础知识。在CSDN网站上,我们可以下载各种教程、书籍、示例代码和工具,帮助我们学习和提高这些知识和能力。 ### 回答2: 编程必备基础知识对于程序员来说非常重要,它们是构建程序和解决问题的基础。而在download.csdn.net网站上,你可以找到关于计算机基础的许多资源。 首先,计算机基础包括计算机硬件和操作系统的知识。硬件包括中央处理器(CPU)、存储器、输入输出设备等组成分。了解硬件的工作原理和性能可以帮助程序员优化程序并充分利用计算资源。同时,操作系统是计算机运行程序的核心,学习操作系统的概念和功能可以帮助程序员理解程序与硬件之间的交互过程。 其次,数据结构和算法是编程中必不可少的基础知识。数据结构涉及如何组织和存储数据,例如数组、链表、栈、队列和树等。而算法则是解决问题的步骤和策略,包括排序、搜索、递归、动态规划等。在download.csdn.net网站上,你可以找到许多关于数据结构和算法的教程和示例代码,帮助你提升编程技巧和解决问题的能力。 另外,编程语言也是程序员必备的基础知识之一。不同的编程语言有各自的语法和特点,了解它们可以帮助你选择适合的语言来解决问题。在download.csdn.net网站上,你可以找到各种编程语言的学习资料和代码示例,例如C++、Java、Python等。 最后,计算机网络和数据库也是程序员需要了解的基础知识。计算机网络涉及如何在不同计算机之间传输数据和通信。而数据库则涉及如何组织和管理数据,例如关系型数据库和非关系型数据库。在download.csdn.net网站上,你可以找到关于计算机网络和数据库的教程和工具,帮助你深入了解这些概念和技术。 总而言之,在download.csdn.net网站上,你可以找到丰富的计算机基础知识的学习资源。掌握这些知识可以帮助你成为一名更优秀的程序员,更好地构建程序并解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值