我的RESTful Web服务最简单的QoS策略

时间:2013-03-15 08:11:53

标签: rest spring-mvc qos

我的基于RESTful Spring的Web服务接收差异化的用户请求,例如Gold,Silver和Bronze,其中Gold请求具有最高优先级,Bronze最低优先级。所以我想实现一些简单类型的差异化服务配置。这可能是最简单的(我会说几乎被嘲笑)实施的策略?

如果我提供更优先的服务,我正在考虑在一段时间内阻止较低的优先级。像这样的东西

@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;
    }
}

合理吗?或者有一些不良的副作用? 你推荐一个更好的策略吗?

1 个答案:

答案 0 :(得分:0)

这看起来不是一个好策略。基本上当你在Controller里面时,一个线程已经被分配给你:通过调用sleep(),你当前正在持有这样的线程,阻止其他请求被提供,并限制服务器整体可以执行的并发请求数。 sleep()调用还有一个缺点就是不释放任何锁,因此这是一个潜在的并发问题。

目前我也正在为我的REST API寻找一个不错的QoS解决方案,不幸的是我无法为您提供明确的更好的答案,但如果您的服务非常安静,您可以使用加载了类似模块的Apache代理。 mod_qos(http://opensource.adnovum.ch/mod_qos/