Здравствуй, уважаемый форум!
Предыстория: Наша компания заказала web-проект. Он был написан на Tornado на Python 2. Проект является достаточно крупным и является бэкендом веб-портала, который включает в себя элементы взаимодействия с другими системами компании, различные мастера заказа и т.п. Всего база данных состоит из ~200 таблиц. Т.е. это проект с достаточно сложной бизнес-логикой.
Далее уже в нашей компании поставленный нам проект стал дорабатываться и постепенно переписываться с Python 2 на Python 3 и затем Python 3.5 (3.5 из-за лучшей поддержки асинхронной работы).
В последне время отдельные части системы стали переписываться на Golang.
Проблема: Начальство поставило задачу переписать всю систему на Golang (Но, разумеется, не 100%, где-то Python может остаться). Причина: борьба с растущей нагрузкой. При этом сейчас следует определиться с основными архитектурными вопросами при использовании Golang-а.
Проблема точнее: Смущает, что сложно найти подобные проекты реализованные на Golang. Конечно, все слышали о различных инструментах типа Docker, гугловский Vitess, сервис загрузки для гугла. Но при этом все они являются отдельными инструментами, реализованными на Golang, а не целыми веб-проектами со сложной бизнес-логикой. Основное отличие нашего проекта от тех, в которых сейчас используется Golang я вижу в том, что нам нужно:
- Достаточно продвинутое ООП для реализации сложной логики
- Хорошие инструменты для работы с базой данных (ORM)
- Организовать проект, состоящий из множества файлов так, чтобы максимально легко вносить изменения
Что смущает в Golang:
- Нету примеров архитектуры сложных веб-проектов (под сложностью я бы понимал работу со сложной структурой базы данных)
- Слабая поддержка ООП в языке
- Отсутствие устоявшихся технологий
Вопросы:
- Есть ли у кого-либо опыть использования Golang в столь сложных проектах?
- Может ли кто-нибудь подсказать примеры столь сложных проектов с открытым исходным кодом?
- Есть ли у кого-нибудь веские аргументы не делать этот переход на Golang?
- Может ли кто-то рассказать, как решить те проблемы, которые были мной выше описаны в Golang?