当前位置:文档之家› 分布式系统中的进程

分布式系统中的进程


A multithreaded server organized in a dispatcher/worker model.
(如果是单线程的服务器,在执行请求等待磁盘操作完成时,服务器是空闲的, 不对来自其他客户的请求进行处理,服务器每秒能够处理的请求数目大大减少)
Multithreaded Servers (2)
Servers: General Design Issues
通常把某个端点与特定的服务关联起来,每个服务器都监听一个特定的端口。有 许多服务不需要预先分配好端点,可能会使用动态分配给它的端点。在这种情况 下,客户首先必须查询到该端点号。 客户首先向守护 程序请求得到指 定服务器的的端 点号,随后再与 该服务器联系。 守护程序维护每一项服 务所使用的当前端点
Model Threads 多线程 Single-threaded process Finite-state machine 有限状态机 Characteristics Parallelism, blocking system calls
并行处理,使用会导致阻塞的系统调用,编 程更容易。
No parallelism, blocking system calls Parallelism, nonblocking system calls
有些情况下,我们需要迁移/传递程序,甚至 可能需要传递正在执行中的程序,以简化分布 式系统的设计。 将正在运行的进程移到另一台机器上去是一项 复杂而且开销庞大的任务。 进行代码迁移的理由主要是性能上的考虑。
• 如果把进程由负载较重的机器上转移到负载较轻的 机器上去,就可以提升系统的整体性能。
( 负载常常用CPU队列长度、CPU利用率或别的指标来衡量)
客户代理 考虑一个带有远程对象的分布式系统
副本
将调用请求转 发给每一个远 程对象的副本 来达到复制透 明性。 客户代理将会 透明地搜集所 有对象的响应, 并且只向客户 应用程序送回 一个返回值.
A possible approach to transparent replication of a remote object using a client-side solution.
• 发送者启动 发送者启动(sender-initiated)的迁移 的迁移
包含指向进程需要的外部资源的指针,这些资源包括文件、 打印机、设备、其它进程等。
-执行段 执行段(execution segment) 执行段
用来存储进程的当前执行状态,包括私有数据、堆栈(局部 变量值、寄存器值)和程序计数器等。
移动性分类
• 弱移动性(weak mobility) 弱移动性
可以只传输代码段以及某些初始化数据。弱移动性的典 型特征是,传输过来的程序总是以初始状态重新开始执 行的(只要目标机器能够执行移动过来的代码)。Java 小程序(applet)就是这种情况。这种方法简单。
• 使处理数据的地点离数据所在地点越近越好。
Reasons for Migrating Code
客户不需要预先安装与服务器通话所需的所有软件,必要时由远程站点动态下载 服务器特定的客户端软件(动态迁移代码),不再需要时将其丢弃。
The principle of dynamically configuring a client to communicate to a server. The client first fetches the necessary software, and then invokes the server.
通过并行获得高性能,但非阻塞系统调用使 编程比较困难。
Three ways to construct a server.
The X-Window System
The basic organization of the X Window System
Client-Side Software for Distribution Transparency
Processes in Distributed Systems
• 进程间通信 (IPC) 是一切分布式系统的核心。 • 为了有效地组织客户-服务器系统,通常使 用多线程技术更为方便。 • 线程在不同机器之间的迁移是一个重要的问 题。进程的迁移有助于获得可扩展性,也可 以帮助动态地配置客户和服务器。 • 软件代理 (agent) 作为一种新兴机制,在分 布式系统中扮演着日趋重要的角色。
代码迁移模型
代码迁移涉及在机器间移动程序,目的在于在目标机器上运行该程序。进 程迁移还必须同时移动程序执行状态、未处理信号以及其他部分环境内容。
• 进程包含3段 进程包含3 -代码段 代码段(code segment) 代码段
包含构成正在运行的程序的所有指令。
-资源段 资源段(resource segment) 资源段
3.7
超级服务器监听 所有的服务端口, 收到请求时,创 建服务器进程处 理请求的服务。
a) b)
Client-to-server binding using a daemon as in DCE Client-to-server binding using a superserver as in UNIX
The header.h file used by the adapter and any program that calls an adapter.
Object Adapter (3)
typedef struct thread THREAD; /* hidden definition of a thread */ thread *CREATE_THREAD (void (*body)(long tid), long thread_id); /* Create a thread by giving a pointer to a function that defines the actual */ /* behavior of the thread, along with a thread identifier */ void get_msg (unsigned *size, char **data); void put_msg(THREAD *receiver, unsigned size, char **data); /* Calling get_msg blocks the thread until of a message has been put into its */ /* associated buffer. Putting a message in a thread's buffer is a nonblocking */ /* operation. */
• 强移动性 强移动性(strong mobility)
还需要传输执行段。强移动性的典型特征是,可以先停 止运行中的进程,然后将它搬到另一台机器上去,再从 刚才中断的位置继续执行。很明显,强移动性要比弱移 动性强大得多,但是也更加难以实现。 D’Agents是支持 强移动性的系统的一个例子。
迁移方式
Object Adapter (1)
Organization of an object server supporting different activation policies.
Object Adapter (2)
/* Definitions needed by caller of adapter and adapter */ #define TRUE #define MAX_DATA 65536 /* Definition of general message format */ struct message { long source /* senders identity */ long object_id; /* identifier for the requested object */ long method_id; /* identifier for the requested method */ unsigned size; /* total bytes in list of parameters */ char **data; /* parameters as sequence of bytes */ }; /* General definition of operation to be called at skeleton of object */ typedef void (*METHOD_CALL)(unsigned, char* unsigned*, char**); long register_object (METHOD_CALL call); void unrigester_object (long object)id); void invoke_adapter (message *request); /* register an object */ /* unrigester an object */ /* call the adapter */
Multithreaded Servers (1)
分发器线程 (空闲的) 读取输入(文 件操作)请求
[使用多线程能 够显著提升性能]
当一个工作者线程 执行了阻塞的系统 调用,它会被挂起, 此时调度另一个线 程接着执行。(选择 执行分发器线程以 完成更多工作,也 可能选择执行已ቤተ መጻሕፍቲ ባይዱ 准备好运行的另一 个工作者线程)
Thread Implementation
Combining kernel-level lightweight processes and user-level threads.
分布式系统中的线程
多线程客户
以Web浏览器为例。
• Web浏览器一般首先获取HTML页面,随后再显示它。为了尽量 隐藏通信时延,某些浏览器在接收数据的过程中就开始显示这些 数据。用户不必等待浏览器取得整个页面的所有组件就能够查看 页面。 • 只要取得了主HTML文件,就可以激活多个独立的线程,它们分 别负责取得页面的各个部分。每个线程都与服务器建立一个独立 连接以获取数据。 • 当Web服务器复制到多台机器上,每个服务器负责提供一组完 全相同的Web文档。当对Web页的访问请求到来时,该请求依据一 定的策略被转发到其中的一个服务器。 • 在使用多线程客户的时候,可以与不同的服务器副本建立连接, 这样就可以并行地进行数据传输了,并且确保整个Web文档完全显 示出来所需的时间与使用非复制的服务器的情况相比要短得多。
相关主题