【发布时间】:2018-09-20 22:03:22
【问题描述】:
情况: 客户正在运行一个基于 Web 的金融应用程序,其主要功能包括大量的进出金融交易。 这些过程是自动化的。 我们在午夜运行几个 cron 作业任务,为合适的客户分配付款。 我们平均每月有 2000 到 3000 名新客户,目前共有 30,000 名客户。 到目前为止,我们的事务表有近 900000 条记录,预计未来几个月将大幅增加。
技术:最初我们使用 LAMP 环境,使用 Codeignitor 框架,Laravel elequont ORM 进行查询和 Mysql。 托管:托管在 AWS 中,T2 小实例,未实施负载均衡器。 **此应用程序是三年前开发的。
问题: 目前,我们的客户在高峰时段面临停机,他们的客户在查看他们的交易档案和统计数据时也面临加载时间问题。 他们还担心如果 cron 作业任务失败,他们将无法处理这种情况。 (进行了大量计算,并在大量客户中插入了金额)。
我们的计划: 所以现在,我们计划以性能和容错作为我们的主要目标,从头开始重新设计应用程序。这个应用程序必须至少对另一个应用程序是可靠的 六到八年。
技术: Node (Sails.js)、Angular 5、带负载均衡器的 AWS、AWS RDS (Mysql)
我们的方法:根据我们的分析,我们几乎没有找到导致性能下降的直接原因。首先,对于访问沉重表的客户有许多统计数据。 大多数统计数据都在当月。所以我们计划为此添加日志表,并在特定的 table.addMethod 中只保留当前月份的数据
所以,可能会有这样的日志表,它只会进行读取操作。
查询:
- 是否可以将现成的表拆分到单独的数据库中,或者我们可以将它放在单个数据库中。
- Mysql 缓冲区缓存与 Redis / memcache 有何不同,是否有更多流量流入时出现内存消耗问题?
- 在每个月底截断几张表的最佳方法是什么(正如我提到的日志文件)?
- 我是否朝着正确的方向前进?
【问题讨论】:
-
1.不。 2.不知道。 3. 定时任务。 4.我认为您的问题也可能在服务器级别,而不仅仅是mysql。考虑太多并发连接问题 - 这可以在服务器 conf 文件中解决。您的问题可能与服务器 conf 而不是 MySQL 更相关
-
使用 Percona 等工具设置 mysql 分析。您将了解在峰值负载期间触发的查询。努力优化它们;使用缓存结果(避免再次查询相同的数据)并增加服务器配置。
-
您应该为您的数据库使用只读副本,因为它被大量“读取/访问”。但是您应该知道只读副本基本上是异步复制。正如您提到的可靠性,它还包括灾难恢复和高可用性的观点,这对金融 trx 至关重要。利用 AWS 提供的功能,例如用于您的数据库的 Multi A/Z、负载平衡和自动缩放(正如您已经提到的)、您的应用程序服务器/S3 上的任何文件的不同区域以及居住在不同区域的客户的路由选项。当然,这些建议太笼统了!
标签: mysql node.js amazon-web-services database-performance transactional