Наилучшая практика для пользователей REST API с ограничением скорости?

Анонимный внутренний класс используется в следующем сценарии:

1.) Для переопределения (подкласс), когда определение класса не используется, кроме текущего случая:

class A{
   public void methodA() {
      System.out.println("methodA");
    }
}
class B{
    A a = new A() {
     public void methodA() {
        System.out.println("anonymous methodA");
     }
   };
}

2 .) Для реализации интерфейса, когда реализация интерфейса требуется только для текущего случая:

interface interfaceA{
   public void methodA();
}
class B{
   interfaceA a = new interfaceA() {
     public void methodA() {
        System.out.println("anonymous methodA implementer");
     }
   };
}

3.) Аргумент Определенный Анонимный внутренний класс:

 interface Foo {
   void methodFoo();
 }
 class B{
  void do(Foo f) { }
}

class A{
   void methodA() {
     B b = new B();
     b.do(new Foo() {
       public void methodFoo() {
         System.out.println("methodFoo");
       } 
     });
   } 
 } 
30
задан frankodwyer 5 March 2009 в 13:22
поделиться

2 ответа

Это все сделано с внешним веб-сервером, который слушает мир (я рекомендую nginx или lighttpd).

Относительно ограничений скорости, nginx в состоянии ограничить, т.е. 50 req/minute на каждый IP, на всем протяжении получают 503 страницы, которые можно настроить.

Относительно ожидаемого временного файла вниз, в мире направляющих это сделано через специальную страницу maintainance.html. Существует некоторая автоматизация, которая создает или символьные ссылки, что файл, когда серверы приложений направляющих понижаются. Я рекомендовал бы положиться не на присутствие файла, а на фактическую доступность сервера приложений.

, Но действительно Вы в состоянии запустить/остановить сервисы, не теряя соединений вообще. Т.е. можно выполнить отдельный экземпляр сервера приложений на другом порте сокета/IP UNIX и иметь стабилизатор (nginx/lighty/haproxy) использование что новый экземпляр также. Тогда Вы закрываете старый экземпляр, и все клиенты обслуживаются только с новым. Никакая потеря соединения. Конечно, этот сценарий не всегда возможен, зависит от типа изменения, которое Вы представили в новой версии.

haproxy является решением только для стабилизатора. Это может чрезвычайно эффективно сбалансировать запросы к серверам приложений в Вашей ферме.

Для довольно большого сервиса Вы заканчиваете с чем-то как:

  • разрешение api.domain к циклическим N стабилизаторам
  • каждый стабилизатор прокси запрашивает к веб-серверам M на статические и серверы приложений P для динамического контента. О, хорошо Ваш API REST не имеет статических файлов, не так ли?

Для довольно маленького сервиса (при 2K RPS) вся балансировка сделана в одном-двух веб-серверах.

18
ответ дан xpda 5 March 2009 в 13:22
поделиться
  • 1
    Также, если you' ре после учебного руководства по Django 1.9 к мишени, there' s опечатка при команде для выполнения нового модульного теста. Удостоверьтесь, что работали python manage.py test polls.tests не зарегистрированный python manage.py test polls – Dylan Pierce 31 January 2016 в 11:01

Я рекомендовал бы реализовать ограничения скорости за пределами Вашего приложения с тех пор иначе, интенсивный трафик будет все еще иметь эффект уничтожения Вашего приложения. Одно хорошее решение состоит в том, чтобы реализовать его как часть Вашего апачского прокси с чем-то как mod_evasive

2
ответ дан d-_-b 5 March 2009 в 13:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: