出于性能考虑,我需要运行多个应用程序实例,将它们固定到CPU上,并监听不同的端口。一个HAProxy TCP负载均衡器位于它们的前面,以分发流量。
这样做是为了防止任何线程上下文切换,并强制执行共享无内容设计(因此在应用程序内部不需要任何锁,假设它是单线程的)。
这意味着在具有64个CPU的服务器上,我可以将HAProxy固定到CPU 0,然后将每个应用程序实例固定到单独的CPU(1-63)。
显然,从启动、重启、关闭等方面来管理这些都非常复杂。
我想知道是否有任何办法可以使用systemd为我处理这种复杂性。
我知道如果将HAProxy定义为一个单元,并声明它需要与之通信的其他应用程序,它就可以解决启动问题,例如:
我希望它能自动关闭与其通信的所有63个应用程序实例。
如果我这样做
这样做是为了防止任何线程上下文切换,并强制执行共享无内容设计(因此在应用程序内部不需要任何锁,假设它是单线程的)。
这意味着在具有64个CPU的服务器上,我可以将HAProxy固定到CPU 0,然后将每个应用程序实例固定到单独的CPU(1-63)。
显然,从启动、重启、关闭等方面来管理这些都非常复杂。
我想知道是否有任何办法可以使用systemd为我处理这种复杂性。
我知道如果将HAProxy定义为一个单元,并声明它需要与之通信的其他应用程序,它就可以解决启动问题,例如:
Require=app1,app2,.....,app63
我可以做到
systemctl start myhaproxy
如果每个实例都在应用安装期间定义为单独的systemd单元,那么它将首先启动所需的63个实例。
然而,我想知道是否有任何方式可以让它在重启和关机时也起作用。
因此,如果我执行:
systemctl stop myhaproxy
我希望它能自动关闭与其通信的所有63个应用程序实例。
如果我这样做
systemctl restart myhaproxy
我希望它在最后重新启动自己之前,能够先重新启动Require中列出的所有服务。
这是否可能?或者这超出了systemd可以提供的范围?