Clojure 2024 状态调查 中分享您的想法!

欢迎!请参阅 关于 页面,了解有关此工作方式的更多信息。

0
Clojure
再次显示

从 Ring 开始。我最熟悉的是 PHP 中的网络开发,在 PHP 中,PHP 应用程序会在每次请求时重新启动,并由 Web 服务器代理,例如 Apache。

这当然意味着 PHP 应用程序本身不可能维护任何内存中的状态(PHP 强制执行“无共享”架构)。因此,我注意到在 Java 和 Clojure 等其他语言中,服务器是长运行进程,因此有一个全局状态选项。尽管如此,我仍然希望遵守 12 因素原则,因此我明白应该避免应用程序状态,就像我使用 PHP 编程那样。

我对重新加载工作流程等有所了解。当然,在许多情况下都是合理的。

然而,由于我现在编写 Web 应用程序的目标是没有任何全局状态,这意味着我实际上不需要重新加载工作流程(因此仅 lein ring 足够 - 只需重新加载代码,而不是状态)。

我想知道我是否忽略了什么。例如,如果我发现配置变量,这可能算作“状态”,那么可能需要重新加载。是的,我会适时亲自测试以了解更多信息。

但是,我只是想找到任何关于这些点的通用提示/讨论,帮助我迈出正确的步伐。

1 答案

0
by

一个“环”型web服务器的状态可能包括以下内容:端口号、监听端口的Jetty对象、针对web服务的客户端池和用于传统数据库的连接池、程序每次启动时从文本文件构建的Lucene拼写索引……以及可能从数据库中存储的某些灾难性的不恰当缓存。通常,你不会期望服务器状态中保存太多关于网站活跃用户的信息,因为在多服务器托管情况下,访客可能会从一个服务器切换到另一个服务器。

...