2013-03-15 6 views
0

Мой веб-сервис, основанный на базе RESTful Spring, получает дифференцированные запросы пользователей, например Gold, Silver и Bronze, где запросы на золото имеют максимальный приоритет, бронзовый самый низкий. Поэтому я хочу реализовать некоторый простой тип дифференцированного предоставления услуг. Что может быть самой простой (я бы сказал, почти издевавшейся) стратегией для реализации?Простая стратегия QoS для моего веб-сервиса RESTful

Я думаю о блокировке меньшего приоритета в течение некоторого времени, если я обслуживаю более приоритетный. Что-то вроде этого

@Controller 
public class MyController { 
    @Autowired 
    private MyBusinessLogic businessLogic; 

    private static final int GOLD=0; 
    private static final int SILVER=1; 
    private static final int BRONZE=2; 
    private volatile int [] count = new int[3]; 

    @RequestMapping 
    public String service(@RequestBody MyRequest request) { 
     count[request.getType()]++; 
     for(int i=0; i<request.getType(); i++) 
      if(count[i]>0) 
       Thread.sleep(500); 
     String result = businessLogic.service(request); 
     count[request.getType()]--; 
     return result; 
    } 
} 

Это разумно? Или имеет какой-то нежелательный побочный эффект? Вы рекомендуете лучшую стратегию?

ответ

0

Это не похоже на хорошую стратегию. В основном, когда вы находитесь внутри контроллера, вам уже был выделен Thread: при вызове sleep() вы в данный момент держите такой поток, не позволяя обслуживать другие запросы и ограничивая количество одновременных запросов, которые может выполнить ваш сервер в целом. Вызов sleep() также имеет недостаток, чтобы НЕ освободить блокировку, поэтому это проблема параллельного параллелизма.

На данный момент я также ищу достойное решение QoS для своих API REST и, к сожалению, я не могу дать вам окончательный лучший ответ, но если ваши службы действительно спокойны, вы, вероятно, можете работать с прокси-сервером Apache, загруженным модулем как mod_qos (http://opensource.adnovum.ch/mod_qos/)

 Смежные вопросы

  • Нет связанных вопросов^_^