Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Microservice - Jak to ugryźć
Pyton_000
post
Post #1





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Temat nadaje się raczej do Pro (IMG:style_emoticons/default/wink.gif)

Do rzeczy. Mamy dość pokaźną aplikację która została napisana już wieki temu. Przyszedł czas aby zacząć ją migrować na nowe rozwiązania.
Aplikacja z biznesowego pkt. jest podzielona na modułu np. Wyszukiwarka, Klienci, Kontrakty, Firmy itd.

Ogólnie jest to aplikacja do zarządzania rekrutacjami.

Chcemy to zmigrować i postawić w oparciu o Microservices. Tylko jak to ugryźć.
Nie mam doświadczenia w tej materii więc może będzie ktoś kto udzieli jakichś wskazówek.

Założenia są takie że migrujemy na Laravel 5.1 (nie pytajcie dla czego (IMG:style_emoticons/default/tongue.gif) , hejt i tak nic nie wniesie (IMG:style_emoticons/default/smile.gif) ), PHP 5.6 (lub 7).
Jest to dość złożona struktura, dla tego musimy się "wpiąć" w stary system i robić przekierowanie do nowych elementów tak aby móc powoli wyłączać stare rzeczy.

Może ktoś ma jakieś ciekawe materiały na ten temat, jak to ładnie powinno wyglądać.
Wiem tyle że całość ma się opierać o REST i Events.

Czy każdy moduł stawiać jako w pełni działająca aplikacja na FW czy może jakieś inne rozwiązania.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
by_ikar
post
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Założenie mikrosewisów nie jest takie że wszystko działa zupełnie odrębnie i żaden nie wie nic o drugim. To jest tak jak w przypadku aplikacji MVC, gdzie poszczególne kontrolery nie są na sztywno powiązane z widokami czy modelami. Te same modele czy widoki możesz również wykorzystać w innej części swojej aplikacji. A taka baza danych to jest część wspólna tych mikroserwisów, bo w jakiś sposób trzeba uwierzytelniać requesty, a najlepiej byłoby tymi samymi danymi. Skoro w tym momencie jakoś już przydzielasz poszczególne bazy danych użytkownikom, to nie ma problemu aby powstało API dzięki któremu takie rzeczy będziesz mógł robić.

Kilka miesięcy temu w końcu w firmie w której pracuje została podjęta decyzja o przepisaniu aplikacji, właśnie z monolita, gdzie wszystko było w jednym repo, wszystko działało na jednym serwerze, rozbudowywanie było trudne, deployment jeszcze trudniejszy etc, przez co jak przyszedł większy ruch, aplikacji zwyczajnie nie dało się skalować, a po mimo moich (nie tylko) uporczywych niekiedy argumentach decyzja za każdym razem była ustala na termin może kiedyś, ja tylko czekałem na większy ruch który ubije aplikację. Kiedy tak się stało, nagle dział marketingu który twierdził że do czegoś takiego nie dojdzie, ocknął się z ręką w nocniku i aplikacje trzeba było przepisywać na wczoraj. Więc im szybciej małymi kroczkami, tym lepiej, a jak ktoś z działu marketingu twierdzi inaczej, to niech to napisze na papieru i się pod tym podpisze, że jeżeli będą problemy w przyszłości, to za nie wszystkie odpowiada właśnie on. Inaczej z tymi mendami się nie da czasami :/
Go to the top of the page
+Quote Post
Dejmien_85
post
Post #3





Grupa: Zarejestrowani
Postów: 251
Pomógł: 23
Dołączył: 23.04.2013

Ostrzeżenie: (0%)
-----


Cytat(by_ikar @ 29.01.2016, 15:32:01 ) *
Założenie mikrosewisów nie jest takie że wszystko działa zupełnie odrębnie i żaden nie wie nic o drugim.


A kto powiedział, że żaden nie wie o innych?

Założenie jest takie, że serwis jest osobną jednostką, która sobie sama żyje i jest niezależna. Jeśli masz w aplikacji serwis odpowiedzialny za zapis plików (przypuśćmy, że jest osobny serwis, na który wgrywa się wszystkie pliki, czy to zdjęcia, czy PDF, cokolwiek), i teraz wszędzie tam, gdzie aplikacja wymaga wczytywania/odczytywania plików, to "rozmawia" z tym serwisem.

Jedne serwisy mogą tez komunikować się z innymi, ale jeśli przy operacji X serwis A ciągle gada do serwisu B, wtedy lepiej jest połączyć te dwa serwisy w jeden.

Należy unikać sytuacji, kiedy serwisy zbyt często siebie odpytują, bo to jest tylko niepotrzebny "coupling", który później odbija się przy zmianach - w grę wchodzą podstawowe zasady SOLID. Jeśli jeden serwis "rozmawia" z 10 innymi, wtedy przy zmianie tego serwisu może nagle pierdyknąć Ci te 10 serwisów.

Najlepiej narysować sobie na kartce serwisy i narysować strzałki kto z kim gada. Jeśli większość serwisów gada ze sobą nawzajem, wtedy jest to znak, że stworzyłeś cudowny przykład tego, jak nie robić mikroserwisów. ; )

A teraz wracając do Pythona - idźcie małymi kroczkami, znajdźcie jeden moduł, który jest niezależny i po prostu wyrzućcie go na oddzielny serwer. Tylko zanim go wywalicie na serwer, wtedy warto byłoby przeprowadzić najpierw refactoring kodu, postarać się usunąć wszelki niepotrzebny "coupling" tego modułu z innymi. Na waszym miejscu też postarałbym się ograniczyć liczbę zbędnych wywołań tego modułu (w sensie wywołań w kodzie, tylu moduł->metoda), bo podstawą jest, ze każde obecne wywołanie danego modułu będzie zastąpione callem do API.

Łato się mówi, ale oczywiście robi znacznie trudniej. Mikroserwisy to kawał trudnej roboty, powodzenia mogę jedynie życzyć. I koniecznie weź jakąś lekturę, same artykuły Cię wiele nie nauczą. Polecam tą książkę: http://shop.oreilly.com/product/0636920033158.do (czytałem ją w tamtym roku, bardzo fajna, przedstawia konkretne przypadki i problemy z jakimi się boryka, w tym jak dzielić aplikację na serwisy i jak radzić sobie z bazą, np. z transakcjami pomiędzy serwisami).

Weź się za porządną literaturę, ona Ci pomoże, tam ludzie opisują swoje doświadczenia, tutaj jest za dużo teoretyków. ; P
Go to the top of the page
+Quote Post

Posty w temacie
- Pyton_000   Microservice - Jak to ugryźć   25.01.2016, 09:26:31
- - marcio   W tym momencie robimy to samo z systemem ktory zar...   26.01.2016, 10:25:28
- - Pyton_000   Hehe widać nie jestem sam w bólu Tak BD zostaje....   26.01.2016, 10:34:24
- - lukaskolista   CytatAplikacja z biznesowego pkt. jest podzielona ...   29.01.2016, 11:41:46
- - Pyton_000   Też to rozważam. Masz może jakieś sprawdzone lekt...   29.01.2016, 11:45:44
- - marcio   http://microservices.io https://www.nginx.com/blog...   29.01.2016, 12:42:05
- - lukaskolista   Ebook porównujący microservices i SOA: https://www...   29.01.2016, 13:02:59
- - marcio   abstrahujac abstrakcje i tak by mozna bylo w niesk...   29.01.2016, 14:16:54
- - lukaskolista   Nie, microservice to nie wdrożenie w życie. Wdroże...   29.01.2016, 14:24:52
- - Pyton_000   Każda dyskusja ma sens o ile jest merytoryczna C...   29.01.2016, 14:39:33
- - Dejmien_85   W skrócie: 1. Zerknij na cała aplikację, zlokaliz...   29.01.2016, 14:46:01
- - Pyton_000   Dość poważny problem tej aplikacji jest taki że ni...   29.01.2016, 15:11:04
- - by_ikar   Założenie mikrosewisów nie jest takie że wszystko ...   29.01.2016, 15:32:01
|- - Dejmien_85   Cytat(by_ikar @ 29.01.2016, 15:32:01 ...   29.01.2016, 17:35:49
- - Pyton_000   U nas nie ma takiego problemu. Jest już ustalone, ...   29.01.2016, 15:44:09
- - lukaskolista   Poniżej moja propozycja, głównie architektura, o i...   29.01.2016, 15:54:45
- - lukaskolista   CytatWeź się za porządną literaturę, ona Ci pomoże...   29.01.2016, 17:59:51
- - Pyton_000   @lukaskolista, @Dejmien_85 kawał dobrej wypowiedzi...   29.01.2016, 20:21:46
- - lukaskolista   Na jakim systemie bazodanowym to macie postawione?...   29.01.2016, 21:03:38
- - Pyton_000   Tak, Mysql, serwis działa od 2006 roku   29.01.2016, 21:25:04


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.04.2026 - 15:56