Неизменяемый код

Definition pending verification.

Неизменяемый код относится к программным компонентам или целым приложениям, которые после развертывания не могут быть изменены. Вместо обновления существующих экземпляров любые изменения требуют развертывания новой версии кода, часто вместе с новой инфраструктурой или конфигурациями. Этот принцип является краеугольным камнем современных стратегий развертывания, особенно в облачных архитектурах и практиках DevOps. Неизменяемость кода обеспечивает согласованность и предсказуемость в различных средах. Когда требуется изменение, создается совершенно новый артефакт (например, образ контейнера, образ виртуальной машины), тестируется и развертывается. Если с новой версией возникают проблемы, систему можно откатить, просто развернув предыдущую неизменяемую версию. Этот подход устраняет сложности, связанные с обновлениями на месте, такие как управление расхождением состояний, обеспечение атомарных обновлений в распределенных системах и устранение потенциальных конфликтов в процессе обновления. Он упрощает тестирование, повышает надежность и улучшает безопасность за счет уменьшения поверхности атаки, связанной с изменяемой инфраструктурой.

        graph LR
  Center["Неизменяемый код"]:::main
  Pre_cryptography["cryptography"]:::pre --> Center
  click Pre_cryptography "/terms/cryptography"
  Rel_smart_contracts["smart-contracts"]:::related -.-> Center
  click Rel_smart_contracts "/terms/smart-contracts"
  Rel_advanced_propulsion_systems["advanced-propulsion-systems"]:::related -.-> Center
  click Rel_advanced_propulsion_systems "/terms/advanced-propulsion-systems"
  Rel_consciousness_simulation_hardware["consciousness-simulation-hardware"]:::related -.-> Center
  click Rel_consciousness_simulation_hardware "/terms/consciousness-simulation-hardware"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 Простыми словами

Представьте, что вы пишете историю перманентными чернилами. Если вы хотите что-то изменить, вы не стираете; вы пишете совершенно новую историю с изменениями и полностью заменяете старую. Это гарантирует, что у вас всегда будет чистая, правильная версия.

🤓 Expert Deep Dive

Неизменяемая инфраструктура, применяемая к развертыванию кода, коренным образом меняет операционную парадигму с изменяемых обновлений на месте на циклы замены и развертывания неизменяемых компонентов. Этот подход соответствует принципам декларативной конфигурации и инфраструктуры как кода (IaC). Архитектурно он требует надежных конвейеров CI/CD, способных создавать, тестировать и развертывать версионированные артефакты (например, образы Docker, пакеты бессерверных функций). Стратегии отката становятся тривиальными: вернуться к ранее развернутому, известному как рабочий, неизменяемому артефакту. Это устраняет концепцию «расхождения конфигурации» на уровне кода и упрощает управление состоянием. Компромиссы включают потенциально более высокое потребление ресурсов из-за необходимости создания новых экземпляров для каждого развертывания и требование к сложным инструментам оркестрации (например, Kubernetes) для управления жизненным циклом этих неизменяемых развертываний. Преимущества безопасности возникают из-за уменьшения поверхности атаки во время развертывания и возможности легко вернуться в безопасное состояние.

🔗 Связанные термины

Предварительные знания:

📚 Источники