Spring REST-сервис медленнее реагирует на нелокальный вызов

У меня есть следующий контроллер REST, который получает двоичные данные, декодирует их с помощью декодера AVRO и выполняет некоторые операции, возвращая строку

@RestController
public class MyRestController {

    GenericDatumReader reader;
    private static final Logger logger = LoggerFactory.getLogger(MyRestController.class);

    public MyRestController() throws IOException {
        String fullSchema = new String(Files.readAllBytes(Paths.get("full.avsc")), StandardCharsets.UTF_8);
        String readerSchema = new String(Files.readAllBytes(Paths.get("reader.avsc")), StandardCharsets.UTF_8);

        reader = new GenericDatumReader(new Schema.Parser().parse(fullSchema));
        reader.setExpected((new Schema.Parser().parse(readerSchema)));
    }

    @RequestMapping(method = RequestMethod.POST,
            value = "/calculate")
    public String calculate( HttpServletRequest requestEntity) throws IOException {
        long init = System.currentTimeMillis();
        BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(IOUtils.toByteArray(requestEntity.getInputStream()), null);
        String input = reader.read(null, decoder).toString();

        String output = doSomeProcess(input);

        long end = System.currentTimeMillis();

        logger.info("time: " + (end- init));

        return output;
    }

}

Как вы можете видеть, я печатаю миллисекунды в конце процесса перед возвратом вывода. Когда я вызываю это с того же компьютера, на котором я запускаю службу REST, он печатает 20 мс, однако, когда я выполняю вызов с моего локального компьютера (используя те же двоичные данные), он печатает около 200 мс. Я думаю, что независимо от того, где я это называю, время должно быть одинаковым. Результаты, по-видимому, совпадают при многократном тестировании, всегда, когда я звоню с моего ноутбука, примерно в 10 раз больше. У меня есть следующие вопросы

  • это поведение ожидает, учитывая, как я измеряю время? почему это происходит?
  • Как я могу улучшить это, чтобы измерить это должным образом? Я хотел бы избежать измерения сетевых издержек вызова
  • Может ли это быть связано с типом объекта, который я использую в качестве параметра для вызова rest? Я пытался с помощью MultipartFile но это кажется намного медленнее

0 ответов

Другие вопросы по тегам