Unix哲学是否已被Web应用程序设计所抛弃?[关闭]


8

Unix哲学鼓励使用小型的,可重复使用的通用协作程序,这些程序与进程间通信的形式(例如管道,fifo,套接字)进行协作,而不是共享内存空间和链接。程序MH和uzbl通常作为应用程序的示例给出,这些应用程序在其设计中例证了Unix哲学。

如果是这种情况,那么在网络应用程序设计中完全放弃了Unix哲学是不是真的?现在,几乎所有处理请求的Web应用程序都构建为单个大型的长时间运行的进程,该进程不仅处理一种资源,而且还处理整个域中的所有资源,以处理整个请求/响应周期(除了对外部数据库程序的调用)。

这是否主要是因为通过管道传递给外部程序集合来构造对Web请求的动态响应会产生太多的过程启动时间开销?我想知道如果要使用Ruby或Python脚本会发生这种情况,但是如果您使用可编译的Haskell这样的语言,那么在构建Web应用程序时遵循Unix Philosophy的真正障碍会消失吗?


这个问题确实没有特定的答案,据我了解,没有特定答案的讨论问题通常是封闭的。
mdpc

Answers:


4

我认为这很大程度上取决于您在应用程序之间的界限(即您对应用程序的定义)以及要考虑的用例。

虽然您可以将Web浏览器实现为wget/的组合curl,但HTML / XML解析器将为每个文档节点调用简单的应用程序,而独立的JavaScript引擎将与所有这些元素进行交互,而“简单”的显示器将“仅”将以上内容的输出放在屏幕上(并将输入返回到某些核心协调过程),它甚至比今天的其他浏览器(可能是任何其他浏览器)更混乱。

至于将数据管道传输到外部进程-这实际上是如何开始的。如果您担心平均Web应用程序代码的大小,是的,它们通常很大(并且通常是因为它们位于以解释性编程语言而不是“简单”应用程序编写的平台之上的一层),但请进行比较到他们的等价物。给客户发送电子邮件,办公套件...您为它命名。所有这些都非常复杂,并且具有太多功能,无法实现为通过管道进行通信的几个过程。对于使用这些应用程序执行的任务,通常也很复杂。对于复杂的问题,没有好的简单解决方案。

也许现在是时候超越UNIX座右铭“做一些但擅长的应用程序”背后的动机了。将“应用程序”替换为“通用模块化单元”,您将获得一种基本的良好编程习惯:模块化处理,以便可以重复使用和单独开发零件。恕我直言,这才是真正重要的事情(而编程语言的选择与之几乎没有关系)。

ps (在评论之后):从严格意义上来说,您基本上是正确的-Web应用程序不遵循UNIX的哲学(被分成几个较小的独立程序)。然而,关于应用程序的整个概念似乎比较晦涩- sed在某些情况下,它通常可以充当过滤器,但可以将其视为一个应用程序。

因此,这取决于您实际使用它的方式。如果您使用进程的通常定义-某个东西作为单个进程运行(从某种意义上说,内核可以看到它),那么例如,在httpd中由模块解释的PHP Web应用程序正好相反。加载的共享库是否仍属于单个进程的范围(因为它们使用相同的地址空间),还是已经分开了(从程序员的角度来看是不变的,可以完全重用并通过定义良好的API进行通信)?

另一方面,当今的大多数Web应用程序都分为客户端和服务器部分,它们作为单独的进程运行-通常在不同的系统(甚至是物理上分开的硬件)上。这两个部分通过定义明确的(通常是文本的)接口(基于HTTP的XML / HTML / JSON)相互通信。通常(至少在浏览器中)有多个线程正在处理应用程序的客户端(JavaScript / DOM,输入/输出...),有时甚至是一个单独的运行插件的进程(Java,Flash,... )。这听起来跟原来的UNIX哲学,尤其是在Linux上,其中线程进程的(几乎)任何帐户。

除此之外,服务器部分几乎总是分成几个不同的部分-典型的示例是对结构化(或非结构化)数据执行请求的操作的独立数据库引擎。将数据库集成到Web服务器中并没有多大意义。但是,将数据库拆分为几个仅专门用于解析请求,从数据存储中获取数据,过滤数据的过程也没有多大意义。必须在创建万能的庞然大物与一群几乎无能的工人,他们大部分时间都在互相交谈。

至于文本界面:请注意,对于40年前处理的数据而言,今天的情况并不一定如此-二进制格式在空间和反序列化所需的功能上都更便宜,并且数据量非常大。

另一个重要的问题是,UNIX哲学的目标实际上是什么?我认为数字模拟,银行系统或公众可访问的照相馆/社交网络从未如此。但是运行这些服务的系统的维护肯定已经并且将来甚至还会进行。


谢谢。如果你看的Unix编程,第7章的艺术,模块的程序实际上是不被视为Unix的小工具理念的一种表达,而只是作为一个补充。见第一四段这里:faqs.org/docs/artu/multiprogramchapter.html

2

我不确定Unix哲学是否曾出现在Web应用程序设计中-但是,尽管确实有许多Web应用程序按照您描述的方式运行,但人们可能会认为这些天Web应用程序更可能是数据消耗者(考虑到越来越多的由api / web服务驱动的为网络消费生成数据的方法)。
反过来,这可能会鼓励使用相互协作的小型可重复使用的组件(以JavaScript函数的形式),因此可能存在一个小的并行组件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.