← Назад к вопросам

Что делает Ten City Was?

1.3 Junior🔥 202 комментариев
#Другое

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ответ: Описание "Ten City Was" как подхода к проектированию и управлению инфраструктурой

"Ten City Was" (также известное как "10 Commandments of DevOps" или "10 принципов DevOps") – это не инструмент или технология, а мнемонический акроним-паттерн, который суммирует ключевые практики и философию DevOps. Он служит чек-листом или набором руководящих принципов для построения эффективных, отказоустойчивых и масштабируемых систем. Каждая буква в "Ten City Was" соответствует одному принципу.

Давайте разберем каждый пункт подробно, так как это критически важно для роли DevOps Engineer:

T - Traceability (Прослеживаемость)

Необходимо иметь полную прослеживаемость всех изменений в системе: от коммита в репозиторий до развертывания в production. Это достигается через:

  • Сквозное логирование (централизованные логи в Elasticsearch/Splunk).
  • Распределенную трассировку (Jaeger, Zipkin) для микросервисов.
  • Связь артефактов сборки (docker image hash) с задачами в Jira/GitLab.
# Пример: как хэш коммита и тег образа связаны
docker build -t myapp:$(git rev-parse --short HEAD) .
docker push myapp:$(git rev-parse --short HEAD)

E - Empowerment (Расширение прав и возможностей)

Команды должны быть кросс-функциональными и иметь автономию для самостоятельного проектирования, сборки, запуска и поддержки своего сервиса ("You build it, you run it").

N - No Single Point of Failure (Отсутствие единой точки отказа)

Архитектура системы должна быть отказоустойчивой. Это касается как приложения (несколько инстансов, балансировка нагрузки), так и инфраструктуры (распределенные хранилища, multi-AZ/multi-region развертывания).

# Пример конфигурации Kubernetes Deployment для избежания SPOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3 # Минимум 2 реплики
  strategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      affinity:
        podAntiAffinity: # Распределяем поды по разным нодам
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - myapp
              topologyKey: kubernetes.io/hostname

C - Configuration Management (Управление конфигурацией)

Вся конфигурация (ОС, middleware, приложения) должна храниться как код (Infrastructure as Code - IaC) и быть версионируемой. Это обеспечивает идемпотентность и воспроизводимость.

# Пример Terraform-кода для создания security group
resource "aws_security_group" "web" {
  name        = "web-sg"
  description = "Allow HTTP/HTTPS"
  vpc_id      = aws_vpc.main.id

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

I - Immutable Infrastructure (Неизменяемая инфраструктура)

Вместо изменения конфигурации на "живых" серверах, развертываются абсолютно новые артефакты (например, Docker-образы) из единого источника истины. Старые инстансы уничтожаются. Это снижает дрейф конфигурации.

T - Testing in Production (Тестирование в Production)

Речь не о прямом дебаге, а о применении методов, позволяющих безопасно проверять работу в реальной среде:

  • Canary-развертывания и feature flags.
  • Chaos Engineering (например, с помощью ChaosMesh, Litmus) для проверки отказоустойчивости.
  • Мониторинг A/B-тестов.

Y - You build it, you run it

Повторение и усиление принципа Empowerment. Разработчики несут операционную ответственность за свой код, что создает петлю обратной связи и повышает качество.

W - Whole System Ownership (Ответственность за систему в целом)

Команда DevOps/разработки отвечает не только за код, но и за инфраструктуру, безопасность, производительность и стоимость всего сервиса.

A - Automation (Автоматизация)

Это ядро DevOps. Автоматизируйте все повторяющиеся процессы: сборку, тестирование, развертывание, масштабирование, мониторинг и реагирование на инциденты. Цель — минимизировать ручной труд.

// Пример Jenkins pipeline как кода (Jenkinsfile)
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean compile'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Deploy') {
            steps {
                sh 'kubectl apply -f k8s-manifests/'
            }
        }
    }
}

S - Shared Metrics and Monitoring (Общие метрики и мониторинг)

Единая панель мониторинга (например, Grafana) с метриками, важными для всех: бизнес-метрики (RPS, ошибки), метрики приложения (latency, Apdex) и инфраструктуры (CPU, память). Используются SLO/SLI/SLA для управления надежностью.

Итог для DevOps Engineer

Понимание и применение "Ten City Was" означает, что вы выстраиваете не просто набор скриптов, а культуру и инженерную дисциплину. На собеседовании, ссылаясь на этот паттерн, вы демонстрируете:

  1. Системное мышление – видите полный цикл жизни приложения.
  2. Приверженность лучшим практикам – ваш подход основан на проверенных принципах.
  3. Фокус на результативность – ваша цель — стабильная, масштабируемая и эффективная система, а не просто "поставить Jenkins".

Это отличный концептуальный фундамент для обсуждения конкретных технологий (Kubernetes, Terraform, Prometheus), так как они являются инструментами для реализации этих самых принципов.