Cloud Foundry (CF) является глобальным стандартом разработки облачных приложений, который позволяет разработчикам уделять больше внимания поставленным задачам и облегчает процесс развертывания и управления приложениями.
В этой статье мы расскажем о нескольких этапах, которые помогут работать с Cloud Foundry и нашей облачной платформой:
- Как получить доступ к пробной учетной записи SAP Cloud Platform для среды Cloud Foundry;
- Как улучшить приложение с помощью дополнительных функций, используя базовые концепции Cloud Foundry, включая сторонние службы;
- Как работать с пробной учетной записью в среде Cloud Foundry и с приложением через SAP Cloud Platform и интерфейс командной строки Cloud Foundry (CF CLI);
- Как использовать платформы приложений, такие как Spring и Spring Boot для эффективного создания приложений;
- Как осуществить контроль, масштабирование и обновление вашего приложения.
(под катом очень много текста)
Давайте разберём условный пример — что делать, если вам нужно быстро создать прототип сайта для e-commerce на SAP Cloud Platform для отдела продаж.
Первоначальные требования к сайту:
- У вас есть базовый интерфейс, который отображает список продуктов, доступных в каталогe.
- Когда вы выбираете продукт в интернет-магазине, вы получаете дополнительную информацию о нем.
Если у вас уже есть опыт работы над проектами, которые начинаются с PoC (Proof of Concept) и затем превращаются в продуктивное приложения, то вы понимаете, что также необходимо предусмотреть функции для мониторинга, управления приложением. Как только в отделе продаж увидят прототип, они сразу захотят выпустить его как можно скорее. Однако вам необходимо заранее подготовить приложение для эффективного DevOps перед запуском.
В этой статье мы расскажем в деталях о том, как локально запустить простое приложение SpringBoot, затем переместить его в среду Cloud Foundry на SAP Cloud Platform. После изучения приложения и проверки основных логов (журналов) и метрик мы рассмотрим, как улучшить приложение, используя возможности поддержки различных функций — к примеру, интеграции с сервисом Application Logging, а также про масштабирование приложения.
Статья состоит из 7 разделов:
1. Подготовка среды разработки
2. Клонирование шаблона приложения из Github
3. Перемещение приложения в облако
4. Получение информации о приложении, запущенном в среде SAP Cloud Platform
5. Интеграция с сервисом Application Logging (логирование приложения)
6. Масштабирование приложения
Инструменты разработки
Чтобы выполнить шаги, которые описаны в этой статье, вам потребуется установить следующие компоненты:
- Eclipse
- CF CLI
- Maven, Git, Java
Используемые сервисы и приложения
Приложение «Product List»
Это приложение, используемое в качестве примера, содержащее в себе список продуктов. Оно будет развиваться и улучшаться по ходу выполнения шагов, которые мы рассмотрим в данной статье. Приложение будет работать в среде Cloud Foundry облачной платформы SAP, с использованием различных служб, таких как PostgreSQL для хранения в облаке, Application Logging (логирование приложения) и т.д. Это приложение SpringBoot с простым пользовательским интерфейсом.
PostgreSQL
PostgreSQL — это система управления объектно-реляционными базами данных с открытым исходным кодом. Это база данных корпоративного класса, совместимая с ACID. Онa доступна для использования в качестве сторонней службы в среде Cloud Foundry.
Сервис Application Logging
Вы можете создавать, просматривать и анализировать логи приложений с помощью службы Application Logging. Она основана на платформе логирования с открытым исходным кодом Elasticsearch, Logstash, Kibana (Elastic Stack). Приложение требует некоторой подготовки, прежде чем его логи будут переданы в службу Application Logging.
Сервис Application Autoscaler
Служба Application Autoscaler используется для автоматического масштабирования приложения и для масштабирования связанных приложений, основанных на пользовательских политиках. Динамическое масштабирование экземпляра приложения гарантирует, что оно не столкнется с проблемами производительности при увеличении нагрузки и не выйдет из строя. Динамическое масштабирование также дает гарантию того, что ваше приложение использует оптимальные ресурсы.
1. Подготовка среды разработки
В первой части мы расскажем, как создать бесплатную пробную учетную запись в среде Cloud Foundry на базе SAP Cloud Platform и настроить локальную среду разработки. Также мы рассмотрим панель управления SAP Cloud Platform, которая является средством администрирования веб-приложений для облачной платформы.
1) Начало работы с Cloud Foundry
Если у вас еще нет пробной учетной записи в SAP Cloud Platform, то получите ее, следуя этой пошаговой инструкции.
В панели управления SAP Cloud Platform (SAP Cloud Platform cockpit) нажмите на вкладку «Home», чтобы перейти на домашнюю страничку SAP Cloud Platform. В открывшейся страничке нажмите на «Cloud Foundry Trial».
В появившемся окне выберете регион для вашей пробной учетной записи и нажмите «OK». В нашем случае был выбран регион «Europe (Frankfurt)».
После этого вы получите глобальный аккаунт, субаккаунт, организацию и пространство в выбранном регионе. Вы можете перейти к созданному пространству, нажав «Go to Space».
Теперь у вас есть ваш бесплатный пробный аккаунт в среде Cloud Foundry.
Примечание: Если у вас уже есть пробная учетная запись в среде Cloud Foundry, просто нажмите на «Cloud Foundry Trial» на домашней страничке SAP Cloud Platform, после чего вы сразу же попадете в пространство вашей пробной учетной записи в среде Cloud Foundry.
2) Панель управления
Ниже представлена упрощенная доменная модель, которая используется в среде Cloud Foundry. Получить более подробную информацию вы можете в документации.
Ниже — скриншот из «Панели управления» SAP Cloud Platform:
3) Очистка аккаунта
В пробной учетной записи Cloud Foundry Environment квота ограничена.
Если вы уже использовали квоту пробной учетной записи, вам необходимо очистить приложения и экземпляры служб, чтобы выполнить упражнения. Вы можете сделать это через панель управления:
- перейдите к списку приложений, запущенных в вашем пространстве, находящихся во вкладке «Applications», и удалите или остановите все запущенные приложения;
- перейдите в «Service Instances» во вкладке «Services» и удалите все служебные экземпляры.
Если вы только что создали пробную учетную запись, то этого делать не нужно.
4) Настройка локальной среды разработки
Для выполнения следующих шагов и работы с Cloud Foundry потребуются инструменты разработки, описанные ниже. Если какие-либо инструменты не установлены на вашем ПК, установите их.
Cloud Foundry Command Line Interface (CF CLI)
Скачайте и установите Cloud Foundry CLI, как описано здесь.
Eclipse
— Для разработки потребуется Eclipse. В данном примере используется версия Neon. Скачать Eclipse IDE for Java EE Developers для версии Neon можно здесь.
— Также вам потребуется установить плагин STS (Spring Tool Suite) для Eclipse.
Как установить плагин STS — описано здесь.
Java
— Проверьте версию Java путем ввода команды java -version в командной строке. В данном примере используется версия 1.8.0_152.
Maven
— Скачайте и установите Apache Maven.
— Если Maven установлен правильно, проверить его версию вы можете путем ввода команды mvn -version в командной строке. В данном примере используется версия Apache Maven 3.5.0.
Git
— Скачайте Git здесь и установите его.
— Если Git установлен правильно, проверить его версию вы можете путем ввода команды git --version в командной строке. В данном примере используется версия 2.15.1.windows.2.
2. Клонирование шаблона приложения из Github
В этом разделе мы расскажем, как клонировать целевую версию шаблона приложения «Product List», импортировать шаблон проекта в среду Eclipse, а затем собрать его.
Перейдите к источнику проекта в github.
Нажмите на кнопку «Clone or download» и выберете «Download ZIP».
После того, как файл скачается, разархивируйте его в удобном для вас месте. В этом месте появится новая папка с названием
cloud-cf-product-list-sample
.
1) Импорт шаблона проекта в Eclipse
Перейдите в Eclipse. Чтобы импортировать шаблона проекта как проект Maven в рабочее пространство Eclipse, в меню Eclipse выберите File -> Import...
В открывшемся окне «Import» выберете Maven -> Existing Maven Projects и нажмите «Next».
В окне «Import Maven Projects» нажмите «Browse», чтобы прописать путь к разархивированной папке с проектом «cloud-cf-product-list-sample-master», которую вы сохранили ранее, после этого нажмите «Finish».
Теперь проект импортирован в Eclipse, и вы видите ваш проект в окне «Project Explorer», как показано на скриншоте ниже.
2) Сборка проекта в Eclipse с использованием Maven
Перед тем, как собрать проект с помощью Maven, проверьте, используется ли в вашем Eclipse JRK. В том случае, если ваш Eclipse использует JRE вместо JRK, в процессе сборки вы можете получить ошибку об отсутствии компилятора: "[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? ".
Как настроить Eclipse для корректной сборки проекта — описано здесь.
Теперь можно собрать проект в Eclipse. Для этого нажмите на проект правой кнопкой мыши в окне «Project Explorer» и в открывшемся контекстном меню выберете Run As -> Maven build...
В окне «Edit Configuration» введите clean install в поле «Goals» и нажмите «Run». После этого начнется сборка проекта.
Сборка должна закончиться без ошибок. В случае успешной сборки в консоли вы увидите сообщение об этом:
3. Перемещение приложения в облако
1) Вход в аккаунт через CF CLI
В этом упражнении вы узнаете, как загрузить приложение в вашу пробную учетную запись в среде Cloud Foundry платформы SAP Cloud Platform. Это можно сделать с помощью интерфейса командной строки Cloud Foundry (CF CLI).
Примечание для пользователей Windows: Откройте терминал (командную строку) на вашем компьютере. Для этого одновременно нажмите клавишу «Windows» и клавишу «R», а затем введите cmd в поле ввода и нажмите «OK».
Для начала вам нужно «сказать» вашему CF CLI, какой именно регион для среды Cloud Foundry вы собираетесь использовать. Для этого вам потребуется установить конечную точку API для облачного контроллера (Cloud Controller), находящегося в регионе, в котором создана ваша пробная учетная запись в среде Cloud Foundry. Сделать это можно при помощи команды
cf api CLOUD_FOUNDRY_API_ENDPOINT.
Так как в данном примере используется аккаунт, имеющий конечную точку API в регионе EU10, вводим cf api api.cf.eu10.hana.ondemand.com. Если ваш аккаунт создан в том же регионе, используйте эту же конечную точку API.
Примечание: Вы можете найти все конечные точки API для разных регионов среды Cloud Foundry в официальной документации SAP Cloud Platform.
Теперь зайдите в вашу учетную запись, используя следующую команду:
cf login
После этого вам нужно будет ввести электронную почту и пароль, которые вы указывали при регистрации в SAP Cloud Platform.
Email> enter your e-mail
Password> password for your user
Далее вы должны выбрать организацию и пространство в Cloud Foundry, которые вы будете использовать для размещения приложения. Если в вашей учетной записи используется только одна организация и пространство, система автоматически выберет их для использования после входа в учетную запись, и они будут выведены в терминале под словом «OK».
Примечание: Если в вашей учетной записи в Cloud Foundry создано несколько организаций и пространств, вы можете выбрать именно те, которые вы собираетесь использовать. Для этого в терминале вам нужно будет ввести следующую команду:
cf target -o ORGANIZATION -s SPACE
Теперь вы готовы начать работу с вашей учетной записью в среде Cloud Foundry.
2) Манифест приложения
Перед загрузкой приложения в среду Cloud Foundry, вы можете либо прописать параметры приложения в командной строке для команды push, позволяющей запустить приложение в облаке, либо использовать файл дискриптора приложения (manifest.yml), установив в нем параметры для перемещения, что позволит не вводить их заново каждый раз перед использованием команды push. Дополнительную информацию о файле манифеста приложения вы можете найти в документации о Cloud Foundry.
Перейдите в окно Project Explorer в Eclipse, где находится шаблон вашего приложения «Product List», и откройте файл manifest.yml.
Примечание: В том случае, если этого файла нет в вашем проекте, создайте его. Для этого нажмите правой кнопкой мыши на приложение «Product List» и в появившемся меню выберете New -> File, а затем создайте файл с названием manifest.yml.
После того, как вы откроете этот файл, вставьте в него следующий фрагмент:
applications:
# Application
— name: product-list
instances: 1
memory: 896M
host: product-list-YOUR-BIRTHDATE-DAY-MONTH-YEAR
path: target/my-product-list-0.0.1-SNAPSHOT.jar
buildpack: github.com/cloudfoundry/java-buildpack.git#v4.3
Отредактируйте вставленный фрагмент следующим образом:
- Строка path должна указывать на файл jar, созданный в целевой папке проекта в результате сборки с помощью Maven, и возможно, вам придется заменить имя флага на имя вашего jar-файла.
- host должен быть уникальным, поскольку пространство имен хостов разделяется со всеми приложениями в Cloud Foundry, поэтому добавьте в конце свою дату рождения — день, месяц и год.
Сохраните файл manifest.yml после редактирования.
3) Перемещение
В командной строке пропишете путь к месту нахождения вашего приложения SpringBoot, где вы только что создали файл manifest.yml, а затем введите следующую команду:
cf push
В данном примере приложение хранится в папке cloud-cf-product-list-sample-master, поэтому в терминале эта команда будет выглядеть следующим образом:
Данная команда запускает процесс развертывания приложения с помощью только что созданного файла manifest.yml. Первый шаг — загрузка двоичных файлов приложения в облако. На следующем этапе происходит так называемая постановка. Следующая фаза — фаза выпуска. Она сообщает Cloud Foundry, как запустить приложение. После успешного завершения команды вы можете открыть приложение в браузере: для этого скопируйте и вставьте URL-адрес, выведенный на консоли после завершения.
Примечание: В случае сбоя команды прочитайте сообщение об ошибке. Возможно, вы неверно указали параметры в manifest.yml. Или превышена квота в вашей пробной учетной записи. Если вы уже использовали ваш пробный аккаунт, вам необходимо удалить приложения и экземпляры служб, перед тем как продолжать упражнения. Вы можете сделать это через панель управления SAP Cloud Platform:
- перейдите к списку приложений, запущенных в вашем пространстве, находящихся во вкладке «Applications», и удалите или остановите все запущенные приложения;
- перейдите в «Service Instances» во вкладке «Services» и удалите все служебные экземпляры.
3) Вызов приложения
Теперь ваше приложение запущено в вашей учетной записи в среде Cloud Foundry платформы SAP Cloud Platform.
- Откройте браузер Chrome и перейдите в панель управления SAP Cloud Platform:
- account.hanatrial.ondemand.com/cockpit#/home/trialhome
- Вы должны попасть на домашнюю страничку SAP Cloud Platform. Если этого не произошло, нажмите на «Home»
- Нажмите на «Cloud Foundry Trial»
После этого вы попадете в свой глобальный аккаунт. Теперь нажмите на свой суббакаунт (обычно он имеет название «trial»)
Нажмите на вкладку «Spaces» в меню слева и выберете пространство, в котором находится ваше приложение (обычно это «dev»)
После этого вы окажетесь в пространстве вашей учетной записи, где вы можете найти запущенные приложения — в нашем случае это должно быть приложение «Product List», которое вы перенесли в облако. Нажмите на имя приложения, чтобы увидеть более подробную информацию о нем:
В открывшемся окне с информацией о приложении, вы найдёте путь к приложению (Application Routes). Нажмите на URL-адрес, чтобы запустить ваше приложение в браузере.
4) Сервисы
До сих пор мы использовали информацию о продуктах в памяти виртуальной машины Java, которая хороша для локального тестирования, быстрых циклов изменения. Однако этот способ имеет некоторые недостатки — если приложение будет перезапущено, то все изменения будут потеряны, если у вас будет больше, чем один запущенный процесс приложения, данные будут отличаться и т. д. Давайте добавим базу данных в качестве сторонней службы в облаке, чтобы избежать этих проблем. Это можно сделать без изменений в коде. Для этого нужно создать экземпляр службы, связать его с приложением и перезапустить приложение, чтобы оно начало использовать базу данных. Выполните следующие действия:
В терминале введите команду cf marketplace для отображения всех доступных вашему пользователю сервисов. Вы увидите список сервисов, краткое описание и информацию о планах обслуживания.
В данном примере мы будем использовать СУБД PostgreSQL. Чтобы увидеть информацию о конкретном сервисе, используйте команду cf marketplace -s SERVICE:
cf marketplace -s postgresql
Прежде чем приложение начнет использовать службу, необходимо создать экземпляр службы. Создайте экземпляр службы PostgreSQL с помощью команды cf create-service SERVICE PLAN SERVICE_INSTANCE. Для этого введите в терминале:
cf create-service postgresql v9.6-dev postgres
Только что созданный postgresql сервис появится в списке сервисов, используемых в вашем пространстве. Чтобы убедиться в этом, введите следующую команду:
cf services
Последний шаг — связать экземпляр службы с вашим приложением. Для этого введите команду cf bind-service APP_NAME SERVICE_INSTANCE в CF CLI:
cf bind-service product-list postgres
Теперь нужно обновить приложение, чтобы подключение к PostgreSQL для него было сохранено и этот сервис использовался в дальнейшем. Для этого используйте команду cf restage APP_NAME:
cf restage product-list
После этого введите команду cf services, и вы увидите, что теперь экземпляр службы PostgreSQL присоединен к приложению «Product List».
Примечание: Альтернативным способом присоединения сервисов к приложению является манифест приложения. Если вы используете manifest.yml для привязки сервисов, то после редактирования этого файла вам необходимо будет заново загрузить приложение в облако с помощью команды push, чтобы среда обновилась, и приложение смогло использовать эту услугу. Таким образом, для этого примера вам нужно добавить следующий фрагмент в файл манифеста, а затем снова загрузить приложение в облако:
services:
— SERVICE_INSTANCE_NAME
Обычно на этом этапе вам необходимо определить экземпляр службы и адаптировать код приложения. Информация о том, как получить доступ к экземпляру службы, теперь доступна в вашей прикладной среде как переменная среды VCAP_SERVICES. В нашем случае среда SpringBoot обеспечивает механизм для обнаружения службы PostgreSQL и начала работать с ней, поэтому нет необходимости изменять код приложения.
4. Получение информации о приложении, запущенном в среде SAP Cloud Platform
Как получить дополнительную информацию о приложениях и службах, запущенных в пробной учетной записи в среде Cloud Foundry, и как получить основные метрики и логи.
Эту информацию можно узнать как с помощью CF CLI, так и через панель управления SAP Cloud Platform. Будут рассмотрены оба варианта.
1) Подключение службы для просмотра логов
Перед просмотром логов в Kibana, необходимо подключить службу application-logs к приложению. Kibana — веб-интерфейс для вывода индексированных Elasticsearch логов. Воспользуемся CLI и командами, которые мы использовали в предыдущем упражнении, для создания и привязки экземпляра службы к нашему приложению. Последовательно введите в терминале следующие команды:
cf marketplace
cf create-service application-logs lite myapplogs
cf services
cf bind-service product-list myapplogs
cf restage product-list
2) Просмотр приложений, загруженных в облако
Получим список приложений, запущенных в пространстве нашей учетной записи, с информацией о них. Это можно сделать через CF CLI и через панель управления.
CF CLI
Для отображения списка запущенных приложений, введите в терминале следующую команду:
cf apps
Панель управления SAP Cloud Platform
Перейдите в пространство, созданное в среде Cloud Foundry и выберете вкладку «Applications» в меню слева. Перед вами появится список приложений, находящихся в этом пространстве. В данном примере в пространстве находится только приложение «Product List».
3) Просмотр сервисов
Получим список созданных в вашем пространстве экземпляров служб и их привязок.
CF CLI
Для отображения списка созданных экземпляров служб и их привязок введите следующую команду:
cf services
Панель управления SAP Cloud Platform
В меню навигации, которое находится слева, есть вкладка «Services». Выберете ее, а затем нажмите на появившуюся вкладку «Service Instances», чтобы увидеть все экземпляры служб, созданные в вашем пространстве, а также основную информацию о них.
4) Просмотр логов приложения
CF CLI
Просмотреть логи приложения можно с помощью команды cf logs APP_NAME. Для этого введите в терминале:
cf logs product-list
Примечание: Вызовите приложение в случае, в том случае, если логи не отображаются после ввода данной команды.
Чтобы выйти из режима потока логов в реальном времени в консоли, нажмите Ctrl + C.
Для отображения последних логов приложения воспользуйтесь следующей командой:
cf logs product-list --recent
Панель управления SAP Cloud Platform
Чтобы просмотреть журналы приложений в панели управления, снова перейдите к списку приложений в вашем пространстве (вкладка «Applications») и выберете запущенное приложение (щелкните по имени приложения). Затем в меню слева выберете «Logs», после чего вы увидите таблицу с последними логами приложений. Если ваше приложение имеет более одного экземпляра приложения, вы можете выбрать, для какого экземпляра вы хотите просмотреть журналы.
5) Отображение метрик
Получим отображение состояния работоспособности и статуса приложения, включая информацию о потреблении процессора, памяти и диска.
CF CLI
Для отображения метрик приложения, введите в терминале команду:
cf app product-list
Панель управления SAP Cloud Platform
Чтобы просмотреть метрики приложения в панели управления, перейдите к списку приложений в вашем пространстве (вкладка «Applications») и выберете запущенное приложение (щелкните по имени приложения). Затем в меню слева выберете «Overview». В открывшемся окне вы увидите аналогичную информацию о запущенном приложении.
6) События
Просмотрим последние события приложения (такие как создание, переустановка, обновление и т.д.) и получим информацию о том, когда они произошли и кто их вызвал.
CF CLI
Увидеть последние события приложения через терминал можно с помощью команды cf events APP_NAME. Введите команду:
cf events product-list
Панель управления SAP Cloud Platform
Чтобы просмотреть события приложения в панели управления, перейдите к списку приложений в вашем пространстве (вкладка «Applications») и выберете запущенное приложение (щелкните по имени приложения). Затем в меню слева выберете «Events».
7) Переменные среды
Доступ к переменным среды
Увидеть список переменных среды можно с помощью CF CLI, путем ввода следующей команды в терминале:
cf env product-list
Также список переменных среды можно получить через панель управления SAP Cloud Platform. Для этого перейдите к списку приложений в вашем пространстве (вкладка «Applications») и выберете запущенное приложение (щелкните по имени приложения). Затем в меню слева выберете «Environment Variables».
В следующих примерах показано, как обращаться к переменным среды из приложения программным способом: примеры на Java, NodeJS и Ruby.
System.getenv(«VCAP_SERVICES»);
process.env.VCAP_SERVICES
ENV['VCAP_SERVICES']
Установка переменных среды
Специфичные для среды приложения переменные могут быть заданы разработчиком приложения с помощью команды в CF CLI:
cf set-env APP_NAME VARIABLE_NAME VARIABLE_VALUE
Или путём их описания в файле manifest.yml приложения следующим образом:
— …
env:
VARIABLE_NAME_1: VARIABLE_VALUE_1
VARIABLE_NAME_2: VARIABLE_VALUE_2
Также задать переменные можно через панель управления SAP Cloud Platform. Для этого перейдите к списку приложений в вашем пространстве (вкладка «Applications») и выберете запущенное приложение (щелкните по имени приложения). Затем в меню слева выберете «User-Provided Variables» и в открывшемся окне нажмите «Add Variable».
Системные переменные среды
Полный список переменных среды, которые Cloud Foundry предоставляет контейнеру приложения, представлен ниже:
o CF_INSTANCE_ADDR
o CF_INSTANCE_GUID
o CF_INSTANCE_INDEX
o CF_INSTANCE_IP
o CF_INSTANCE_INTERNAL_IP
o CF_INSTANCE_PORT
o CF_INSTANCE_PORTS
o HOME
o MEMORY_LIMIT
o PORT
o PWD
o TMPDIR
o USER
o VCAP_APP_HOST
o VCAP_APP_PORT
o VCAP_APPLICATION
o VCAP_SERVICES
Последняя переменная (VCAP_SERVICES) важна в том случае, если ваше приложение использует привязываемые службы, т.к. Cloud Foundry добавляет к ней сведения о привязке в тот момент, когда вы загружаете приложение после привязки службы к нему. Пример основан на приложении, которое связано со службой postgresql.
8) Проверка работоспособности приложения
Проверка работоспособности приложения — это процесс мониторинга, который постоянно проверяет статус приложения, запущенного в Cloud Foundry. В среде Cloud Foundry таймаут по умолчанию составляет 60 секунд, а максимальный настраиваемый таймаут — 180 секунд. В Cloud Foundry доступны три типа проверки работоспособности:
• http: — проверка работоспособности типа http выполняется с помощью запроса GET на настроенную конечную точку http. Когда проверка работоспособности получает ответ HTTP 200, приложение считается «здоровым». Конфигурированная конечная точка должна отвечать в течение 1 секунды, чтобы считаться здоровой.
• port: — это проверка по умолчанию. Этот тип проверки совершает TCP-соединение с портом или портами, настроенными для приложения (по умолчанию 8080). TCP-соединение должно быть установлено в течение 1 секунды, чтобы считаться приложение считалось «здоровым».
• process: Diego гарантирует, что любой процесс, объявленный для приложения, будет работать. Если процесс завершается, Diego останавливается и удаляет экземпляр приложения.
Тип проверки работоспособности может быть указан при перемещении приложения в облако с помощью команды push:
cf push APP_NAME -u HEALTH-CHECK-TYPE -t HEALTH-CHECK-TIMEOUT
Также тип проверки работоспособности приложения можно указать в файле manifest.yml следующим образом:
— …
health-check-type: http
health-check-http-endpoint: /health
timeout: 120
С помощью CF CLI можно назначить тип проверки работоспособности уже запущенному приложению, используя следующую команду:
cf set-health-check APP_NAME (process | port | http [--endpoint PATH])
Примеры:
cf set-health-check APP_NAME http --endpoint PATH (default to /)
cf set-health-check APP_NAME port
cf set-health-check APP_NAME PROCESS_NAME
Путём ввода команды cf set-health-check product-list http --endpoint /, был установлен тип проверки работоспособности http:
Узнать тип проверки работоспособности для определенного приложения можно с помощью команды CF CLI cf get-health-check APP_NAME. Введите в терминале следующую команду, чтобы узнать тип проверки работоспособности для приложения «Product List»:
cf get-health-check product-list
5. Интеграция с сервисом Application Logging (логирование приложения)
В этом упражнении вы узнаете, как интегрировать приложение с сервисом Application Logging (логирование приложения) в SAP Cloud Platform, и как визуализировать логи приложения на панелях Kibana с логами компонентов Cloud Foundry.
1) Логирование
Рассмотрим исходный код приложения. В нем уже используется библиотека SAP – поддержка логирования для Cloud Foundry: github.com/SAP/cf-java-logging-support. В pom.xml объявлены требуемые зависимости, также доступны конфигурация (logback.xml) и реализация (ConfigLogging).
Откройте Eclipse и перейдите к классу Controller.java в вашем приложении «product-list».
Внутри класса вы увидите объект Logger:
private static final Logger logger = LoggerFactory.getLogger(Controller.class);
Метод getProductByName записывает следующие точки входа логов:
logger.info("***First — Retrieving details for '{}'.", name);
logger.info("***Second — Retrieving details for '{}'.", name);
Служба application-logs уже создана и привязана к приложению product-list (это было сделано в предыдущем упражнении).
Перед генерацией логов измените файл logback.xml.
• В Eclipse откройте файл logback.xml. Замените <appender-ref ref=«STDOUT-JSON» /> на <appender-ref ref=«STDOUT» />.
• Сохраните изменения и пересоберите проект. Для этого нажмите правой кнопкой мыши на проект, в появившемся меню выберите Run As… -> Maven Build.
• После успешной сборки проекта вам необходимо будет переустановить приложение в Cloud Foundry.
В командной строке пропишете путь к месту нахождения вашего приложения SpringBoot, и введите команду
cf push product-list.
2) Генерирование логов
Для генерации логов достаточно вызвать приложение через URL-адрес в панели управления SAP Cloud Platform.
Для генерации логов приложения сделайте запрос в браузере, прописав следующий путь:
YOUR_APPLICATION_URL/productsByParam?name=Notebook Basic 15.
В панели управления перейдите на вкладку «Logs», которая расположена в меню слева, для приложения «product-list». Затем нажмите на «Open Log Analitic», как показано на скриншоте ниже:
Это должно привести к открытию в браузере следующего URL-адреса: logs.cf.eu10.hana.ondemand.com. Чтобы войти в систему, введите почту и пароль, которые вы используете для входа в свою пробную учетную запись в SAP Cloud Platform.
После того, как вы попадете в Kibana, выберете приложение «product-list».
В открывшемся окне выберете «Requests and Logs».
После этого появятся запросы и логи приложения.
Поле msg в логах приложения будет выглядеть несколько странно. Видно, что логи и запросы не связаны, т.к. в логах приложения нет идентификатора корреляции (Correlation ID). Это затрудняет определение принадлежности логов приложения определенным запросам.
Примечание: Если вы не видите логи в Kibana, это может быть вызвано тем, что по умолчанию вы видите журналы за последние 15 минут. Вы можете изменить этот интервал — в правом верхнем углу нажмите на надпись «Last 15 minutes» и в открывшемся окне задайте нужный вам интервал.
- Снова перейдите в Eclipse и откройте файл logback.xml. Измените <appender-ref ref=«STDOUT» /> обратно на <appender-ref ref=«STDOUT-JSON» />.
- Сохраните изменения и пересоберите проект. Для этого нажмите правой кнопкой мыши на проект, в появившемся меню выберите Run As… -> Maven Build.
- После успешной сборки проекта вам необходимо будет переустановить приложение в Cloud Foundry. В командной строке пропишете путь к месту нахождения вашего приложения SpringBoot, и введите команду cf push product-list.
- После того, как приложение запустится в пробной учетной записи в Cloud Foundry, перейдите в панель управления SAP Cloud Platform, вызовите приложения «product-list» через URL и добавьте путь, который генерирует журналы: YOUR_APP_URL/productsByParam?name=Notebook%20Basic%2015.
- Если Kibana все еще открыта, вы можете просто обновить вкладку, чтобы увидеть последние журналы. Если вы уже закрыли вкладку, снова войдите в панель управления SAP Cloud Platform, выберете приложение «product-list» и нажмите на вкладку «Logs» в меню слева, затем нажмите на «Open Log Analysis».
- Обратите внимание, что теперь поле msg в журналах приложений отображает красивое отформатированное сообщение.
Примечание: Дополнительную информацию о логировании приложения в среде Cloud Foundry платформы SAP Cloud Platform вы можете найти в официальной документации: обзор сервиса Application Logging в официальной документации.
6. Масштабирование приложения
В этом упражнении вы узнаете, как масштабировать приложение.
Нагрузка системы, количество и характер задач — все эти факторы могут изменять пространство и память на диске, используемые приложением. Для многих приложений увеличение доступного пространства, памяти или запуск большего количества экземпляров (ЦП) может повысить общую производительность. Аналогично, запуск дополнительных экземпляров приложения может позволить приложению регулировать увеличение нагрузки и одновременных запросов. Это регулирование называется масштабированием приложения.
Вы можете масштабировать приложение таким образом, чтобы оно было приспособлено к изменениям в трафике, вы можете масштабировать его вручную через CF CLI или через панель управления SAP Cloud Platform, а также можно настроить автоматическое использование сервиса Application Autoscaler (автоматическое масштабирование приложения) платформы SAP Cloud Platform для вашего приложения.
1) Подготовительный этап
Если в вашей учетной записи запущено несколько приложений, вам нужно будет немного почистить ваш аккаунт, чтобы убедиться, что у вас достаточно квоты, чтобы попробовать варианты масштабирования. Оставьте только один экземпляр приложения «Product List» в вашей учетной записи, остальные удалите.
Для этого выполните следующие шаги:
Откройте командную строку и введите команду cf apps, чтобы увидеть список приложений, запущенных в вашей учетной записи.
Если в списке окажется больше одного запущенного приложения «Product List», остановить их, оставив только одно такое приложение, чтобы освободить память для выполнения упражнений по масштабированию. Для этого используйте следующую команду для каждого запущенного приложения, которое вы хотите остановить:
cf stop APP_NAME
Примечание: Прежде чем продолжить следующие упражнения, убедитесь, что в вашей учетной записи запущен один экземпляр приложения «Product List». В том случае, если нет ни одного экземпляра, вы можете клонировать шаблон приложения из Github и затем переместить проект в облако с помощью CF CLI (эти процессы рассмотрены во втором и третьем упражнениях статьи).
2) Вертикальное масштабирование
Вертикальное масштабирование приложения меняет ограничение на дисковое пространство или ограничение памяти, которое Cloud Foundry применяется ко всем экземплярам приложения. Существует два способа вертикального масштабирования приложения: с помощью CF CLI или через панель управления в SAP Cloud Platform. Рассмотрим оба способа.
CF CLI
Используйте команду cf scale APP_NAME -k DISK для изменения ограничения на дисковое пространство, применяемого ко всем экземплярам вашего приложения. DISK – целое число, после которого необходимо указать M для мегабайт или G для гигабайт.
Используйте команду cf scale APP_NAME -m MEMORY для изменения ограничения памяти, применяемого ко всем экземплярам вашего приложения. MEMORY — целое число, после которого необходимо указать M для мегабайт или G для гигабайт.
Предположим, мы хотим уменьшить масштаб приложения и сделать его более компактным, установив ограничение памяти до 712 МБ. Для этого необходимо ввести следующую команду:
cf scale APP_NAME -m 712M
Выполнение этой команды в CF CLI приведет к перезапуску приложения (вы должны подтвердить перезапуск приложения с помощью ввода «Yes» в консоли). Как только приложение будет перезапущено, вы можете перейти в панель управления в SAP Cloud Platform, открыть приложение «Product List», чтобы убедиться, что теперь оно использует 712 МБ памяти. Вы можете также можете просмотреть информацию о приложении через консоль с помощью команды:
cf app APP-NAME
Панель управления SAP Cloud Platform
Ту же операцию вертикального масштабирования можно выполнить через панель управления.
Для этого перейдите к списку приложений в вашем пространстве (вкладка «Applications») и выберете запущенное приложение (щелкните по имени приложения). Затем в меню слева выберете вкладку «Overview». В открывшемся окне найдите секцию, которая содержит информацию о квоте, здесь вы увидите квоту памяти и дисковые квоты для вашего приложения. Вы можете изменить их, нажав кнопку «Change Quota».
Нажмите на кнопку «Change Quota» и в открывшемся окне уменьшите квоту памяти на диске, установив, например, 512 МБ. Нажмите кнопку «Save».
Вы можете проверить, изменилось ли используемое приложением пространство диска, в секции с информацией о квоте во вкладке «Overview» приложения.
Если изменения не вступили в силу, вам понадобится вручную перезапустить приложение. Вы можете сделать это с помощью кнопки «Restart».
3) Горизонтальное масштабирование
Горизонтальное масштабирование приложения создает или удаляет экземпляры приложения. Входящие запросы приложения автоматически регулируются по нагрузке во всех экземплярах приложения, и каждый экземпляр обрабатывает задачи параллельно с другими экземплярами. Добавление экземпляров позволяет вашему приложению обрабатывать большее количество трафика и запросов. Существует два способа вертикального масштабирования приложения: с помощью CF CLI или через панель управления в SAP Cloud Platform. Рассмотрим оба способа.
CF CLI
Используйте команду cf scale APP_NAME -i INSTANCES для горизонтального масштабирования вашего приложения. Это приведет к увеличению или уменьшению количества экземпляров вашего приложения в соответствии со значением INSTANCES.
К примеру, мы можем горизонтально масштабировать приложение, увеличив число экземпляров приложения до двух, с помощью команды cf scale APP_NAME -i 2.
Используя команду для отображения информации о приложении, вы увидите, что один экземпляр работает, а другой запущен. Для этого введите команду cf app APP_NAME.
Панель управления SAP Cloud Platform
Вы также можете проводить горизонтальное масштабирование через панель управления. Перейдите к приложению через панель управления. В разделе экземпляров, который можно найти, нажав вкладку «Overview» в меню слева, вы должны увидеть два работающих экземпляра, т.к. мы только что увеличили их количество. В верхней части находятся кнопки «+ Instance» и «- Instance». Нажав на кнопку «- Instance», вы остановите один из работающих экземпляров приложения.
4) Автоматическое масштабирование
Мы рассмотрели ручной способ масштабирования приложения, используя команду cf scale в командной строке и панель управления SAP Cloud Platform. Недостатком этого способа является то, что вы обычно выполняете эти действия только в том случае, если замечаете, что производительность вашего приложения ухудшилась. Существует риск, что ваше приложение выйдет из строя, если масштабирование не будет выполнено в соответствующее время. Поэтому иногда лучше иметь возможность автоматического масштабирования, что позволит предотвратить сбои приложения.
Рассмотрим, как осуществить возможность автоматического масштабирования приложения на основе пользовательских политик масштабирования для удовлетворения изменений в трафике или в запросах с помощью службы Application Autoscaler платформы SAP Cloud Platform.
Создание нагрузки на приложение
Мы рассмотрим автоматическое масштабирование, основанное на увеличении использования памяти. Для этого подготовим симуляцию процесса, увеличивающего использование памяти в приложении «Product List».
Перейдите к классу Controller приложения в Eclipse и добавьте следующую конечную точку API.
@GetMapping("/scaleup")
public String scaleUp() {
String str = "";
HashMap<String, Double> h = null;
for (int i = 0; i < 100000; i++) {
h = new HashMap<>();
String key = new String(«key»);
Double value = new Double(100.98);
h.put(key, value);
str = str + h.toString();
}
return «success»;
}
Это создаст большое количество нежелательных объектов, что увеличит использование памяти.
В этом же классе добавьте импорт import java.util.HashMap;.
Теперь добавим действие для запуска API, увеличивающего использование памяти.
Перейдите к файлу index.html, расположенного по пути src/main/resources/index.html и добавьте следующий фрагмент под комментарием Insert the code to increase the memory of the application в этом файле:
/* Adding Toolbar to the UI */
var toolBar = new sap.m.Toolbar();
var memButton = new sap.m.Button({
title: «Scale Up»,
press: function (oEvent) {
jQuery.sap.require(«sap.m.MessageBox»);
sap.m.MessageBox.show(
«This will scale up the memory of the application», {
icon: sap.m.MessageBox.Icon.INFORMATION,
title: «ScaleUp Application»,
actions: [sap.m.MessageBox.Action.OK],
onClose: function(oAction) {
var oScaleModel = new sap.ui.model.json.JSONModel();
var scaleUpUrl = document.URL + «scaleup»;
oScaleModel.loadData(scaleUpUrl);
console.log(scaleUpUrl);
}
}
);
}
});
memButton.setText(«Scale Up»);
toolBar.addContent(memButton);
productList.setHeaderToolbar(toolBar);
Сохраните изменения в проекте. Теперь вам нужно пересобрать проект и загрузить его в облако:
- Нажмите правой кнопкой мыши на проект, в появившемся меню выберите Run As… -> Maven Build.
- После успешной сборки проекта вам необходимо будет переустановить приложение в Cloud Foundry.
- После того, как приложение запустится в пробной учетной записи в Cloud Foundry, перейдите в панель управления в SAP Cloud Platform, вызовите приложения «product-list» через URL.
- В приложении должна появится кнопка «Scale Up». Пока что не нажимайте на неё.
- Проверьте использование памяти приложением, используя команду cf app <app_name> (или через панель управления SAP Cloud Platform во вкладке «Overview» приложения).
- Теперь нажмите на кнопку «Scale Up» в приложении, открытом в браузере.
- Повторно проверьте использование памяти спустя несколько секунд с помощью команды cf app <app_name> (или через панель управления SAP Cloud Platform во вкладке «Overview» приложения).
Использование памяти должно резко увеличиться.
Теперь, когда мы подготовили наше приложение, давайте рассмотрим, как воспользоваться службой Application Autoscaler для автоматического масштабирования приложения, когда использование памяти увеличивается и выходит за рамки.
1) Создание экземпляра службы и определение правил масштабирования
Создать экземпляр службы и определить правила масштабирования можно не только через CF CLI, но и с помощью панели управления SAP Cloud Platform. Давайте воспользуемся панелью управления.
Перейдите в свою пробную учетную запись, выбрав то пространство, в котором запущено приложение «Product List» (обычно это «dev»). Нажмите на вкладку «Services» в меню слева и в выпавшем списке выберете «Service Marketplace». В открывшемся окне вы должны увидеть сервис Application Autoscaler. Нажмите на этот сервис.
В открывшемся окне в меню слева выберете вкладку «Instances» и нажмите на кнопку «New Instance».
Появится окно создания экземпляра.
На первом этапе вам нужно выбрать план обслуживания. Для пробных учетных записей доступна только план «Lite», поэтому просто нажмите кнопку «Next».
Следующий шаг вы можете пропустить, так как вы можете указать параметры во время приложения. Поэтому нажмите кнопку «Next».
Следующий шаг вы также можете пропустить, нажмите на кнопку «Next».
В качестве последнего шага укажите имя экземпляра службы, например, «myautoscaler». Нажмите кнопку «Finish».
В результате будет создан экземпляр службы Application Autoscaler.
2) Привязка приложения к экземпляру службы
После создания экземпляра службы вы снова попадете во вкладку с экземплярами службы «Application Autoscaler». Нажмите на экземпляр, который вы только что создали:
В открывшемся окне с информацией об этом экземпляре, нажмите на кнопку «Bind Instance».
Откроется окно создания привязки службы. Выберете приложение «product-list» в списке приложений.
Затем вы должны указать параметры масштабирования. Правила масштабирования экземпляра приложения определяются в формате JSON. Обычно вы создаете файл JSON и предоставляете его в качестве конфигурации. Для нашего примера вы можете скопировать и вставить фрагмент, представленный ниже:
{
«instance_min_count»: 1,
«instance_max_count»: 3,
«scaling_rules»: [
{
«metric_type»: «memoryused»,
«stat_window_secs»: 60,
«breach_duration_secs»: 60,
«threshold»: 400,
«operator»: ">=",
«cool_down_secs»: 60,
«adjustment»: "+1"
}
]
}
Служба увеличит экземпляр на 1 [adjustment: +1], когда память будет превышать пороговое значение. Вы можете отрегулировать значения в соответствии с требованиями вашего приложения. Аналогичным образом вы можете добавить любое другое правило масштабирования. Например, для уменьшения масштаба, когда использование памяти падает ниже определенного порогового значения.
В том же окне создания привязки поставьте галочку рядом с «Specify Parameters», появится поле, куда можно будет вставить данный фрагмент. Вставьте фрагмент кода и нажмите «Save».
Теперь давайте посмотрим, как сервис «Application Autoscaler» помогает приложению масштабироваться автоматически на основе его показателей.
1) Перезагрузите приложение, чтобы изменения вступили в силу (для этого переместитесь в панель управления, на вкладке «Applications» выберете приложение «Product List», затем нажмите «Overview» и в открывшемся окне нажмите «Restart»);
2) Запустите приложение в браузере, нажав на URL-адрес приложения;
3) Проверьте использование памяти приложения с помощью команды cf app <app_name> в CF CLI, или используя панель управления SAP Cloud Platform (информацию можно найти на вкладке «Overview»);
4) Теперь нажмите на кнопку «Scale Up» в приложении, открытом в браузере;
5) Снова проверьте память приложения через несколько секунд с помощью команды cf app <app_name> в CF CLI, или используя панель управления в SAP Cloud Platform (информацию можно найти на вкладке «Overview»);
6) Использование памяти должно увеличиться до такого значения, которое будет выше порогового значения, определенного в политике масштабирования (это значение вы указывали ранее в параметрах привязки в поле threshold). Если этого не произошло, повторите шаги 3 и 4.
7) Когда использование памяти превысит пороговое значение (threshold), а значение времени будет превышать значение breach_duration_secs, указанное в политике масштабирования, сервис «Application Autoscaler» увеличит экземпляр приложения на 1.
8) Проверьте количество экземпляров приложения с помощью команды cf app <app_name> в CF CLI, или используя панель управления в SAP Cloud Platform (информацию можно найти на вкладке «Overview»).
Заключение
Итак, среда Cloud Foundry на базе платформы SAP Cloud Platform является отличным решением для тех, кто хочет быстро и без особых затруднений разработать облачное приложение и добавить в него возможности мониторинга, масштабирования и обновления.
В ходе данной мы рассказали о следующих этапах по работе с Cloud Foundry на SAP Cloud Platform:
- Получение доступа к пробной учетной записи SAP Cloud Platform для среды Cloud Foundry;
- Улучшение приложения с помощью дополнительных функций и базовыех концепций Cloud Foundry, таких как сторонние службы;
- Работа с пробной учетной записью в среде Cloud Foundry и с приложением через SAP Cloud Platform и интерфейс командной строки Cloud Foundry (CF CLI);
- Использование платформ приложений, таких как Spring и Spring Boot для эффективного создания приложений;
- Осуществление контроля, масштабирования и обновления вашего приложения.
Автор: SAP