帮助设计松耦合系统的多线程执行引擎

发布于 2024-12-04 08:32:27 字数 404 浏览 2 评论 0原文

我需要构建一个“执行引擎”,它将侦听来自各种系统的请求并执行这些请求的任务。
我想在“执行引擎”中公开一个Web服务,每个系统都可以访问这个Web服务,要求执行一些操作。所有操作都会保存在磁盘中以处理故障(所有任务都是异步的)

例如,add_email_to_block_list,我们的一个网站可以要求“执行引擎”在邮件系统中执行此任务。

“执行引擎”假设在一分钟内(将来)处理超过 100 个请求。

我很可能必须使用 C# 来完成此类任务。 (也是JAVA的机会)。

  1. 设计这样的核心引擎需要考虑什么?
  2. 你知道这种系统在网络上的某种用例吗?(也许是一些文章/教程?)
  3. 我正在谈论的这个“执行引擎”的专业名称是什么(这样我可以在谷歌)?

谢谢

I need to build an "execution engine" that will listen to requests from variety of systems and will perform those requested tasks.
I want to expose in the "execution engine" a web-service and each system can go to this web-service, ask for some operation to be done. all operation will be saved in the disk to handle failures (all tasks are async)

for example, add_email_to_block_list, one of our websites can ask the "execution engine" to perform this task in the mailing system.

the "execution engine" suppose to handle more than 100 requests in a minute (in the future).

Most likely I will have to use C# for this kind of task. (also a chance for JAVA).

  1. What do I need to take into consideration when designing this kind of core engine?
  2. Do you know some kind of a use-case over the WEB about this kind of system?(some article/tutorial maybe?)
  3. What is the professional name for this "Execution Engine" that I am talking about (so i can search better in google)?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

执着的年纪 2024-12-11 08:32:27

您正在描述一个经典的远程过程调用界面。通常,为 RPC 设计 Web 服务的主要考虑因素是可扩展性。为了不处理太多数据而阻塞系统接收其他请求,通常最好将数据卸载到其他作业线程。但是,除了微型玩具系统之外,您不应该创建每个请求一个线程的系统,因为这可能会占用主要的系统资源。相反,您应该考虑使用某种 线程池 来处理传入的任务。

这种系统随处可见,而且确实是 Web 服务的主要用途。只需查看 Web 服务作为 RPC 的任何描述即可了解更多详细信息。

You are describing a classic Remote Procedure Call interface. Usually, the primary consideration for designing a web service for RPC is scalability. In order not to handle too much data while blocking the system from receiving other requests, it is usually best to offload the data to other job threads. However, you should not create a one-thread-per-request system except as tiny toy systems, because that can be a major system resource hog. Instead, you should look at using some kind of Thread Pool to handle the incoming tasks.

This kind of system is used all over the place, and really is the primary use of web services. Just look at any description of Web Services as RPC for more details.

零度℉ 2024-12-11 08:32:27

最大限度地减少全局数据的使用,并使用关键部分(或互斥体、信号量或其他)保护对它们的访问。对于文件等外部资源也是如此。然后为每个传入请求创建一个新线程(如果您的服务器是基于 Unix 的,在某些情况下新进程可能会更好),您应该没问题。

Minimize the use of global data and protect accesses to them with critical sections (or mutexes, semaphores or whatever). The same is true for external resources like files etc. Then create a new thread (a new process could be even better in some cases if your server is Unix based) for each incoming request and you should be fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文