Останнім часом я багато читав про мікро-сервіси, і ось кілька висновків, які я дійшов до цього часу (будь ласка, виправте мене, якщо я помиляюся в будь-який момент).
- Архітектура мікропослуг добре поєднується з дизайном, керованим доменом. Зазвичай одна MS представляє один обмежений контекст.
- Якщо мікросервіс A вимагає функціональності, який знаходиться в мікросервісі B , моя модель, ймовірно, помиляється, і A і B насправді повинні бути однією мікропослугою / BC.
- Синхронний зв’язок між мікропослугами (прямі запити HTTP) поганий, тому що він не відповідає меті мікропослуг та вводить з'єднання між компонентами.
- Бажано асинхронний зв’язок між службами. Служби повинні публікувати події до черг повідомлень, щоб інші служби могли передплатити та обробити свою частину події або використовувати її для копіювання частини даних, необхідної для їх контексту. Таким чином, сервіси можуть обробляти запити, навіть інші сервіси не працюють, що не було б у випадку синхронного зв'язку.
- Якщо мікропослуга A публікує подію, мікропослуга B підписується на цю подію і створює нову подію як результат, мікропослуга A не повинна бути однією, що обробляє новостворену подію, тому що це буде кругова залежність. У цьому випадку ми повинні запровадити третю мікропослугу або поєднати A і B в мікросервісі AB .
- Мікросервіс - це фактично оманливий термін. Ми повинні прагнути до малих контекстів, але це не потрібно. Термін не повинен бути "мікропослугою", а " достатньо великим, щоб зробити службу роботи ".
- Мікросервіси дозволяють нам з легкістю та без побоювання вводити нові функції у всі нові системи. Це можна зробити, ввівши нову послугу або переробляючи один із існуючих.
- Кожна мікросервіс повинна мати власне сховище даних. Реплікація / дублювання даних є бажаною поведінкою в цій архітектурі.
Окрім підтвердження мого розуміння цієї архітектури, моя інша частина питання здебільшого стосується виявлення сервісу. Якщо служби спілкуються асинхронно та використовують центральну чергу подій, як amazon SQS, чи означає це, що виявлення служби не має свого місця в такій архітектурі?
Служби не повинні мати ніяких знань про інші сервіси в системі. Вони лише усвідомлюють свій контекст та події, які вони повинні публікувати чи передплачувати?