6

我正在开发一个 VOIP 平台,它允许用户使用我的服务同时拨打 100 个电话。

Asterisk 将所有呼叫详细记录存储在 CDR 表中。我想知道在哪里保存这张表的最佳位置,以获得我的系统的最佳架构。

我应该将它保存在 Asterisk Box 上并运行 cron 以将其与数据库服务器同步,还是应该通过 Asterisk Box 直接调用 DB 服务器并通过 Asterisk 远程直接在数据库上记录所有数据。

所有人都认为这两种架构各有利弊。我希望专家的帮助可以向我建议长期可扩展性和可持续性的最佳途径。

4

3 回答 3

11

最好的架构是在不同节点中使用分布式节点(服务器),即 PBX、Web 服务器和 DB 服务器。PBX 将在每次通话后填充您的 CDR 表(这必须在数据库服务器中),您可以从您的网络服务器获取这些记录以用于报告和计费目的。

不建议使用 Cron 同步数据库表,因为它也会消耗系统资源和带宽(因为每次消耗系统资源时都会运行此 cron 并且与 Db 同步会导致带宽使用)所以使用上述定义的架构可以节省将用于运行 cron 的系统资源

其次,如果您将 CDR 与 PBX 放在同一个节点中,它将由于 cron 节省系统资源,但是对于报告和计费,您必须从该节点获取数据,因此您无法节省带宽,此架构有一个主要缺点,正如您目前正在谈论的那样100 个电话同时进行,如果您有 1000 个或更多电话呢?

在这种情况下,您必须绝对使用 PBX 集群,在这种情况下,您将需要一个中央数据库服务器,该服务器将由您的 PBX 集群同步。

因此,在所有方面,我建议的架构都将完全满足您的需求。正如问题中所述,您只需要 100 个并发呼叫,您可以将单个节点用于 DB 和 Web 服务器,而 PBx 在其他节点

于 2010-10-27T10:15:01.167 回答
2

使用单独的数据库服务器来存储您的 CDR 是除业余 Asterisk 实现之外的任何事情的正确选择。Asterisk 可以很容易地为您的 CDR 选择目标数据库,并且有无数不同的数据库选项:MySQL、Postgresql。MSSQL 等。 Asterisk CDR 实现只使用一个表,因此它实际上是它与您的数据库服务器之间的一个非常简单的集成。

需要非常注意的一件事是,如果您的数据库服务器或它与您的 Asterisk 服务器之间的连接出现问题,它将影响您的呼叫处理。如果出现问题,Asterisk 会在它不断尝试连接到数据库以写入 CDR 时阻塞。在执行此操作时,它不会处理任何其他呼叫。可以说这是理想的行为,因为 CDR 对计费至关重要,并且无法记录它们意味着任何呼叫最终都可能是免费的。作为备份,您还可以将 CDR 日志记录设置为 Asterisk 服务器上的 .csv 文件,作为一种带和大括号的方法。

于 2010-10-27T23:29:24.970 回答
1

我认为如果您可以直接从 Asterisk 连接到数据库,那么您应该使用它。我在一些 Asterisk 安装(包括一个相当大的呼叫中心)上看到了它,它运行良好。

我使用的另一个选项是没有从 Asterisk 到数据库的直接连接,但是有到其他服务的 HTTPS 连接,或者在计费表结构与 Asterisk 表不兼容的情况下,它使用 CSV CDR 文件。这样的文件每隔几分钟就会发送到 CRM 系统。我使用 cron 和小 Python 脚本。通过这种方式,我可以轻松适应 CRM 计费系统使用的 CSV 格式。

于 2010-10-27T10:52:55.297 回答