О стеке технологий - 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.
Перечень, в который раз, проанализированных и протестированных вариантов:
- MySQL + Redis
- PostgreSQL + pgdeltastream
- MongoDB + adminMongo + GridFS
- CouchDB
- ArangoDB
- 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
, если последний наберет достаточную популярность, чтобы ценники на разрабов по этим двум фреймворкам сравнялись.