A Filosofia do Unix foi abandonada no design de aplicações web? [fechadas]

8

A Filosofia Unix encoraja o uso de programas colaborativos pequenos e genericamente reutilizáveis que colaboram com formas de comunicação entre processos como pipes, sockets, em oposição a espaço de memória compartilhada e linkage. Os programas MH e uzbl são frequentemente dados como exemplos de aplicações que exemplificam a Filosofia Unix em seu design.

Se este é o caso, não é verdade que a Filosofia Unix foi totalmente abandonada no design de aplicações web? Quase todos os aplicativos da Web que processam solicitações agora são construídos como processos monolíticos de longa execução que lidam com todo o ciclo de solicitação / resposta (além de chamadas para um programa de banco de dados externo) não apenas para um recurso, mas todos os recursos em um domínio inteiro.

Isso ocorre principalmente porque canalizar uma coleção de programas externos para construir uma resposta dinâmica a uma solicitação da Web sobrecarrega demais o tempo de inicialização do processo? Eu posso ver como este é o caso se você quer canalizar para scripts em Ruby ou Python, mas talvez se você usar uma linguagem como Haskell que você pode compilar, quaisquer obstáculos reais para seguir a filosofia Unix na construção de aplicativos da web desaparecem? / p>     

por dan 18.02.2013 / 16:35

2 respostas

4

Acho que depende bastante de onde você desenha um limite entre os aplicativos (ou seja, qual é a sua definição de um aplicativo) e quais casos de uso você leva em consideração.

Embora você possa implementar um navegador da Web como uma fusão de wget / curl , um analisador HTML / XML que chamaria aplicativo simples para cada nó de documento, um mecanismo JavaScript independente que interaja com tudo isso e um displayer "simples" que "apenas" colocaria a saída dos itens acima na tela (e devolveria as entradas de volta a algum processo central de coordenação), seria ainda mais confuso do que (provavelmente qualquer) outro navegador de hoje.

Como para piping os dados para um processo externo - é assim que realmente começou . Se você está preocupado com o tamanho de um código médio de aplicativo da Web, sim, eles geralmente são grandes (e geralmente porque são uma camada acima de uma plataforma escrita em uma linguagem de programação interpretada, em vez de uma aplicação "simples"), mas comparada aos seus equivalentes. Clientes de e-mail, suítes de escritório ... você escolhe. Todos estes são bastante complexos e têm muita funcionalidade para serem implementados como um par de processos que se comunicam através de tubos. As tarefas para as quais você está usando esses aplicativos também são complexas. Não há boas soluções simples para problemas complexos.

Talvez seja hora de olhar um pouco além da motivação por trás do lema do UNIX "aplicativos que fazem um pouco, mas são bons nisso". Substitua "aplicativos" por "unidades modulares gerais" e você chegará a uma das boas práticas de programação básicas: fazer as coisas de modo modular, para que as partes possam ser reutilizadas e desenvolvidas separadamente . Isso é o que realmente importa, IMHO (e a escolha da linguagem de programação tem muito pouco a ver com isso).

ps (seguindo o comentário) : No sentido mais estrito você está principalmente certo - aplicações web não estão seguindo a filosofia UNIX (de serem divididas em vários programas independentes menores ). No entanto, todo o conceito do que uma aplicação é parece bastante obscuro - sed provavelmente poderia ser considerado como uma aplicação em algumas situações , enquanto normalmente age apenas como um filtro.

Por isso, depende de como você quer literalmente levá-lo. Se você usa a definição usual de um processo - algo rodando como um único processo (no sentido do kernel o vê), então, por exemplo, uma aplicação web PHP interpretada no httpd por um módulo é exatamente o oposto. As bibliotecas compartilhadas carregadas ainda caem no escopo de um único processo (porque elas usam o mesmo espaço de endereço) ou são algo mais separado (imutável do ponto de vista do programador, completamente reutilizável e se comunicando através de uma API bem definida)?

Por outro lado, a maioria das aplicações web atuais é dividida em partes de cliente e servidor, que estão sendo executadas como processos separados - geralmente em sistemas diferentes (e até mesmo em hardware separado fisicamente). Essas duas partes se comunicam entre si por meio de uma interface bem definida (geralmente textual) (XML / HTML / JSON sobre HTTP). Muitas vezes (pelo menos no navegador) existem vários threads que estão processando o lado do cliente do aplicativo (JavaScript / DOM, entrada / saída ...), às vezes até um processo separado executando um plugin ( Java, Flash, ...). Isso soa exatamente como a filosofia original do UNIX, especialmente no Linux, onde threads são processos por (quase) qualquer conta.

Além disso, as partes do servidor são quase sempre divididas em várias partes distintas - o mecanismo de banco de dados separado que executa operações solicitadas em dados estruturados (ou não estruturados) é um exemplo canônico. Simplesmente não faz muito sentido integrar um banco de dados em um servidor da web. No entanto, também não faz muito sentido dividir um banco de dados em vários processos que se especializariam em apenas analisar solicitações, buscar dados do armazenamento de dados, filtrar os dados ... É preciso encontrar um equilíbrio entre criar um monstro onipotente e um enxame de trabalhadores quase nilpotentes que passam a maior parte do tempo conversando entre si.

Quanto à interface textual : note que o que era verdade para dados processados há 40 anos não é necessariamente verdade hoje - os formatos binários são mais baratos tanto no espaço quanto na energia exigidos para de / serialização, e o quantidade de dados é imensamente maior.

Outra questão importante também é: qual tem sido o alvo da filosofia do UNIX? Eu não acho que simulações numéricas, sistemas bancários ou galerias de fotos publicamente acessíveis / redes sociais já existiram. Manutenção de sistemas executando esses serviços, no entanto, definitivamente tem sido e provavelmente será no futuro.

    
por 18.02.2013 / 17:22
2

Não tenho certeza se a Unix Philosophy já esteve presente no design de aplicativos da Web - no entanto, embora seja verdade que muitos aplicativos da Web se comportam da maneira descrita, pode-se considerar que os aplicativos da Web têm maior probabilidade de ser consumidores de dados (dado o método cada vez mais api / web de produzir dados para consumo na web). Isso, por sua vez, pode encorajar o uso de componentes pequenos e reutilizáveis (na forma de funções JavaScript) que colaboram entre si, portanto, um pequeno paralelo pode existir.

    
por 18.02.2013 / 17:28