第十一章 分布式应用程序

第十一章分布式应用程序

使用网络的应用程序,称为分布式应用程序(distributed applications),现在,已经越来越重要。幸运的是,.NETBCL 和其他的库提供了许多结构,使得通过网络通信变得容易,进而,用 F# 创建分布式应用程序也是很简单。

网络概述

已有几类分布式应用程序,通常分为:客户端-服务器(client-server)应用程序,其中客户端向中央服务器的请求;点对点应(peer-to-peer)用程序,萨满教这里,计算机之间相互交换数据。这一章,我们将重点学习客户端-服务器应用程序,由于这是目前更常见的。

不管你想创建哪种分布式应用程序,计算机之间的数据交换都是由协议控制的。协议(protocol)是一种标准,定义了通过网络进行通信的规则。

构建网络应用程序通常考虑的一项最具挑战性的任务,程序员有好的理由才可以执行。当创建应用程序时,必须考虑三个重要需求:

可伸缩性(Scalability):应用程序被许多用户并行使用时,必须保持响应。通常,这就需要广泛地测试与分析服务器代码,保证能在高负载下的执行。

容错(Fault tolerance):网络本来就不可靠,因此,写的代码不应该假定网络永远是好的;如果你这样做了,应用程序对于最终用户来说可能是令人沮丧的。每个应用程序都应尽力保证通信错误能够顺利处理,给用户适当的反馈,显示出错信息,也可提供诊断和重试的机会,不要因为网络故障而使应用程序崩溃;还应该考虑数据的一致性(即,能够保证所有必须的更新在到达目标计算机时保持数据一致吗?),使用事务(transactions)和关系型数据库存储数据可以帮助做到这一点。根据应用程序的类型不同,也可以考虑种离线模式,为用户提供访问本地数据的能力,当网络以后可用时,再响应网络请求。是大多数的电子邮件的客户端都提供了这种离线模式。

安全(Security):每个应用程序都有安全的问题,但是,在网络编程中安全极其重要。这是因为,一理把应用程序公开到网络上,也就开放了,网络上的所有用户可以攻击;因此,如果应用程序公开到互联岗上,就会有数千甚至上百万的潜在攻击者。通常,需要考虑的包括,需要跨网络传输的数据安全,签名保证它不被篡改,或者加密确保只有适当的人可以读;也要保证连接到应用程序的人经过认证和授权,知道他是谁,想做什么。

幸运的是,现代程序员不需要自己动手,而是由网络协议帮助解决这些问题。例如,如果我们想发送的数据很重要,不希望网络其他人读取,我们并不需要自己来加密数据,相反,应使用网络协议提供的功能。这些协议以库中的组件形式公开,为我们实现了这些功能。协议的类型、使用的库,由应用程序的需求决定。有些协议提供了加密和认证,而有些则没有;有些是用于客户端服务器应用程序,而有些适用于点对点应用程序。在这一章,我们将学习下面的组件和库,以及它们所实现的协议:

TCP/IP 套接字(sockets:):为应用程序(客户端服务器、点对点)提供了大量的网络传递控制;

HTTP/HTTPS 请求:支持网页向服务器的请求,通常只为客户端服务器应用程序;

网站服务:公开应用程序,使其他应用程序可以请求服务,通常只为客户端服务器应用程序;

Windows 通信基础(WindowsCommunication Foundation,WCF):扩展网站服务,为现代程序员提供更多功能支持,包括但不限于,安全性、事务,同时为客户端服务器、点对点应用程序。

这些协议是彼此相接的,TCP/IP 是最低层的编程接口(API),Windows 通信基础是最高层的编程接口,网站服务是独立于Windows 通信基础的,但是,由于Windows 通信基础也实现了网站协议,因此,可以认为网络服务是Windows 通信基础的子集。图 11-1 是这些协议彼此关系的概览。

图 11-1 .NET 网络编程应用程序接口概览

尽管分布式编程天生具有挑战,不这,通常还是值得学习的,因为它可能够访问我们感兴趣的数据,与其他人共享我们程序的结果。到本章结束,我们就能写出这样的程序,包括客户端服务器式聊天程序,读 RSS(称为简易信息聚合,或聚合内容)订阅,访问保存在谷歌电子表格中的数据,在推特(Twitter)上找出所有的朋友,以及创建网站服务和Windows 通信基础服务。

在网络上提供用户界面的简单方法是开发网站应用程序,网站应用程序不在这里讨论,可以参考第八章的“ASP.NET”一节。

第十一章 分布式应用程序

时间: 2024-08-14 07:28:30

第十一章 分布式应用程序的相关文章

《汇编语言 基于x86处理器》第十一章 MS-DOS 编程部分的代码 part 2

? 书中第十一章的程序,主要讲了 Windows 接口,在小黑框中进行程序交互 ● 在屏幕指定位置输出带自定义属性的文字 1 INCLUDE Irvine32.inc 2 3 .data 4 outHandle HANDLE ? 5 cellsWritten DWORD ? ; 输出计数(输出参数) 6 xyPos COORD <10,2> ; 输出坐标 7 buffer BYTE 41h,42h,43h,44h,45h,46h,47h,48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh,

第十一章 重构和测试函数式程序

第十一章重构和测试函数式程序 本章介绍 ■重构函数式程序 ■使用不变性推理代码 ■为 F# 程序写单元测试 ■使用延迟值缓存结果 这本书的主题之一就是,函数编程理如何使解代码更容易理解,只需要通过阅读就可以:特别是在需要修改陌生程序,或者通过组合现有函数实现行为,或者重构现有的代码时,尤为重要.函数式编程更容易重构,缘于清晰度和模块化:可以改善代码,并且有信心这种改变不会破坏程序的其他部分. 正如在函数式编中的很多事情一样,修改代码而不改变其含义的思想,与数学密切相关,因为不改变表达式含义的操作

Python 编程快速上手 让繁琐工作自动化-第十一章实践项目 11.11.1命令行邮件程序

11.11.1 命令行邮件程序 编写一个程序,通过命令行接受电子邮件地址和文本字符串.然后利用selenium登录到你的邮件账号,将该字符串作为邮件,发送到提供的地址(你也许希望为这个程序建立一个独立的邮件账号).这是为程序添加通知功能的一种好方法.你也可以编写类似的程序,从Facebook 或Twitter 账号发送消息.这个项目弄了好几天,头都快炸了,终于弄好了代码如下:#!/usr/bin/env python#encoding:utf-8 '''@author:Kevinbr/>@aut

第十一章 读书笔记

第十一章  Linux驱动程序中的 并发控制 并发(concurrency)指的是多个执行单元同时.并行被执行.而并发的执行单元对共享资 源〈如硬件资摞.程序中的全局变量.静态变量等〉的访问很容易导致竞态条件( race conditions). 自旋锁并不关心锁定的|临界区究竟是怎样的操作,不管是读还是写,都只允许同时只有一个执 行单元可以极取自旋锁, 即使有多个单元同时读取临界区资源也会被锁住.实际上,对于并发访问 共享资源时,多个执行单元同时读取它是不会有任何问题的.为了解决这个问题,自旋

第十一章 异常,日志,断言和调试

第十一章 异常,日志,断言,调试 由于程序的错误或一些外部环境的影响造成用户数据的丢失,用户就有可能不再使用这个程序了.为了避免,应该做到以下几点: 向用户通告错误 保存所有的操作结果 允许用户以适当的形式退出程序. 11.1 处理异常 当由于出现错误而使得某些操作没有完成,程序应该: 返回到一种安全状态,并能够让用户执行一些其他命令:或者 允许用户保存所有操作的结果,以适当的方式终止程序 异常处理的任务就是将控制权从错误产生的地方转移给能够处理这种错误的处理器.程序中可能出现的错误和问题: 用

第十七章、程序管理与 SELinux 初探

1. 什么是程序 (Process) 1.1 程序与程序 (process & program): 子程序与父程序, fork-and-exec, 系统服务 1.2 Linux 的多人多工环境2. 工作管理 (job control) 2.1 什么是工作管理 2.2 job control 的管理:&, [ctrl]-z, jobs, fg, bg, kill 2.3 离线管理问题: nohup3. 程序管理 3.1 程序的观察: ps (ps -l, ps aux, zombie), t

《Java并发编程实战》第十一章 性能与可伸缩性 读书笔记

造成开销的操作包括: 1. 线程之间的协调(例如:锁.触发信号以及内存同步等) 2. 增加的上下文切换 3. 线程的创建和销毁 4. 线程的调度 一.对性能的思考 1 性能与可伸缩性 运行速度涉及以下两个指标: 某个指定的任务单元需要"多快"才能处理完成.计算资源一定的情况下,能完成"多少"工作. 可伸缩性: 当增加计算资源时(例如:CPU.内存.存储容器或I/O带宽),程序的吞吐量或者处理能力能相应地增加. 2 评估各种性能权衡因素 避免不成熟的优化.首先使程序正

第十七章、程序管理与 SELinux 初探 工作管理 (job control)

工作管理 (job control) 这个工作管理 (job control) 是用在 bash 环境下的,也就是说:『当我们登陆系统取得 bash shell 之后,在单一终端机介面下同时进行多个工作的行为管理 』.举例来说,我们在登陆 bash 后, 想要一边复制文件.一边进行数据搜寻.一边进行编译,还可以一边进行 vi 程序撰写! 当然我们可以重复登陆那六个文字介面的终端机环境中,不过,能不能在一个 bash 内达成? 当然可以啊!就是使用 job control 啦! ^_^ 什么是工作

第十一章 泛型算法 C++ PRIMER

vector<int>::const_iterator result = find(vector.begin(). vector.end(),search_value); 如果查找失败,分会end()  如果有两个,会返回哪一个的迭代器? int *reauslt = find(ia,ia+6,search_value); 也可以同样处理字符串 算法要以<algorithm><numeric>,依赖于迭代器和迭代器的算法实现,算法可能改变值,可能移动元素,单从不直接添加