Галоўная / Артыкулы

Выбір між EC2, ECS та EKS для завдань на Node.js

Порівнюе, як EC2, ECS з Fargate та EKS ефективна працюють з додаткам на Node.js, допомагаючы выбраць правій службе обробкі дадзеных AWS па масштаб та навыки вашай команды.

Выдавец: REACTAPP.TOP9 хв чытання2009 слоў

Крыніцы: EC2 vs ECS vs EKS for Node.js: Which AWS Service Should You Actually Choose?

Калі наступае час перанесці Node.js-бэкенду на Amazon Web Services, праблема, яка трэба рашыць, выклікае трыбульнты. У консалце AWS представлены прынеймна тры разныя продукты для вычыслення: Amazon EC2, Amazon ECS і Amazon EKS.

Якщо запытаць іншых, вы павінны атрымаць суперсучасныя прыказы. Дзеяры развіццялеры стверджуюць, што звычная віртуальная машына на EC2 — гэта простейшы і найкращы варыянт. Іншыя ж наполягаюць, што нічога не можа заменіць роботу Kubernetes через EKS, якщо хочаце справжняя савэчасная архітектура. Тым часам багато команд, якія ствараюць практычныя платформы, таямна стандартизаваліся на ECS для всіх своих мікросервісаў.

Выбір неправильнага інструмента частаюць прыводзіць да двух разлучальных наследкав: або вам даводзіцца ручнае вылечванне операцыйных системаў і стежэнне за серверамі, або вы занурюецеся ў файлы налаштавання Kubernetes, толькі каб утримаць працюючай невялікую API на базе Express — такую, яка можа обрабатваць лишо калькі дзесятка запытаў за секунду.

У гэтым паўстанавленні адкладаецца хайп і прыглядаецца безпосередна, як EC2, ECS і EKS падходзяць для прыемлівання дапраўк на Node.js: што кожны з іх выказвае да вашай команды з точкі зору аператывных задач, і як вам можна выбраць правы варыянт для вашай ситуацыі.

Тры службы паспрабованы проста

Перш чым паўстанавляць перадачы, корыстна точна визначыць, чым являецца кожная служба.

+-------------------------------------------------------------------------+
|                               Amazon EKS                                |
|   Fully managed Kubernetes. High control, high complexity, multi-cloud. |
+-------------------------------------------------------------------------+
                                    ▲
                                    │ Built for complex orchestration
+-------------------------------------------------------------------------+
|                               Amazon ECS                                |
|   AWS-native container orchestration. Fast, simple, deeply integrated.  |
+-------------------------------------------------------------------------+
                                    ▲
                                    │ Built for containers
+-------------------------------------------------------------------------+
|                               Amazon EC2                                |
|   Raw virtual machines in the cloud. Full OS access, manual maintenance.|
+-------------------------------------------------------------------------+

1. Amazon EC2 (Elastic Compute Cloud)

EC2 дае вам вяртуальную машыну, якая называецца «інстанцай». Вы выбираеце аператывую систему — Ubuntu і Amazon Linux ўважаюцца популярнымі варыянтамі — заходзіце ў систему через SSH, інсталюеце Node.js асобна з кампаніям распрацоўкі, такім як PM2, і самі запускаеце свой прыемлек.

Усё, што знаходзіцца вышэй за ядро, належыць пад вашым прымальным кантролем.

2. Amazon ECS (Elastic Container Service)

ECS — это саўстанні система AWS для керавання контэйнерамі Docker. Уместо таго, каб адразу кераваць аператывай системай, вы ствараеце свой прыемлек на Node.js у відпаведным образе Docker і паведамляеце ECS прытрымваць певную колькасць копій гэтага контэйнера у працэсе — напрыклад, чатыры реплікі.

Якщо вы скомбінуєте ECS з AWS Fargate, які є безсерверным рівнем обробкі, вы пазьрэйце абсалютна свабода ад керавання серверамі, які знаходзяцца пад контейнерамі. AWS автаматычна распадзяе CPU і память для кожнага контейнера, адпраўляючыся да патрэб.

3. Amazon EKS (Elastic Kubernetes Service)

EKS запрошвае кераваныя кластэры Kubernetes на базе інфраструктуры AWS. Сам Kubernetes — это стандарт архітектуры оркестрацыі контейнераў з відкрытым кодам, які выйшаў у Google.

За дапамогою EKS AWS бере на сябе адпаведнасць за кантрольны план Kubernetes — мастер-вузлы, тады як вы продовжваеце несці адпаведнасць за заданне падзеяў, развёртывання, служб, правіл уваходу і політык сеті.

Чаму тут важлівыя характэрыстыкі Node.js

Перш чым выбраць паводлівую службу, варта прыгадаць калькі момантов пра тое, як насправды працюе Node.js:

  • Выконанне JavaScript адзейнае па аднай ніцы: процэс Node.js выкарыстоўвае толькі адну ядро CPU для запуску вашага коду на JavaScript. Якшто разместіце адзін процэс на інстанцы EC2 з 8 ядрамі, семь з іх застаюцца невыкарыстанымі, як толькі вы явна не запустите кластэр процэсаў або не распадзіце роботу між калькама інстанцый.
  • Запуск вядомы і ўжытак мінімальны: додаток Node.js у формате контэйнера зазвычай можа запусціцца за менейш чым два секунды, што робіць яго ідеяльным для средава, пабудованых на контэйнерах і автаскалінгу.
  • Рабочыя навантажэння часта ўзаемадзейнаюць з I/O: большасць служб на Node.js практычна весь час чакае на рэзультаты работы баз дадзенаў, зовнішніх запытоў API або операцый з дыскам, замест таго каб выканаць інтэнсіўныя вычыслення на CPU.

Этыя характарыстыкі здарожыць безпасэчны аднос на тое, насколькі проста — чы гэта складна — будзе масштабаванне для кожнага з трох служб.

1. Amazon EC2: Максымальны кантроль, значны тэхнічны адзёрбаванне

Работа з EC2 дужа нагадвае розрабоцу на савоймай Linux-машынэ, адколі фактычна гэта і ёсць такая машынэ.

Bash

# Typical manual setup on an EC2 instance:
sudo apt update && sudo apt install -y nodejs npm
git clone https://github.com/your-org/api.git
cd api && npm ci --omit=dev
npm install -g pm2
pm2 start app.js -i max
Traffic ──> Application Load Balancer (ALB)
                 │
        ┌────────┴────────┐
        ▼                 ▼
   [EC2 Instance]    [EC2 Instance]
   ├─ Node Process   ├─ Node Process
   ├─ Node Process   ├─ Node Process
   └─ PM2 Manager    └─ PM2 Manager

Працоўныя перавагі:

  • Прыведамыя цены: вы плаціце фіксаваную годзінную стаўку, залежную ад выбранага розмеру інстанцыі.
  • Полны доступ да системы: вы можете аналізаваць логі системы, налаштовваць параметры ядра за дапамою sysctl чы інсталаваць будзь-якія натыўныя бібліятэкі, якія патрэбны вашай прыемлі.

Компрэсіі:

Работа з выкарыстоўванням EC2 для прадукцыйных задач апыяўляеся вельмі значным тэхнічным адзёрбаваннем. Вы несете адпаведальнасць за:

  • Застосоўванне патчаў безпекі операцыйнай системы.
  • Апдэйты рантайму Node.js, якія застосоўваюцца на кожнай інстанцыі.
  • Адкалікаванне груп автаскалявання і стварэнне абразаў апарата (AMI).
  • Перзапуск зламаных процэсаў і выявленне вытаківаў памяці ў сервісах, якія працуюць дзеўна.
  • Практычны падказкі для разработніка: EC2 ўзгодны для адной монолітнай прыкладнай, якая па большанці часу не змінюецца. Але калі вы запускаеце тры-чатыры мікросервісы, ўпорсківаючы іх на аднарозныя інстанцыі EC2, вы або марнуючы рэсурсы, або змушаныя викорыстоўваць заплутаную структуру спільных сервераў.

    2. Amazon ECS: Найкращы выбар для большасці команд

    Якщо ваша прыкладна на Node.js вже знаходзіцца ў контэйнеры Docker, ECS часта являеця найэфектывнейшы варыянт у AWS.

    Стварэнне Dockerfile для прыкладнай на Node.js высокага стандарта не ўскладняецца:

    # Multi-stage Dockerfile for Node.js
    FROM node:20-alpine AS builder
    WORKDIR /app
    COPY package*.json ./
    RUN npm ci
    
    FROM node:20-alpine
    WORKDIR /app
    ENV NODE_ENV=production
    COPY package*.json ./
    RUN npm ci --omit=dev
    COPY . .
    USER node
    EXPOSE 3000
    CMD ["node", "server.js"]
    

    Калі вы заваносіце тое зображэнне ў Amazon ECR (Elastic Container Registry), вы ствараеце ECS Task Definition, якай паказвае:

    • Разпад CPU (напрыклад, 0.5 vCPU) і памяць (напрыклад, 1 GB) для контейнера.
    • Зменныя сераўіса, якія запоўнююцца з AWS Secrets Manager або Parameter Store.
    • Тэрміналы перагляду стану.
    Traffic ──> ALB
                 │
                 ├── Path /api/users ──> [ECS Task: Users] (0.5 vCPU)
                 └── Path /api/orders ─> [ECS Task: Orders] (0.5 vCPU)
                                         [ECS Task: Orders] (0.5 vCPU)
    

    Чаму ECS з Fargate ідзе на першыя месцы для Node.js:

    Спаўненне ECS з Fargate абэрнае сабе весь серверны шар — няма базовых экземпляраў EC2, якімі трэба кераваць.

    Калі спрага трафіку расте, ECS можа стварыць пяць новых заданняў за калікс секунд. Адтолькі, як процесы Node.js займаюць мало ресурсаў, можна налаштавляць вычыслювальныя магчымасці ў маленькіх дзеленнях (0.25 vCPU і 512 MB RAM), чыяму працэзны ресурс і косты застаюцца майже нульовымі.

    Адвалоры і недзеянкі:

    • Залежнасць ад AWS: Канфігурацыя ECS є спецыфічная для AWS. Файл JSON з апісацыяю задач, які вы пішлі для ECS, не можа быть перанесены ў Google Cloud чы Azure без дадатковай працы.
    • Болей слабкі екасистема інструментаў: ECS гарная логічная частка CloudWatch і IAM, але у яго ў разы менша колькасць плагінаў ад трэціх сторон, якія існуюць у апаратнай среды Kubernetes.

    3. Amazon EKS: масштабаванне на рэвэле і переносымасць

    EKS — это аптэйнаваныя рашэння Kubernetes ад AWS. Kubernetes не проста дазволяе запускать контейнеры — ён даёт вам аднойчынную платформу для сетявання, выкарыстоўвання служб, пошырэння з апдэйтамі і калектывавання секретных дадзеных.

    У EKS ваша рэалізацыя на Node.js описваецца за дапамою маніфестаў Kubernetes:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: node-api
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: node-api
      template:
        metadata:
          labels:
            app: node-api
        spec:
          containers:
          - name: node-api
            image: 123456789012.dkr.ecr.us-east-1.amazonaws.com/node-api:v1.2.0
            resources:
              limits:
                cpu: "500m"
                memory: "512Mi"
              requests:
                cpu: "250m"
                memory: "256Mi"
            ports:
            - containerPort: 3000
    

    Плюсы:

    • Асалідная переносная спроможнасць: тыя ж YAML-маніфесты будуць працаваць на EKS, Google-аўтарскім GKE, Azure-аўтарскім AKS чы ў серверах у вашам сэрвера-центры.
    • Шырокі экасистема: інструменты такія як Helm, ArgoCD, Prometheus і Istio інтегруюцца за дапамогою стандартной настройкі.
    • Точны контроль аўтомасштабавання: вы можете масштабаваць пады на аднойчыны метрыкі — напрыклад, колькість паведамленняў у очакальнай лісты SQS чы размах буфера Redis — за дапамогою KEDA (Kubernetes Event-driven Autoscaling).

    Компрэсіі:

    Kubernetes таксама прыносіць значны аператывны трыбут:

    • Косцт контрольнай плошчы: EKS выкалюе працоўная 73 долары ў месяц на кластэр проста для падтрымкі контрольнай плошчы, не з урахоўванням таго, што вы витрачаеце на рабочыя вузлы і запуск контэйнераў.
  • Складныя умовы навчання: ваша команда пакулькі мусiць володзець практычнымі навыкамі работы з контралерамі Ingress, CoreDNS, прыстроем Cluster Autoscaler, плагінамі CNI і правиламі RBAC.
  • Пашчэдзевыя памылкі: Команды інодзе выбираюць EKS толькі таму, што Kubernetes є стандартам у галузи. Для невялікай інжынерной команды — з менш чым 15 разрабоў — падтрымка кластэра Kubernetes можа зайняць 20–30 процэнтав часу высокакваліфікаванага інжынера на тыдзень, час, які інакш мог бы пайсці на сам продукт.

    Бяспосередній аблікаванне

    Функцыя Amazon EC2 Amazon ECS (Fargate) Amazon EKS
    Рэвень абстракцыі Вяртуальныя машыны Контэйнеры Контэйнеры плюс Pods
    Складнасць налаштавання Низкая Нізкая да сярэдняй
    Высокі Пастаўка Высокі (апдэты, ОС, абаранненне) Дужа низкі Высокі (пастаўка кластэра) Базовыя виткі па працязусці Недорогія (прыблізна $3-$15/мес для інстанцы t4g або t3) Вы плаціце толькі за задачы, якія фактычна выкананы Прыблізна $73/мес за кантрольную плошчу, плюс выконавчыя ресурсы Швальнасць масштабавання Мінуты (патрэбна запусканне цэлай ВМ) Секунды (завантажваецца абраз і пачынаецца задача) Секунды (под плануецца) Переноснасць між хмарамі Низкі Низкі (прыўязаны да AWS) Высокі (стандартны Kubernetes) Ідеальны размер каманды Адзіні разработчыкі або маленькія старыя системы 2 да 50 інжынераў Спецыяльная платформа або група DevOps

    Практычны спосаб выбору

    Замест таго, каб мучыліся з кожной функцыяй, выкорыстайце гэты просты прынцып:

    Выберыце EC2, калі:

    • Ваша прыкладка на Node.js ў старом формате і залежыць ад локальных фонавых дэманаў, програмнага забезпечэння, спецыфічнага для ОС, або файлаў, якія павінны застацца на локальным дыску.
    • Вы ствараеце тымчасовы пратэтап на сервере за $5 у месцы, дзе цена — ўсё, што мае значэнне.

    Выберыце ECS з Fargate, калі:

    • Вы хочаце запускаць сучасныя, контейнерызаваныя службы на Node.js без неабходнасці кармічваць базовую операцыйную систему.
    • У вашай командзе є інжынеры бэкенду, але няма спецыяліста па інфраструктуре чыстаў DevOps.
    • Вы абоўсюдзе прыкладзеныя да экасістэмы AWS (DynamoDB, SQS, RDS, IAM) і хачаце інтэграцыю безпекі, якая працуе без дадатковых налаштаванняў.
    • Гэта рашэнне падходзіць прыбліжна 80 процэнтам компаній, якія развіваюцца на AWS, таму гэта ўзгоднае стандартнае рашэння.

    Выбірайце EKS, калі:

    • Вы адмаўляеце дзесяткі чы роўныя сотні мікросервісаў, якія работаюць на розных мовах програмавання, такіх як Node.js, Go, Python і Java.
    • У вашай організацыі є вимога да использовання мульти-чы гібрыднага хмаравога падходу, які выказвае потрэбу ў аднаковым наборы інструментаў у всіх месцах.
    • У вас уже є платформа чы каманда SRE, якія можуць безпечна ствараць нагляд, забезпечваць захопленне чы апгрэйд кластэраў Kubernetes.

    Заключныя заўважэнні

    Хорашая архітектура хмары не значыць выбіранне самай яскравай доступной тэхналогіі; гэта значыць выбіранне таго, што рашае проблему з мінімальными виткамі на тырджоўку.

    Што стосуецца конкрэтна Node.js:

    • EC2 дае вам паўную контроль, але нарабляе на вас рутынную працу з адтрымкай сервераў.
    • EKS дае вам вялікія можлівасці і спроможнасць пераходзіць між разнымі экосістэмамі, але за цэну рэальной складнасці чы дадатковых виткаў на адтрымку кластэраў.
  • ECS з Fargate абсалютна не патрэбна ўтрата сервераў, можа масштабаваць контэйнеры за секунды і дазволяе разработчыкам сфокусавацца на стварэнні якіснага коду на Node.js.
  • Розумны падход — пачаць з малага: запакаваць вашу аплікацыю ў лёгкі Docker-контэйнер, запусціць яго спачатку на ECS, а перейсці на Kubernetes толькі тады, калі ваша організацыя справды вырасте за межы ECS. Паколькі сам контэйнер не зменяецца, ён вже гатовы для EKS, калі настане такі дзень.