Podstawowe aspekty implementacji platformy
Inżynieria platformy to wielodyscyplinarne podejście, które łączy inżynierię oprogramowania, projektowanie systemu i doskonałość operacyjną w celu utworzenia niezawodnej i skalowalnej infrastruktury do tworzenia i wdrażania aplikacji. Podstawowym elementem jest nie tylko tworzenie niezawodnych platform, ale tworzenie środowiska samoobsługowego, które umożliwia zespołom deweloperów zapewnienie zgodności z celami biznesowymi. Udana inicjatywa inżynieryjna platformy rozpoczyna się od odpowiedniego zespołu i jasnego zrozumienia przestrzeni problemu. Ta podstawa umożliwia opracowywanie systemów, które usprawniają operacje, zmniejszają tarcie i umożliwiają deweloperom skupienie się na tworzeniu aplikacji, a nie zarządzaniu infrastrukturą.
Gdy zespół zostanie wdrożony, skupimy się na automatyzowaniu obszarów wymagających dużego trudu, identyfikowaniu ręcznych, powtarzalnych zadań, które można zautomatyzować, aby zaoszczędzić czas i zmniejszyć liczbę błędów. Dzięki temu spis istniejących zasobów jest niezbędny, co pozwala zespołom na scentralizowanie narzędzi i usług, co ułatwia zarządzanie nimi i skalowanie. Następnym krokiem, nazywanym utartymi ścieżkami, jest tworzenie standardowych przepływów pracy i środowisk, które zapewniają spójność w projektach. Następnie wdrażanie środowisk jako usługi pomaga jeszcze bardziej usprawnić procesy, dzięki czemu zespoły mogą szybko uruchamiać środowiska na żądanie. W tym momencie głównym celem jest optymalizacja samoobsługowych środowisk deweloperskich, umożliwiając deweloperom niezależne zarządzanie przepływami pracy przy jednoczesnym zapewnieniu, że mają narzędzia i pomoc techniczną niezbędną do sukcesu. Takie podejście przekształca sposób interakcji zespołów programistycznych z infrastrukturą, tworzenie elastycznego, wydajnego środowiska do tworzenia i dostarczania aplikacji.
Oprócz jasno zdefiniowanego planu implementacji, a nie podejścia do inżynierii platformy jako pojedynczej, szerokiej koncepcji, warto podzielić go na cztery główne obszary, aby ułatwić proces implementacji:
- Systemy inżynieryjne, które obejmują narzędzia i usługi umożliwiające rozwój, takie jak CI/CD, zarządzanie pakietami, środowiska kodowania oparte na chmurze, skanery kodu i lintery, a także asystentów sztucznej inteligencji (AI), takich jak GitHub Copilot.
- Platforma aplikacji, która składa się z wyselekcjonowanych usług używanych jako bloki konstrukcyjne często używanych stosów aplikacji (na przykład Azure Policy, Azure Key Vault, Azure Container Apps lub Cosmos DB).
- Szablony aplikacji, które udostępniają dobrze zdefiniowane szablony specyficzne dla organizacji, aby ułatwić aprowizowanie obciążeń i dostosować je do najlepszych rozwiązań.
- Deweloper Self-Service Możliwości, które umożliwiają deweloperom autonomiczne zarządzanie przepływami pracy przy jednoczesnym zapewnieniu ładu i zgodności ze standardami organizacyjnymi.
Włączenie tych obszarów do strategii implementacji zmniejsza trud deweloperów, wspiera innowacje i tworzy bezproblemowe środowisko programistyczne.
Tworzenie zespołu
W organizacji inżynieryjnej platformy wspieranie właściwej kultury jest niezbędne dla długoterminowego sukcesu. Przejście z reaktywnej do aktywnej kultury jest kluczem, w którym zespoły platformy ponoszą odpowiedzialność za tworzenie i utrzymywanie narzędzi do wspierania organizacji. Ta zmiana ma kluczowe znaczenie dla zmniejszenia silosów wiedzy i zakłóceń operacyjnych. Sukces działań inżynieryjnych platformy jest zgodny z możliwościami inwestycyjnymi opisanymi w modelu możliwości inżynierii platformy, który podkreśla przechodzenie przez etapy dojrzałości organizacyjnej — od tymczasowej do optymalizacji. Na etapie tymczasowym firmy uznają potrzebę inżynierii platformy, ale mogą nie mieć pełnej zgodności między zespołami liderów i zespołów programistycznych. Gdy organizacje dojrzały, zmiany w wykupu kadry kierowniczej i kulturowej zachęcają do bardziej wspólnego, innowacyjnego środowiska, w którym zespoły platform mogą napędzać znaczące zmiany, umożliwiając organizacjom efektywne skalowanie.
Zespół inżynierów platformy wymaga zróżnicowanego zestawu umiejętności technicznych i skoncentrowanego na produkcie sposobu myślenia w celu tworzenia i skalowania niezawodnych, wydajnych i bezpiecznych wewnętrznych platform deweloperów. Inżynierowie platformy powinni mieć biegłość w kilku kluczowych obszarach, w tym orkiestrację kontenerów (na przykład Kubernetes), potoki ciągłej integracji/ciągłego wdrażania (na przykład GitHub Actions, Azure Pipelines) i narzędzia do monitorowania (na przykład Azure Monitor, Prometheus, Grafana). Wiedza na temat narzędzi infrastruktury jako kodu (IaC), takich jak Terraform i Bicep, ma kluczowe znaczenie dla automatyzacji aprowizacji infrastruktury. Ponadto inżynierowie platformy powinni dobrze pisać kod w językach skryptowych, takich jak Python, PowerShell lub Bash, aby umożliwić automatyzację i integrację między systemami. Chociaż pula talentów dla inżynierów platformy może być trudna do osiągnięcia, udany zespół powinien połączyć wiedzę z różnych środowisk, takich jak programowanie oprogramowania, inżynieria niezawodności lokacji i operacje IT.
Automatyzowanie obszarów dużego trudu
Automatyzowanie obszarów o wysokim poziomie trudu często reprezentuje pierwszą torowaną ścieżkę na drodze, aby umożliwić deweloperom samoobsługowe możliwości. Aby go zaimplementować, zacznij od zidentyfikowania częstych, podatnych na błędy lub czasochłonnych procesów, zwłaszcza związanych z operacjami ręcznymi lub służbowym. Następnie należy ocenić czynniki, takie jak częstotliwość procesu, złożoność i możliwość inspekcji, aby określić priorytety celów automatyzacji. Implementowanie infrastruktury jako kodu (IaC) w potokach ciągłego dostarczania (CD) nie tylko usprawnia wdrażanie aplikacji, ale także umożliwia dynamiczną aprowizację współużytkowanej infrastruktury i narzędzi. Użyj elastycznych platform ciągłej integracji/ciągłego wdrażania, takich jak GitHub Actions i Azure DevOps, lub rozwiązań GitOps, takich jak Flux i Argo CD, aby zmniejszyć wąskie gardła i zwiększyć możliwości zespołów.
Wraz z upływem czasu wdrożenie wzorca "Wszystko jako kod" (EaC) tworzy bezpieczną i powtarzalną strukturę automatyzacji przy użyciu scentralizowanych repozytoriów Git dla szablonów i konfiguracji IaC (w tym na przykład szablonów Bicep i azure Resource Manager, plików manifestu narzędzia Terraform i wykresów helm). Te repozytoria zarządzane przez zespół operacyjny umożliwiają deweloperom przesyłanie żądań ściągnięcia, które są bezpiecznie przeglądane i poddawane inspekcji przed scaleniem. Te same narzędzia ciągłej integracji/ciągłego wdrażania mogą następnie aprowizować i konfigurować dowolną infrastrukturę, narzędzia lub usługi — zarówno specyficzne dla aplikacji, jak i udostępnione. Takie podejście obsługuje skalowalność, samoobsługę deweloperów i bezproblemową integrację z procesami zapewniania ładu, zapewniając, że inżynieria platformy jest zgodna z celami organizacji przy jednoczesnym wspieraniu elastyczności operacyjnej.
Podejście "Wszystko jako kod" koncentruje się wokół reprezentowania niemal dowolnego zasobu lub procesu jako pliku w bezpiecznym repozytorium Git. Niezawodne funkcje zabezpieczeń usługi Git — takie jak historia zatwierdzeń, mechanizmy kontroli dostępu, żądania ściągnięcia i ochrona gałęzi — zapewniają przejrzystość, umożliwiają wspólne przeglądy i wymuszają automatyczne kontrole przed zintegrowaniem zmian. W połączeniu z systemami ciągłej integracji/ciągłego wdrażania tworzy to wszechstronną, inspekcję i bezpieczną platformę do zarządzania infrastrukturą, narzędziami i procesami.
Spis i scentralizowanie
Wraz ze wzrostem liczby i złożoności zasobów technicznych w organizacjach rośnie, co często prowadzi do duplikowania wysiłków, oddzielonych projektów i zmarnowanych zasobów. Scentralizowanie spisu i śledzenia zasobów jest kluczowym krokiem w inżynierii platformy w celu rozwiązania tych wyzwań. System spisu umożliwia zespołom śledzenie zasobów, takich jak kod, interfejsy API, kontenery, maszyny wirtualne, uprawnienia i nie tylko. Ten proces nie tylko poprawia ład, ale także promuje ponowne użycie i zwiększa możliwości odnajdywania, umożliwiając zespołom wydajniejsze i skuteczne działanie.
Scentralizowane spisy odgrywają istotną rolę w ulepszaniu ładu poprzez tagowanie i organizowanie zasobów. Odpowiednie tagowanie zapewnia, że zasoby są skojarzone z odpowiednimi właścicielami lub zespołami, co ułatwia zarządzanie cyklami życia i zrozumienie potencjalnego wpływu zmian. Ulepszona możliwość odnajdywania to kolejna kluczowa korzyść, ponieważ zmniejsza sprawę techniczną, pomagając zespołom znajdować i ponownie używać istniejących zasobów, zapobiegając niepotrzebnemu duplikowaniu nakładu pracy. Ponadto scentralizowanie spisów ułatwia organizacjom optymalizowanie zasobów poprzez identyfikowanie i czyszczenie nieaktualnych lub niepotrzebnych zasobów, co prowadzi do zmniejszenia strat i zwiększenia oszczędności kosztów.
Różne narzędzia obsługują śledzenie zapasów i zasobów, z których każda obsługuje różne aspekty ekosystemu technicznego. Na przykład środowiska wdrażania platformy Azure (ADE) umożliwiają śledzenie złożonej infrastruktury utworzonej za pomocą infrastruktury jako kodu (IaC). Podobnie centrum interfejsów API platformy Azure umożliwia deweloperom efektywne odnajdywanie interfejsów API i zarządzanie nimi. Rejestry pakietów, takie jak Pakiety GitHub lub Azure Artifacts, oferują dodatkową wartość dzięki ulepszaniu zabezpieczeń łańcucha dostaw i zarządzaniu zatwierdzonymi pakietami i zestawami SDK.
Aby jeszcze bardziej zwiększyć zalety systemów spisu, organizacje mogą ustanowić powiązania relacyjne między zasobami, aby stworzyć bardziej kompleksowy widok ich ekosystemu. Na przykład mapowanie relacji między definicją interfejsu API, repozytorium kodu, skojarzonymi środowiskami i zasadami ładu umożliwiają zespołom zarządzanie zasobami z większą precyzją.
Torowane ścieżki blaze
W inżynierii platformy analogia "torowana ścieżka" przekazuje równowagę między wspieraniem innowacji a dostarczaniem ustandaryzowanych wskazówek. Początkowo zespoły mogą stosować różne, nieformalne ścieżki, aby osiągnąć swoje cele, eksperymentując z różnymi narzędziami i przepływami pracy. Z czasem zespoły platform obserwują najbardziej skuteczne i powszechnie przyjęte podejścia i przekształcają je w "ścieżki utorowane" — zoptymalizowane przepływy pracy, które są wydajne, przyjazne dla użytkownika i atrakcyjne dla zespołów do wdrożenia.
Proces ten, często określany jako "wydeptane ścieżki", polega na identyfikowaniu typowych wzorców w przepływach pracy w zespole i przekształcaniu ich w ustandaryzowane, skalowalne rozwiązania. Te ścieżki bezproblemowo integrują zabezpieczenia, najlepsze rozwiązania dotyczące architektury i wymagania dotyczące zgodności, oferując bezproblemowe i niezawodne środowisko. Deweloperzy korzystają z mniejszego obciążenia poznawczego, spójnych interfejsów API na potrzeby integracji, modułowych możliwości, które można łączyć w zależności od potrzeb i przewidywalnej wydajności zgodnej z celami operacyjnymi.
Model możliwości inżynierii platformy odgrywa kluczową rolę w tym procesie, pomagając organizacjom określić, kiedy przejść z nieformalnych ścieżek do utorowanych. Identyfikuje on obszary wymagające standaryzacji i zapewnia wgląd w sposób efektywnego skalowania tych praktyk. Takie podejście ustrukturyzowane zapewnia, że innowacje nie są tłumione przy zachowaniu nacisku na jakość, zgodność i wydajność.
Podejście otwierające nowe ścieżki zachęca do dobrych praktyk bez nadmiernego narzucania. Obsługuje on współtworzenie społeczności, umożliwiając zespołom współpracę i kształtowanie platformy przy zachowaniu elastyczności w unikatowych przypadkach użycia. Dzięki równoważeniu innowacji i standaryzacji ta metodologia wspiera środowisko, w którym zespoły mogą się wyróżniać, zapewniając jednocześnie spójne spełnienie wymagań organizacyjnych.
Wdrażanie środowisk jako usługi
Wdrażanie środowisk jako usługi zostało zaprojektowane w celu umożliwienia bezpiecznej, ustandaryzowanej i zautomatyzowanej aprowizacji infrastruktury. Kluczową zasadą w tym podejściu jest utrwalanie tożsamości i wpisów tajnych aprowizacji w sposób uniemożliwiający deweloperom bezpośredni dostęp do nich. Wymusza to nadzór przy jednoczesnym zapewnieniu bezpieczeństwa aktualizacji infrastruktury. Na przykład środowiska wdrażania platformy Azure (ADE) są przykładem tego modelu przez wspieranie separacji ról i scentralizowanie zarządzania szablonami IaC.
Dzięki usłudze ADE inżynierowie platformy i zespoły operacyjne wspólnie tworzą i utrzymują wykaz szablonów dla określonych typów środowisk. Te szablony, wzbogacone o wstępnie skonfigurowane ustawienia, integrują tożsamości zarządzane i kontrolują dostęp na podstawie ról. Deweloperzy mogą następnie używać potoków ciągłej integracji/ciągłego wdrażania do aprowizowania infrastruktury za pomocą narzędzi, takich jak interfejs wiersza polecenia platformy Azure lub interfejs wiersza polecenia dla deweloperów platformy Azure, bez konieczności bezpośredniego dostępu do poufnych poświadczeń ani podstawowej subskrypcji. Ta separacja zapewnia zgodność i bezpieczeństwo przy zachowaniu produktywności deweloperów.
Nawet jeśli usługa ADE nie jest używana, te same zasady można stosować szerzej, a zawartość infrastruktury jako kodu (IaC) pochodzi z bezpiecznych, niezmiennych lokalizacji i zautomatyzowanego i izolowanego zarządzania wpisami tajnymi. Dzięki włączeniu tych rozwiązań inżynieria platformy umożliwia zespołom wdrażanie spójnych środowisk przy zachowaniu ładu organizacyjnego i wydajności operacyjnej.
Optymalizowanie środowiska deweloperów samoobsługi
Bezproblemowe samoobsługowe środowisko deweloperskie ma kluczowe znaczenie dla sukcesu inżynieryjnego platformy, ale osiągnięcie tego celu często wymaga spotkania użytkowników, w których się znajdują. Każda rola — deweloperzy, operacje i inne — są zgodne z określonymi narzędziami i środowiskami definiującymi swoje przepływy pracy. Aby nowe doświadczenia w uzyskaniu przyjęcia, ważne jest, aby dostosować je do tych istniejących "centrów grawitacji". Pragmatyczne podejście polega na planowaniu wielu interfejsów użytkownika dostosowanych do narzędzi, które już są używane, dzięki czemu zespoły mogą zacząć od prostych ulepszeń, udowodnić swoją wartość i rozwijać się w kierunku bardziej zaawansowanych rozwiązań w miarę powstawania potrzeb.
Zamiast tworzyć całkowicie nowe środowiska, rozważ ulepszenie i integrację istniejących narzędzi. Platformy, takie jak edytory, zintegrowane środowiska programistyczne (IDE), zestawy DevOps, narzędzia interfejsu wiersza polecenia i środowiska z małą ilością kodu, często mają modele rozszerzalności, które umożliwiają dostosowywanie i rozszerzanie przy minimalnym nakładzie pracy. Takie podejście zmniejsza konserwację, stosuje znane środowiska użytkownika i przyspiesza wdrażanie. Na przykład internetowe rozszerzenia IDE, takie jak te utworzone dla programu VS Code lub vscode.dev, zapewniają elastyczny, zgodny z internetem punkt wyjścia, który może być skalowany do lokalnych środowisk deweloperskich. Podobnie jak interfejsy ChatOps w narzędziach takich jak Microsoft Teams lub Slack, oferują one intuicyjne sposoby wyzwalania przepływów automatyzacji i integrowania z platformami CI/CD (ciągłej integracji/ciągłego wdrażania).
W przypadku organizacji wymagających scentralizowanego interfejsu inwestowanie w niestandardowy portal deweloperów może zapewnić długoterminowe korzyści, ale wymaga starannego planowania i zasobów. Rozwiązania, takie jak Backstage.io, zestaw narzędzi początkowo opracowany przez Spotify, oferują wysoce dostosowywalne portale, które mogą integrować wtyczki i narzędzia innych firm, tworząc dynamiczne centrum skoncentrowane na deweloperach. Niezależnie od tego, czy zaczynasz od lekkich rozwiązań, takich jak Power Pages , czy też tworzysz kompleksowy portal, celem jest zapewnienie skalowalnych, przyjaznych dla użytkownika środowisk, które umożliwiają deweloperom dostosowanie ich do potrzeb organizacji.