Files
sa-lessons/modules/module8/sections/07-migration-strategies.md
T
Alexander Abakumov 15e744da49 Initial commit: Complete Software Architecture course with 11 modules
- Added comprehensive course structure with 11 modules
- Included theoretical content, practical examples, and tasks
- Multi-language code examples (Java, Rust, Node.js, Python)
- Detailed analysis of architectural approaches and trade-offs
- Complete caching strategies documentation
- Architecture examples from real-world systems (Twitter, Netflix, Uber)
- Structured navigation and learning path
- Ready for educational use
2025-09-09 22:08:07 +03:00

18 KiB

Стратегии миграции

Навигация


Типы миграции

1. Lift and Shift (Rehosting)

  • Перенос приложений без изменений
  • Быстрая миграция
  • Минимальные риски

Преимущества:

  • Быстрое время миграции
  • Низкий риск
  • Сохранение существующей функциональности

Недостатки:

  • Не использует преимущества облака
  • Высокие операционные затраты
  • Ограниченная масштабируемость
# Пример Lift and Shift миграции
# AWS EC2 Instance для переноса существующего приложения
Resources:
  MigratedAppInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0c02fb55956c7d316  # Amazon Linux 2
      InstanceType: t3.large
      KeyName: my-key-pair
      SecurityGroupIds:
        - !Ref WebServerSecurityGroup
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          yum update -y
          
          # Установка существующего приложения
          yum install -y java-1.8.0-openjdk
          yum install -y tomcat8
          
          # Копирование приложения
          aws s3 cp s3://my-migration-bucket/app.war /var/lib/tomcat8/webapps/
          
          # Настройка базы данных
          aws s3 cp s3://my-migration-bucket/db-config.properties /opt/app/config/
          
          # Запуск приложения
          systemctl start tomcat8
          systemctl enable tomcat8
      Tags:
        - Key: Name
          Value: MigratedApp
        - Key: MigrationType
          Value: LiftAndShift

2. Replatforming (Rehosting with Optimization)

  • Небольшие изменения для облака
  • Улучшение производительности
  • Баланс скорости и оптимизации

Преимущества:

  • Улучшенная производительность
  • Снижение операционных затрат
  • Лучшая интеграция с облачными сервисами

Недостатки:

  • Требует изменений в приложении
  • Средний уровень риска
  • Ограниченные возможности масштабирования
# Пример Replatforming миграции
# AWS Elastic Beanstalk для оптимизированного развертывания
Resources:
  ReplatformedApp:
    Type: AWS::ElasticBeanstalk::Application
    Properties:
      ApplicationName: my-replatformed-app
      Description: Replatformed application with cloud optimizations

  ReplatformedEnvironment:
    Type: AWS::ElasticBeanstalk::Environment
    Properties:
      ApplicationName: !Ref ReplatformedApp
      EnvironmentName: !Sub "${AWS::StackName}-env"
      SolutionStackName: "64bit Amazon Linux 2 v3.4.0 running Docker"
      OptionSettings:
        - Namespace: aws:autoscaling:launchconfiguration
          OptionName: InstanceType
          Value: t3.medium
        - Namespace: aws:autoscaling:asg
          OptionName: MinSize
          Value: "2"
        - Namespace: aws:autoscaling:asg
          OptionName: MaxSize
          Value: "10"
        - Namespace: aws:elasticbeanstalk:environment
          OptionName: LoadBalancerType
          Value: application
        - Namespace: aws:elasticbeanstalk:environment:process:default
          OptionName: HealthCheckPath
          Value: /health
        - Namespace: aws:elasticbeanstalk:environment:process:default
          OptionName: Port
          Value: "8080"
        - Namespace: aws:elasticbeanstalk:environment:process:default
          OptionName: Protocol
          Value: HTTP

3. Refactoring (Re-architecting)

  • Переписывание для облака
  • Максимальная оптимизация
  • Долгосрочные преимущества

Преимущества:

  • Максимальная производительность
  • Полное использование облачных возможностей
  • Высокая масштабируемость

Недостатки:

  • Высокие затраты на разработку
  • Длительное время миграции
  • Высокий уровень риска
# Пример Refactoring миграции
# Микросервисная архитектура на Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-service
  labels:
    app: user-service
    version: v1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: user-service
  template:
    metadata:
      labels:
        app: user-service
        version: v1
    spec:
      containers:
      - name: user-service
        image: user-service:v1.0.0
        ports:
        - containerPort: 8080
        env:
        - name: DATABASE_URL
          valueFrom:
            secretKeyRef:
              name: user-service-secrets
              key: database-url
        - name: REDIS_URL
          valueFrom:
            configMapKeyRef:
              name: user-service-config
              key: redis-url
        - name: KAFKA_BROKERS
          valueFrom:
            configMapKeyRef:
              name: user-service-config
              key: kafka-brokers
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: user-service
  labels:
    app: user-service
spec:
  selector:
    app: user-service
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  type: ClusterIP

4. Rebuilding (Replace)

  • Полная перестройка
  • Cloud-native архитектура
  • Максимальная эффективность

Преимущества:

  • Современная архитектура
  • Максимальная производительность
  • Полная интеграция с облаком

Недостатки:

  • Очень высокие затраты
  • Длительное время разработки
  • Высокий уровень риска

Процесс миграции

1. Планирование миграции

Анализ приложений

  • Инвентаризация существующих приложений
  • Оценка сложности миграции
  • Приоритизация приложений
# Application Migration Assessment Template

## Application: User Management System
**Current State:**
- Technology: Java Spring Boot
- Database: MySQL 5.7
- Deployment: On-premises VM
- Dependencies: 15 external services

**Migration Assessment:**
- Complexity: Medium
- Risk Level: Low
- Migration Type: Replatforming
- Estimated Effort: 4 weeks
- Dependencies: 3 other applications

**Cloud Readiness:**
- Stateless: Yes
- Database: Compatible
- External Dependencies: 2 need migration
- Security: Compliant

**Migration Plan:**
1. Week 1: Environment setup
2. Week 2: Database migration
3. Week 3: Application deployment
4. Week 4: Testing and cutover

**Success Criteria:**
- 99.9% uptime
- < 200ms response time
- Zero data loss
- All functionality preserved

Оценка инфраструктуры

  • Анализ текущей инфраструктуры
  • Определение требований к облаку
  • Планирование сетевой архитектуры
# Infrastructure Assessment Template
InfrastructureAssessment:
  CurrentState:
    Servers: 25
    Databases: 8
    NetworkDevices: 12
    Storage: 50TB
    Bandwidth: 1Gbps
    
  CloudRequirements:
    ComputeInstances: 30
    DatabaseInstances: 10
    Storage: 100TB
    Bandwidth: 10Gbps
    SecurityGroups: 15
    LoadBalancers: 5
    
  MigrationStrategy:
    Phase1: Core applications (8 weeks)
    Phase2: Supporting services (6 weeks)
    Phase3: Legacy systems (4 weeks)
    Phase4: Optimization (2 weeks)

2. Подготовка к миграции

Создание облачной инфраструктуры

  • Настройка VPC и подсетей
  • Конфигурация безопасности
  • Подготовка баз данных
# Cloud Infrastructure Setup
Resources:
  # VPC Configuration
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: MigrationVPC
        - Key: Environment
          Value: Production

  # Public Subnets
  PublicSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: !Select [0, !GetAZs '']
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: PublicSubnet1
        - Key: Type
          Value: Public

  PublicSubnet2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.2.0/24
      AvailabilityZone: !Select [1, !GetAZs '']
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: PublicSubnet2
        - Key: Type
          Value: Public

  # Private Subnets
  PrivateSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.10.0/24
      AvailabilityZone: !Select [0, !GetAZs '']
      Tags:
        - Key: Name
          Value: PrivateSubnet1
        - Key: Type
          Value: Private

  PrivateSubnet2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.20.0/24
      AvailabilityZone: !Select [1, !GetAZs '']
      Tags:
        - Key: Name
          Value: PrivateSubnet2
        - Key: Type
          Value: Private

  # Internet Gateway
  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: MigrationIGW

  InternetGatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      InternetGatewayId: !Ref InternetGateway
      VpcId: !Ref VPC

  # NAT Gateway
  NatGateway1:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt NatGateway1EIP.AllocationId
      SubnetId: !Ref PublicSubnet1
      Tags:
        - Key: Name
          Value: NatGateway1

  NatGateway1EIP:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
      Tags:
        - Key: Name
          Value: NatGateway1EIP

  # Route Tables
  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: PublicRouteTable

  PublicRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  PrivateRouteTable1:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: PrivateRouteTable1

  PrivateRoute1:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PrivateRouteTable1
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref NatGateway1

  # Security Groups
  WebSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: WebSecurityGroup
      GroupDescription: Security group for web servers
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 10.0.0.0/16
      Tags:
        - Key: Name
          Value: WebSecurityGroup

  AppSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: AppSecurityGroup
      GroupDescription: Security group for application servers
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 8080
          ToPort: 8080
          SourceSecurityGroupId: !Ref WebSecurityGroup
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 10.0.0.0/16
      Tags:
        - Key: Name
          Value: AppSecurityGroup

  DatabaseSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: DatabaseSecurityGroup
      GroupDescription: Security group for database servers
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 3306
          ToPort: 3306
          SourceSecurityGroupId: !Ref AppSecurityGroup
        - IpProtocol: tcp
          FromPort: 5432
          ToPort: 5432
          SourceSecurityGroupId: !Ref AppSecurityGroup
      Tags:
        - Key: Name
          Value: DatabaseSecurityGroup

Настройка мониторинга

  • CloudWatch/CloudTrail для AWS
  • Azure Monitor для Azure
  • Stackdriver для GCP
# Monitoring Setup
Resources:
  # CloudWatch Dashboard
  MigrationDashboard:
    Type: AWS::CloudWatch::Dashboard
    Properties:
      DashboardName: MigrationDashboard
      DashboardBody: !Sub |
        {
          "widgets": [
            {
              "type": "metric",
              "x": 0,
              "y": 0,
              "width": 12,
              "height": 6,
              "properties": {
                "metrics": [
                  [ "AWS/EC2", "CPUUtilization", "InstanceId", "i-1234567890abcdef0" ],
                  [ ".", "NetworkIn", ".", "." ],
                  [ ".", "NetworkOut", ".", "." ]
                ],
                "view": "timeSeries",
                "stacked": false,
                "region": "${AWS::Region}",
                "title": "EC2 Metrics",
                "period": 300
              }
            },
            {
              "type": "metric",
              "x": 12,
              "y": 0,
              "width": 12,
              "height": 6,
              "properties": {
                "metrics": [
                  [ "AWS/RDS", "CPUUtilization", "DBInstanceIdentifier", "mydb" ],
                  [ ".", "DatabaseConnections", ".", "." ],
                  [ ".", "FreeableMemory", ".", "." ]
                ],
                "view": "timeSeries",
                "stacked": false,
                "region": "${AWS::Region}",
                "title": "RDS Metrics",
                "period": 300
              }
            }
          ]
        }

  # CloudWatch Alarms
  HighCPUAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: HighCPUUtilization
      AlarmDescription: Alarm when CPU exceeds 80%
      MetricName: CPUUtilization
      Namespace: AWS/EC2
      Statistic: Average
      Period: 300
      EvaluationPeriods: 2
      Threshold: 80
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - !Ref ScaleUpPolicy

  LowCPUAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: LowCPUUtilization
      AlarmDescription: Alarm when CPU is below 20%
      MetricName: CPUUtilization
      Namespace: AWS/EC2
      Statistic: Average
      Period: 300
      EvaluationPeriods: 2
      Threshold: 20
      ComparisonOperator: LessThanThreshold
      AlarmActions:
        - !Ref ScaleDownPolicy

3. Выполнение миграции

Фаза 1: Foundation (Month 1-2)

  • Настройка базовой инфраструктуры
  • Миграция простых приложений
  • Тестирование процессов

Фаза 2: Pilot Migration (Month 3-4)

  • Миграция критических приложений
  • Тестирование в production
  • Оптимизация процессов

Фаза 3: Production Migration (Month 5-8)

  • Массовая миграция приложений
  • Переключение трафика
  • Мониторинг и оптимизация

Фаза 4: Optimization (Month 9-12)

  • Оптимизация производительности
  • Снижение затрат
  • Автоматизация процессов

4. Тестирование и валидация

Функциональное тестирование

  • Проверка всех функций приложения
  • Сравнение с оригинальной версией
  • Валидация бизнес-логики

Нагрузочное тестирование

  • Тестирование под нагрузкой
  • Проверка производительности
  • Валидация масштабируемости

Безопасность

  • Проверка безопасности
  • Валидация доступа
  • Тестирование шифрования

Инструменты миграции

1. AWS Migration Tools

  • AWS Application Migration Service
  • AWS Database Migration Service
  • AWS Server Migration Service

2. Azure Migration Tools

  • Azure Migrate
  • Azure Database Migration Service
  • Azure Site Recovery

3. GCP Migration Tools

  • Migrate for Compute Engine
  • Database Migration Service
  • Transfer Service

4. Third-party Tools

  • CloudEndure
  • Carbonite
  • Zerto

Best Practices

1. Планирование

  • Детальное планирование миграции
  • Оценка рисков и митигаций
  • Подготовка rollback планов

2. Тестирование

  • Comprehensive testing
  • Staging environment
  • User acceptance testing

3. Мониторинг

  • Continuous monitoring
  • Performance metrics
  • Cost optimization

4. Документация

  • Документирование процессов
  • Knowledge transfer
  • Training team members