0,0
рейтинг
15 июня 2015 в 18:04

Разработка → Что нам стоит «Parse» построить или как без особого напряжения поднять его opensourse-аналог на собственном сервере из песочницы

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

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

К счастью, я не отношусь к подобным «хардкорщикам», потому и использую сервис «Parse» в своей работе. Просто и хорошо, благо, что сервис позволяет практически «накликать» нужный функционал. Но недавно я задумался, что в один прекрасный момент лимитов сервиса может оказаться недостаточно и тогда придется переходить на платное использование сервиса или делать собственный бекенд.

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

Часто многие компании (Пример: DEVPROM, GITLAB) позволяют бесплатно использовать свои продукты для размещения на собственном сервере, так как в этом случае не расходуются их ресурсы и сервисы дополнительно популяризуются за счет более массового распространения. Естественно, поддержка для продукта в данном случае если и предоставляется, то очень ограниченная, потому ключевую роль играет качество документирования продукта. Если все прозрачно и документировано, то можно без особого труда использовать подобные решения. Если нет, то лучше поискать другие варианты.

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

О BaasBox


BaasBox — сервис, написанный на Java, использующий в своей работе «Play Framework». Сервис примечателен тем, что помимо использования собственных облачных ресурсов позволяет загрузить его на собственный сервер и использовать без каких-либо ограничений.

В настоящее время сервис имеет собственные SDK для JavaScript, Android и iOS устройств и поддерживает:

1) Управление контентом
  • работу с коллекциями объектов;
  • создание, модификацию и удаление объектов;
  • управление ролями доступа;
  • настраиваемые запросы для работы с объектами;
  • управление произвольными данными, хранящимися на сервисе.


2) Управление пользователями
  • регистрация;
  • вход пользователя в систему;
  • выход из системы;
  • управление профайлом пользователя;
  • восстановление забытых паролей;
  • авторизация пользователя через Facebook и Google+;
  • управление ролями пользователей: администраторы, зарегистрированные пользователи, бэк-офис пользователи, создание новых ролей.


3) Управление файлами
  • создание и выборка файлов на сервере;
  • получение мета-информации о файлах;
  • ACL (список контроля доступа, который определяет, кто или что может получать доступ к конкретному объекту).


4) Отправка PUSH-уведомлений
  • Поддерживается для Android и iOS устройств.


5) Резервирование, восстановление и сброс БД

6) REST API
  • Позволяет редактировать API для взаимодействия с сервисом.


Достаточно функциональное решение для бекенд-сервиса мобильных приложений. На случай, если возможностей сервиса окажется недостаточно, «из коробки» предусмотрено расширение через создание собственных плагинов, по аналогии «CloudCode» в «Parse».

Пошаговое выполнение


Вначале нам потребуется свой VDS-сервер. Для экспериментов я решил воспользоваться сервисом, предоставляемым компанией FirstVDS за разумные деньги.

В любом случае, содержание такого сервиса не сильно бьет по карману независимых разработчиков. Тем более что в любом случае получится дешевле, чем коммерческая подписка «Parse».

Использование именно FirstVDS — это мой выбор, ни в коем случае не является рекламой данной компании и вы можете выбрать компанию по своему разумению, или же использовать для этих целей «домашний» сервер. Нам нужна лишь возможность поднять java-машину на unix-системе и хороший сетевой канал.

Итак, тариф для тестов, VDS-OVZ-Разгон.

За 359 руб./месяц я получил сервер со следующими характеристиками:
  1. Intel Xeon (2 ядра) > 2ГГц;
  2. Оперативная память: 1024 Мб;
  3. Место на диске: 60 Гб;
  4. Трафик: Безлимитный;
  5. Скорость канала: 1 Гбит/сек (по заверениям представителей компании FirstVDS).

От панели управления сервером я отказался по причине того, что не видел необходимости ее использования, так как данный сервер будет использоваться только под бекенд приложения. На случай, если возникнет такая необходимость, можно использовать бесплатные аналоги ISPManager, наподобие «VestaCP».

На почту пришло письмо с параметрами доступа, можно подключиться к серверу и установить BaasBox.

Работа с Unix-системами обычно не вызывает затруднений, в случае отсутствия опыта пользования подобными системами информация легко «гуглится» на просторах сети!

Соединяемся через консоль по протоколу SSH. Кто-то использует для этих целей сторонние приложения, я же использую стандартный терминал Mac OS X, позволяющий комфортно работать с сетью прямо из него.

Набрав команду: «ssh 1хх.1хх.2хх.2хх -l root» и введя пароль от учетной записи администратора, мы видим системное сообщение сервера и приглашение консоли.

Приглашение консоли сервера
image


На данном этапе наш сервер пуст, на нем установлена лишь операционная система (в моем случае выбор пал на Linux Debian) с набором стандартных системных служб.

На сайте BaasBox есть подробная инструкция по установке и использованию сервиса, я же кратко пройдусь по этапам установки, благо, что сия процедура не занимает и 5 минут).

Здесь будут приведены команды для консоли unix-сервера на примере ОС Debian.

Первое, что нам требуется сделать, это прописать репозиторий, с которого и будет установлена виртуальная машина java. И установить машину на сервер.

«sudo» — может не использоваться с правами «root» в Debian!

Добавляем репозиторий в систему:

sudo add-apt-repository ppa:webupd8team/java -y

Обновляем пакеты:

sudo apt-get update

Устанавливаем java-машину:

sudo apt-get install oracle-java8-installer

Версия установленной java-машины
image


Нам также может потребоваться распаковщик для архивов:

sudo apt-get install unzip

Подготовка сервера практически завершена. Теперь можно приступить к загрузке и запуску нашего бекенд-сервиса.

Загрузим BaasBox с официального сайта:

wget --content-disposition http://www.baasbox.com/download/baasbox-stable.zip

Проверим имя загруженного архива системы с помощью команды:

ls

Мы видим, что загруженная версия последнего стабильного пакета имеет имя «baasbox-0.9.2.zip».

Распакуем его:

unzip baasbox-0.9.2.zip

И перейдем в распакованную папку:

cd baasbox-0.9.2

Изменим разрешения для запуска скрипта:

chmod +x ./start

Запустим наш BaasBox-сервис:

./start


Успешный старт сервиса
image

Перейти в панель управления можно набрав в адресной строке браузера адрес вида: «IP_СЕРВЕРА:9000» для доступа к панели администрирования сервиса.

Переход по адресу на порт: 9000
image

Для доступа к панели управления, после установки используются стандартные значения: «admin/admin» и номер приложения — «1234567890».

Авторизация администратора
image

В дальнейшем, пароль администратора можно изменить и настроить сервис для своих нужд более детально. На данном этапе, мы с минимальными затратами времени, получили полностью готовый сервис для своего приложения.

Dashboard нашего сервиса
image

Остается лишь прописать старт скрипта при перезагрузке сервера, чтобы наш сервис стартовал автоматически. На этот случай есть множество вариантов, которые dы можете использовать. Для этих целей я обычно использую следующий пример: linuxguru.ru/administration/avtozagruzka-skriptov-v-debian

Коннект приложения к вновь созданному сервису


В данном примере, будет рассмотрен коннект приложения к вновь созданному сервису для iOS-устройств с использованием языка «Objective-C».

Итак, первое, что нам следует сделать, это загрузить SDK для своего приложения. Загрузка SDK возможна как с использованием «CocoaPods» -> pod 'BaasBoxSDK', так и олдскульным способом добавления SDK в проект методом простого перетаскивания в IDE XCode. Для этого, SDK можно загрузить по ссылке: www.baasbox.com/download-page

Далее, мы импортируем заголовочный файл. По моему опыту импорт лучше произвести с использованием PCH-файла проекта, так как если приложение достаточно большое, мы избавимся от частого включения заголовочного файла в проекте.
#import «BAAClient.h»

Затем инициализируем SDK для работы с сервисом. Наилучшее место — инициализация его в делегате приложения.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Инициализация SDK
    [BaasBox setBaseURL:@"http://instavds.ru:9000"
                appCode:@"1234567890"];
		// Проверяем коннект через создание тестового пользователя
		BAAClient *client = [BAAClient sharedClient];
       [client createUserWithUsername:@"Test"
                          password:@"password"
                        completion:^(BOOL success, NSError *error) {
                            if (success) {
                                NSLog(@"User is %@", client.currentUser);
                            } else {
                                NSLog(@"ERROR = %@", error.localizedDescription);
                            }
                            
                        }];    

    return YES;
}

Вот, собственно, и все! За короткое время мы добились работы нашего мобильного приложения с полноценным baas-сервисом, не накладывающим на нас лимиты по использованию ресурсов и прочих ограничений.

Успешный вывод в консоль информации о зарегистрированном пользователе
image

Выводы


Данный материал не рассматривает в полной мере возможности сервиса BaasBox, а призван обратить ваше внимание на существующие альтернативные варианты Parse.

Если вы не используете все возможности Parse-комбайна, то возможно в будущем BaasBox, развернутый на собственном сервере, послужит вам хорошую службу.

P.S.: Пример использования сервиса BaasBox в реально работающем приложении для iOS-устройств я подробно рассмотрю в следующей статье.

В настоящий момент, я не использую BaasBox в продакшене, но данный сервис мной принят на вооружение, что когда возникнет необходимость миграции с «Parse» на свой сервис, я знаю какие шаги мне стоит предпринять, чтобы сберечь несколько сотен долларов в месяц.
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (17)

  • 0
    А почему переход на платную подписку вдруг стал незапланированным расходом?
    И как там с надежностью решения на дешевых VDS? Если она конечно нужна вообще…
    • 0
      Незапланированный лишь по той причине, что не все хорошо монетизируется. Тем более когда работаешь только на себя, а не организацию, то копейка счет любит!

      А VDS в наше время на достаточно хорошем уровне производительности. Я пробовал дедик на РЕГ РУ, очень все прилично!
      • 0
        Не советую брать VDS у reg.ru, вечные проблемы.
        • 0
          У РЕГ.РУ я пробовал дедик. За VDS сказать ничего не могу. Есть куча других хостеров, выбор — это личное дело каждого!
  • 0
    Бесплатный Parse даёт 30 запросов в секунду. Вы уже готовы и знаете, какой VPS нужно будет заказывать: мощность процессора и объём памяти, чтобы выдержать такое на java-приложении?
    • 0
      Нет. Я не готов пока отказаться от Parse. Еще далеко до превышения лимитов, а BaasBox на данный момент как альтернативная платформа при превышении. Мне интересно получать новый опыт, пробуя на зуб альтернативные решения.

      По возможностям сервера? Здесь судить лучше, отталкиваясь от того, как делалась логика работы в самом МП.
  • 0
    Дает ли BaasBox возможность аналитики подобно той, которая есть в Parse?
    • +1
      Такой возможности там нет. Но к слову сказать, аналитика Parse меня не впечатлила. Всегда использую другие платформы аналитические. Тем более, что эпловый Коннект научился давать ту аналитику, которую не покажет никакая другая платформа. В частности, просмотры приложения в сторе! А поведение пользователя, можно обработать и во Фларри, и в Яндекс. У кого к чему душа лежит.
  • 0
    Ваш вдс выдержит 250000 активных пользователей в сутки при 1 гиге памяти и жавой бэкэндом?! Х-м…
    • 0
      Не выдержит конечно. ВДС я брал, чтобы сделать пример работы с реальным сервером, а не локалхостом. Когда поставлю реальный рабочий сервер, то мой тариф будет от 4 гига с возможностью расширения.
      • 0
        И отвечая на прошлый вопрос, я вспомнил про интересный момент)!

        BaasBox может быть установлен на локалхост или в локальной сети! Нет привязки к интернет. Можно разработку вести в любых условиях, впоследствии просто переписав адрес коннекта приложения!
        • 0
          Очень сомнительное преимущество в 21 веке (-:
          • 0
            Не скажите, я часто работаю в электричке! Сеть по пути даже в телефоне пляшет
      • +1
        Так вопрос остается открытым — какая конфигурация выдержит 30 запросов/секунду, и сколько она будет стоить?
        И на сколько в дальнейшем ее легко будет масштабировать на 40,50 или 100 запросов/секунду.
        • 0
          Такие потребности легко обеспечивает Xeon со средним камнем (не топовым), RAM от 6 гб и канал от 250 мбит. Стоимость разная, но в среднем дедик обойдется Вам в РЕГ.ру в пределах 5000 руб./месяц.
        • 0
          Немного запоздалый ответ, но наверное кому то будет полезным. С месяц назад перешел на baasbox так как работать на backendless стало невыносимо, запросы часто превышаются, библиотека под андроид постоянно крэшится (именно библиотека, в коде программы все отлажено).
          Пришлось немного сам baasbox перепелить под свои нужды, добавил что то подобное бизнес логики bekendless, выполняются нативно на java.
          Месяц полет отличный просто, не 1 креша в логе плея. Библиотека содится без каких либо проблем и на ios и на android.
          Что касательно ресурсов, на данный момент 17500 пользователей (запросов в секунду в бекендлесе давно перевалил за бесплатные), сервер взял в облаке infobox.ru. 3 ядра по 1.3 и 4гб оперы, под бокс выделил 2гб оперативки. Постоянно наблюдаю за производительностью, в пиковых моментах потребление оперы не более 1.5гб в среднем варьируется на уровне 200-500мб оперы. 1.5гб оперы потреблялось в пик при 150 подключений в секунду. Пока я очень доволен своим выбором, одно но, иногда нужно перезагружать сам бокс, можно и сервер целиком, тогде потребление оперы снижается, видимо где то утечка есть, со временем допилю. Цена сервера 3000р

          P.S. На backendless была забавная проблема. В дебаг режиме на ios приложение пуши приходят отлично, как только приложение качаю из плея пуши перестают приходить, так и не нашел причину и решение этой проблемы. Уже и сертификаты разные ставил и Sandbox и production, все равно пуши не работали.
          • 0
            На боксе прописал те же самые сертификаты что прописывал в backendless и о чудо, пуши стали нормально приходить даже после публикации приложения. С чем это было связано и как лечить я не знаю, ни кто не может сказать в чем причина. От 3 месяцев использования backendless остались только негативные впечатления. И еще негативный осадок от них остался в том, что я купил одну услугу у них 24 числа, оплатил, 1 числа следующего месяца с меня пытались списать деньги за эту же услугу, не получилось списать заблокировали доступ к rest api, после 2 дневного общения с поддержкой выяснялось что я все же оплатил, но так как их биллинг проверяет платежи 1 числа, ту услугу нужно было проплатить еще раз. Вобщем полный бред, 2 дня простоя, потеря 2000 пользователей и негативные отзывы в сторах

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