1. Web 应用服务的发展
1

Web
Web 始于 1989 年,英国科学家 Tim Berners-Lee 和比利时人 Robert Cailliau 在欧洲粒子物理研究所 (CERN) 共同提议和构
造了在因特网 (Internet) 上使用超文本来发布、分享和管理信息。 Web 是 World Wide Web ,即互联网的简称,是一个相互
链接在一起、通过 Web 浏览器来访问的超文本文档系统 .
浏览器里看到的网页,可能包含文本、图像及其它的多媒体通过文档之间的超链接,可以从一个网页浏览到其它网页。

Web 2.0
Web 2.0, 是由 O' Reilly 公司在 2003 年造的一个词 , 2004 年召开 Web 2.0 大会之后,这个词就流行起来,意指基于 Web
的下一代社区和托管服务,比如社会网络、维基百科、大众分类等等,帮助 Web 用户协作和分享。比较显著的特点有:

丰富用户体验:超越传统的 Web 页面模式,让在线应用拥有桌面应用一样的丰富用户体验。

支持多种设备支持各种连接到因特网的设备,为用户提供无所不在、无缝的在线体验。

软件即服务 (Software as a Services,) 和永久试验版 (Perpetual Beta): 改变了传统软件开发和使用模式,转向永久在线、持续更新的模式。
2.1 Web 应用服务架构风格 - SOA
2

SOA
SOA(Service-Oriented Architecture) 是一种软件体系的架构方法,用于定义、链接和集成具有清晰边界且功能方面自包含的可重用
业务服务。服务的概念是一个独立于应用程序或基础设施 IT 平台以及上下文和其他服务的较高级别的抽象。在 Web 领域采用 SOA
架构方法的实现中,具体的协议和接口描述的标准主要包含:

SOAP
基于 XML 的简单协议,允许应用程序通过 HTTP 等传输协议交换信息。
SOAP 中使用 XML 保证了 SOAP 协议以下方面的特征:独立于平台。
可在 Internet 上使用 , 能人工读取,具有结构化特征,且基于文本。 SOAP 是推荐使用的 Web 服务通信协议,使用最为广泛。

WSDL:
WSDL 是以 XML 格式编写的用于描述 Web 服务的文档。 WSDL 文件描述四个主要事项:

服务接口提供的服务,如方法的列表名称和属性消息;

消息的数据类型;

传输协议(如 HTTP 和 JMS )的绑定信息;

调用时使用的服务地址;
备注:我们使用的 mantis 服务器(公司的 bug 管理)就以 wsdl 方式提供它的接口定义,供 robot 离线任务使用
http://mantis.smartisan.cn/api/soap/mantisconnect.wsdl
2.2 Web 应用服务架构风格 - REST
3

REST (REpresentation State Transfer)
REST 描述了一个架构样式的网络系统,比如 web 应用程序。
首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。
REST 指的是一组架构约束条件和原则 , 满足这些约束条件和原则的应用程序或设计就是 RESTful 。

REST 在 Web 领域已经广泛应用,是基于 SOAP 和 WSDL 的的替代方案。主流 Web 2.0 服务提供者
( 包括 Yahoo 、 Google 和 Facebook) 已经大量采用 REST 的开发设计风格。

REST 在 Web 应用的设计原则

客户端和服务器之间的交互在请求之间是无状态的。

从客户端到服务器的每个请求都必须包含理解请求所必需的信息。

如果服务器在请求之间的任何时间点重启,客户端不会得到通知。

无状态请求可以由任何可用服务器回答 ( 这十分适合云计算之类的环境;客户端可以缓存数据以改进性能 ) 。
3.1 基于 python 的 RESTful web 应用
4
使用 python 技术方案的服务器实例 (BugReport)

container server → gunicorn: 面向 unix-like 系统的 Python WSGI HTTP Server
(提供了低延迟,高并发的 http 伺候服的能力,一般配置用于生产环境)

pre-fork 一些 worker 子进程 , 充分利用多核的能力;

worker 的模式在 ubuntu 上,一般我们使用 gevent 模式,需要 libevent 的基础库支持;

worker 子进程 负责 launch 的 web app 服务( app 的实现兼容 wsgi 协议) ;

app server → bottle ( python 语言实现的轻量级, wsgi 应用服务器 )
(内置一个具备可用级别的小型 http 服务,可以启动用于单机开发调试)

请求 url 到服务模块 (handler) 之间映射关系 (routing)

提供对请求包 request 的解析 , 对参数的提取 (querystring, form , json)

提供对响应包 response 的封装 (status code/ header/body)

模板引擎,用于与数据集 combine 前端页面
3.2 基于 python 开发的应用服务器的系统架构
5
3.3 基于 nodejs 开发的 RESTful web 应用
6
使用 nodejs 技术方案的服务实例: CrashReport 主系统,及各子系统

express :基于 Nodejs 的 web app 服务器

可以支持接入丰富的服务器中间件实现: session, token, file upload

url 请求到后端 handler 的映射功能 (routing)

对 http 协议包的请求解析和响应包的封装
●
cluster : NodeJS 从 0.6.x 以后支持的原生模块,集群形式启动一组 app 的子进程扩展服务能力
➔
可以支持同时 fork 多个 express 应用子进程,利用主机的多核的能力
➔
几个子进程的 socket 监听,绑定到同一个服务端口

REST & SOA

  • 1.
    1. Web 应用服务的发展 1  Web Web始于 1989 年,英国科学家 Tim Berners-Lee 和比利时人 Robert Cailliau 在欧洲粒子物理研究所 (CERN) 共同提议和构 造了在因特网 (Internet) 上使用超文本来发布、分享和管理信息。 Web 是 World Wide Web ,即互联网的简称,是一个相互 链接在一起、通过 Web 浏览器来访问的超文本文档系统 . 浏览器里看到的网页,可能包含文本、图像及其它的多媒体通过文档之间的超链接,可以从一个网页浏览到其它网页。  Web 2.0 Web 2.0, 是由 O' Reilly 公司在 2003 年造的一个词 , 2004 年召开 Web 2.0 大会之后,这个词就流行起来,意指基于 Web 的下一代社区和托管服务,比如社会网络、维基百科、大众分类等等,帮助 Web 用户协作和分享。比较显著的特点有:  丰富用户体验:超越传统的 Web 页面模式,让在线应用拥有桌面应用一样的丰富用户体验。  支持多种设备支持各种连接到因特网的设备,为用户提供无所不在、无缝的在线体验。  软件即服务 (Software as a Services,) 和永久试验版 (Perpetual Beta): 改变了传统软件开发和使用模式,转向永久在线、持续更新的模式。
  • 2.
    2.1 Web 应用服务架构风格- SOA 2  SOA SOA(Service-Oriented Architecture) 是一种软件体系的架构方法,用于定义、链接和集成具有清晰边界且功能方面自包含的可重用 业务服务。服务的概念是一个独立于应用程序或基础设施 IT 平台以及上下文和其他服务的较高级别的抽象。在 Web 领域采用 SOA 架构方法的实现中,具体的协议和接口描述的标准主要包含:  SOAP 基于 XML 的简单协议,允许应用程序通过 HTTP 等传输协议交换信息。 SOAP 中使用 XML 保证了 SOAP 协议以下方面的特征:独立于平台。 可在 Internet 上使用 , 能人工读取,具有结构化特征,且基于文本。 SOAP 是推荐使用的 Web 服务通信协议,使用最为广泛。  WSDL: WSDL 是以 XML 格式编写的用于描述 Web 服务的文档。 WSDL 文件描述四个主要事项:  服务接口提供的服务,如方法的列表名称和属性消息;  消息的数据类型;  传输协议(如 HTTP 和 JMS )的绑定信息;  调用时使用的服务地址; 备注:我们使用的 mantis 服务器(公司的 bug 管理)就以 wsdl 方式提供它的接口定义,供 robot 离线任务使用 http://mantis.smartisan.cn/api/soap/mantisconnect.wsdl
  • 3.
    2.2 Web 应用服务架构风格- REST 3  REST (REpresentation State Transfer) REST 描述了一个架构样式的网络系统,比如 web 应用程序。 首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。 REST 指的是一组架构约束条件和原则 , 满足这些约束条件和原则的应用程序或设计就是 RESTful 。  REST 在 Web 领域已经广泛应用,是基于 SOAP 和 WSDL 的的替代方案。主流 Web 2.0 服务提供者 ( 包括 Yahoo 、 Google 和 Facebook) 已经大量采用 REST 的开发设计风格。  REST 在 Web 应用的设计原则  客户端和服务器之间的交互在请求之间是无状态的。  从客户端到服务器的每个请求都必须包含理解请求所必需的信息。  如果服务器在请求之间的任何时间点重启,客户端不会得到通知。  无状态请求可以由任何可用服务器回答 ( 这十分适合云计算之类的环境;客户端可以缓存数据以改进性能 ) 。
  • 4.
    3.1 基于 python的 RESTful web 应用 4 使用 python 技术方案的服务器实例 (BugReport)  container server → gunicorn: 面向 unix-like 系统的 Python WSGI HTTP Server (提供了低延迟,高并发的 http 伺候服的能力,一般配置用于生产环境)  pre-fork 一些 worker 子进程 , 充分利用多核的能力;  worker 的模式在 ubuntu 上,一般我们使用 gevent 模式,需要 libevent 的基础库支持;  worker 子进程 负责 launch 的 web app 服务( app 的实现兼容 wsgi 协议) ;  app server → bottle ( python 语言实现的轻量级, wsgi 应用服务器 ) (内置一个具备可用级别的小型 http 服务,可以启动用于单机开发调试)  请求 url 到服务模块 (handler) 之间映射关系 (routing)  提供对请求包 request 的解析 , 对参数的提取 (querystring, form , json)  提供对响应包 response 的封装 (status code/ header/body)  模板引擎,用于与数据集 combine 前端页面
  • 5.
    3.2 基于 python开发的应用服务器的系统架构 5
  • 6.
    3.3 基于 nodejs开发的 RESTful web 应用 6 使用 nodejs 技术方案的服务实例: CrashReport 主系统,及各子系统  express :基于 Nodejs 的 web app 服务器  可以支持接入丰富的服务器中间件实现: session, token, file upload  url 请求到后端 handler 的映射功能 (routing)  对 http 协议包的请求解析和响应包的封装 ● cluster : NodeJS 从 0.6.x 以后支持的原生模块,集群形式启动一组 app 的子进程扩展服务能力 ➔ 可以支持同时 fork 多个 express 应用子进程,利用主机的多核的能力 ➔ 几个子进程的 socket 监听,绑定到同一个服务端口