Приложение на стороне сервера Java, Как? - PullRequest
2 голосов
/ 29 ноября 2009

Я создаю масштабируемое приложение на стороне сервера на Java, но мне нужно знать, что нужно делать, а что нет.

Приложению нужны клиенты для подключения к серверу через сокеты TCP. Я слышал много хорошего об Apache MINA, поэтому решил попробовать и обойти это. Мне также понадобится приложение для связи с базой данных и отправки подходящих данных клиентам по запросу или push.

Я бы хотел управлять своим собственным домашним сервером, чтобы даже он был под моим контролем.

У меня есть некоторые сомнения по поводу следующего:

  • Должна ли сторона сервера иметь GUI, чтобы сообщить статус, подключение и исключения. Если да, то как мне реализовать это, я должен использовать Swing?
  • MINA обрабатывает подключение, но как мне работать с базой данных (MySQL)?
  • Как я могу проверить это приложение для масштабируемость, как я могу симулировать клиентские подключения к серверу.
  • Есть ли рамки, которые могут сделать все вышеперечисленное или я должен обрабатывать каждый аспект.

Ответы [ 5 ]

3 голосов
/ 29 ноября 2009

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

Для тестирования масштабируемости я бы рекомендовал Apache JMeter . Это отличный, бесплатный и довольно простой инструмент для создания и измерения нагрузки на ваше приложение. Вы можете получить информацию о времени ответа, транзакциях в секунду, нагрузке на сервер и т. Д.

Я довольно часто использовал его с приложениями HTTP. Для вашего приложения TCP у него есть TCP Sampler, но, вероятно, было бы проще создать реализацию для его Java Sampler с использованием кода связи, который вы уже написали. Я также рекомендовал бы объединить его с плагином rstatd , чтобы вы могли измерять ЦП / память сервера во время теста.

Может потребоваться пара дней, чтобы ознакомиться с инструментом, но он мне очень помог.

Нужна ли на стороне сервера графическая оболочка, сообщать о состоянии, подключении и исключения.

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

Пока ваш сервер пишет журналы и данные аудита для транзакций и событий, за которыми вы хотите следить, этого достаточно. Наличие GUI только увеличит сложность сервера, что, вероятно, приведет к большему количеству ошибок. Кроме того, если вы эффективно используете журналы, вы можете подключиться к другим механизмам мониторинга / оповещения (например, SNMP).

как мне обращаться с базой данных (MySQL)?

В других ответах есть несколько хороших предложений; эта тема, вероятно, лучше освещена сама по себе, и было задано много вопросов об этом. Я бы порекомендовал сделать поиск ORM + Java , чтобы получить хорошее мнение об этом. Вот несколько приличных ссылок:

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

Есть ли рамки, которые могут сделать все из вышеперечисленного или я должен справиться каждый аспект.

Сомнительно , и, если таковые имеются, это, вероятно, настолько универсально, что в конечном итоге вы все равно будете писать для этого кучу кода. Для ORM + GUI (если вы пользуетесь GUI) существуют готовые веб-решения для баз данных MVC +, которые работают на JVM, например Grails . Но большинство ваших вопросов касаются разных проблемных областей, каждая из которых нуждается в отдельном решении.

2 голосов
/ 01 декабря 2009

MINA - это отличные рамки.

  • Требуется ли на стороне сервера графический интерфейс, чтобы сообщать о состоянии, подключении и исключениях. Если да, то как мне это реализовать, следует ли мне использовать Swing?

Краткий ответ: Нет!
Длинный ответ: сервер обычно не имеет графического интерфейса, потому что большинство крупных серверных систем вообще не имеют дисплея. Лучшее решение - использовать JMX для предоставления статистики. У MINA есть предопределенные MBean-компоненты, которые нужно добавить только в службу JMX. С JMX-клиентом вы можете получить доступ к этой информации и создать графический интерфейс.
Просто попробуйте JConsole и выберите локальное Java-приложение, чтобы получить представление об этом.

  • MINA обрабатывает подключение, но как мне обращаться с базой данных (MySQL)?

Существует много способов обработки базы данных. Либо чистый JDBC, Hibernate или другой фреймворк ORM. Просто убедитесь, что то, что вы используете, безопасно для потоков!

  • Как я могу проверить это приложение на масштабируемость, как я могу симулировать клиентские подключения к серверу.

Либо напишите простой клиент и запустите его несколько тысяч раз, либо используйте специализированную среду тестирования. Если вы используете существующий протокол, то для него может существовать конкретный.

  • Существует ли какая-либо структура, которая может выполнять все вышеперечисленное, или мне приходится обрабатывать каждый аспект.

Зависит от протокола и того, чего вы хотите достичь. Существует сервер FTP на базе MINA, который выполняет все в одном, но это конкретная реализация и не будет соответствовать вашим потребностям.
Если вы используете свой собственный протокол, вы должны реализовать en / декодеры и обработку протокола и сообщений самостоятельно. Это включает в себя хранение информации о сообщениях в базе данных.

2 голосов
/ 29 ноября 2009

Требуется ли на стороне сервера графический интерфейс, чтобы сообщать о состоянии, подключении и исключениях. Если да, то как мне это реализовать, следует ли мне использовать Swing?

Вам не нужно использовать графический интерфейс, вы можете просто записать журнал в файл или использовать другой сервер журналирования, например журнал событий Windows.

MINA обрабатывает подключение, но как мне обращаться с базой данных (MySQL)

Существует множество различных способов доступа к вашей базе данных MySQL, я уверен, у swing есть для этого фреймворк. Также вы можете попробовать hibernate, который похож на LINQ в .NET, но для Java.

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

Для этого вам понадобится среда тестирования, попробуйте JUnit.

1 голос
/ 29 ноября 2009
  • Требуется ли на стороне сервера графический интерфейс, чтобы сообщать о состоянии, подключении и исключениях. Если да, то как мне это реализовать, стоит ли использовать Swing?

Нет, это не обязательно. Исключения должны идти в лог-файл. Состояние может быть сообщено в простой консоли по запросу клиента. И информация о подключении тоже. Другими словами, (Swing) графический интерфейс может быть удобен, но вы все равно должны начинать с низкоуровневых вещей, и это функция с низким приоритетом, просто приятно иметь.

  • MINA обрабатывает подключение, но как мне обращаться с базой данных (MySQL)?

Я не знаю, касается ли этот вопрос соединений с базой данных или доступа к базе данных. Если речь идет о доступе к базе данных, в зависимости от сложности и OOness того, что вы будете делать, ORM может быть хорошей идеей или нет, и в этом случае вы можете предпочесть сырой JDBC. Без подробностей невозможно ответить. Если речь идет об обработке соединений с базой данных, возможно, используйте пул соединений, например c3p0, но забудьте JNDI.

  • Как я могу проверить это приложение на масштабируемость, как я могу симулировать клиентские подключения к серверу.

Для этого, как предлагается в других ответах, JMeter и его сэмплер TCP выполнят эту работу.

  • Существует ли какая-либо структура, которая может выполнять все вышеперечисленное, или мне приходится обрабатывать каждый аспект.

Как я уже сказал, без более подробной информации невозможно дать более конкретные или точные ответы.

1 голос
/ 29 ноября 2009
  • Если вы считаете, что это важно для вашего приложение, чтобы сообщить вещи Вы упоминаете, вы, вероятно, должен. Вы можете использовать Swing как графический интерфейс. Если вы более опытны в сети развития, вы также можете сделать свой серверное приложение для записи в базу данных, и отобразить это на веб-странице (и также пишите по-другому, через база данных). Выбор, который вы делаете должно основываться на том, как вы думаете, ваш приложение будет развиваться.

  • Если ваши операции с базой данных ограничены, вы можете просто использовать простую старую библиотеку JDBC, которая предоставит вам классы, необходимые для выполнения записи / чтения в / из базы данных MySQL. Если вы считаете, что ваше приложение в некоторой степени увеличится в размере / сложности, вы можете рассмотреть вариант ORM (например, Hibernate).

  • Я читал, что JMeter - это инструмент для тестирования клиентской нагрузки в настройке клиент-сервер. Я не пробовал это сам. JUnit не поможет вам измерить это.

...