DMR最佳实践
本节探讨了如何使用动态消息路由(DMR)部署事件网格的一些示例,并讨论了Solace对于配置事件网格某些方面的建议。在阅读这些最佳实践之前,请确保您也理解了DMR术语中描述的事件网格核心概念。此外,您还应 该了解订阅传播的工作原理。这在DMR订阅传播和数据转发中有详细讨论。
使用DMR构建事件网格锚
在下面的示例中,我们将查看为大型全球组织构建事件网格的复杂问题。这个示例可能不反映您的组织。这并不意味着您不需要事件网格,只是您的事件网格可能更容易可视化,您可能不需要太多帮助就可以开始。
构建事件网格的过程可以分解为五个步骤:
- 设计您的主题层次结构并开始编目可用事件。
- 定义您的集群。
- 将您的集群连接成网格。这一步定义了集群及其底层应用程序之间的交互。
- 考虑您希望集群如何增长。
- 管理事件网格外应用程序的数据访问。
设计主题层次结构锚
事件网格的主要优势是将数据从孤立的系统中解锁,使数据易于使用。为了实现这一点,您必须定义一个主题层次结构,允许发布者在没有冲突的情况下正确描述他们创建的数据。合适的主题还允许对数据进行管理控制。除了符合主题架构最佳实践的主题层次结构外,您还需要一个按主题描述的可用数据目录。这个目录允许消费者订阅他们想要消费的数据。有关编目和可视化事件相关数据的简便方法,请查看PubSub+事件门户目录。
定义集群锚
构建事件网格的第一步是定义集群的构成。目标应该是创建同质集群,有多种方法可以做到这一点,但首先考虑组织的站点和业务线(LoBs)。
步骤1:
列出所有数据中心或云提供商区域,其中应用程序运行或将运行。这些将是站点。
例如,在下图中,主要有欧洲(EU)、北美(NA)数据中心。然后还有区域性的主要和可能的次要云提供商。
步骤2:
列出组织内所有基础应用领域——通常是业务线(LoBs)。保持在较高层面,不是特定的应用程序或应用程序团队,而是产品组或组织内成本中心的范畴。对于制造公司,这些业务线可能是:制造、库存、运输、销售、财务和人力资源。将业务线放置在它们的应用程序运行的区域。
此时,您可以通过将每个站点中的所有LoBs相加来查看事件网格中核心集群的数量;在这种情况下,欧洲有10个集群,北美有9个集群,亚洲有2个集群。
将集群连接成事件网格锚
现在您知道了DMR集群的样子,您必须决定它们应该如何相互连接。
步骤1:
假 设这不是一个完全的绿地情况,可能存在需要考虑的物理基础设施,例如云到数据中心的VPN隧道和防火墙。尽量将事件网格尽可能地覆盖到现有基础设施上:
步骤2:
现在在需要交换数据的所有集群之间添加外部链接。并非所有集群一开始就需要与每个其他集群交换数据。您可以仅使用已知的数据交换构建初始事件网格。甚至有可能一些集群不与任何其他集群交换数据。随着所有事件网格数据变得编目和可用,外部链接的数量将不可避免地增长。随着组织的增长,计划发展事件网格。
考虑集群增长锚
现在事件网格已经布局好了,让我们看看一个集群内部,确定如何最好地设计它以适应增长。例如,北美主数据中心的销售集群看起来像这样:
您可以看到它与所有其他集群的外部链接,以及两个内部节点,外部链接在它们之间平衡。根据外部链接的数量和集群预期的增长,您通常一开始只有一到两个节点。从这里开始,考虑您希望集群如何增长——一个常见的方法是为每个应用程序团队或子域分配自己的节点。这种细分数据交换并允许子 域内流量保持在单个事件代理上,允许优化网络使用,并更容易监控应用程序域和子域之间的流量。这种方法允许我们的集群增长到八个节点,专门服务于北美数据中心内的销售事件。
管理事件网格外应用程序的数据访问锚
最后,考虑需要额外控制的其他站点,例如合同制造站点。这些站点的信息可能非常重要,但您不希望允许对事件网格的完全访问。您可以使用静态VPN桥接和行政分配的订阅,允许这些站点访问某些数据,同时仍然控制对事件网格的接口。
扩展集群或连接集群?锚
您如何决定何时使用内部链接扩展现有集群,何时使用外部链接连接集群?
例如,假设您有三个集群(集群1、集群2和集群3),在集群1/ 集群2和集群2/ 集群3之间有外部链接。这意味着集群1可以与集群2交换事件,集群2可以与集群3交换事件,但集群1不能与集群3交换事件 。
连接集群1和集群3的节点的最佳方式是什么?您可以在集群1和集群3之间添加外部链接:
或者您可以“扩展”集群2以包括集群3中的节点:
一般建议是在站点内使用内部链接,例如数据中心或公共云区域,并在站点之间使用外部链接。然而,有几个因素会影响如何解释这一通用规则。
具体来说,在以下情况下使用外部链接:
- 站点之间带宽低和/或成本高和延迟(例如,洲际链接,到远程位置的链接)。在这种情况下,外部链接是最好的,因为如果消息需要在远程站点的多个代理上分发,最好只通过外部链接发送一次到远程站点,而不是通过内部链接多次发送(远程站点的每个代理一次)。
- 消息离开域或站点有财务成本。例如,如果您在云提供商之间链接代理,每个云提供商通常会收取任何离开其云的数据的费用。所以,您希望只通过外部链接离开一次,而不是通过其他云提供商的每个代理离开一次。
- 您想构建一个中心辐射拓扑结构,其中辐射上的代理永远不会与其他辐射上的代理交换消息。外部链接是连接辐射集群到中心集群的方式。
然而,如果区域内有良好的低成本连接,则没有理由不将区域内的所有站点组合成一个大集群(除了节点数量的限制)。这是最简单的方法,并确保最佳连接,避免网关节点成为瓶颈的风险。
灾难恢复如何影响事件网格锚
如这里所述,灾难恢复(DR)是逐节点进行的。您必须为每个要保护的节点都有一个复制节点。复制节点必须与主节点在同一个集群中,并且必须按照正常规则有完整的内部链接网格。在大多数情况下,集群应该扩展以包括主站点和DR站点。
当您添加外部DMR链接或VPN桥接时,您必须将它们连接到主站点和DR站点,如下所示:
如您所见,添加灾难恢复以三种方式影响DMR架构:
- DR使被保护集群内的内部DMR链接数量翻倍。
- DR要求跨越主站点和DR站点的扩展集群。
- DR使外部集群必须有的链接翻倍,因为它们必须连接到两个站点。
保护事件网格锚
保护您的事件网格的主要目标是只允许授权人员查看数据,并防止未授权人员查看或操纵数据。由于DMR链接在安全的数据中心之间传输,它们可能更容易受到攻击。
解决这个问题的直接方法是使用TLS加密数据,并使用身份验证(用户名和密码或相互认证证书)。深入挖掘,最好的解决方案是多层防御。
在站点之间,我们建议使用带有防火墙的VPN隧道终止两端。我们建议您不要直接在公共互联网上暴露您的事件代理。此外,最好在专门用途的终止设备(如事件代理)的子网上终止VPN,并将其作为DMZ,并然后将数据处理和数据存储应用程序抽象到另一个没有互联网访问的子网上。
从最安全的一般位置(如数据中心)建立到站点(如DMZ子网)的连接通常是首选的。不要打开数据中心防火墙规则以允许连接。
下图显示了所有这些原则。在这个例子中,数据中心事件代理通过安全的VPN隧道连接到云事件代理。云之间的连接应通过云提供的机制完成。应用程序应该在不暴露给公共互联网甚至VPN隧道的私有子网上。
最后,有多个HA和DR连接,如果使用TLS,这可能会对证书管理造成挑战。我们建议主事件代理和备份事件代理使用相同的服务器证书,CN或主题备用名称(SAN)覆盖这两个设备。不要尝试将主站点的DNS名称切换到DR站点,而是使用主机列表来处理这些不同的站点。也就是说,主事件代理和备份事件代理在主站点和DR站点可能有不同的服务器证书,并且证书SAN不一定需要覆盖所有站点。DR站点最好有不同的DNS名称和证书,以防主站点的证书被泄露。
获取帮助锚
构建事件网格可能迅速变成一个复杂的架构练习。如果您正在构建一个包含多个集群的网格,或者您有特定的网络或安全约束,我们建议您联系Solace以获得帮助。