Как повысить производительность приложения клиент-серверной архитектуры? - PullRequest
2 голосов
/ 27 апреля 2009

У нас есть продукт, построенный на архитектуре клиент-сервер. Некоторые подробности об используемом технологическом стеке.

  • Клиент - Java Swing
  • Сервер - RMI
  • База данных Java - Oracle

Клиенты находятся в разных частях мира, но сервер Java и база данных Oracle находятся на одной машине в Швеции. Из-за этого существует большая задержка в сети. Клиенты, расположенные в отдаленных местах, имеют ужасную производительность. Приложение используется для обработки файлов размером более 50 МБ. Каждая операция в целом требует более 1000 сетевых вызовов.

Исходя из вашего опыта, как вы решаете эту проблему и повышаете производительность?

РЕДАКТИРОВАТЬ: Чтобы ответить на несколько вопросов

  1. Файлы содержат фактические бизнес-данные, которые необходимо обработать и обновить в базе данных, которые не могут быть отправлены частично.
  2. Некоторые сетевые вызовы могут быть пакетными, но это потребует серьезного рефакторинга кода. Это очень старое приложение, написанное еще в 2001 году. И дизайн приложения таков, что сервер содержит все сервисы, и они сделаны повторно используемыми в коде, а бизнес-логика написана на стороне клиента. Итак, эта бизнес-логика многократно вызывает сервер и, следовательно, астрономическую цифру.

-Snehal

Ответы [ 12 ]

0 голосов
/ 27 апреля 2009

RMI - очень дорогой протокол. Я бы посмотрел на его замену.

0 голосов
/ 27 апреля 2009

Каждая операция требует 1000 запросов - это много! Это убьет любой сервер. Обычно это проблема, которая не может быть решена путем добавления дополнительного оборудования. или добавив больше полосы пропускания. Это проблема дизайна. В любом случае я бы установил профилировщик, чтобы увидеть состояние сервера (потребление памяти, процессор и т. д.). Взгляните на лямбда-зонд (http://www.lambdaprobe.org)

...