Introduction To HTTP Connection 2013-01-03

概述

本部分主要讨论HTTP连接管理及其相关话题。在此之前,需要先对TCP连接及其性能相关问题进行研究。简单原因如下:

  • HTTP连接实际上就是TCP连接及其使用规则
  • 就HTTP时延而言,TCP网络时延是主要部分

此外,由于HTTP连接内容较多,本篇文章篇幅有限,下一篇文章将继续深入研究关于持久化连接和管道化连接内容。


TCP协议相关

  • 浏览器与服务器交互过程图解 broswer-server

深入理解Linux内核中断及其特性(更新) 2012-12-16

摘要

本文对中断系统进行详细的剖析,主要内容包括中断与异常、中断实现、中断控制器、中断上下文、中断亲和力和中断线程化等。 首先简单介绍 Linux 内核中断常用概念及其本质,然后对中断实现基本原理进行简要分析,接着详细探讨了中断亲和力的实现原理,最后对中断线程化背景及工作原理进行介绍。

关键字: 中断,中断控制器,中断上下文,中断亲和力,中断线程化


什么是中断

对于中断的理解我们先看一个生活中常见的例子:QQ。第一种情况:你正在工作,然后你的好友突然给你发送了一个窗口抖动,打断你正在进行的工作。第二种情况:当然你有时候也会每隔 5 分钟就去检查一下 QQ 看有没有好友找你,虽然这很浪费你的时间。在这里,一次窗口抖动就可以被相当于硬件的中断,而你就相当于 CPU,你的工作就是 CPU 这在执行的进程。而定时查询就被相当于 CPU 的轮询。在这里可以看到:同样作为 CPU 和硬件沟通的方式,中断是硬件主动的方式,较轮询(CPU 主动)更有效些,因为我们都不可能一直无聊到每隔几分钟就去查一遍好友列表。

CPU 有大量的工作需要处理,更不会做这些大量无用功。当然这只是一般情况下。好了,这里又有了一个问题,每个硬件设备都中断,那么如何区分不同硬件呢?不同设备同时中断如何知道哪个中断是来自硬盘、哪个来自网卡呢?这个很容易,不是每个 QQ 号码都不相同吗?同样的,系统上的每个硬件设备都会被分配一个 IRQ 号,通过这个唯一的 IRQ 号就能区别张三和李四了。

HTTP Packets And Packet Analysis 2012-12-16

主要内容

这次的内容主要是回顾与总计与总结关于HTTP报文相关知识,并对抓包方法与工具进行总结和介绍。

http报文整体


HTTP报文

  • 基础知识回顾

分类与组成部分:请求报文与响应报文:报文均由起始行+首部+可选的实体的主体部分

Theory And Design Of URL 2012-12-09

URL基础知识

  • URL概念

    URL是因特网资源的标准化名称。URL为用户及浏览器提供找到信息所需要的所有条件:它定义了用户所需的特定资源,它位于何处以及如何获取它。

    URI是一类通用的资源标示符,而URL只是它的子集。URI由URL和URN构成,URL通过描述资源的位置来标识资源,而URN则是通过名字来识别资源,与位置无关。

    HTTP规范将更通用的概念URI作为其资源标示符,但实际上,HTTP应用程序处理的只是URI的URL子集。

  • 通用格式

    <scheme>://<user>:<password>@<host>:<port>/<path>;<parameters>?<query>#<frag>

    几乎没有URL能够包含所有组件,一般都只包含最重要的三部分:方案(<scheme>)、主机(<host>)和路径(<path>)

  • URL语法

网关 2012-11-23

概述:网关实现使用HTTP对不同类型资源进行访问或者启动应用程序到应用程序的通信,是HTTP与使用不同协议软件互操作方式之一。


  • 什么是网关

  • 网关的分类

    • 使用位置

      • 服务器端网关
      • 客户端网关
    • 使用方式

      • 协议网关
      • 资源网关
  • 网关的应用

  • 代理与网关

  • 常见的网关

    • 协议网关

      • 服务器端安全网关
      • 客户端安全网关
    • 资源网关

      • 通用网关接口 CGI
      • 服务器扩展 API
    • 资源协议网关的区别

  • 发展与应用

    • WEB服务概念的兴起
    • 新浪微博API编程实例

Introduction To HTTP 2012-11-23

HTTP简介

  • HTTP是万维网背后的协议,是每个成功WEB事务的幕后推手。每次对WEB文档或者图像的请求、每次对超链接的点击、每次对表格的提交等这些背后都是HTTP协议。
  • HTTP协议实现互联网中信息的分发与交互,它为计算机之间相互通信提供了标准方式。HTTP协议指定客户端怎样请求数据以及服务器如何响应这些请求。
  • HTTP是一个属于应用层的面向对象的协议,适用于分布式多媒体信息系统。HTTP协议是因特网的多媒体信使,并且使用可靠地数据传输协议,确保数据在传输过程中不会被损坏或产生混乱。
  • HTTP协议历经了HTTP/0.9、HTTP/1.0、HTTP/1.0+、HTTP/1.1的版本变化,现在HTTP-NG原型建议已经提出。1.0和1.1是广泛使用的两个版本。主要围绕特性调整、结构设计、性能优化等方面改进。

HTTP特点

  • 客户端/服务器模式:最基本的通信模式。
  • 简单迅速灵活:客户端请求时,只需指定请求方法和路径比较简单;HTTP服务器的程序规模小,通信迅速;HTTP允许传输任意类型数据对象,比较灵活。
  • 【非】持续连接:既支持持续连接(1.1版本默认),也支持非持续连接(1.0版本默认)。
  • 无状态:无状态即对事务的处理没有记忆能力。缺少状态意味着后续处理相同的信息,必须重传。

Host List 2012-11-08

主机列表--Host List

Fabric 最重要的功能就是在一个/多个主机上执行一个/多个任务,那么如何指定多个主机就显得基础和关键,前面的 ENV 变量中也多次提到 host/host,role/roles, user/host/port 等概念,这些就是在指定主机时需要的信息。在下一部分介绍如何定义 fabric 中另一重要部分--任务(task).

Fabric 指定主机的方式有很多,随着作用域由全局到具体任务也不尽相同,这些方式在必要的时候也可以结合使用。在此之前需要先了解两个概念:Hosts:这里指的是 env.host_string,它的一般形式:username@hostname:port,分别是 env.user, env.host, env.port,执行任务时,fabric 分别相应部分并存入相应 ENV 变量。这里 user 和 port 一般使用默认值。Roles:即分组的 hosts。字典类型,key 为分组名,value 为分组主机列表。一般在有需要分组的情况下才会使用。如果需要制定一系列主机而又不分组可直接使用 env.hosts。

from fabric.api import env

env.roledefs = {    
    'web': ['www.buaa.edu.cn'],    

    'dns': ['ns1.buaa.edu.cn', 'ns2.buaa.edu.cn']
}

Introduction To MCollective 2012-11-08

简介

MCollective 是一个构建服务器编排(Server Orchestration)和并行工作执行系统的框架。

首先,MCollective 是一种针对服务器集群进行可编程控制的系统管理解决方案。在这一点上,它的功能类似:Func,Fabric 和 Capistrano。

其次,MCollective 的设计打破基于中心存储式系统和像 SSH 这样的工具,不再仅仅痴、迷于 SSH 的 For 循环。它使用发布订阅中间件(Publish Subscribe Middleware)这样的现代化 工具和通过目标数据(meta data)而不是主机名(hostnames)来实时发现网络资源这样的现代化理念。提供了一个可扩展的而且迅速的并行执行环境。

有文档指出: MCollective 工具为命令行界面,但它可与数千个应用实例进行通信,而且传输速度惊人。无论部署的实例位于什么位置,通信都能以线速进行传输,使用的是一个类似多路传送的推送信息系统。MCollective 工具没有可视化用户界面,用户只能通过检索来获取需要应用的实例。Puppet Dashboard 提供有这部分功能。

Introduction To Fabric 2012-10-08

简介

Fabric 既是一个 python(2.5+)类库也是一个基于 SSH 的应用程序部署和系统管理任务的命令行工具。

它提供整套本地和远程执行 shell 命令、上传下载文件操作,以及一些辅助功能比如提示和执行用户输入,放弃执行之类。

更具体点就是:

  • Fabric 是一个能让你通过命令行工具执行任意 python 函数的工具。

  • Fabric 是一个能使你通过 ssh 执行 shell 命令更简单化和 pythonic 的子例程库。

通常,我们会结合这两项,使用 fabric 来写和执行 python 函数,或者说是任务(task),来自动和远程服务器交互。典型的用法就是创建一个包含一个或多个函数的 python 模块,然后通过命令行工具 fab 来执它们。

Fabric Env 2012-10-08

环境字典

Fabric 的一个简单但是完整部分就是"environment",我的理解就是类似于平时所说的环境变量:这是一个 python 字典的子类,用来作为组合设置的注册表或者是共享任务内部数据的命名空间。

环境字典当前版本(1.4.3)是作为一个全局单例(global singleton)来实现,即fabric.state.env,被包括在 fabric.api 中。key-value 形式,其中的 keys 又称为 ENV变量(以后不加说明都称 ENV 变量)。一般用法有以下几种。

ENV AS Configure

大多数fabric的行为可以通过改变ENV变量来控制,我们初始化Fabric相关的设置也就是初始化这些 ENV 变量。比如 ENV.HOSTS。其他常见的包括: User:fabric 建立 ssh 连接时默认使用本地用户名,但是可以使用 env.user来覆盖该默认设置。还可以对 host 列表中每个 host 分别指定。 Password:在需要的时候用来显示指定默认连接或者 sudo 的密码,如果未设置,fabric 会在必要的时候提示输入。 Warn_only:这个设置是一个 boolean 值,用来决定 fabric 在远程主机执行任务时检测到错误时的行为:是放弃执行还是仅仅提示。