Понятие позволяющее разбить проект на людей, которые каждый пишут на своем языке.
Смысл сводится к тому, что программы обмениваются данными через интернет, а не запускаются в рамках одного компьютера - соответственно пропадает понятие классы-интерфейсы-неймспейсы, появляется понятие "запрос-ответ-косяк" :)
Точно так же как программу на ООП можно разбить на подпапки по неймспейсам - платежи там, регистрация здесь - так же можно разбить программу на несколько маленьких программ. Размер не определен то есть можно только авторизацию сделать на отдельном компе, а можно целый пласт функционала - и то и то микросервис. А можно сначала написать монолит большое приложение, а потом там где просадка будет замечена - этот кусок функционала на другую машину выбросить.
Сделано с целью вероятного увеличения нагрузки в много раз, которое в случае одного компьютера потребовало бы копирование проекта в десятки мест и слежения где что еще не обновилось. Еще один плюс - можете писать на любом языке и фреймворке - этот кусок программы должен получить по вебу и отдать по вебу.
Связан с тотальным гемором о шинах сообщений и откату свалившихся задач - если в базе данных ты в транзакцию завернул и забыл, то когда задача пошла по цепочке и свалилась где-то посредине начинается игра в "поймай кто сломался".
Преимущества безусловно есть. Когда ты можешь увеличить производительность на конкретной задачи скопировав её одну на еще 10 компьютеров, это менее болезненно чем копировать гигантский проект и вырезать из него часть функционала. Но и гемора хватит с головой.