什么是CDR集成到基于Asterisk的应用程序的最佳架构

时间:2010-10-26 18:45:19

标签: voip asterisk cdr

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

Asterisk将所有呼叫详细记录存储在CDR表中。我想知道在哪里最好的地方可以保留这个表格,以获得我系统的最佳架构。

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

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

3 个答案:

答案 0 :(得分:11)

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

建议不要使用Cron同步数据库表,否则会占用系统资源和数据。带宽也是如此(因为每次占用系统资源时这个cron都会运行,并且与Db同步会导致带宽使用) 因此,使用上面定义的体系结构,您可以节省将用于运行cron

的系统资源

其次,如果您将CDR放置在与PBX相同的节点中,它将因cron而节省系统资源,但用于报告&计费你必须从这个节点获取数据,所以你不能保存带宽,这个架构有一个主要的缺点,因为目前你正在谈论100个调用同时如果你有1000或更多?

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

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

答案 1 :(得分:2)

使用单独的数据库服务器存储您的CDR是除了爱好Asterisk实现之外的任何其他选项。 Asterisk可以轻松地为CDR选择目标数据库,并且具有多种不同的数据库选项:MySQL,Postgresql。 MSSQL等.Asterisk CDR实现只使用一个表,所以它实际上是它与数据库服务器之间非常简单的集成。

要非常清楚的一件事是,如果您的数据库服务器或它与您的Asterisk服务器之间的连接存在问题,它将影响您的呼叫处理。如果出现问题,Asterisk会在尝试连接数据库以编写CDR时阻塞。虽然它正在这样做,但它不会处理任何其他调用。可以说这是期望的行为,因为CDR对于计费至关重要而且无法记录它们意味着任何呼叫都可能最终被释放。作为备份,您还可以将CDR日志记录设置为Asterisk服务器上的.csv文件,作为带和括号的方法。

答案 2 :(得分:1)

我认为如果你可以直接从Asterisk连接到数据库而不是你应该使用它。我在一些Asterisk安装(包括一个非常大的呼叫中心)上看到了它并且它运行良好。

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