考虑如何解决日志等并发数据的写入方案
很久没有用perl了,最近重新用起来, 用于解决并发数据读写问题,主要是日志问题. 实时写入mysql是不现实的, 所以需要使用
一个服务器作为缓冲. Perl是解决这个问题的最快速有效的方案,因为CPAN上的东西太好用了.
服务器称之为statsd,如何实现,可选的还是很多的:
首先是前端的实现:
方案1是PHP脚本打开一个socket,通过UDP来将要写入的数据传送到statsd. UDP的开销要比TCP小.不过仍需要PHP.
方案2是perl实现一个FastCGI, 设置nginx,将特定url转发到这个FastCGI处理, 它则将数据转发到statsd.
方案3是实现perlbal的plugin,nginx也是直接将url转发到后端的perlbal上的plugin.
后端的statsd实现:
方案1:使用Danga::Socket,Net::Server这些来实现一个单进程的server,简单,快速.
方案2:使用POE来实现,POE值得投入.
方案3:用Perlbal插件来实现,复用价值高.
方案4:直接用Nginx的perl接口实现,也许是最高效的.
我也考虑过gearman不过,感觉在这个场合不是太合适,但是后面可有大用场.
Perlbal是非常不错的,今后还有很多用途.
Nginx的perl接口目前还有一些小问题,其中主要是kill -HUP的时候可能无法重新加载perl脚本.
这个方案在bloom中还是比较重要的,否则大量的数据无法及时处理,这几天抽时间再仔细看看.
Comments
Leave a Reply