【.com快译】在当今竞争激烈的商业环境中,数据处理往往??需要实时性。如果竞争对手在数据控制上提前行动,必然会在商业上获得一定的优势。这也是我们需要构建一个能够实时处理信息(数据)的企业级系统的重要原因。在实时处理数据时,除了将系统设计为异步操作事件外,我们还可以使用同步请求响应消息来构建实时系统。同时,为了保持此类系统高效地使用资源,我们需要了解如何基于事件驱动方法构建实时信息系统。图:实时信息系统解决方案架构如上图所示,各种事件通常来自不同的渠道,包括移动和Web应用程序。其中:ReceiveEvents组件负责在任何给定时间处理大量数据,速率从每秒数千到数百万个事件不等。组件接收到事件后,将其传递给相应的处理组件。事件处理组件负责对事件中包含的数据进行操作,包括:过滤、清洗、转换和汇总等。根据组件的行为,事件处理既可以独立于事件接收组件进行,也可以由事件接收组件独立完成。可以作为相关操作来完成。事件处理组件可以将原始事件存储在各种数据存储中以供审计(如果接收组件未处理),并且可以将计算结果存储在这些单独的数据存储中,具体取决于用例。因此,大多数事件都可以被实时处理并发布到事件发布组件,以交付给消费者。事件发布组件负责将处理后的数据实时推送给用户。这些消费者可以是移动应用程序或Web应用程序,也可以是其他对已处理事件起作用的系统。除了发布这些实时事件,在某些用例中,我们还需要通过HTTP通道以同步或请求-响应的方式将处理后的摘要信息发布到移动和Web应用程序。上述参考架构可用于需要处理现场发生的事件并将其发布到后端应用程序的各种用例。例如,在发生紧急情况时,现场人员可以实时发送有关需求和情况的详细信息,而后台团队可以第一时间进行必要的物资调配和运送。另外,我们也可以利用这种架构来构建农业的供应链。示例:农民通过送货车将农作物运送到连锁超市。农作物成熟后,农民可以更新他们的详细信息。超市后台团队会实时获取各地点信息,及时安排车辆收货,避免延误。使用WSO2和Kafka的参考架构消息代理是将消息发送者与接收者分离的组件。目前市场上有很多消息代理产品,各有优缺点。其中最流行的是Kafka、NATS和RabbitMQ。当然,Kafka也可以作为NATS和RabbitMQ的最佳功能代理。这里,我们选择Kafka作为事件消息的代理;选择功能丰富、简单且开源的WSO2StreamingIntegrator作为事件处理器;使用同时支持流媒体和REST风格的WSO2APIManager作为事件发布者。当然,这些组件也可以用市场上其他类似的工具代替。下图显示了构成实时事件驱动信息系统的各种组件及其互连。图:带有代理和WSO2平台的实时事件驱动信息系统在此体系结构中,事件代理从移动和Web应用程序等源接收事件有效负载。WSO2StreamingIntegrator会处理这些事件,然后通过WebSocket连接将各种结果事件发布到WSO2APIManager。WSO2APIManager有一个暴露给网关的WebSocketAPI,供移动和web等消费者(consumer)应用程序使用,实时接收各种事件。同时,WSO2StreamingIntegrator可以通过标准RESTAPI将来自WSO2APIManager的原始事件和聚合结果发布给相关消费者。下图改进了上述架构。图:带有Kafka和WSO2平台详细信息的实时事件驱动信息系统如上图所示,事件源通过Kafka客户端向Kafka代理中的可用主题发布事件。WSO2StreamingIntegrator不仅可以订阅这些主题,还可以通过配置的Kafka源实时使用来自Kafka的各种事件。用Siddhi语言编写的操作将处理这些事件并将它们传递给事件接收器,例如WebSocket。同时,WSO2SI会根据需要通过各种数据存储将事件存储在相应的数据库表中。WSO2APIManager通过WebSocketAPI将WebSocketsink的细节配置到API的端点。因此,那些使用WebSocketAPI的客户端应用程序将能够接收实时处理的各种事件。同时,那些处理过的信息和原始事件存储在一个数据库中,该数据库通过WSO2EnterpriseIntegrator公开REST数据服务。这里的数据服务是将WSO2APIManager作为受保护的RESTAPI公开并与客户端应用程序同步通信的服务。另外,作为一个可以支持大部分企业系统需求的成熟架构,我们可以扩展支持多个企业用例如:混合集成需求,API管理平台等。只有WSO2平台,没有Kafka参考架构如果你的组织是刚开始搭建一个实时事件驱动的信息系统,数据负载不大,那么只能使用WSO2平台搭建上面提到的简化版架构。下图显示了没有消息代理的实现。图:带有WSO2平台的实时事件驱动信息系统这种架构与上述架构的唯一区别在于,虽然缺少事件代理,但客户端应用程序可以通过HTTP调用地方直接将事件发送到WSO2StreamingIntegrator.当然,由于该架构没有消息代理,WSO2SI需要将原始事件存储在数据库中以供各种审计使用。它的其余功能与以前的架构相同。下图显示了架构的详细组成。图:带有WSO2平台细节的实时事件驱动信息系统如上图所示,WSO2SI配置为通过HTTP接口接收事件。Siddhi应用程序中的HTTP源配置为通过不同的操作处理各种事件,然后将它们发布到WebSocket接收器。同时,各种原始事件通过数据存储存储在数据库中,各种聚合结果通过不同的数据存储存储在另一个数据表中。除此之外,系统的其余功能与上述基于代理的实现基本相同。从Kafka到WebsocketSiddhi应用的示例代码下面我们将给出一个Siddhi的应用示例。它可以从Kafka的主题中读取事件,并通过WebSocket服务器将各种事件发布(或输出)到日志接收器。当然,它会对每个事件进行简单的检查(或过滤),以确保在发布之前其计数小于500。具体代码请参考--https://gist.github.com/chanakaudaya/efe8dfed2558811f0316a7839dbfef57。其中,您可以找到有关如何使用StreamingIntegrator设置Kafka的详细示例。同时,您也可以通过文档链接-https://ei.docs.wso2.com/zh_CN/latest/streaming-integrator/examples/working-with-kafka/尝试运行Siddhi应用。如何创建连接到WebSocket端点的WebSocketAPI如下图所示,您可以通过WSO2APIManager的发布者接口创建一个WebSocketAPI,并使用WS服务器将这些事件发布到客户端。您可以在下图中的上方菜单中选择“设计新的WebSocketAPI”(或“创建API”),然后在下一个窗口中提供详细信息。然后,您可以选择“创建和发布”选项,将WebSocketAPI推送到开发人员门户,用户可以在其中使用有效的OAuth2令牌。通过参考文档链接——https://apim.docs.wso2.com/zh-CN/latest/learn/tutorials/create-and-publish-websocket-api/#create-and-publish-a-websocket-api,您可以逐步了解如何创建WebSocketAPI,并能够试用其客户端示例。作为扩展,您还可以从以下链接获得大量关于WSO2的代码示例:WSO2StreamingIntegrator教程--https://ei.docs.wso2.com/en/latest/streaming-integrator/guides/use-案例/WSO2API管理器教程--https://apim.docs.wso2.com/en/latest/learn/design-api/create-api/create-a-rest-api/WSO2EnterpriseIntegrator教程--https://ei.docs.wso2.com/en/latest/micro-integrator/use-cases/learn-overview/原标题:HowToBuildaReal-Time,Event-DrivenInformationSystem,作者:ChanakaFernando转载请注明合作网站转载时原译者和来源为.com]
