现在有多任务服务,互不相关的任务。
是做成单个exe,各个任务分别起一个 goroutine跑好?
优点:是节省空间;安装/布署方便,只装一个;
或者每个任务做成一个exe ?
占用空间多;每一个都要安装/布署。
这两种方式性能上有没有差异?
比如,一个Web Server 和一个数据定时导入任务,包成一个exe
依照你目前的说法比较笼统,没有一个定性的答案跟结果的。
具体的要拆分 还是放在一块儿,得看你项目 复杂度跟 程序具体的资源消耗。
从几个方面给你建议:
1. 程序若是计算密集型的服务,且需要有测试数据表明 单进程无法满足需求,那么这种情况必须要拆开成多机器
2. 若是IO密集型的, 若瓶颈是在 你自己的服务 那么可以 考虑拆分到多台机器
3. 从工程负责度方面考虑, 若你们人力资源足够 而且项目本身是大型项目而且计划按照按照微服务来设计,那么这种情况 也可以拆分。
4. 如果按照你说的 web server 跟定时任务来看,那么要看 两个服务是否 相互依赖性,比如不能同时停服升级之类的, 那么还是拆分。
5. 总的来说, 拆分与否 要按实际情况来看。 如果是小项目,而且功能并不复杂,不满足上述的4点 那么建议 还是放一块吧,毕竟维护成本低。
#1
更多评论
不会有多台机器 ,都就在一台机器上运行。
场景很小,就是一台机器上跑几个任务。
数据导入涉及到高频IO操作,不断读文件写入数据库。
放一个exe里,与分开运行,性能上会不会有差异? 都在同一台机器上
其它任务执行时,会不会影响Web_server的吞吐、响应等等?
#2
<a href="/user/wn0112" title="@wn0112">@wn0112</a> 如果是io操作频繁那么瓶颈会是在 磁盘跟数据库。
放在一台机器如果高频IO操作 不论多个进程 还是单进程 都会有可能会影响其他的功能。
其他情况 基本上没什么影响。 多进程抢占CPU资源 并不一定比单线程效率高多少。
可能你需要考虑的问题是: 如有其中的单个任务需要 频繁重启, 这样放到一个进程的话 其他的任务也会停止, 这个印象需要考虑进去。
#3