Вступление
Принять Облако-родная Узоры приложений компании должны изучать новые навыки и эффективно общаться через границы команды. Новая архитектура, платформы и рабочие процессы разработчика означают развивающиеся навыки разработчика. В то время как микросервисы позволяют командам работать независимо, они также подчеркивают степень, в которой программное обеспечение и организация растут, чтобы напоминать друг друга, также известный как закон COWWY. Для достижения результата, в котором многие микросистемы представляют собой сплоченную систему и по-прежнему поддерживать скорость, структуры связи организации должны быть высоко функциональными и эффективными.
Первоначальные вызовы
Набор навыков
Команды разработчиков, которые не в первую очередь цифровые родные, эти команды развития часто не имеют структуры стимулирования, времени, опыта или знаний для эффективного принятия навыков проектирования и архитектуры, необходимые для создания облачных применений.
Время/бюджет
Другим фактором является просто (слишком много) временное давление для создания новых функций, и имея «устаревшее» приложение, которое сегодня работает, может во многих случаях «достаточно хорош», но продолжать создавать множество барьеров в эксплуатации и производительности, которые привели к росту к облачным практикам.
Инфраструктура развития
Многие команды разработчиков также не хватает инвестиций в инфраструктуру развития, которая требуется дальше наклон в облако-нативных: CI/CD-трубопроводы, тесты интеграции, структуры мониторинга и наблюдаемости, с облачными и испытательными средами. Стоимость реализации всех этих произведений является барьером для принятия более натурального подхода.
Организационная структура
Традиционно компания коммуникационные структуры стоят на пути облачного развития. Например, все сетевые операции и развертывания относятся к отдельной команде от того, что делает разработку или OPS, создание барьеров или синхронных точек процесса, которые ограничивают принятие новых технологий или шаблонов. Минервисты создают новое значение на контракты API, которые часто становятся границей между командами.
Наследие якоря
Наконец, могут быть технологические активы, которые просто не могут измениться по одной причине или иной. По нескольким причинам команды могут быть привязаны к навязчивому выбору технологии на некоторое время, чтобы прийти и как-то привлечь их приложения в будущее.
Облачное развитие
Облако-уроженец — это все о том, что вы думаете о построении критических бизнес-систем. Облачные системы предназначены для принятия быстрых изменений, больших масштабов и устойчивости. Облачные нативные приложения имеют некоторые распространенные черты: они являются Контейнеризованные , динамически организован и состоит из Свободно связанные микросервисы Отказ Облако-нативная философия опирается на вершину установленного облачного применения, таких как контейнеры для упаковки приложений, открытие услуг, 12 факторов, четность Dev-Prod, централизованная конфигурация, распределенная трассировка, многоязычные приложения и быстрое, итеративное развитие.
Облако-родная о Скорость и ловкость Отказ Бизнес-системы развиваются от включения возможностей бизнеса в том, чтобы стать оружием стратегического преобразования, которые ускоряют скорость и рост бизнеса. Это обязательно получить идеи на рынок немедленно.
Скорость и ловкость облако-родины происходят от нескольких факторов. Эти пять основополагающих колоннов также обеспечивают ладонь для облачных систем:
Двенадцать факторных приложений
Широко принятая методология для построения облачных приложений — это двенадцать факторных приложений. Он описывает принципы и практики, которые используют разработчики для создания приложений, оптимизированных для современных облачных условий.
В то время как применимо к любому веб-приложению, многие практикующие считают двенадцать факторов прочной основой для строительства облачных приложений. Системы, основанные на этих принципах, могут быстро развернуть и масштабировать и добавлять функции быстро реагировать на рыночные изменения.
В следующей таблице подчеркивается методология двенадцати факторов:
База кода | 1 | Одна кодовая база для каждого микросистема хранится в собственном хранилище. Отслеживается с контролем версий, он может развернуть в нескольких средах (QA, постановка, производство). |
Зависимости | 2 | Каждое изоляторы микровисса и пакеты его зависимостей, охватывают изменения, не влияя на всю систему. |
Конфигурации | 3 | Информация о конфигурации перемещена из микросервиса и экстернализирована через инструмент управления конфигурацией вне кода. То же самое развертывание может распространяться в средах с помощью правильной настройки. |
Служба поддержки | 4 | Вспомогательные ресурсы (хранилища данных, кэширует, брокеры сообщений) должны быть выставлены через адресуемый URL. Делать так контролирует ресурс из приложения, позволяя ему быть взаимозаменяемым. |
Построить, освобождать, Бежать | 5 | Каждый выпуск должен обеспечить строгое разделение на этапах сборки, выпуска и прогона. Каждый должен быть помечен уникальным идентификатором и поддерживать возможность откатиться. Современные системы CI / CD помогают выполнить этот принцип. |
Процессы | 6 | Каждое микросервис должен выполняться в своем собственном процессе, изолированных от других запущенных служб. Externalize Обязательное состояние на сохраняющую службу, такую как распределенный кэш или хранилище данных. |
Переплета порта | 7 | Каждое микросервис должен быть автономным с его интерфейсами и функциональными возможностями, выставленными на собственном порте. Это обеспечивает изоляцию от других микросервисов. |
Параллельность | 8 | Расширение услуг по большому количеству небольших одинаковых процессов (копий) в отличие от масштабирования единого большого экземпляра на наиболее мощной доступной машине. |
Распоряжение | 9 | Экземпляры обслуживания должны быть одноразовыми, одобряя быстрые запуска, чтобы увеличить возможности масштабируемости и изящных отключений, чтобы покинуть систему в правильном состоянии. Контейнеры Docker, наряду с оркестратором (Kubernetes), по своей природе удовлетворяют этому требованию. |
Четность dev / prod | 10 | Держите окружающую среду через жизненный цикл приложения как можно более похожими, избегая дорогостоящих ярлыков. Здесь принятие контейнеров может значительно внести свой вклад, способствуя той же среде выполнения. |
логирование | 11 | Лечить журналы, генерируемые микросервисами в качестве потоков событий. Обработайте их с помощью агрегатора событий и распространяйте данные для инструментов Maining / Manage / Mogning, такие как Azure Monitor или Azure Application Insights и, в конечном итоге, долгосрочный архив. |
Процессы администратора | 12 | Запустите задачи администратора / управления в качестве одноразовых процессов. Задачи могут включать в себя очистку данных и вытягивание аналитики для отчета. Инструменты, выполняющие эти задачи, следует вызывать из производственной среды, но отдельно от приложения. |
В книге Помимо Twelve-Factor App , автор Кевин Хоффман Подробности каждый из оригинальных 12 факторов (написан в 2011 году). Кроме того, автор обсуждает три дополнительных фактора, которые отражают современные современные облачные приложения.
API первой | 13 | Сделайте все услугу. Предположим, ваш код будет употреблен в интернет-клиенте, шлюз или другой сервис. |
Телеметрия | 14 | На рабочей станции у вас глубокая видимость в вашем приложении и его поведение. В облаке вы не делаете. Убедитесь, что ваш дизайн включает в себя сборник мониторинга, доменных данных и медицинских / системных данных. |
Аутентификация / авторизация | 15 | Реализовать идентичность с самого начала. Рассмотрим функции RBAC (контроль доступа на основе ролей), доступные в публичных облаках. |
Микросервисы
Облаконативные системы охватывают микросервисы, популярный архитектурный стиль для построения современных приложений. Построен как распределенный набор небольших, независимых услуг, которые взаимодействуют через общую ткань, микросервисы имеют следующие характеристики:
- Каждый реализует определенные бизнес-возможности в более широком доменном контексте.
- Каждый разработан автономно и может быть развернут независимо.
- Каждый является автономным, инкапсулирующим собственные технологии хранения данных (SQL, NOSQL) и платформы программирования.
- Каждый работает в собственном процессе и общается с другими, используя стандартные протоколы связи.
- Они составляют вместе, чтобы сформировать приложение.
Почему микросервисы?
Микросервисы обеспечивают ловкость. Каждое микросервис имеет автономный жизненный цикл и может развиваться независимо и часто развертывать. Вам не нужно ждать ежеквартального выпуска, чтобы развернуть новые функции или обновления. Вы можете обновить небольшую площадь комплексного приложения с меньшим риском разрушения всей системы. Каждое микросервис может масштабироваться самостоятельно. Вместо масштабирования всего приложения в виде единого блока вы масштабируете только те сервисы, которые требуют дополнительной обработки мощности или пропускной способности сети. Этот мелкозернистый подход к масштабированию предусматривает больший контроль над вашей системой и снижает общие расходы, когда вы масштабируете части вашей системы, не все.
Автоматизация
Облачные системы обнимают микросервисы, контейнеры и современную конструкцию системы для достижения скорости и ловкости. Но это только часть истории. Как вы предоставляете облачные среды, на которых эти системы бегают? Как вы быстро развертываете функции приложений и обновления? Как вы опускаете полную картину?
Введите широко принятую практику Инфраструктура как код или IAC.
С IAC вы автоматизируете предоставление платформы и развертывание приложений. Вы по существу применяете методы разработки программного обеспечения, такие как тестирование и версию для ваших методов DEVOPS. Ваша инфраструктура и развертывание автоматизированы, последовательны и повторяются.
Автоматизация инфраструктуры
Инструменты, такие как Azure Resource Manager, Terraform, Azure Bicep и Azure CLI, позволяют сделать для декларативно сценарию облачную инфраструктуру, которую вы требуете. Имена ресурсов, местоположения, емкости и секреты параметризованы и динамические. Сценарий версится и проверяется в контроль источника как артефакт вашего проекта. Вы вызываете скрипт, чтобы обеспечить последовательную и повторяющуюся инфраструктуру в системных средах, таких как Qa, постановка и производство.
IAC IAC IDEMPOTENT под капотом, что означает, что вы можете запускать один и тот же скрипт неоднократно без побочных эффектов. Если команда должна внести изменения, они редактируют и повторяют скрипт. Затрагиваются только обновленные ресурсы.
В статье Что такое инфраструктура как код , автор Сэм Гуккенхеймер Описывает, как «команды, которые реализуют IAC, могут быстро и в масштабах доставлять стабильные среды. «Команды избегают ручной настройки среды и обеспечить обеспечение согласованности, представляя желаемое состояние их среды через код.
Развертывание инфраструктуры с IAC — повторяемый и предотвратить проблемы выполнения, вызванные конфигурацией дрейфа или отсутствующими зависимостями. DevOps Teams могут работать вместе с единым набором практики и инструментами для доставки приложений и их поддерживающей инфраструктуры быстро, надежно, и в масштабе ».
Автоматизация развертываний
Приложение TVELVE-FACTE приложений для отдельных этапов при преобразовании завершенного кода в запущенное приложение.
Фактор № 5 Указывает, что «каждый выпуск должен обеспечить строгое разделение по стадии постройки, выпуска и пробега. Каждый должен быть помечен уникальным идентификатором и поддерживать способность откатывать ».
Современные системы CI/CD помогают выполнить этот принцип. Они предоставляют отдельные шаги развертывания и помогают обеспечить последовательный и качественный код, который легко доступен для пользователей.
На предыдущей фигуре обратите особое внимание на разделение задач.
Разработчик создает функцию в их среде разработки, итерацию, что называется «внутренний цикл» кода, запуска и отладки. При завершении этот код нажимается в репозиторий кода, например, GitHub или Azure DEVOPS.
Нажатие запускает этап сборки, которая преобразует код в двоичный артефакт. Работа реализована с непрерывной интеграцией (CI) трубопроводом. Он автоматически строит, тесты и пакеты приложения.
Этап выпуска поднимает бинарный артефакт, применяет внешнюю информацию о приложении и конфигурации окружающей среды и производит неизменяемый выпуск. Выпуск развернут до определенной среды. Работа реализована с непрерывной доставкой (CD) трубопроводом. Каждый выпуск должен быть идентифицирован. Вы можете сказать: «Это развертывание работает 3.11 приложения».
Наконец, выделенная функция запускается в целевой среде выполнения. Релизы неизменны, что означает, что Любые изменения должны создать новый выпуск Отказ
Применяя эти практики, у вас радикально развивалось, как отправить программное обеспечение. Многие команды разработчиков переместились с ежеквартальных релизов до обновлений по требованию. Цель состоит в том, чтобы уловить проблемы в начале цикла развития, когда они менее дороги исправления. Чем дольше продолжительность между интеграциями, тем более дорогими проблемами становятся разрешения. С консистенцией в процессе интеграции команды могут превышать изменения кода, что приведет к лучшему качеству совместной работы и программного обеспечения.
Рамки программирования
Весна
Весна является модной структурой для разработки микросервисов и быстро развивалась для поддержки облачных моделей приложений. Более 50% корпоративных приложений находятся в Java, а более 50% приложений Java используют весну, что имеет выделенную поддержку на Azure
Дапр
ДАПР Это новая рамка, которая добавляет облачных возможностей и шаблонов на другие популярные языковые рамки, такие как Node.js, Python, Java и .NET/C #. DAPR Особенно светит для интерсервисного общения между микроэвиками и штатами. Например, DAPR добавляет боковой рисунок автомобиля, которая добавляет устойчивость, повторные попытки и обнаружение услуг между микросервисами на основе HTTP и GRPC без необходимости полностью реализации сервисной сетки или записи логики более низкой уровня для обработки. DAPR добавляет привязки к масштабам и доступности к государственным магазинам и услугам обмена сообщениями, такими как Cosmosdb, Redis или Kafka.
Оригинал: «https://dev.to/cschotte/cloud-native-development-with-containers-and-microservices-2jfb»