【问题标题】:Trading applications trade-offs : Databases and low-latency交易应用程序权衡:数据库和低延迟
【发布时间】:2011-09-02 09:13:14
【问题描述】:

几乎每个业务应用程序都需要数据库来存储数据以及在该数据上完成的事务。事务通常需要毫秒数量级的时间。同时,在交易应用程序中,完全不能接受的一件事是“延迟”。那么,在此类需要延迟上限的应用程序中进行哪些取舍?

例如,客户进行了一笔交易,它必须通过一些检查,这些检查存储在数据库中,需要进行数据库提取。然后,应将交易传递给 OMS/ORS 或交易所。而且,在每一层,都需要在数据库中存储某种交易数据。如何在事务持久性和低延迟之间保持平衡?

【问题讨论】:

    标签: database architecture trading low-latency


    【解决方案1】:

    两件事:

    • 缓存:在您的应用程序中缓存规则,因此您无需为每笔交易都访问数据库
    • 线程:将数据库中存储事务数据的代码放到另一个线程中。像这样,您可以立即将交易路由到交易所,并同时保护数据库中的数据。

    【讨论】:

    • 这些想法相当不错。但是,您对如何实现缓存方案有任何指示吗?
    • 这在很大程度上取决于您访问数据库的方式以及总体架构。
    【解决方案2】:

    现在人们使用内存中的事务系统,因此您可以减少通过数据库获得的网络延迟。

    您可以考虑以下几点来实现低延迟

    • 要在 java 中实现低延迟,您必须在 java 中控制 GC,有很多方法可以做到这一点,例如预分配对象(即使用享元设计模式),使用原始对象 - trove 非常适合,所有数据结构都基于原始,重用对象实例,例如创建系统范围的字典以减少创建新对象,从流/套接字/db读取数据时非常好的选择

    -尝试使用免等待算法(这有点困难)、无锁算法来减少争用。你可以找到大量的例子

    -使用内存计算。内存很便宜,你可以在内存中存储 TB 的数据。

    -使用机械同情-参考lmax破坏者,优秀的框架

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      相关资源
      最近更新 更多