Микросервисы...Микросервисы...Микросервисы... А что это такое в двух словах?
Системные утилиты. Есть же Си,Си++, да та же Java почему не годится?
Что Вы на нем делали, где он себя лучше других показал?
Системные утилиты. Есть же Си,Си++, да та же Java почему не годится?
1. Си и C++ на порядок сложнее, чем Go. Как минимум из-за медленной компиляции и ручной сборки мусора.
2. Java требует JVM на целевой машине.
3. Часто вижу, что Go используют для консольных утилит для работы с Kubernetes и Docker - они написаны на Go и их код можно легко использовать в своих консольных утилитах.
4. В принципе порог вхождения в Go ниже, чем у жавы, так что не обязательно быть профессиональным разрабом - утилиты для себя может писать и девопс.
Микросервисы это небольшие автономно работающие сервисы, связанные между собой каким-либо образом, например, через API, брокеры сообщений и тп. Допустим, тот же интернет магазин можно сделать в виде набора микросервисов: авторизация, билинг, заказ, рассылка и т. д. В чем плюсы:
- Нет привязки к конкретному языку, как с монолитом
- Если падает один микросервис, то не падает вся система.
- Удобно масштабировать. Если допустим нагрузка на рассылку возросла, то просто увеличиваем число инстансов микросервиса рассылка.
- Быстрее можно доставлять фичи в прод. Каждый микросервис деплоится отдельно
- Проще работать с небольшой базой кода, в отличии от монолита
- Команды могут отдельно работать над разными микросервисами системы, не мешая друг другу
> т.е самые простые веб-приложения?
Как раз скорее микросервисы потребуются, когда сложность системы возрастает. Когда над проектом работает не 2 человека, а десятки команд. Когда проблемы с производительностью уже не решаются докидыванием железа
> Слышал, что ORM не используют, а пишут напрямую SQL - это так?
Тут как удобно. Никто не запрещает использовать ORM
Golang как раз хорошо подходит для разработки микросервисов. Он прост, быстр, позволяет писать конкурентный код. Не нужно следить за памятью, как в Си, Си++. Быстро компилируется, легко деплоить.
wideShift,
Поищите в интернете "golang use cases".
Го часто используется для DevOps, иными словами, в инфраструктуре. Системное ПО. Инструментарий, там и все такое. https://awesome-go.com/
wideShift, микросервисы это не про используемый язык, а про способ организации. Тут можно на любом языке делать. При этом можно сделать как отказоустойчивую хорошо масштабируемую систему, так и полную хрень, разваливающуюся по первому чиху и тратящую ресурсы на бессмысленные действия.
Go создавался для простой разработки асинхронных сетевых серверов и в этом блещет. Например написать на нём что-нибудь вроде Nginx сильно проще, чем на C.
Если быть честным, то и бизнес-логику на го писать удобней, чем на том же питоне. Даже из-за типизации. А то что го в ~40 раз быстрее выходит на CPU задачах — приятный бонус
Микросервис в двух словах - это самостоятельная сетевая единица со своим потоком исполнения, своим URI и своим маленьким (как правило REST) API для которой поднимать nginx setup избыточно.
т.е скажем пишем веб приложение и обращаемся запросами (get, post, put,delete) к этому серваку на golang. А само приложение может написано быть на чем угодно?
wideShift, да. И может вообще не быть самого монолитного приложения, а одноранговая куча микросервисов взаимодействующих через свои API, как конструктор LEGO. И написаны они могут быть на любых разных языках. Архитектурно их объединяет только согласованность API и сетевых протоколов.
я пока не могу понят зачем это(одноранговая куча микросервисов)?
Мне понятно, когда есть монолит и несколько микросервисов. Монолит дергает api это микросервисов.
uvelichitel, я все тоже кроме масштабирования без возни с микросервисами решаю при помощи модульной архитектуры, а по поводу декомпозиция сложности... пробовали найти баг в системе с кучей микросервисов? Там просто ад, нормальных инструментов для этого я не нашел.