问题标签 [yaws]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
166 浏览

erlang - OTP14B02 配置错误

我尝试在 OpenSolaris 上安装 OTP14B02,但在调用时出现以下错误./configure

什么可能导致这个问题,我该如何克服它?

0 投票
1 回答
7522 浏览

database - 生产中的超大型 Mnesia 表

我们使用 Mnesia 作为一个非常大的系统的主数据库。Mnesia Fragmented Tables 在测试期间表现得非常好。系统有大约 15 个表,每个表在 2 个站点(节点)上复制,每个表都高度碎片化。在测试阶段(专注于可用性、效率和负载测试),我们接受了 Mnesia 及其复杂结构的许多优势,因为我们在服务之上运行的所有应用程序都是 Erlang/OTP 应用程序。我们正在运行 Yaws 1.91 作为主 WebServer。

为了有效地配置 Fragmented Tables,我们使用了许多在大型系统中使用过 mnesia 的参考资料:
它们是:Mnesia 一年后的博客,博客的第 2 部分甚至在这里也关注了它关于散列。这些博客文章帮助我们在这里和那里微调以获得更好的性能。

现在,问题。Mnesia 有表格大小限制,是的,我们同意。但是,任何地方都没有提到对片段数量的限制。出于性能原因,并且为了满足大数据的需要,大约有多少片段可以让 mnesia 保持“正常”?

在我们的一些表中,我们有 64 个片段。withn_disc_only_copies设置为集群中的节点数,以便每个节点每个片段都有一个副本。这帮助我们解决了如果给定节点瞬间无法访问的 mnesia 写入失败的问题。同样在上面的博客中,他建议the number of fragments should be a power of 2,这个声明(他说)是从 mnesia 对记录进行散列的方式进行调查的。然而,我们需要对此进行更多解释,这里讨论的是两个的哪个幂:2,4,16,32,64,128,...?

该系统旨在在 HP Proliant G6 上运行,包含 Intel 处理器(2 个处理器,每个 4 个内核,每个内核的速度为 2.4 GHz,8 MB 缓存大小),20 GB RAM 大小,1.5 TB 磁盘空间。现在,我们可以使用其中两台大功率机器。系统数据库应该在两者之间复制。每台服务器都运行 64 位的 Solaris 10。

mnesia 的性能会在多少个片段时开始下降?如果我们将给定表的片段数从 64 增加到 128 是否可以?65536 个片段 (2 ^ 16) 怎么样?我们如何通过使用碎片来扩展我们的 mnesia 以利用 Terabyte 空间?

请务必提供问题的答案,您可以就可能增强系统的任何其他参数提供建议。

注意:所有要保存数百万条记录的表都是按disc_only_copies类型创建的,因此没有 RAM 问题。对于我们运行的几个 RAM 表,RAM 就足够了。其他 DBMS,如 MySQL Cluster 和 CouchDB 也将包含数据,并且使用与我们的 Mnesia DBMS 相同的硬件。MySQL 集群在两台服务器上复制(每台服务器都有两个 NDB 节点,一个 MySQL 服务器),管理节点位于不同的主机上。

0 投票
1 回答
1631 浏览

linux - Erlang SMP 在多核服务器上启用选项

我们在以下主机上运行 Erlang 14B03:

HP Proliant G6 服务器,有 2 个 Intel 处理器,每个处理器有 2.4GHz 速度,8MB 缓存,每个处理器有 4 个内核。服务器有 20 GB RAM。

我们将如何应用-smp模拟器选项来充分利用服务器的超线程功能。在每个处理器的每个核心上使用一个调度器(使它们总共有 8 个调度器),我们将获得哪些性能优势?

0 投票
0 回答
1568 浏览

erlang - Mnesia 分片和复制:最终的可用性和可靠性

在解决了我最近提出的有关 mnesia fragmentation的问题之后,我仍然面临许多挑战。考虑以下场景(我要问的问题基于以下内容):

您有一个数据驱动的企业应用程序,它应该
在企业内高度可用。如果内部信息源因任何原因而关闭,企业应用程序必须切换到从异地(远程)恢复中心
获取数据。

您决定将数据库复制到企业内的两个节点上
(称为DB 端 ADB 端 B)。这两者在单独的
硬件上运行,但通过快速以太网或光纤链路连接在一起。从逻辑上讲,您在这两个 Mnesia DB
之间创建了某种隧道或安全通信。
两者(A 和 B)应该具有相同的数据副本并且
始终保持同步。

现在,与此同时,恢复中心也必须拥有相同的数据副本并
始终保持同步,以防本地数据访问因攻击
或硬件故障而中断。因此,必须在 3
个站点(A面、B 面恢复中心)之间复制相同的数据库模式。

现在,在企业内部,应用程序中间件能够在数据库站点之间切换数据请求。如果 A 宕机,那么在应用程序没有意识到的情况下,请求被重新路由到数据库 B,依此类推。中间件层可以配置为进行负载平衡(请求多路复用)或灵活地使用故障转移技术。

进一步分析

现在,在创建表时,您可能希望将您的 mnesia 表分段。因此,您决定以下参数:

然后根据以下安排创建所有表注意:在上面的语法RECORD_NAME_HERE中,实际上不能是变量,因为在 Erlang 编译时必须知道记录。从安装中,您可以看到对于每个表,每个片段,例如table_name_frag2,出现在每个节点的文件系统上。

挑战和出现的问题
按照上面列出的内容进行操作后,您的第一次数据库启动是可以的,因为 mnesia 正在所有节点上运行。随着应用程序的运行,一些挑战开始出现,并列出以下内容:

  1. 假设您决定首先尝试所有写入,DB Side A并且如果此时 A 端不可用,则重新尝试调用DB Side B,以此类推recovery center,如果调用在所有 3 个数据库节点上均未返回,则应用程序网络中间件层报告数据库服务器全部不可用(这个决定可能受到以下事实的影响:如果您让应用程序随机写入您的 mnesia 副本,则很可能会出现不一致的数据库错误,以防您的 mnesia 节点丢失彼此之间建立网络连接,但不同的 Erlang 应用程序正在各自提交写入。如果您决定拥有master_nodes,那么您可能会面临丢失数据的风险)。所以通过行为,你是在强迫DB Side A成为主人。这使得其他数据库节点一直处于空闲状态,只要DB Side A启动并运行,并且与命中方 A 一样多的请求并且它不会关闭,则根本没有请求会到达 B 方和恢复中心。

  2. 通常,Mnesia 在启动时应该看到所有相关节点都在运行(mnesia 必须在所有相关节点上运行),以便它可以进行协商和一致性检查。这意味着如果 mnesia 在所有节点上都出现故障,则必须在所有节点上启动 mnesia,然后才能完全初始化和加载表。如果 Erlang VM 在远程站点上与 Mnesia 一起死掉,那就更糟了。好吧,这里和那里的一些调整和脚本可以帮助重新启动整个 VM 以及如果它出现故障的预期应用程序。

长话短说,让我回答问题。

问题

  1. 如果 mnesia在不希望inconsistent_database, starting to run database behind a partitioned network设置 a 的情况下(因为担心数据丢失)生成 的事件,数据库管理员会怎么做?mnesia master node

  2. mnesia 事件inconsistent_database, starting to run database behind a partitioned network对我的申请有什么影响?如果我不对这个事件做出反应,让事情继续原样发生怎么办?我会丢失数据吗?

  3. 在大型 mnesia 集群中,如果 Mnesia 与远程站点上的 Erlang VM 一起出现故障,该怎么办?是否有任何已知的自动处理这种情况的好方法?

  4. 有时由于网络问题或故障导致一两个节点无法访问,并且幸存节点上的 mnesia 报告给定文件不存在,尤其是在您拥有indexes. 那么在运行时,如果某些副本出现故障,我的应用程序的行为会怎样?你会建议我在 mnesia 集群中有一个主节点吗?

当您回答上述问题时,您还可以突出显示开头描述的布局,它是否能确保可用性。您可以提供有关在生产中使用 mnesia 碎片和复制数据库的个人经验。关于本文开头的链接(引用)问题,请提供可以在创建数据库时提供更高可靠性的替代设置,例如片段数量、操作系统依赖关系、节点池大小、表副本类型, ETC。

0 投票
4 回答
533 浏览

erlang - Yaws 进程死亡

我使用 OpenSTA 对我们的 Erlang 应用程序进行性能测试。测试运行 100 个虚拟用户。在某些时候,以下错误开始弹出:

测试继续运行。我找不到有关此错误的信息。是什么eacces意思Error accessing a resource

编辑@Muzaaya Joshua:正如函数中的调用file:read_file(UT#urltype.fullpath)崩溃所指出的那样ut_read(UT)。我重新编译了模块并打印了上下文。错误是eaccesUT保持:

这个文件handler.yaws是我们应用程序的入口点,在每个请求上都会被调用。当我使用 100 个或更少的虚拟用户运行测试时,我看不到这些错误。那么它怎么可能是read_file文档Missing permission for reading the file, or for searching one of the parent directories.中描述的错误呢?

提前致谢。

马丁

0 投票
1 回答
217 浏览

apache - 计算 yaws Web 应用程序上的点击次数

如果我有一个从 yaws Web 服务器运行的 Web 应用程序,我将如何计算用户对我的网站的点击次数?

我尝试使用基本方法来计算在.accessyaws 日志中找到的站点文件中的行数,如下所示:

向我指出一个更好的方法,以找出到目前为止我在偏航运行的网站上收到了多少点击。

0 投票
1 回答
1293 浏览

erlang - 如何安装 YAWS/Erlang?

在这里,我得到了如何运行 Yaws 嵌入式的小示例,但是我需要如何安装 Yaws 才能使其正常工作?

0 投票
2 回答
1156 浏览

erlang - YAWS Websocket 故障

我正在尝试从这里在我的本地运行YAWS websocket示例。它是一个基本的基于 ws 的回显服务器。

我有

  • YAWS 设置并运行localhost:8080(直接来自 Debian 存储库;除了将其指向新的根目录外,没有 conf 更改)
  • 此页面底部的代码列表包含在<erl>保存为的标签中websockets_example_endpoint.yaws
  • 此页面另存为index.yaws(我从字面上复制/粘贴了它的视图源,将其另存为该文件并将套接字请求指向localhost:8080而不是yaws.hyber.org)。

当我localhost:8080/websockets_example_endpoint.yaws在浏览器中访问时,它会按预期显示文本“您不是 Web 套接字客户端!走开!”。当我访问时localhost:8080,它会将我指向启用了 javascript 的表单,但单击“连接”按钮时什么也不做。如果我将其index.yaws指向yaws.hyber.org而不是localhost:8080,则回显服务器将完全按预期连接并工作。

谁能给我一个关于我做错了什么的提示(或者,给我指出一个工作示例的来源)?

0 投票
2 回答
660 浏览

erlang - 如何在 yaws 中保持有状态

我有一些带有状态的进程(生成)。

如何在 yaws 中维护简单的有状态服务?如何在“appmods”erl源文件中实现与进程的通信?

更新:让我们有一个简单的过程

从 Web 访问进程的最简单(微不足道:没有 gen_server、yapp)方法是什么?

也许,我需要一个带有 gen_server+yapp+yaws / appmods+yaws 的最小示例。

0 投票
1 回答
3394 浏览

windows - erlsrv - 无法在 Windows 上创建服务

试图创建这样的 Windows 服务:

我立即收到以下错误:

我认为即使在阅读了这里的文档之后,我也不太熟悉如何传递参数以及几个参数:http ://www.erlang.org/doc/man/erlsrv.html 。

有人可以举例说明如何成功创建 Windows 服务吗?我希望该服务在它出现时启动一些应用程序,并在它停止时停止这些应用程序。