优点和缺点-在同一台服务器上运行(计划的)后台任务和Web请求处理

Joh*_*nny 4 architecture web-services scheduled-tasks server

在同一台(Java)服务器运行(预定的)后台任务和处理Web请求的优缺点有哪些不同?

我考虑过的几点要点:

  • 垃圾收集器的操作方式
  • 资料隔离
  • CPU /内存使用率
  • 流量激增
  • 安全

cju*_*gel 5

tl; dr

优点

  1. 便利性:减少机器操作
  2. 成本:共享基础架构将控制成本

缺点

  1. 复杂性:在同一服务器上管理不同的应用程序可能不是显而易见的,也不是简单的
  2. 可扩展性:扩展API比扩展批处理作业更简单
  3. 可用性:如果引入HA,则必须实现某种锁定机制,以避免批处理作业并发问题
  4. 安全性:会增加攻击面

细节

在线,短暂的请求-响应操作(例如API)和计划的后台任务(例如维护作业或数据管理操作)之间的资源使用模式有很大不同。

因此,通常最好以尽可能低的级别隔离此类任务,以在不同的VM甚至物理机上运行它们。

垃圾收集器的角度

如果使用相同的JVM实例,则批处理作业将占用大量内存,然后释放该内存,这将导致垃圾回收暂停联机请求的执行,从而降低响应时间。

可以通过在自己的JVM上运行每种类型的操作来最大程度地减少Stop the world效应的影响,从而减轻这种情况。

资料隔离

如果后台任务使用与在线请求相同的数据进行操作,则您可能可以重用至少某些数据访问和映射层代码,从而以在数据层引入耦合为代价来节省一些工作。

CPU /内存使用率

如果批处理作业是受CPU或内存限制的,那么它将影响联机请求的性能,除非您对每个进程可以使用的CPU /内存份额设置一些限制。可以在VM,容器或进程级别完成此操作。

流量激增

如果批处理作业使用大量带宽,则将影响在线请求向客户端发送内容的能力。与CPU和内存一样,每个应用程序也可以限制带宽以减轻这种影响。

安全

传统上,应对面向客户端的应用程序(例如API)进行适当的审核和强化,以避免漏洞。计划的后台批处理进程通常具有较小的攻击面,因为它们不需要暴露给客户端,因此更难以妥协。

当然,根据部署的性质,为两个应用程序共享相同的基础结构将增加批处理作业的风险。