注:本文编译自https://blog.neueda.com/kdb/kdb-benefits-of-horizontal-scaling,作者为Patrick Dooher。
数十年来,银行和其它金融机构一直使用kdb+来获取和分析持续增加的海量数据,这是因为kdb+具有水平扩展和垂直扩展(伸缩)的能力。
水平扩展与垂直扩展
垂直扩展是指为现有资源增加更多的功能,例如为当前服务器添加更快的存储设备,或增加资源使用的CPU池。相反,水平扩展是指在解决方案中添加更多的处理单元或服务器,以增加应用程序可用的数据节点数量。从服务器堆栈的角度看,我们在水平方向上添加更多服务器,在垂直方向上向单台服务器添加更多资源。示意图所下:
终,垂直扩展将达到上限。另一方面,水平扩展使用户能够在必要时添加额外服务器,从而提供更大的整体灵活性。鉴于典型kdb+数据库终还是会将数据分散保存在多台服务器上,因此大多数架构师都希望在设计阶段实现水平扩展能力的大化。
如何在kdb+中实现有效的水平扩展
1. 确定数据节点
我们需要确定构成一个逻辑数据节点的数据。这些节点应尽可能独立,以便对其进行独立伸缩,但它们将与其他节点进行交互以提供完整数据。这可能意味着分别按照地区、资产类别、数据类型、金融工具或业务需求等对数据进行分割。
2. 定义添加新数据节点或重新配置现有数据节点的过程
水平扩展的主要优点之一是,能够在停机(如果需要)时间有限的情况下,为应用程序增加额外的功能。因此,我们需要特别注意数据节点的配置方式。
我们既可以在系统中添加新数据节点(既可以作为现有节点的备份,也可以作为全新数据),又可以重新配置系统以更有效地利用现有数据节点。例如,我们可能希望对服务器上的某些数据进行移动,以便在企业范围内更好地利用内存,或者,添加一个包含当前交易日数据的新节点,以满足业务需求。
3. 考虑流程初始化和可恢复性
当新的数据节点启动时,它应该能尽可能高效地访问其所需的所有数据。这可能意味着它必须从另一个进程提取数据或从特定的存储位置加载数据,但这应该是无缝的,手动干预少的。
如果数据节点出现问题并且崩溃,则该节点应该能够自动重新启动并恢复,实现系统恢复能力的大化。
4. 实现数据持久化存储
确定扩展选项时,数据如何持久存储是至关重要的因素。为了获得佳性能,数据节点可能需要与基础存储位于同一服务器上。在其他情况下,可以在多种类型的存储(包括网络存储)之间复制数据,以允许扩展数据的可用性,同时关键的请求优先使用快速的存储。
5. 设计负载平衡功能
任何有效的水平扩展架构,均应具有负载平衡功能,以确保将用户请求发送到可用的数据节点。但是,这个模块也可以提供其他功能,以完善解决方案架构。它可用于监视系统的运行状况,如有多少个可用节点以及每个节点上的负载如何,以便提供容量或其他问题等的预警。
它可以用作一种服务机制,以确保客户端具有对多节点群集的单点访问权限,或者可以用于将来自多个节点的数据统一为对终用户的单个响应。另外,它可以包含服务质量因素信息,从而可以为用户提供性能经过优化的节点,也可以在任何执行队列中为特定用户请求赋予优先级。
结论
尽管kdb+的扩展性可能是一个复杂的话题,但我们希望通过这篇文章可以对kdb+水平扩展解决方案可以提供的好处有所了解。上述内容并非在每种情况下都是正确的选择,尤其是对延迟敏感的用例。尽管如此,它仍提供了在适当情况下进行扩展的简化,因此应在架构设计阶段予以考虑。
来源 https://www.modb.pro/db/212272