构建现代分布式系统
1. 分布式系统基础概念
在分布式应用中,当调用远程调用接口(Remote Call Interface)包中声明的子程序时,如果该包位于与调用者不同的分区上,就会透明地进行远程调用。远程类型(Remote Types)包中声明的类型可在分区间传输,具有全局语义,如整数在每个分区含义相同;而指针只有局部语义,在不同机器间传输无意义。共享被动(Shared Passive)包中声明的变量可被多个分区访问,通过简单的变量赋值和读取就能在分区间交换数据,该包可置于活动或被动分区。
只要包带有远程调用接口编译指示,其声明部分的子程序就可被远程调用。必要时,编译器会生成存根和框架以实现远程调用,分类依赖规则确保这一过程可行。
2. 工具 Gnatdist
为解决分布式应用构建问题,引入了外部工具 Gnatdist。它读取用类似 Ada 语言编写的配置文件,为每个活动分区生成一个可执行文件,且与 Gnat 用于构建非分布式程序的工具 Gnatmake 共享代码。
Gnatdist 允许分布式应用设计者在分区上应用编译指示和属性,从而设置分区属性,例如服务临时不可用时的行为。
3. Ada 95 模型的局限性
Ada 95 模型在分布式应用方面虽优于 Ada 83,但仍无法满足当今需求。它未对重要特性和网络协议进行标准化,影响了互操作性。例如,经过验证的实现可能不支持异构系统,不同编译器厂商的实现也可能不兼容。
此外,分布式应用在分区故障时的行为未定义,通信的安全性和完整性等更高级概念也未集成。
4. 移除单点故障
原有的分