2013-09-26 2 views
2

변수를 업데이트하려면 nginx 서버 내에 비동기식 스케줄러를 생성해야합니다. 제가이 말의 의미와 필요성을 보여주는 예를 들어 드리겠습니다.nginx에서 비동기 "cron like"스케줄러 생성 방법

http { 
    lua_shared_dict foo 5m; 
    server { 
     location /set { 
      content_by_lua ' 
       local foo = ngx.shared.foo 
       ngx.say(foo:get("12345")) 
      '; 
     } 
    } 
} 

내가 공유 메모리에 상주하며 모든 작업자 프로세스가 액세스 권한이 변수 foo 지정 :

이 같은 형태의 설정 파일을 상상해보십시오. 내가 원하는 것은 모든 minite라고 불리는 lua 스크립트의 값을 설정하는 것입니다. 단지 참조 용으로 Redis으로 이동 한 다음 필요한 데이터를 검색하고이 변수를 업데이트하십시오. 모든 호출에서 content_by_lua에서이 작업을 수행 할 수 있음을 알고 있지만 엄청난 양의 트래픽에는 대단히 비효율적입니다.

매분마다 또는 하나의 작업으로 실행되는 별도의 프로세스가 필요합니다. nginx에 이와 같은 것이 있습니까? 아니면 저를 도울 수있는 모듈이 있습니까?

답변

5

ngx_lua에서 제공하는 새로운 ngx.timer API를 사용할 수 있습니다. 자세한 내용은 문서를 참조하십시오 :

http://wiki.nginx.org/HttpLuaModule#ngx.timer.at

당신은 타이머가 cronjob에 같은 트리거링을 유지하기 위해 당신의 타이머 핸들러에 새로운 타이머를 만들 수 있습니다;

BTW, 타이머가 당 작업자 과정입니다) 타이머 처리기에서 lua-resty-lock 라이브러리를 사용하여 모든 nginx 작업자 중에서 한 번에 하나의 타이머 만 활성화되도록 할 수 있습니다. https://github.com/agentzh/lua-resty-lock

관련 문제