分布式系统中使用异步管道创建实体

文摘   2024-10-24 16:44   云南  

 





点击上方蓝字关注我们




 

背景


 

    在分布式系统中异步创建实体既是挑战也是优势,尤其是对于追求可扩展性、容错性和高效用户体验的大型企业而言。用于创建实体的异步(async)管道可以解耦服务、优雅地处理故障并最大限度地减少延迟。这些特性使企业能够在扩展过程中保持灵活、高性能的系统。让我们深入探讨构建有效管道的优势、挑战和解决方案。


 

实体创建中异步管道的优势


 


优雅的故障处理
在复杂的分布式系统中,实体创建过程中的某些任务并不重要。异步管道允许故障隔离,这意味着非关键任务的故障不会中断整个流程。这些任务既可以重试,也可以忽略,从而使流水线顺利进行。


减少延迟和并行性
通过解耦高延迟任务,异步管道可确保其他任务无需等待即可继续执行。这种并行性缩短了实体创建的总体时间,尤其是当不相互依赖的任务可以同时执行时,吞吐量和响应速度都会得到提高。

独立性和可扩展性
异步管道可让不同的服务独立工作,并根据需要进行扩展。例如,处理通知的服务可能与核心实体创建服务有不同的扩展需求。由于服务是松散耦合的,因此可以在不中断管道的情况下对其进行更换、更新或扩展,从而增强系统的弹性。


提高容错性和最终一致性
异步管道允许在服务停机或延迟时自动重试。虽然某些任务可能需要更长的时间,但系统可确保最终的一致性,保证跨服务的数据即使暂时不同步,最终也会同步。

无阻塞操作
使用异步系统,服务可以在不等待其他服务响应的情况下继续运行,从而提高资源利用率和系统响应速度。这种非阻塞特性允许多个任务并行运行,从而提高了系统的整体吞吐量。


松耦合和灵活性
服务间的异步通信促进了松耦合架构,不同的服务通过事件流或消息队列进行交互。这种分离实现了独立更新或替换,使大型企业能够管理复杂的架构并采用持续部署策略。

响应式前端体验
异步管道允许前端应用程序向用户提供即时反馈,即使后端流程需要时间才能完成。具体做法是,在后端执行繁重任务时,通知用户实体创建正在进行中。实时用户通知可确保流畅、响应迅速的用户体验。

事件驱动架构
异步管道在事件驱动架构中表现出色,在这种架构中,某些任务(如通知或更新)由特定事件触发。这些架构能有效处理大量事件,同时保持系统的响应速度。

支持微服务和服务专业化
在基于微服务的体系结构中,每个服务都是独立管理的,异步管道允许服务专门处理验证或日志记录等任务,而无需依赖其他服务。这种专业化提高了性能,简化了大规模维护。

 

实体创建中的异步管道挑战


 


虽然异步管道具有显著的优势,但也存在一系列挑战:

最终一致性
分布式系统依赖于最终一致性,这可能会导致服务之间出现暂时的不一致。一些服务可能会识别创建的实体,而另一些服务则不会。在各系统间保持同步数据,尤其是在实体创建过程中,就成了一个挑战。

错误处理和重试
管道的任何步骤都可能发生故障。错误处理需要重试和惰性等机制,以避免数据重复或损坏。识别故障点并确保从部分成功中优雅地恢复对系统可靠性至关重要。


竞赛条件
当多个服务异步工作时,可能会出现竞赛条件。例如,如果一个服务假定某个实体已经完全创建,那么它可能会对不完整的数据采取行动。要避免此类问题,服务间的有效协调和协调是必不可少的。

延迟和性能
由于分布式服务之间的通信,异步管道可能会引入延迟。如果实体创建过程中的任何一步出现延迟,整个操作的速度就会减慢。这在用户等待实时响应时尤其容易出现问题。

监控和可观察性
跟踪异步操作的状态比同步系统更难。适当的日志记录、监控和可观察性对于发现问题和排除故障至关重要,但这些功能通常在异步管道中更难实现。


依赖实体的协调
当一个实体依赖于另一个实体的成功创建时,异步协调就会变得复杂。协调失败会导致依赖关系中断或死锁。

模式错配和演变
模式的更改会破坏异步管道,尤其是在不保持向后兼容性的情况下。回滚模式变更会导致服务间数据不一致。

 

使用异步管道创建实体的实用解决方案


 


为了应对异步管道的挑战,我们可以通过以下步骤实现弹性架构:

同步创建主标识符
实体创建过程从同步创建主标识符开始,主标识符是其余操作的基础。在整个过程完成之前,实体在数据库中会被标记为 “未准备好使用”。这样可以确保用户不会看到不完整的数据。

实体完成的异步管道
创建主标识符后,其他任务(如填充不同的数据存储)将以异步方式处理。每个任务都会引用主标识符,确保整个管道的一致性。

协调层
利用 
Temporal 等协调平台,系统可以管理任务执行、重试和状态跟踪。在将实体标记为 “可用于消费 ”之前,协调层会监听所有任务的成功完成。


实体状态管理
实施多种状态,如 “待创建”、“出错 ”和 “可使用”。这样可以改进跟踪,并通过通知或电子邮件更新为用户提供及时反馈。

日志和可观察性
全面的日志记录对于诊断问题和跟踪管道健康状况至关重要。应使用可观察性工具来监控异步操作的状态,并深入了解系统瓶颈。

临时数据存储
临时存储层可以在管道开始时存储原始数据 Blob。这样就能进行数据恢复和任务重试,而不会在服务故障时损坏或丢失信息。


用户互动和反馈
通过响应式界面向用户提供实时反馈对用户体验至关重要。实施通知或用户界面元素等机制,允许用户刷新和检查实体创建请求的状态。


 

系统架构解读


 

  1. 客户端(Client)

    初始点,负责发送原始数据(raw blob)。

  2. 临时存储(Temporary Storage)

    临时存储接收客户端发送的原始数据。

    在消息队列处理失败时,可以重新获取原始数据。

  3. 消息队列(Message Queue)

    异步处理机制,用于排队消息。

    触发异步任务,并将主标识符(Primary Identifier)传递给任务

  4. 异步任务(Async Tasks)

    包括多个异步任务(Async Task 1至4)

    这些任务可能执行不同的处理流程,如数据清洗、验证、转换等

    任务完成后,会返回一个完成信号。

  5. 实体生成(Entity Generation)

    负责生成或获取实体的唯一标识符(ID)

    更新实体状态为“就绪(ready)”

  6. 数据存储(Datastore)

    存储实体的ID和元数据。

    更新实体状态为“就绪”。

  7. 主API(Primary API)

    负责存储ID和元数据。

    更新实体状态为“就绪”。

  8. 获取只有“就绪”状态的实体。



系统架构设计特点


 

  • 异步处理:通过消息队列和异步任务处理,系统可以非阻塞地处理大量数据,提高吞吐量。

  • 容错性:临时存储可以在消息队列处理失败时重新获取数据,增强了系统的容错能力。

  • 解耦合:各个组件之间通过消息队列和API进行通信,减少了直接依赖,提高了系统的灵活性和可维护性。

  • 可扩展性:异步任务可以根据需要增加或减少,以适应不同的负载。

  • 状态管理:通过实体状态的更新,系统可以跟踪数据的处理进度。

 

可能的应用场景


 

  • 大数据处理:适用于需要处理大量数据的场景,如日志分析、事件跟踪等。

  • 微服务架构:在微服务架构中,各个服务可以通过消息队列进行通信,实现服务间的解耦。

  • 任务队列管理:适用于需要排队和异步处理任务的场景,如电子邮件发送、文件处理等。

  • 数据集成:在数据集成过程中,可以将来自不同源的数据进行清洗、转换,并存储到统一的数据存储中。

这个系统架构设计适用于需要高吞吐量、高可用性和可扩展性的场景。通过异步处理和状态管理,系统可以有效地处理大量数据,同时保持数据的一致性和完整性。


 

优点


 

  1. 高吞吐量:异步处理机制可以提高系统的处理能力,允许系统在不阻塞主线程的情况下处理大量数据。

  2. 可扩展性:系统可以通过增加更多的异步任务处理器来应对增加的工作负载,使得系统易于扩展。

  3. 容错性:通过临时存储和消息队列,系统可以在处理过程中出现故障时重新尝试,从而提高系统的稳定性。

  4. 解耦合:组件之间的通信通过消息队列和API进行,减少了组件之间的直接依赖,使得系统更易于维护和升级。

  5. 灵活性:异步任务可以根据需要进行调整,不同的任务可以并行执行,提高了系统的灵活性。

  6. 状态跟踪:通过实体状态的管理,可以跟踪数据的处理进度,便于监控和调试。

  7. 负载均衡:异步任务可以在多个处理器之间分配,实现负载均衡,提高资源利用率。

 

缺点


 

  1. 复杂性:引入异步处理和消息队列会增加系统的复杂性,需要更多的设计和维护工作。

  2. 调试困难:由于系统的异步性质,调试和跟踪问题可能会更加困难,尤其是在分布式环境中。

  3. 消息队列的瓶颈:如果消息队列成为系统的瓶颈,可能会限制整体性能。

  4. 数据一致性问题:在分布式系统中,确保数据的一致性是一个挑战,尤其是在多个异步任务并行处理数据时。

  5. 延迟问题:虽然异步处理可以提高吞吐量,但在某些情况下,它可能会导致处理延迟,特别是当任务队列很长时。

  6. 资源管理:需要有效的资源管理策略来确保系统在高负载下仍然能够稳定运行,这可能需要额外的监控和自动化工具。

  7. 依赖外部系统:系统的性能和稳定性可能依赖于外部的消息队列和数据存储系统,这可能引入额外的风险。

  8. 事务管理:在涉及多个异步任务和数据更新时,事务管理可能变得复杂,需要额外的机制来保证操作的原子性。

 

结论


 


     用于实体创建的异步管道为大型企业提供了强大的优势,提高了可扩展性、弹性和用户体验。但是,它们也面临着与数据一致性、错误处理和延迟相关的挑战。通过采用具有同步标识符创建步骤、协调层和仔细监控的结构化方法,企业可以克服这些挑战,构建可扩展且可靠的系统。这个系统架构设计适用于需要高吞吐量、高可用性和可扩展性的场景。通过异步处理和状态管理,系统可以有效地处理大量数据,同时保持数据的一致性和完整性。这个架构在提高系统性能和可扩展性方面有很多优点,但也带来了一定的复杂性和潜在的挑战。在实际应用中,需要根据具体的业务需求和资源情况来权衡这些优缺点。 


 

Megadotnet
为您介绍各体系平台的新闻,系统研发相关框架,组件,方法,过程,运维,设计。企业IT与互联网信息系统或产品解决方案。开源项目,项目管理。
 最新文章