将 Progress 应用程序移植到 Linux

作者:Thomas Barringer

Progress 软件公司最近宣布,当您阅读本文时,Progress RDBMS 将以原生 Linux 端口的形式提供。为什么这是个好消息?因为它立即在我们最喜欢的操作系统上提供了数千个新的应用程序。

超过 5,000 个应用程序由独立软件供应商 (ISV) 使用 Progress 编写。所有这些应用程序都有可能使用 Linux 作为后端服务器,而且许多(如果不是大多数)都提供了字符界面,这将允许 Linux 也充当客户端。

Progress 环境

如果您不熟悉 Progress,它是一个企业级关系数据库和 4GL 开发环境,已经在 UNIX 系统上运行了 15 年。它支持各种操作系统,包括 NT、AIX、HP/UX、Solaris、Compaq Tru64 UNIX 和许多其他流行的服务器平台。它还支持 UNIX 上的字符客户端以及字符或图形化的 MS-Windows 客户端。

数据库引擎的 8.3 版本,即第一个被移植的版本,可以在一个数据库中存储半 TB 的数据。(当然,如果这还不够,您可以同时连接到数百个数据库。)此外,每个数据库可以处理多达 4,000 个并发用户连接。版本 9 将在 8.3 版本之后不久移植,支持 1000 倍的数据和多达 10,000 个用户。

在我看来,Progress 的优点之一是它也可以向下扩展。如果您想在低端 486 上运行单用户,您可以这样做。数据库大小可以缩小到小于 1MB。运行单用户会话,或远程为一个小型应用程序服务少量用户,可以很好地适应 16MB 的 Linux 机器。尝试在 NT 上运行 Oracle,看看您需要多大的功率才能完成相同的工作。

部署架构

Linux 在 Progress 部署中处于什么位置?为了回答这个问题,您需要了解一些关于 Progress 的架构。

数据库可以以单用户或多用户模式访问。单用户会话使单个客户端进程完全控制数据库。多用户 Progress 会话由三种不同类型的进程组成:客户端、服务器和一个管理数据库连接的代理进程。可以选择部署架构来支持各种业务需求和可用的机器。

代理进程在包含数据库的机器上运行。代理管理客户端连接请求,并分配一个共享内存区域,该区域供连接到数据库的所有进程使用。

客户端进程是用户看到的进程;它向终端呈现信息并接受来自终端的输入。客户端也可以作为后台进程运行,在这种情况下,它不与终端关联,但在架构上与前台客户端相同。客户端有两种类型:自助服务和远程。自助服务客户端与代理和数据库在同一台机器上运行,并处理自己的数据库操作请求。远程客户端使用 TCP/IP 网络层,而不是直接连接到代理创建的共享内存区域。这允许远程客户端与数据库位于不同的机器上。代理生成服务器进程以响应远程客户端请求。每个服务器进程可以处理许多并发客户端连接。远程客户端向服务器发送数据检索和更新请求;服务器执行请求,就好像它本身是自助服务客户端一样,并将结果发送回远程客户端。

这种设计可以轻松地分离数据库和客户端。不仅如此,它们之间的通信是标准的,因此您可以混合和匹配操作系统。如果您当前正在针对 NT 服务器运行 Windows 客户端,则可以将数据库移动到 Linux,而 Windows 客户端的操作将保持不变。

新的部署选项

这种灵活性使 Linux 能够在 Progress 部署中扮演几个不同的角色。诚然,用 Linux 替换后端服务器机器的能力在几个方面都是真正的福音,任何 Linux 爱好者都会告诉您:更小的占用空间、成本差异以及该操作系统的可靠性早已广为人知。此外,远程维护在 Linux 中是免费的;否则,您不仅必须购买昂贵的操作系统许可证,还必须购买占用大量网络的第三方远程控制软件。

Porting Progress Applications to Linux

图 1. Linux 可以从过载的服务器卸载客户端工作。

换个角度来看,假设您已经有一台高端 UNIX 服务器,300 个用户 telnet 进入该服务器以运行他们的基于字符的应用程序。如果单台机器在数据库服务器的负载下以及运行所有客户端进程时都感到吃力,那么现在可以通过添加一些 Linux 服务器来处理远程客户端,轻松地卸载一半的工作量,以及相当比例的内存使用率和磁盘 I/O。用户不再登录到您的主 UNIX 机器;他们登录到 Linux 服务器并将它们用作远程客户端。图 1 是这种安排的图示。让我们讨论一下这种安排的四个好处。

第一,数据库服务器上的负载减少了。在机器上运行(例如)十个客户端所消耗的内存被释放出来,以换取一个服务器进程,该进程的大小与单个客户端大致相同。服务器进程可以支持的客户端数量将根据应用程序的需求而变化。服务器进程通常可以同时为 5 到 20 个远程客户端的请求提供服务。代理会根据来自客户端的新连接请求数量和代理参数设置自动启动额外的服务器进程。以前用于客户端计算、屏幕操作和其他前端任务的 CPU 周期被完全释放并转移到新的 Linux 机器上。客户端的任何磁盘 I/O,用于临时存储、记录排序和应用程序打印或其他输出,也从服务器中删除。因此,使用 Linux 可以提高您昂贵的高端服务器机器的可用功率。

第二,安全性级别提高了,因为用户不再需要在您的主服务器上拥有登录名。相反,他们现在使用 TELNET 登录到不包含任何关键数据的 Linux 机器之一。

第三,如果所有 Linux 机器的配置或多或少相同,这从管理角度来看也是有意义的,那么您将提高架构的容错能力。如果其中一台 Linux 机器由于某种原因需要停止服务,那么以前使用该机器作为客户端的用户可以立即登录到另一台 Linux 机器并继续他们的工作。

第四,运行 Linux 的机器需要的配置比您想象的要少。考虑到每个客户端慷慨的 4 或 5 兆字节内存和极少的磁盘空间,十几个或更多表现良好的交互式客户端应该能够在单个中档处理器上运行。这种小巧的占用空间,加上当今 PC 的价格,意味着这些客户端服务可以以远低于每席一百美元的价格购买。将这个价格与添加第二台高端服务器来执行相同功能的价格进行比较。

Linux 机器和数据库服务器之间所需的网络带宽将根据您的应用程序而有所不同。您可以选择将 Linux 机器放置在靠近数据库服务器的位置,或者将它们分发到您的外地办事处,具体取决于应用程序需求和可用的基础设施。

Linux 可能在您的部署的多个级别上都有用武之地,并且实际上可以根据需要分阶段引入,或者仅在方便的地方使用。

移植现有应用程序

由于前端(应用程序)和后端(数据库)如此独立,让我们一步一步地检查需要做什么。

要移动现有的基于 Progress 字符的应用程序,好消息是只需重新编译即可。就是这样!实际上,在某些情况下,您甚至不必重新编译;如果您保持在同一机器类中,相同的 r 代码(编译代码)只需从一台机器复制到另一台机器即可运行。这是因为 Progress r 代码不是真正的编译代码,而是一种解释的二进制格式。只要您保持在同一机器类中(定义为具有相同字节对齐方式、字节序和字大小的机器),您的编译代码甚至不需要重新编译。

此过程中唯一可能出现复杂情况的时候是当您的应用程序中包含特定于操作系统的代码时。Progress 代码不关心它在哪个操作系统上运行,但是如果您调用外部例程(例如带有特定于旧操作系统的标志的 ps),您将需要进行这些修改。但是,这种情况非常罕见。常见的操作系统功能(例如文件复制和删除)可以在 Progress 中通过使用 OS-COPY 等语句来通用处理,这些语句与底层平台无关。

在某些情况下,移植现有数据库也同样容易。官方上,Progress 不支持在操作系统或机器架构之间复制数据库。为了做到这一点,您必须进行转储和加载。这是一个从数据库中以 ASCII 形式提取结构和所有数据的过程,然后将 ASCII 数据复制到新机器并将其加载到新数据库中。但是,有一个不受支持的漏洞,我经常利用它。目前,我使用 NT 和 Linux 双启动我的笔记本电脑,并且我在一个 NT FAT 驱动器上有一个 Progress 数据库,当我启动 Linux 时它是可见的。可以从任何一个操作系统访问此数据库。我有应用程序代码(未编译,因为这对我来说更方便,但我也可能共享编译版本),无论我在启动时做出何种选择,它都可以访问此数据库。没有比这更好的证明了。复制数据库的真正技术限制与复制编译代码的限制大致相同:如果机器架构和字大小相同,您应该没问题。

如果您的情景确实需要转储和加载,并且您希望您的应用程序不可用的时间尽可能短,那么有一些技术可以显着减少数据库的停机时间。我经常出差到客户现场,并看到了一些极端的例子:一个数据库,其大小可以达到数十 GB,仅在转储和加载的最后阶段不可用 45 分钟。

然而,这种性能需要预先进行一些定制工作。通常,它涉及在实际切换点之前转储和加载稳定数据;当您可以最广泛地定义稳定数据时,可以节省最多的时间。例如,如果您的表上有修改日期,则可以预先转储和加载整个表;然后,当您准备好切换到新系统时,仅重新转储自第一次转储以来修改的那些记录。

良好的匹配

移植用 Progress 编写的现有字符应用程序非常简单。随着已经编写了超过 5000 个应用程序,Progress 在 Linux 场景中的出现应该在“Linux 没有应用程序”的论点中造成很大的冲击。Progress 在其部署功能方面足够灵活,它允许将 Linux 透明地集成到现有部署中,以提供更高的可扩展性和成本效益。

Porting Progress Applications to Linux
Tom Barringer 是 Progress 软件公司的高级顾问。他最常出现在机场休息室或教室前。他在业余时间做什么尚待确定,因为他几乎没有业余时间。但是,感谢现代科技的奇迹,通常可以通过 tomb@progress.com 联系到他。
加载 Disqus 评论