业务场景是这样的:
为了扩容,使用多台服务器提供同样的服务。每次服务任务都有一个唯一的id号,并在执行服务任务时产生相应的日志。
要求:
1. 每个任务按其唯一的id号生成日志文件。
2. 所有任务的日志文件存放于一台固定的服务器上的固定目录。
3. 日志内容可实时反馈给用户,在前端显示。
日志是用log4j记录的,实际上如果是输出到单个日志文件的话可以配置socket将日志发送到远程日志服务器,但现在的场景是服务器同时可能执行多个任务,这些任务产生的日志要分发到不同的日志文件中,我没有想到什么简洁的处理方案。所以想用nfs将日志服务器日志目录mount到各个服务器。
然而即使在exports里指明了需要sync,仍然面临着日志文件实时同步的问题,往往任务已经结束了,日志文件虽然产生了,但大小还是0,内容要过一会儿才能完全写入nfs。
原来即使指明了sync,nfs默认也是要做一些缓存的。这就是参数ac和noac的区别,即attribute caching的开关。
mount -t nfs -o sync,noac x.x.x.x:/data/ ./data/
挂载的时候指明不需要属性缓存,这样才算是真正的sync了。但是,由此会带来服务性能的损失,缓存内存跟实写硬盘肯定不是一个数量级的。