LINUX.ORG.RU

Golang в крупных проектах

 , ,


1

7

Здравствуй, уважаемый форум!

Предыстория: Наша компания заказала 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?


Последнее исправление: cetjs2 (всего исправлений: 3)

Ответ на: комментарий от pawnhearts

Ну вот у пхп7 интерпретатор тоже смотрит. IDE и чекеры либо подхватывает автоматом, либо это делается на уровне phpDoc. Насколько я вижу в этом плане они почти одинаковые. async/await нет, есть корутины и генераторы, может быть завезут асинхронность, но пока вроде такой цели нет, этого хотелось бы конечно, но очень мало людей в общей массе php девов будут пользоваться этим правильно.

chuppa
()
Ответ на: комментарий от Antonova

Вчера они переписывали с Python 2 на Python 3, сейчас только переписали на этот твой asyncio (судя по шапке), а завтра что? Починят GIL и опять все сначала?

derlafff ★★★★★
()
Ответ на: комментарий от derlafff

Починят GIL

Уже несколько раз его убирали - всё становилось только хуже(в однопоточных приложениях - точно). В этих ваших asyncio есть https://docs.python.org/3.2/library/concurrent.futures.html#processpoolexecutor если очень надо.

pawnhearts ★★★★★
()
Ответ на: комментарий от derlafff

Кстати, да. Интересный момент

Python 3 и затем Python 3.5 (3.5 из-за лучшей поддержки асинхронной работы).

т.е. они заменили @asyncio.coroutine и yield from на async/await. В большом проекте. Везде. И стало лучше? Это же так, сахарок. Тем более питон 3.5 идет по дефолту только в самых свежих дистрах, систему тоже обновляли ради этого или канпеляли в /opt?

pawnhearts ★★★★★
()
Ответ на: комментарий от derlafff

Это ты лол, го по рукам не даст за никак не обработанный err и аппа накернится потом в другом контексте. Что еще споешь про крупные проекты, к которым тебя даже близко не подпускали? Походу кавычки на лоре, это пик твоего успеха.

anonymous
()
Ответ на: комментарий от anonymous

го по рукам не даст за никак не обработанный err

golint даст, например

и аппа накернится потом в другом контексте

точно так же, как и на необработанном эксепшоне.

Еще раз, для глупеньких: go позволяет не забыть обработать ни одну ошибку, при этом не требуя никаих накладных расходов. Ну никаких. Можно быть ССЗБ и игнорить err, но лучше к err привыкнуть и иметь с этим ровно 0 проблем.

Нет, серьёзно, я на ЛОРе в err-срачах провел в сотни раз больше времени, чем имея с err какие-либо проблемы

анонимное кококо

кококо, аноним, кококо.

derlafff ★★★★★
()
Ответ на: комментарий от derlafff

точно так же, как и на необработанном эксепшоне.

Не точно, исключение будет оригинальное, а не взрыв говна в другом месте.

Можно быть ССЗБ

Вот, ты начинаешь понимать. Собственно в крупных проектах за всеми не уследишь. Люди могут быть не только тупыми и ленивыми, но и уставшими, невнимательными, с порванным контекстом и т.д. golint не панацея.

чем имея с err какие-либо проблемы

В своем наноболоте, да-да.

A1
()
Ответ на: комментарий от A1

Вот, ты начинаешь понимать. Собственно в крупных проектах за всеми не уследишь. Люди могут быть не только тупыми и ленивыми, но и уставшими, невнимательными, с порванным контекстом и т.д. golint не панацея.

Надуманная проблема. Даже у самых плохих кодеров, с которыми я работал, с этим проблем не было. С чем угодно, но не с этим.

Ну т.е. адовый говнокод, лапшекод, школокод пишут, но с err никаких проблем.

derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 2)
Ответ на: комментарий от derlafff

Надуманная проблема

Я не поленился, проверил как golint реагирует на result, _err := func(). Никак, не ругается. Поэтому, можешь сказки своим школьникам-друзьям рассказывать.

A1
()
Ответ на: комментарий от derlafff

Починят GIL

Ну вот твой уровень знания пистона и всплыл.

Deleted
()
Ответ на: комментарий от anonymous

postman_ ★☆ (23.09.2016 9:49:36) изнасиловали в детстве

derlafff ★★★★★
()

Хм... Да тут намечается знатный срач свитера vs смузи.

bitfroster ★★
()
Ответ на: комментарий от KRoN73

У Rust есть что-то масштаба хотя бы Docker? :) На Rust сидят инфраструктуры таких монстров, как DigitalOcean?

Да, Dropbox. И да, Docker упоротое говно, porto/rkt заметно удобнее.

xpahos ★★★★★
()
Ответ на: комментарий от xpahos

Да, Dropbox.

Actually, full disclosure, we really just rewrote a couple of components in Rust. Most of Magic Pocket (the distributed storage system) is still written in golang.

anonymous
()
Ответ на: комментарий от anonymous

переписали узкие места и успокоились.

Тебя это не наводит на мысли что GoLang бесполезен? Сначала его преподносят как замену Си, а теперь переписывают узкие места на Rust.

xpahos ★★★★★
()
Ответ на: комментарий от KRoN73

Ну куда же теме про Go без упоминания, что кроме Docker'а ничего нету. Правда, Golang уже в десятку топа на Github вошёл, но ничего.

https://github.com/search?o=desc&q=language:Go&ref=searchresults&...

Ну и что это значит? Ну заспамили Гитхаб утилитами и недофреймворками на Go. Где хотя бы десяток конкретных примеров крупных проектов, кроме Докера и Кубернетес?

anonymous
()
Ответ на: комментарий от xpahos

Тебя это не наводит на мысли что GoLang бесполезен?

Был бы бесполезен, не использовали бы.

Сначала его преподносят как замену Си

Никто его как полноценную замену Си не преподносит: Go was designed with systems programming in mind. Servers, clients, databases, caches, balancers, distributors - these are applications Go is obviously useful for, and this is how we have begun to use it within Google.

anonymous
()
Ответ на: комментарий от derlafff

Я конечно на гоу не пейсатель, но когда на ноде сползали с колбеков на генераторы и ушли в том числе тонны if (err) { callback(err); return; }, то я выдохнул.

Если сильно надо локально обработать - ну добавляешь try/catch, но такое требуется редко. Чота вот раньше мне казалось правильным, что контролируешь каждую ошибку как повелитель. А потом смотришь похудевший код, и он как-то заметно проще воспринимается.

Vit ★★★★★
()
Ответ на: комментарий от pawnhearts

Process pool? Это шутка такая или там на самом деле пул юниксовых процессов и какой-то наркоманский IPC для такой простой херни?

migesok
()
Ответ на: комментарий от anonymous

Бекенд, 25К строк кода

Для Го это очень маленький проект.

Не $%зд% ка ты гвоздика, что ты ландышем цвела. Для Go 25K - это невзъе#енный проект. Год работы не меньше одного разработчика + полное покрытие тестами + содержимое директории «vendor» со сторонними зависимостями. Достаточно открыть Github и посмотреть сколько в среднем LOC в проекте на Go и на других ЯП.

Fucker
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.