Nous prévoyons de migrer de l'architecture monolithique à l'architecture basée sur les micro-services. Maintenant, je suis responsable de parler d'un module en monolithe.Monolith to microservice
Monolithe existant:
1) code est couplé très serré.
2) Les API sont appelées récursivement avec différents paramètres.
3) Certains des appels avec-dans le module que je prévois d'extraire contient des appels à un système qui prend environ 9 minutes pour terminer. Malheureusement, c'est synchrone.
Points à noter:
1) Je commence avec une seule migration api qui est très important et ne fonctionne pas bien. 2) Cette api consiste en des appels parallèles à un autre système pour exécuter tas de tâches. Tous les appels sont de blocage et de temps (pensez temps de réponse avg être 5-6 min)
Déménagement à architecture Microservice: Il y a 2 approches qui me vient à l'esprit tout en déplaçant le api mentionné ci-dessus du monolithe à un microservice séparé, avec la résolution du problème de blocage des threads en raison des appels de blocage de temps.
a) se déplaçant dans les phases:
- Create a separate module
- In this module provide an api to push events to kafka, another
module will in-turn process the request and push the response back
to kafka
- monolith for now will call above mentioned api to push events to
kafka
- New module will inturn call back the monolith when the task
complete (received response on a separate topic in kafka)
- Monolith once get response for all the tasks will trigger some post
processing activity.
Advantage:
1) It will solve the problem of sync- blocking call.
Disadvantage:
1) Changes are required in the monolith, which could introduce some
bugs.
2) No fallbacks are available for the case if bug gets introduced.
b) Déplacer l'API à la fois à la Microservice:
Dans un premier temps qui partagera commune source de données avec le monolithe et résoudre le problème de blocage des appels via l'introduction de kafka entre le nouveau microservice et le module prend du temps pour traiter la demande.
Avantage:
1) Fallback est disponible dans monolithe
Inconvénient:
1) Initialement, la source de données est réparti entre les systèmes.
Quelle devrait être la meilleure approche pour faire ce genre de tâches complexes?