Wpis z mikrobloga

Jako #programista30k z 16-letnim stażem, głównie w projektach związanych z szerokim web-devem ale też integracją produktu z urządzeniami mobilnymi, zewnętrznymi serwisami, internet of things pragnę podzielić się listą największych wg mnie błędów jakie popełniają firmy technologiczne na którymś z etapów swojego istnienia.

1. Migracja monolitu do SOA.
W większości przypadków przynosi więcej szkody i niepotrzebnych kosztów niż utrzymanie solidnie zaimplementowanego monolitu. Zazwyczaj inicjowana na pewnym etapie życia produktu przez grupę doświadczonych inżynierów znudzonych codzienną pracą z monolitem i szukających wyzwań pozwalających im zdobyć nowe doświadczenie. Potrzeba tej zmiany jest argumentowana zazwyczaj lepszą w teorii skalowalnością systemu, łatwiejszym deploymentem i utrzymaniem wszystkich serwisów. W praktyce podobną skalowalność dużo łatwiej osiągalną przez dołożenie zasobów można uzyskać zostając przy monolicie. Zazwyczaj taka migracja dokłada tylko problemów z architekturą sieciową i integracją wszystkiego w jedną całość, dochodzi konieczność utrzymania brokera eventów i asynchronicznej komunikacji, etc. Przy braku odpowiednich nakładów świetnych inżynierów: zarówno programistów i devopsów firmy dokładają sobie tylko niepotrzebnego skomplikowania całości, nie wspominając o kosztach przepisania całości z monolitu na SOA co samo nie przekłada się na zysk firmy.

Z mojego doświadczenia w 99% przypadków dobrze napisany monolit, najlepiej napisany w podejściu: Loosely Coupled Monolith będzie o wiele korzystniejszym, prostszym i tańszym zarówno w implementacji jak i utrzymaniu rozwiązaniem.

Pokuszę się nawet o stwierdzenie, że przepisywanie monolitu na SOA w zasadzie nigdy nie może wyjść dobrze a pozwolić sobie na używanie tej architektury mogą sobie tylko wielcy gracze, dysponujący nieograniczonymi zasobami zarówno finansowymi jak i ludzkimi, pozwalającymi na napisanie a nie przepisanie wszystkiego od nowa przez wiele niezależnych teamów, każdy odpowiedzialnych tylko i wyłącznie za jeden serwis. Firma powinna również posaiadać dedykowany, doświadczony team devopsów to stworzenia i utrzymania architektury sieciowej dla SOA (niezależnie czy w cloudzie czy na serwerach dedykowanych)

2. Wdrażanie modnych rozwiązań na siłę - szlagierowy przykład to używanie GQL zamiast REST do API
Wdrażane z pobudek podobnych do migracji do SOA - chęć użycia i nauczenia się nowej technologii.
Problemy w zasadzie te same. W przypadku GQL jest to komplikowanie prostych rzeczy, problemy z optymalizacją zapytań i eliminacją problemu N+1, które w GQL rozwiązuje się w sposób nietrywialny jak ma to miejsce w api REST.
Często śmieję się z firm, które na siłę wrzucają GQL mając tylko jednego i to swojego klienta tego API, API które do tego nie zmienia się często. GQL ma w zasadzie sens tylko w projektach, które udostępniają różnorakie podzbiory API różnym klientom, co nie przeszkadza programistom wdrażać tego rozwiązania w prostych projektach tym samym robiąc klasyczny "strzał z potężnej armaty jaką jest GQL do muchy, jaką jest ich prosty w założeniach projekt"

3. Naiwne myślenie, że wytwarzanie oprogramowania skaluje się liniowo względem ilości inżynierów.
W przybliżeniu jest tak faktycznie do pewnego rozmiaru firmy. Słowem 2 programistów wykona pracę 2x szybciej niż 1, czy nawet 6 wykona ją 2x szybciej niż 3, ale od powiedzmy 5 programistów przestaje się to tak prosto skalować ponieważ dochodzi znacząca praca polegająca na po pierwsze podziale pracy między zespoły a po drugie komunikacji między nimi czy wreszcie po 3 scaleniu tej pracy. Najgorsze, że nawet doświadczeni managerowie czy tech-leadzi często zakładają że mając zespół 50 osób, dobiorą kolejne 50 osób i zrobią pracę 2x szybciej. Otóż często zrobią tę pracę nawet trochę wolniej.

#programowanie #pracbaza #pracait #it
  • 86
  • Odpowiedz
@wargi-sromowe-mniejsze:
1. W monolicie baardzo ciężko osiągnąć 0-downtime deployment.
2. W monolicie ciężko osiagnąć separacje, że jak pada ci jeden moduł to nie wywala się cały system.
3. W graphql to nietrywialne rozwiązanie na N+1 to "batching". Ogarnia to się banalnie a przynajmniej w javowych bibliotekach :p

Z ostatnim punktem w pełni zgoda :v.
  • Odpowiedz
@AdminNeumann: głośny artykuł, gadaliśmy o nim nawet na daily w pracy, ale uważam że to jest wyjątek
Problemem tutaj był koszt transferu danych. Ile tak naprawdę serwisów działa na obrazach, gdzie obraz jest tworzony w serwisie1 i pobierany przez serwis2 w tak ogromnej skali że wywaliło koszta?
Większość użyć S3 to władowanie tam wygenerowanego pliku i tyle xd Zauważyłem że Bolt przechowuje tam paragony w pdf
  • Odpowiedz