Nowość – Amazon ECS Service Connect umożliwia łatwą komunikację między mikroserwisami
Architektury mikrousług to dobrze znane podejście do tworzenia oprogramowania służące do tworzenia aplikacji składających się z małych niezależnych usług, które komunikują się za pośrednictwem dobrze zdefiniowanych interfejsów programowania aplikacji (API).
Klienci stanęli przed wyzwaniem, gdy zaczęli dzielić swoje aplikacje monolityczne na mikrousługi, ponieważ do wewnętrznej komunikacji z innymi mikrousługami wymagana była specjalistyczna wiedza na temat sieci.
Klienci Amazon Elastic Container Services (Amazon ECS) mają kilka rozwiązań typu service-to-service, ale każde z nich wiąże się z pewnymi wyzwaniami i komplikacjami:
1) Elastic Load Balancing (ELB) wymaga starannego zaplanowania konfiguracji infrastruktury pod kątem wysokiej dostępności i poniesienia dodatkowych kosztów infrastruktury.
2) Korzystanie z usługi Amazon ECS Service Discovery często wymaga od programistów napisania niestandardowego kodu aplikacji do zbierania danych o ruchu i zapewniania odporności na połączenia sieciowe.
3) Rozwiązania Service Mesh, takie jak AWS App Mesh, działają poza Amazon ECS, pomimo posiadania zaawansowanych funkcji monitorowania ruchu i routingu między usługami.
Dzisiaj twórcy zapowiadają ogólną dostępność Amazon ECS Service Connect, nowej funkcji, która upraszcza tworzenie i obsługę odpornych aplikacji rozproszonych. ECS Service Connect gwarantuje prostą konfigurację sieci i bezproblemową komunikację usługową wdrożoną w wielu klastrach ECS i wirtualnych chmurach prywatnych (VPC). Możesz dodać warstwę odporności do komunikacji usługi ECS i uzyskiwać wgląd w ruch bez wprowadzania zmian w kodzie aplikacji.
Dzięki ECS Service Connect możesz odwoływać się do swoich usług i łączyć się z nimi za pomocą nazw logicznych, korzystając z przestrzeni nazw zapewnianej przez AWS Cloud Map i automatycznie rozdzielać ruch między zadaniami ECS bez wdrażania i konfigurowania równoważników obciążenia. Dla każdej usługi ECS możesz ustawić pewne bezpieczne wartości domyślne odporności ruchu, takie jak sprawdzanie kondycji, automatyczne ponawianie prób w przypadku błędów 503 i opróżnianie połączenia. Ponadto konsola Amazon ECS zapewnia łatwe w użyciu pulpity nawigacyjne z metrykami ruchu sieciowego w czasie rzeczywistym dla wygody operacyjnej i uproszczonego debugowania.
Początki z Amazon ECS Service Connect
Aby rozpocząć korzystanie z ECS Service Connect, możesz określić przestrzeń nazw w ramach tworzenia klastra ECS lub utworzyć ją w Cloud Map. Przestrzeń nazw reprezentuje sposób na uporządkowanie usług i może obejmować wiele klastrów ECS rezydujących w różnych VPC. Wszystkie usługi ECS należące do określonej przestrzeni nazw mogą komunikować się z istniejącymi usługami w przestrzeniach nazw, pod warunkiem istniejącej łączności na poziomie sieci.
Listę przestrzeni nazw Cloud Map można również wyświetlić w sekcji Namespaces w lewym okienku nawigacyjnym konsoli Amazon ECS. Po wybraniu przestrzeni nazw wyświetlana jest lista usług o tej samej przestrzeni nazw z dwóch różnych klastrów ECS z usługami baz danych (db-mysql, db-redis) i usługami zaplecza (webui, appserver).
Podczas tworzenia klastra ECS można wybrać jedną z przestrzeni nazw w domyślnych przestrzeniach nazw w ustawieniach Sieci. ECS Service Connect jest aktywny dla wszystkich nowych usług ECS działających zarówno w instancjach AWS Fargate, jak i Amazon EC2. Aby włączyć wszystkie istniejące usługi, konieczne byłoby ponowne wdrożenie nowej wersji Amazon Machine Image (AMI) zoptymalizowanej pod kątem ECS lub nowego agenta Fargate obsługującego ECS Service Connect.
Możesz też po prostu utworzyć klaster za pomocą interfejsu wiersza poleceń AWS (AWS CLI) z parametrem service-connect-default i domyślną nazwą przestrzeni nazw Cloud Map na potrzeby wykrywania usług.
$ aws ecs create-cluster
--cluster "svc-cluster-2"
--service-connect-defaults '{
"namespace": "svc-namespace"
}'
To polecenie utworzy klaster ECS z przestrzenią nazw w imieniu AWS. Jeśli chcesz użyć już istniejącej przestrzeni nazw Cloud Map, możesz po prostu przekazać tutaj nazwę istniejącej przestrzeni nazw.
Następnie utwórz usługę przy użyciu istniejącej definicji zadania, która nazywa się webui-svc-cluster i udostępnij serwer internetowego interfejsu użytkownika za pomocą ECS Service Connect. Aby korzystać z Service Connect, musisz dodać nazwy portów w definicji zadania. Dla następującego polecenia nazwa portu w definicji zadania to webui-port.
$ aws ecs create-service \
--cluster "svc-cluster-2" \
--service-name "webui" \
--desired-count 1 \
--task-definition "webui-svc-cluster" \
--service-connect-configuration '{
"enabled": true,
"namespace": "svc-namespace",
"services":
[
{
"portName": "webui-port",
"clientAliases": [
{
"port": 80,
"dnsName": "webui"
}
]
}
]
}'
W tym poleceniu parametr portName reprezentuje odwołanie do portu kontenera, a element clientAliases przypisuje numer portu i nazwę DNS, zastępując nazwę wykrywania używaną w punkcie końcowym. Każda usługa ma adres URL punktu końcowego, który zawiera protokół, nazwę DNS i port. Możesz wybrać protokół i nazwę portu w definicji zadania lub konfiguracji usługi ECS. Na przykład punktem końcowym może być http://webui:80, grpc://appserver:8080 lub http://db-redis:8888.
W konsoli ECS możesz zobaczyć tę konfigurację ECS Service Connect dla usługi webui w klastrze svc-cluster-2.
Jak widać, można uruchamiać te same obciążenia w różnych klastrach z tym samym clientAlias i nazwą przestrzeni nazw w celu zapewnienia wysokiej dostępności. ECS Service Connect inteligentnie zrównoważy obciążenie ruchu do zadań ECS. Aby połączyć się z usługami działającymi w różnych klastrach ECS, musisz określić tę samą nazwę przestrzeni nazw dla wszystkich usług ECS, które muszą ze sobą rozmawiać. ECS Service Connect sprawi, że Twoje usługi będą wykrywalne dla wszystkich innych usług w tej samej przestrzeni nazw.
Poprawa odporności usług dzięki Observability Data
Możesz zbierać metryki ruchu za pomocą funkcji obserwowalności ECS Service Connect. Domyślnie dla każdej usługi ECS można zobaczyć liczbę punktów końcowych w dobrej i złej kondycji, a także natężenie ruchu przychodzącego i wychodzącego.
ECS Service Connect obsługuje protokoły HTTP/1, HTTP/2, gRPC i TCP. Możesz więc zbierać liczbę żądań, liczbę błędów HTTP i średnie opóźnienie połączenia. W przypadku gRPC i TCP można zobaczyć łączną liczbę aktywnych połączeń. Wszystkie te metryki są przesyłane do Amazon CloudWatch lub innych usług analitycznych AWS za pośrednictwem niestandardowego routingu dziennika.
W menu Zaawansowane można publikować dzienniki agenta ECS Service Connect, aby uzyskać pomoc w debugowaniu w przypadku wystąpienia ewentualnych problemów.
Te wskaźniki są widoczne tylko w oryginalnym interfejsie konsoli CloudWatch. Gdy korzystasz z konsoli CloudWatch, przełącz się na oryginalny interfejs, aby wyświetlić dodatkowe wymiary metryki „nazwa odkrycia” i „nazwa docelowego odkrycia” w ramach grupowania ECS.
Domyślne ustawienia zapewniają punkt wyjścia do tworzenia odpornych aplikacji, a parametry można dostosować w celu ograniczenia wpływu awarii, skoków opóźnień i wahań sieci na zachowanie aplikacji za pomocą konsoli AWS Management Console lub dedykowanych interfejsów API ECS.
Już dostępne
Usługa Amazon ECS Service Connect jest dostępna we wszystkich regionach handlowych z wyjątkiem Chin, gdzie dostępna jest usługa Amazon ECS. ECS Service Connect jest w pełni obsługiwane w AWS CloudFormation, AWS CDK, AWS Copilot i AWS Proton w celu udostępniania infrastruktury, wdrażania kodu i monitorowania Twoich usług. Aby dowiedzieć się więcej, zapoznaj się z Przewodnikiem programisty Amazon ECS Service Connect.
źródło: AWS