2017-01-23 3 views
1

우리 제품은 스케일을 조정하고 여분으로 만들 필요가있는 나머지 API입니다. 우리의 계획은 nginx를로드 밸런서와 프록시로 사용하여 3 개의 다른 서버에 api 요청을 전달하는 것입니다.이 모든 서버는 동일한 MongoDB 복제 세트에 연결됩니다.스케일링 REST API - 아키텍처

API의 속도 제한은 사용자의 API 키를 기반으로합니다. 사용자는 여러 클라이언트를 가지며 모두 동일한 API 키를 사용하여 요청에 서명합니다.

  1. 여러 cron 작업은 데이터베이스에 대해 실행해야합니다

    나는이에 대한 두 가지 질문이 있습니다. 어떻게 우리는 서버 중 하나만 crons를 실행하는지 확인하지만, 서버가 다운되면 대신 다른 서버가 실행됩니다.

  2. 모든 서버에 결합 된 요금 제한을 어떻게 적용 할 수 있습니까? 우리는 서버 3 대 모두에서 하나의 API 키로 하루 1000 건의 요청을 처리 할 수 ​​있습니까?

답변

0

데이터베이스에 대해 여러 개의 cron 작업을 실행해야합니다. 서버 중 하나만 cron을 실행하도록하려면 어떻게해야합니까? 서버가 다운되면 대신 다른 서버가 실행됩니다.

대기열 사용을 고려하십시오. 모든 cron 작업은 대기열에서 가져올 수 있습니다.

모든 서버에 속도 제한을 적용하려면 어떻게해야합니까? 세 개의 서버 모두에서 한 API 키가 하루에 1000 개의 요청을 처리하도록하려면 어떻게해야합니까? ?

서버가 임차인 (api 키를 가진 사용자)으로부터 요청을받을 때마다 업데이트되는 카운터를 유지하는 것이 좋습니다. 서버가 할당량을 사용했는지 확인하라는 요청을 받으면 카운터 (카운터 < 1000)를 확인하십시오.

+0

포인트 2에 대한 질문 : 초당 요청 수가 여러 개인 경우 어떻게해야합니까? 데이터베이스를 방문하여 초에 카운터를 10 번 업데이트 할 수는 없습니다. – giliev

+0

참이지만 카운터 업데이트는 비동기 적으로 수행 할 수 있습니다 (데이터베이스 업데이트가 완료 될 때까지 기다리지 말고 대기열에 쓰고 백그라운드 작업을 사용하여 대기열을 처리하지 마십시오). 우리는 또한 더 빠른 읽기 - 쓰기가 필요할 수있는 다른 기능을 제공한다면 메모리 내 데이터베이스를 고려할 수 있습니다. – Sumanth