Поднимаем сервер в облаке (Jelastic + Java + Tomcat + MySQL + BlazeDS) Часть I
У меня давно уже была идея одного «своего» клиент-серверного проекта (социального приложения), от реализации которого меня останавливала сложная серверная часть. Написать флеш/флекс клиента для меня проблемы не представляет, а вот к написанию сервера я решился приступить только совсем недавно, и в серии постов хочу поделиться своим опытом. Сразу скажу, что в них не будет подробных описаний со скриншотами о том, как создать проект в NetBeans, или таблицу в MySQL, скорее они ориентированы на флешера моего уровня, имеющего базовые представления о серверной яве и базах данных, но не имеющего опыта написания сервера. Надеюсь, что таким людям, мои посты подскажут направление движения, и сэкономят силы и время.
И так как это вводный пост, сперва поясню причины выбора заявленной конфигурации.
1. Почему Java?
Я одинаково плохо знаю и Java и PHP, и поэтому я долго колебался между этими языками, и на начальном этапе даже локально запустил две альтернативные тестовые конфигурации серверов одну на amfphp, другую на BlazeDS. Решил все-таки писать на яве, потому что мне комфортнее работать с типизированным языком, плюс навыки программирования на яве оплачиваются дороже (да, да помним, что флеш умирает и надо намечать пути отхода).
2. Почему Jelastic?
Соответственно встал вопрос выбора хостинга, желательно бесплатного, и в случае с явой выбор тут не очень богатый. Не хочу рекламировать Jelastic, но остановился на нем из-за простоты использования (любая конфигурация сервера/серверов с БД на любой вкус, разворачивается в считанные минуты и не надо ничего настраивать), отсутствием привязки к своему API (как например у Google App Engine), гибкой тарификации (платишь только за потребляемые ресурсы в виде клаудлетов, 3 клаудлета дается бесплатно). В этом облаке даже новичку достаточно просто разобраться, как собрать кластер серверов и настроить балансировщик, для этого предоставлен простой и удобный интерфейс, репликация сессий реализована в самом Jelastic. Насчет цены - моя конфигурация сервера, которую я использую только для разработки и тестирования, обходится мне 2 – 4 копейки в день, можно еще сэкономить если вырубать её, например, на выходные, но это совсем уже жлобство)). И при этом все можно быстро масштабировать в высоконагруженный сервер (или кластер серверов с балансировщиком), хотя конечно это будет значительно дороже. Из минусов сервиса хочется отметить, что ребята особо не парятся: есть косяки в документации, и даже плагин для NetBeans, они до сих пор не обновили до поддержки версии 7.4, мелочь, а неприятно.
3. Почему Tomcat?
Из явовских серверов я пробовал только Tomcat и Glassfish. Последний очень сложен (зацените объем доков, один только application-development-guide.pdf содержит 252 стр), иногда выкидывает непонятные «мистические» ошибки, и выгода от его использования не очевидна, тем более что некоторый его функционал и так уже реализован в Jelastic. Tomcat же простой и надежный, поэтому остановился на нем.
4. Почему MySQL?
Я до сих пор не уверен, правильно ли я сделал, что стал работать с реляционной БД, все-таки NoSQL значительно проще в разработке, и в Jelastic за такие же деньги можно использовать конфигурацию с MongoDB. Но хранится у меня будет в основном сложная статистика по пользователям, которая прекрасно укладывается в таблицы + хотелось освоить работу с реляционной БД.
5. Почему BlazeDS?
Ну то, что AMF для флеша является самым быстрым форматом общения с сервером, ни у кого не вызывает сомнений (кто не верит, может поиграться с этим приложением). Но помимо этого, я обнаружил, что работа с XML и JSON, на яве гораздо более геморная чем в ActionScript 3, и поэтому использование BlazeDS оказывается еще и самым ПРОСТЫМ И БЫСТРЫМ вариантом разработки, в дальнейшем вы это увидите сами.
Ну и напоследок, – какова скорость сервера такого типа? Я попробовал погуглить на эту тему и получил очень широкий разброс цифр, а зависимости от серверного железа и исполняемого кода он может держать от 20 до 20000 запросов в секунду. В нашем случае узким местом будет скорость запросов к MySQL, поэтому, наверное, мы будем ближе к нижнему пределу производительности. На чистой же JAVA + AMF, и хорошем железе, вполне реально достичь верхнего предела.
Всего комментариев 24
Комментарии
03.03.2014 03:53 | |
Сказал, как отрезал.
|
03.03.2014 03:53 | |
Только подумать забыл.
|
03.03.2014 10:24 | |
Ого, комменты за выходные появились, а я уж думал что эта тема здесь особо не интересна, все таки это не по тематике форума.
|
03.03.2014 13:59 | |
Dukobpa3 Тут правда вопрос, кто именно из нас двоих. Ибо ответа то от тебя нет, что кроме игр делают на флеше с *зверской аналитики и логирования* - обсмеяться.
|
03.03.2014 20:02 | |
Цитата:
Всё норм там с надежностью. Не было никаких коллизий.
Цитата:
Write failure
MongoDB allows very fast writes and updates by default. The tradeoff is that you are not explicitly notified of failures. By default most drivers do asynchronous, ‘unsafe’ writes - this means that the driver does not return an error directly, similar to INSERT DELAYED with MySQL. If you want to know if something succeeded, you have to manually check for errors using getLastError. |
06.03.2014 14:45 | |
Удалил замечание про медленную тех. поддержку jelastic - недавно пришлось с ней пообщаться, отвечают быстро и вежливо, так что это скорее плюс.
|
18.03.2014 16:50 | |
Цитата:
сложно писать прототипы структур данных.
|
18.03.2014 18:32 | |
Позабавил. Так их пишет наверно еще in4core
|
18.03.2014 21:46 | |
Цитата:
NoSQL избыточен, но подходит для разнородных данных коротких таблиц.
Только не надо кидаться пруфами. Цитата:
Так их пишет наверно еще in4core
|
|
Обновил(-а) alexcon314 19.03.2014 в 00:09
|
Последние записи от PainKiller
- Имитируем браузер (на примере залогинивания из приложения в контакт) (28.08.2014)
- Поднимаем сервер в облаке (Jelastic + Java + Tomcat + MySQL + BlazeDS) Часть III (03.03.2014)
- Поднимаем сервер в облаке (Jelastic + Java + Tomcat + MySQL + BlazeDS) Часть II (27.02.2014)
- Поднимаем сервер в облаке (Jelastic + Java + Tomcat + MySQL + BlazeDS) Часть I (27.02.2014)