标签: event-based-programming

有什么区别:异步,非阻塞,事件基础架构?

  1. 有什么区别:

    • 异步,
    • 非阻止,和
    • 基于事件的架构?
  2. 可以是异步非阻塞(以及基于事件的)吗?

  3. 在编程中最重要的是拥有一些东西:异步,非阻塞和/或事件库(或全部3)?

如果你能提供一些例子,那就太棒了.

这个问题正在被问到,因为我正在阅读关于类似主题的这篇伟大的StackOverflow文章,但它没有回答我上面的问题.

asynchronous programming-languages event-based-programming nonblocking blocking

77
推荐指数
3
解决办法
3万
查看次数

将Amazon SQS与多个消费者一起使用

我有一个基于服务的应用程序,它使用具有多个队列和多个消费者的Amazon SQS.我这样做是为了实现基于事件的体系结构并解耦所有服务,其中不同的服务对其他系统的状态变化做出反应.例如:

  • 注册服务:
    • 当新用户注册时,发出事件'registration-new'.
  • 用户服务:
    • 在用户更新时发出事件'用户更新'.
  • 搜索服务:
    • 从队列'registration-new'读取并在搜索中索引用户.
    • 从队列"用户更新"中读取并在搜索中更新用户.
  • 指标服务:
    • 从"registration-new"队列中读取并发送到Mixpanel.
    • 从队列'用户更新'中读取并发送到Mixpanel.

我有很多问题:

  • 进行轮询时,可以多次接收消息.我可以设计很多系统是幂等的,但是对于某些服务(例如度量服务)来说要困难得多.
  • 需要在SQS中从队列中手动删除消息.我曾想过实现一个"消息处理服务",它在所有服务都收到消息时处理消息的删除(每个服务在处理消息后都会发出'消息确认'事件).

我想我的问题是:我应该使用哪些模式来确保我可以在SQS中为单个队列拥有多个使用者,同时确保消息也可以被可靠地传递和删除.谢谢您的帮助.

event-based-programming amazon-sqs amazon-web-services microservices

26
推荐指数
2
解决办法
2万
查看次数

为什么Apache Event MPM表现不佳?

事件MPM与Nginx的设计并不完全相同,但显然旨在使Keepalive更加稳定并更快地发送静态文件.我的理解是事件MPM有点用词不当,因为:

  1. 虽然连接传递给kqueue/epoll,
  2. 某些非常重要的模块,如mod_gzip和mod_ssl,将阻塞/使用一个线程,直到响应完成,
  3. 这对于大型文件来说是一个问题,但可能不适用于PHP生成的HTML文档等.

不幸的是,Apache一直在失去市场份额,大多数基准测试都是MPM事件的诅咒.基准测试是否存在缺陷,或者事件MPM对Nginx的影响是否真的如此糟糕?即使有这些限制,在正常流量(非恶意)和较小的文件下,它应该与Nginx有一定的竞争力.例如,它应该在慢速连接上通过php-fpm为PHP生成的文档提供竞争,因为文档将被缓冲(即使是ssl'd和gzip)并且是异步发送的.使用压缩或不使用压缩的SSL和非SSL连接的工作方式与Nginx在此类工作负载上的工作方式不同.

那为什么它不会在各种基准测试中闪耀?它出什么问题了?或者基准测试有什么问题?是一个主要的网站使用它作为它可以执行的权威的诉求?

php apache asynchronous nginx event-based-programming

18
推荐指数
2
解决办法
8672
查看次数

如何在故障情形下基于事件的消息驱动的微服务架构中恢复状态

在微服务架构的背景下,消息驱动,异步,基于事件的设计似乎越来越受欢迎(参见此处此处的一些示例,以及Reactive Manifesto - 消息驱动特性)而不是同步(可能是REST)基于)机制.

考虑上下文并想象一个过度简化的订购系统,如下所示:

订购系统

和以下消息流程:

  • 订单来自某些来源(网络/移动等)
  • 订单服务接受订单并发布 CreateOrderEvent
  • InventoryService会对其做出反应CreateOrderEvent,做一些库存InventoryUpdatedEvent事务并在完成时发布
  • 然后,Invoice服务对其作出反应InventoryUpdatedEvent,发送发票并发布EmailInvoiceEvent

所有服务都很好,我们很乐意处理订单......每个人都很高兴.然后,库存服务由于某种原因而下降

假设事件总线上的事件流向"非阻塞"庄园.即消息被发布到一个中心主题,并且如果没有服务正在从中读取消息,则不会堆积在队列中(我想要传达的是事件总线,如果事件在总线上发布,它将会流"直通"而不排队 - 忽略此时使用的消息平台/技术).这意味着如果库存服务停机5分钟,那么CreateOrderEvent在此期间通过事件总线的现在已经"消失"或者没有被库存服务看到,因为在我们过度简化的系统中,没有其他系统感兴趣那些事件.

我的问题是:库存服务(以及整个系统)如何以不丢失/未处理订单的方式恢复状态?

messaging event-based-programming reactive-programming microservices

17
推荐指数
2
解决办法
2563
查看次数

python中的数据流计算

我有n(通常n <10但应该扩展)进程在不同的机器上运行并使用RabbitMQ通过amqp进行通信.进程通常是长时间运行的,可以用任何语言实现(尽管大多数是java/python).

每个过程都需要许多输入(数字/字符串)并产生许多输出(也只是数字或字符串).执行进程是异步发生的:在其输入队列上发送消息并等待输出队列触发回调.

理想情况下,用户指定一些输入和所需的输出,系统应该:

  • 检测需要哪些进程并生成依赖图
  • 在拓扑上对图形进行排序并执行它,节点转换需要是事件驱动的

如果节点的输入就绪,节点应该触发,允许每个分支并行.我现在可以假设没有循环,但最终会有循环(例如,两个进程可能需要迭代直到输出不再变化).

这应该是(数据)流程编程(之前讨论过)的已知问题,我想避免重新发明轮子.我更喜欢python解决方案,搜索引导TrellisPypes.Trellis不再开发,但似乎支持周期,而pypes则不支持.也不确定pypes是如何积极开发的.

进一步的搜索揭示了基于事件的编程框架的完整列表,其中没有一个我特别了解.当然有像TavernaKNIME这样的工作流程环境,但这似乎有些过分.

有没有人有解决这类问题或提到的图书馆的经验?

编辑:我发现的其他库是:

python workflow scheduling event-based-programming amqp

15
推荐指数
2
解决办法
5051
查看次数

vert.x等待多条消息的回复

在vert.x中,我可以向另一个Verticle发送消息并"异步等待"以进行回复.

问题是:我想向多个Verticle发送消息,并在所有Verticle回复时调用异步处理程序.

这是可能的还是有更好的设计来实现这个功能?

编辑:

我有一个垂直A,它发送消息到Verticle B,C和D.每个Verticle(B,C,D)对消息做一些事情并返回一些数据.然后,垂直A接收来自B,C,D的响应,并对所有数据执行某些操作.问题是我为每个发送的消息都有一个处理程序(一个用于A,一个用于B,一个用于C),我希望在所有回复到达时调用一个处理程序.

java event-based-programming vert.x

13
推荐指数
2
解决办法
5929
查看次数

在基于事件的异步模式上使用任务并行库

我正在写一个网络应用程序.

消息通过传输方式发送:

Network.SendMessage (new FirstMessage() );
Run Code Online (Sandbox Code Playgroud)

我可以注册一个事件处理程序,当这个消息类型到达时调用,如下所示:

Network.RegisterMessageHandler<FirstMessage> (OnFirstMessageReceived);
Run Code Online (Sandbox Code Playgroud)

事件被解雇了:

public void OnFirstMessageReceived(EventArgs<FirstMessageEventArgs> e)
{
}
Run Code Online (Sandbox Code Playgroud)

我正在为我的网络应用程序编写自定义身份验证过程,这需要大约五条消息才能完成.

不使用任务并行库,我将被迫编写前面的事件处理程序中的每个过程的下一步,如下所示:

public void OnFirstMessageReceived(EventArgs<FirstMessageEventArgs> e)
{
     Network.SendMessage( new SecondMessage() );
}

public void OnSecondMessageReceived(EventArgs<SecondMessageEventArgs> e)
{
     Network.SendMessage( new ThirdMessage() );
}

public void OnThirdMessageReceived(EventArgs<ThirdMessageEventArgs> e)
{
     Network.SendMessage( new FourthMessage() );
}

public void OnFourthMessageReceived(EventArgs<FourthMessageEventArgs> e)
{
     // Authentication is complete
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢跳过源代码来编写部分内容和部分内容的想法.这很难理解和编辑.

我听说任务并行库大大简化了这个解决方案.

但是,我使用任务并行库读取的许多示例都与启动一系列活动任务有关.我所说的' 主动 '是指每个任务都可以在明确调用时启动,如下所示:

public void Drink() {}
public void Eat()   {}
public void Sleep() {}

Task.Factory.StartNew(     () => …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous event-based-programming task-parallel-library

12
推荐指数
1
解决办法
5868
查看次数

有一个Java等同于libevent吗?

我编写了一个高吞吐量服务器,它在自己的线程中处理每个请求.对于进入它的请求,有时需要对一个或多个后端执行RPC.这些后端RPC由一个单独的队列和线程池处理,它提供了对创建的线程数和后端最大连接数的一些限制(它执行一些缓存以重用客户端并节省开销不断创造联系).完成所有这些后,我开始认为基于事件的架构会更有效率.

在搜索时我没有发现任何与Java相关的等价物,但也许我不是在寻找正确的地方?来自Apache的Mina-statemachine是我发现的最接近的东西,但它看起来比我需要的更冗长,并且没有真正的版本可用.

有什么建议?

java state-machine event-based-programming libevent

5
推荐指数
1
解决办法
4201
查看次数

我将如何实现基于事件的异步模式?

您好,我想使用 C# 实现基于事件的异步模式。下面的 Microsoft 文档确实很有帮助,但它忽略了实现细节,这是正确的。

http://msdn.microsoft.com/en-us/library/ms228969.aspx

实施此模式有哪些选择?我应该使用 Delegate.BeginInvoke、ThreadPool.QueueUserWorkItem、new Thread()、BackgroundWorker 类还是其他类?

我正在创建一个简单的代码库。它应该可以在 Windows 窗体、控制台应用程序或 ASP.NET 上下文中使用。

很高兴看到一些示例代码。

c# asynchronous event-based-programming

5
推荐指数
2
解决办法
4429
查看次数

websockets如何保持持久连接以及在现场使用的稳定性如何?

我需要一个基于事件的服务器,可以轻松地将数据推送到客户端。正如我在论坛中读到的,基于 websocket 的服务器是我最好的选择。请解释一下它的工作原理以及它在生产盒上的使用稳定性如何?

webserver event-based-programming websocket

5
推荐指数
1
解决办法
8665
查看次数

是否在不等待epoll_waiting时监视epoll事件

我对基于事件的编程很陌生。我正在尝试使用epoll边缘模式,该模式显然仅信号通知已准备好进行读/写的文件(而不是级别模式,该信号通知所有就绪文件,无论是否已经就绪或刚刚就绪)。

对我来说还不清楚的是:在边缘模式下,我是否得知我不epoll_wait读书时发生的准备事件?尚未恢复的单发文件事件如何处理?

为了说明我为什么要问这个问题,请考虑以下情形:

  • 已连接10个非阻塞插座
  • 配置epoll_ctl为在边缘模式+ oneshot中准备好读取套接字时做出反应:EPOLLET | EPOLLONESHOT | EPOLLIN
  • epoll_wait 要发生的事情(最多报告10个事件)
  • linux唤醒我的进程并报告套接字#1和#2已准备好
  • read并处理数据套接字#1(直到E_AGAIN
  • read并处理数据套接字2(直到E_AGAIN
  • 在执行此操作时,套接字S接收数据
  • 我处理了所有事件,所以由于oneshot ,我以epoll_ctlin EPOLL_CTL_MOD模式重新触发了文件
  • 我的循环返回到epoll_wait下一批事件

好吧,那么是否epoll_wait 总是会通知套接字S已准备就绪?如果S为#1(即不重新设置),是否会发生事件?

linux epoll event-based-programming epollet

5
推荐指数
1
解决办法
1026
查看次数

如何使用PHP制作类似插件的Web应用程序?

堆栈溢出!

我正在寻找一种方法来使用PHP创建类似插件(我不知道如何调用它)的Web应用程序.有了这个,我的意思是我想建立一个系统,用户可以通过浏览器添加/删除插件(扩展,如果你喜欢)(而不是通过添加一些代码来配置).在我看来,WordPress就是一个很好的例子.最终用户可以简单地安装任何类型的插件,并且几乎不做任何事情,他们按预期工作,并且经常有很多设置需要更改,等等.

此外,我希望尽可能使它成为可用.有了这个,我的意思是插件可以使用其他插件的一部分,因此重写的代码更少.例如,有用于授权/身份验证的插件以及与用户相关的所有其他内容.然后,有一个用于博客的插件.博客,当然,之前需要提到,对吗?所以它只是使用前面提到的插件来工作.我知道会有很多依赖等等......但它只是正常的.:)

我的问题是......我能用什么技术来完成它?这种系统的优点和缺点是什么?我认为它会慢一些,不适合像Facebook这样的大型网站(好吧,那太大了),但对于简单的博客,投资组合,不管它会不会很好!

我听说过事件驱动编程(或基于事件的编程),我在维基百科上读过关于它的文章,但仍然......我很困惑,甚至更多,不确定它是我的东西寻找.

感谢您阅读本文.如果可能的话,给我一些答案.:d

php plugins frameworks event-based-programming

4
推荐指数
1
解决办法
2296
查看次数

数据上下文交互(DCI)和JavaScript中的事件编程

我最近看了Trygve Reenskaug在DCI上发表的以下演讲:https ://vimeo.com/43536416 这真让我大吃一惊 。嗯,在代码中看到软件的不同组件之间的交互是一个很有吸引力的想法。

我试图在javascript中找到DCI的示例,但未成功。然后我开始怀疑。DCI模式是否与事件编程模式相反?

我猜事件编程在javascript中是新潮,因为它允许解耦,并且因为经典继承概念不是js固有的。我想我了解事件编程的好处,但是我也注意到,当调试需要遵循事件消息时,调试可能会非常困难。

说两个概念都对吗正确吗?还是我弄错了?我错过了js中DCI的一些示例实现吗?为了理解这个概念,我应该看什么?

javascript model-view-controller design-patterns event-based-programming dci

4
推荐指数
1
解决办法
2245
查看次数