Kiedy korzystać z usług na cloud, a kiedy stawiać swoje na instancjach?

7 minute read

Dostawcy cloud dostarczają wiele usług, które do tej pory instalowałeś sam. Kiedy warto z nich skorzystać, a kiedy dalej utrzymywać swoje wersje? Te pytania często pojawiają się po pierwszych miesiącach korzystania z dobrodziejstw chmury, szczególnie po pierwszym, większym rachunku.

Mnogość dostawców i usług

Mnogość usług przyprawia już o zawrot głowy. I to począwszy od rzeczy dość złożonych (jak np. Amazon Rekognition) aż po rzeczy całkiem proste (load balancer, NAT gateway). Ze względu na to, że AWSa znam dobrze (wycertyfikowałem się jak szalony ;-) to łatwiej mi się odnieść do tego jako przykładu. A konsolę zarządzającą tam już trzeba scrollować, aby znaleźć usługę - to idzie w kierunku dostarczenia wszystkiego co może być potrzebne do stworzenia rozwiązania nowoczesnej aplikacji (lub migracji takowej z własnych serwerów - patrz grupę usług Migration). Wygląda to nieźle, ale czasem warto się zatrzymać aby nie zapędzić się w coś co często spędza sen z powiek wielu menedżerom - vendor lock-in.

Ryzyko pozostania u jednego dostawcy chmury (vendor lock-in)

Bardzo nie lubimy jak odbiera się nam wybór. Stąd często boimy się pozostać na łasce jednego dostawcy. Muszę tu jednak zmartwić duże grono czytelników, gdyż pełne uniezależnienie jest dość ciężkie do uzyskania. Nie ze względów technicznych - to można osiągnąć przy pomocy odpowiednich narzędzi jak np. z użyciem Terraform, postawić na konteneryzację (i Kubernetes!) - problemem pozostaje jednak fakt, iż sama migracja może być: długa, powodować nieprzewidziane przerwy, kosztowna (trzeba zapłacić za sam proces, testy itp.) i wiązać się z ryzykiem. Stąd jeśli chcesz być w pełni niezależny to wyjście jest jedno - projektuj swoje rozwiązania od razu na dwóch chmurach. Możesz zacząć później, ale to jedyny, sprawdzony sposób na to aby się uniezależnić w pełni. Później dołożenie kolejnego dostawcy będzie o wiele prostsze i będziesz mógł swobodniej wybierać lepsze/tańsze usługi obserwując jak się zachowują dla twoich zastosowań.

Chmura jako IaaS

Znam przypadki, gdy organizacje wykorzystują chmury jedynie w części infrastrukturalnej (IaaS). Według mnie to wówczas nic innego jak lepsza wirtualizacja z kilkoma ulepszeniami. Pierwsze to fakt, że płacisz za to czego potrzebujesz, ale tutaj też często są to statyczne usługi bez konieczności skalowania i równie dobrze działałyby na… tradycyjnych serwerach (wkrótce ludzie zapomną jak one wyglądają i będzie jak z tym symbolem dyskietki do zapisu). Drugie to takie, które przemawia do mnie bardziej - automatyzacja. Odpowiednio przygotowany kod jest w stanie utrzymywać całą infrastrukturę i nawet postawić ją od zera - z reguły jednak tylko u tego jednego dostawcy. Nie musisz jednak się niczym zajmować poza kodem i to jest w porządku. To jest również taka pozorna ucieczka w niezależność z dużym jednak minusem - takie usilne trzymanie się z daleka od usług, gdy i tak korzystasz tylko z jednego dostawcy chmury jest stratą czasu i pieniędzy. Na końcu musisz samodzielnie utrzymywać nawet najprostsze usługi, które są w cloud dostępne za bardzo przystępne stawki.

To może jednak powrót do własnych serwerów?

Są takie przypadki, gdy faktycznie jest to opłacalne. Nie mogę jednak znaleźć ani jednego (no chyba, że kopiesz bitcoiny?) ;-) Być może jak tworzysz własny cloud? A tak poważnie to nie zawsze technologia i koszty są powodem, a czynniki zewnętrzne - polityczne i prawne. To jest już temat na inny artykuł. Skoncentrujmy się na przypadkach, gdy cloud ma nam pomóc, a my mamy możliwość jego rozsądnego wykorzystania.

Proste reguły do podjęcia decyzji

Jest wiele czynników, które należy wziąć pod uwagę, a poniżej przedstawiam najważniejsze według mnie.

Sprawdź czy twój biznes jest ściśle powiązany z platformą

Musisz wiedzieć skąd twoja organizacja czerpie zysk i w jakim biznesie operuje. Jeśli jest to np. agencja marketingowa to nie ma większego sensu, abyś chciał zajmować się takimi szczegółami jak platforma, jej składowe i potrzebę uniezależnienia od dostawcy chmurowego. Raczej jest to dodatkiem do firmy i nie generuje bezpośrednio zysku.

Co innego jeśli tworzysz oprogramowanie. Tutaj jeśli sprzedajesz usługi w trybie SaaS to jest to istotnie bardzo ważna część biznesu. Dobór odpowiednich narzędzi może przyczynić się do optymalizacji kosztów, a tym samym do zwiększenia zysków. Przykładowo zamiast płacić za load balancery płatne za godzinę i za ruch możesz pokusić się o postawienie własnych. Jest dużo innych usług, które łatwo tak zastąpisz. Musisz jednak też brać pod uwagę ryzyko utraty klientów, gdy jednak twoja “wersja” nie będzie tak samo niezawodna, szybka a co najważniejsze bezpieczna jak oferowany przez dostawcę produkt. To jednak zależy w dużej mierze od zespołu, który posiadasz.

Sprawdź czy masz odpowiednich ludzi na pokładzie

Jak już wiesz dokładnie jaki wpływ na twój biznes ma dobór środowiska to następnym krokiem jest upewnienie się, że posiadasz właściwych ludzi mogących część usług utrzymywać samodzielnie. Obecnie ludzi takich często określa się jako DevOps (ja nie lubię tego nazewnictwa w stosunku do roli, ale już się tak utarło…) i są oni mocno poszukiwani na rynku. Mogą oni właśnie tworzyć i obsługiwać środowiska w pełni zautomatyzowane korzystając z usług dostawcy chmury publicznej oraz tworzyć część usług samodzielnie. W końcu tacy właśnie ludzie tworzą usługi zatrudnieni przez dostawców chmur i opakowują to w mechanizmy automatyzujące, dostęp po api i dokumentację. Należy pamiętać jedynie o prostej regule - utrzymywanie własnej wersji usługi kosztuje kilkukrotnie więcej niż wykorzystanie i dostosowanie już istniejącej na chmurze. Ile dokładnie zależy od wielu czynników jak np. umiejętności zespołu, jego zgrania oraz poziomu skomplikowania (inaczej dla bazy danych, inaczej dla prostej bramki nat/vpn). Zatem wystarczy wziąć i policzyć czy to się po prostu najzwyczajniej opłaca.

Chroń swoje dane

Dochodzimy do konkretów. Według mnie bardzo poważnie zastanawiałbym się nad utrzymywaniem własnej bazy danych, gdy dostępne usługi mają zautomatyzowane takie elementy jak:

  • backupy! - z możliwością odzyskania co do minuty
  • replikacja (nie mylić z backupami - replikacje nie ustrzegą cię przed przypadkowym usunięciem) - również między regionami dla niektórych silników np. MySQL na AWS RDS
  • szczegółowy monitoring - dowiadujesz się jeśli coś jest nie tak
  • łatwe skalowanie - w kilka minut zwiększasz lub zmniejszasz wielkość instancji, w przypadku zastosowania replikacji może być nawet bez zauważalnej dla klientów przerwy

Od tego również są wyjątki - jeśli masz szczególne potrzeby i w zasadzie twój biznes opiera się głównie na danych, masz ekspertów od niskopoziomowych zapytań, tuningu itp. to pewnie wyciągniesz więcej sam. Nadal będziesz musiał zadbać o elementy wymienione wyżej. Wybór należy do ciebie. Pamiętaj, że klient nie będzie cię pytał jak to ogarniasz jak zginą mu jego dane lub nie będzie miał do nich dostępu przez dłuższy czas. No i jak ktoś mu będzie je w stanie ukraść/uzyskać nieuprawniony dostęp.

Dwie reguły dotyczące bezpieczeństwa

Pierwsza reguła to taka, że nie implementujesz własnych rozwiązań, algorytmów chyba, że się bardzo dobrze znasz. Wtedy też tego nie robisz, bo musisz znać się wybitnie dobrze. Lepiej pozostawić implementację ludziom, którzy się na tym znają, bo ryzykujesz bezpieczeństwo danych, twoich klientów i twojego biznesu.

Druga reguła to taka, że na bezpieczeństwie nie możesz oszczędzać. Stąd ewentualna implementacja usług typu bramki vpn, centralne serwery logów do audytu bezpieczeństwa oraz load balancery z centralnym terminowaniem https i WAF musi być bardzo przemyślana. Potrzebujesz odpowiednich ludzi lub wykorzystujesz już dostępne usługi. Tutaj na szali stawiasz reputację - nie ma nic gorszego niż kradzież danych twoich klientów.

Za specjalistyczne usługi zapłacisz więcej

Nic odkrywczego nie napiszę, ale musisz pamiętać, że im bardziej złożona usługa tym więcej sumarycznie za nią zapłacisz. Również w tym wypadku sprowadza się to do tego jaki masz biznes, skąd przychodzą pieniądze oraz z jakim zespół specjalistów pracujesz. Zatem jeśli robisz w analityce danych to musisz mieć od tego ekspertów i wtedy możesz pokusić się o wykorzystanie wiedzy twoich kolegów do utworzenia i utrzymywania np. klastra Hadoop. Jeśli natomiast taka usługa jest wykorzystywana tylko sporadycznie i nie potrzebujesz dużych zasobów to z pewnością nie warto sobie zawracać głowy nad optymalizacją tego, a wykorzystać taki klaster jako usługę (np. AWS EMR).

Różna jakość i stopień dojrzałości usług

Możliwe, że żyjesz w przeświadczeniu, iż dostawcy chmur publicznych dostarczają najlepsze usługi i biją one na głowę to co mógłbyś sam postawić. Chciałbym, abyś się teraz ocknął, bo to można niestety między bajki włożyć. Dużo jest usług, których jakoś pozostawia wiele do życzenia. Dla przykładu osobiście uważam, że nie warto uruchamiać usługi Elasticsearch na AWS - ma okrojoną funkcjonalność i jeszcze jakiś czas temu zmiana w sposobie dostępu (ACL) powodowała restart trwający kilkanaście (!) minut. Podobnie uważam, że sposób wykonania Kubernetes (usługa AWS EKS) jest niechlujny i widać, że wypuszczony został zbyt wcześnie. Ubolewam nad tym ostatnim szczególnie, gdyż dużo osób czekało na przystępnie przygotowany serwis, a tu spore rozczarowanie i póki co łatwiej i lepiej jest postawić Kubernetes na AWS samodzielnie wykorzystując rozwiązanie kops.

Pamiętaj zatem - sprawdź czy twój dostawca wykonał dobrą robotę, bo w przeciwnym wypadku lepiej zająć się tym samodzielnie i ewentualnie później pomyśleć o migracji jak już jakość będzie zadowalająca. Jeśli to kluczowy serwis to warto sprawdzić jak sobie radzi konkurencyjny dostawca.

Krótko na koniec

Cloud to świetna technologia, aczkolwiek jak już jednak kurz opadnie, minie okres fascynacji i pojawią się pierwsze problemy (czyli spore rachunki) to możesz pokusić się o wykorzystanie podstawowych elementów (instancje maszyn wirtualnych) do zbudowania własnych usług. Potrzebujesz to jednak przemyśleć, a tak naprawdę przeliczyć uwzględniając przede wszystkim na czym opiera się twój biznes, gdzie leży główne źródło przychodu, jakich masz ludzi w zespole i czy dostępne, a wykorzystywane przez ciebie usługi są dostępne u dostawcy chmury w wystarczająco dobrej jakości i finansowo opłacalne. Przy tym wszystkim musisz pamiętać o to, aby nie stracić danych lub dostępu do nich i bezpieczeństwie, na którym nie powinieneś oszczędzać.

Leave a comment