О стеке технологий - Siyet/paw GitHub Wiki

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

Осторожно много букв, можно просто прочесть вывод.

Небольшая преамбула:

Я являюсь начальником отдела разработки ПО в небольшой компании. Текущий наш основной проект включает в себя стек:

  • Языки: Java, TypeScript, Python, 1C
  • СУБД: MSSQL, Oracle, PostgreSQL, CouchDB
  • Frontend libs: BackBoneJS, AngularJS
  • Backend libs & frameworks: Spring, ArcGIS, RedisMQ, WebSockets (socket.io), ElasticSearch, NodeJS
  • ОС Серверов (7 разных виртуалок VMWare): Windows Server, RedHat

Заказчик требует минимизировать стек. Спустя год попыток свести это все добро к связке CouchDB + AngularJS + ElasticSearch + NodeJS поняли что ветвь тупиковая и сейчас все сводим к связке ArangoDB + VueJS + NodeJS.

Перечень, в который раз, проанализированных и протестированных вариантов:

  1. MySQL + Redis
  2. PostgreSQL + pgdeltastream
  3. MongoDB + adminMongo + GridFS
  4. CouchDB
  5. ArangoDB
  6. CouchDB + MySQL

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

Все ставилось и тестировалось сначала на Ubuntu 18.04, нервы кончились когда оказалось, что не только у MongoDB протухли ключи репозиториев, но и у CouchDB, ну последней каплей стало новость о том, что ArangoDB в готовом пакете есть только под Ubuntu 17.04 и младше... Вторую базу к ряду из исходников ставить не стал, сменил сервер на CentOS 7.

1. MySQL(MariaDB) + Redis

MariaDB:

url: 81.177.139.185:3306
login: root
pass: 12345678
db_name: test

Есть phpmyadmin, но он доступен только из панели администратора хостинга, доступ предоставлю по требованию.

Redis:

url: 81.177.139.185:6379

При учете, что MariaDB уже стояла на VPS'e и оставалось ее только настроить ушел час на установку и настройку. Аспекты:

  • Самое популярное, проверенное временем решение
  • Множество готовых рецептов how to
  • Множество разработчиков умеющих работать с этим стеком
  • Мало разработчиков (относительно общего количества) компетентных в разработке сервисов уровня Altapost, что усложнит отбор в будущем.
  • Много не релевантных откликов... короче, сложно будет искать фрилансеров под данный стек.

2. PostgreSQL + pgdeltastream

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

3. MongoDB + adminMongo + GridFS

url: mongodb://81.177.139.185:27017
web interface (adminMongo): http://81.177.139.185:3287/app
web ui pass: 12345678

Пользователя и БД можно создать через web interface. На установку и настройку без GridFS, т. е. без возможности прикрепления attach'ей ушел еще один 1 час.

В качестве web interface изначально ставил mongo-express, но позже понял что adminMongo - лучше.

GridFS не прикручивал, сохранения attach'ей не реализовано.

Доступ к БД по ReastAPI надо докручивать отдельно, если уходить от бэкенда на сайте.

Данная БД ходит под Microsoft

4. CouchDB

web interface: http://81.177.139.185:5984/_utils/
url: http://81.177.139.185:5984
login: admin
pass: 12345678

Все что нужно есть из коробки.

В виду наличия Rest API, да и вообще работы через http, позволяет отказаться от backend'a при написании сайта.

Сервисы и сайт будут общаться через БД.

Данную БД поддерживает фонд Apache.

5. ArangoDB

url: http://81.177.139.185:8529
login: test
pass: 12345678
db_name: testdb

Разобраться и установить на сервер заняло 1 час.

Мультипарадигмальная БД, основана на графовых БД, данные хранятся в виде json, язык запросов похож SQL, поддерживает join'ы. Грубо говоря, у этой БД есть все плюсы от документоориентрованных БД, отсутствуют их минусы, ну и присутствуют графы, что позволяет удобно хранить самые хаотичные данные, которые только можно придумать.

Вывод

Из постановки задачи известно, что, как минимум, для nationalsalesltd.com Altapost должен быть запущен в декабре. Идеальным стеком для данного проекта считаю ArangoDB + ReactJS (сайт) + NodeJS (сервисы), это то, на чем данный проект должен быть написан в конечном итоге.

Стеком на данный момент может являться: CouchDB + NodeJS + PHP (Laravel).

Данный стек позволит реализовать требуемый функционал в кратчайшие сроки (отталкиваясь от знаний и возможностей текущих разработчиков).

CouchDB проще, чем ArangoDB, но и медленнее.

Учитывая опыт Андрея, быстрее всего он сделает сайт на стеке Laravel + CouchDB, обертка как и для MongoDB имеется тут.

Обертка laravel для ArangoDB то же имеется.

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

Вот тогда можно будет сесть и спроектировать графовую БД, грамотно настроить под нее виртуалку (потому что производительность ArangoDB ощутимо зависит от настроек ОС по работе с ПЗУ).

Также отмечу, что разработка веб-приложений движется в сторону отказа от backend'a при разработке сайтов. Так как все передовые БД поддерживают REST API и хорошее распределение доступа на стороне БД. Поэтому frontend после запуска Altapost должен быть переписан полностью на reactJS или на vueJS, если последний наберет достаточную популярность, чтобы ценники на разрабов по этим двум фреймворкам сравнялись.