В ActiveState мы понимаем, что приложения часто нуждаются в услугах передачи данных для улучшения взаимодействия с пользователем. Вот почему Stackato включает в себя набор системных служб, таких как MySQL , PostgreSQL , RabbitMQ и многие другие. Но бывают случаи, когда необходимы услуги помимо этих. Это где сервисные брокеры служат своей цели. В этом посте демонстрируется использование Brooklyn Service Broker для того, чтобы сделать один из широкого спектра чертежей Apache Brooklyn доступным для Stackato в качестве службы.
Также следует отметить, что было предложено включить сервисный брокер Apache Brooklyn (и плагин CLI) в инкубатор Cloud Foundry. Поэтому не забудьте внимательно следить за тем, как этот проект вскоре может сыграть важную роль в сфере услуг Cloud Foundry.
Апач Бруклин
Apache Brooklyn — это платформа для предоставления, управления и мониторинга приложений. Приложения развертываются с использованием чертежей, которые позволяют развертывать в один клик через графический интерфейс или API REST для облачных и не облачных решений.
Бруклинские чертежи
Бруклинский проект — это документ YAML, написанный с декларативным синтаксисом и обеспечивающий поддержку плагинов JVM. План описывает, среди прочего, где развернуть приложение и с какими сервисами приложение будет взаимодействовать. Чертежи могут состоять из одного процесса или комбинации процессов. Эти процессы могут быть любыми: от простого сервера веб-приложений с файлом WAR до кластера серверов приложений J2EE, подключенного к кластеру серверов баз данных SQL. Ссылка на чертежи YAML приведена здесь .
Каталоги
Бруклин предлагает каталог , сформированный постоянным набором версионных чертежей. Элементы из каталога могут быть развернуты напрямую или использованы в других чертежах. Каталог определяется с использованием той же структуры YAML, что и план с дополнительным ключом brooklyn.catalog. Описания чертежей полей, связанных с каталогом, можно найти здесь . Каталог Бруклина начинается с обширного списка предметов и может быть расширен путем добавления ваших собственных чертежей в каталог.
Сервисные брокеры
Сервисный брокер — это мост, который соединяет внешнюю службу со средой Cloud Foundry , в данном случае с Stackato. После подключения служба становится доступной для использования точно так же, как системная служба. Обычно для службы, которая должна быть доступна для экосистемы, основанной на Cloud Foundry, потребуется собственная реализация брокера пользовательских служб. Благодаря сочетанию дизайна Бруклина и возможностей Brooklyn Service Broker, можно сделать доступным полный спектр чертежей Brooklyn, не требуя специального брокера для каждой службы.
Интеграция Stackato
Существуют определенные требования, которые необходимо загрузить и / или установить, чтобы эти службы с поддержкой Apache Brooklyn были созданы и доступны для Stackato.
- Java Development Kit 8
- Gradle 2.2 или новее
- специалист
- Апач Бруклин
- Бруклин Сервис Брокер
- Amazon Web Services (AWS) счет — это не является обязательным, но этот пример развертывания приложений БПО AWS
Установка JDK 8
Для установки JDK 8 следуйте этим инструкциям . Установка с использованием этих инструкций не приведет к установке или обновлению переменной среды JAVA_HOME для ссылки на установку JDK 8, которая потребуется при сборке компонента Service Broker с использованием Gradle. Чтобы установить переменную среды JAVA_HOME, добавьте следующее в ~ / .bash_profile:
export JAVA_HOME=/path/to/jdk8
Также можно указать каталог установки JDK напрямую, не используя переменную среды JAVA_HOME. Это делается путем создания файла gradle.properties в корневом каталоге компонента Service Broker, содержащего:
org.gradle.java.home=/path/to/jdk8
Установка Gradle
Выполните следующие действия для установки Gradle, который будет использоваться для создания проекта компонента Service Broker.
Установка и запуск Apache Brooklyn
При загрузке Apache Brooklyn извлекайте файлы из Github, а не с зеркальных сайтов, как указано здесь . Как уже отмечалось здесь , это необходимо , потому что Brooklyn Service Broker имеет зависимость от клиента библиотеки Бруклина, который доступен только в версии снимка с Github. На этапе установки Maven будут собраны необходимые компоненты для запуска сервера Apache Brooklyn, а в локальный репозиторий Maven будет установлена зависимость клиентской библиотеки, необходимая для сборки посредника. После того, как проект построен, Бруклинский сервер может быть запущен. В этом примере сервер Brooklyn будет работать на локальном хосте, а приложение с планом Brooklyn (сервис для Stackato) будет развернуто на AWS.
Чтобы указать учетные данные для доступа к AWS, создайте файл brooklyn.properties со свойствами ниже в качестве содержимого. Это создаст именованное местоположение , где имя местоположения будет также служить именем плана сервиса в Stackato. В Бруклине местоположения используются для указания того, где будут развернуты приложения, и включают выбор локального хоста, серверов с фиксированным IP-адресом и различных облаков.
// Create a named location called aws-oregon brooklyn.location.named.aws-oregon:us-west-2 brooklyn.location.named.aws-oregon.identity = AWS_ACCESS_KEY brooklyn.location.named.aws-oregon.credential = AWS_SECRET_KEY
Теперь можно построить проект и запустить Бруклинский сервер.
cd ~/example git clone https://github.com/apache/incubator-brooklyn cd incubator-brooklyn // Build the project, this step will take a bit of time, even when test are skipped, // so now would be a good time to grab a coffee, or tea if that's your fancy mvn clean install -DskipTests // Start the Brooklyn server usage/dist/target/brooklyn-dist/bin/brooklyn launch --localBrooklynProperties path/to/brooklyn.properties
Сервер Бруклина теперь должен быть доступен по адресу localhost: 8081. Например, сервер Redis будет добавлен в каталог для использования с нашим приложением. Чтобы добавить сервер Redis в каталог, откройте сервер Brooklyn в веб-браузере. Появится диалоговое окно, выберите вкладку «Каталог», нажмите кнопку «Добавить в каталог», выберите «Объект», а затем вставьте следующий текст YAML в текстовую область.
brooklyn.catalog: id: redis version: 1.0 iconUrl: classpath://redis.png description: Redis is an open-source, networked, in-memory, key-value data store with optional durability name: Redis services: - type: brooklyn.entity.basic.BasicApplication brooklyn.children: - type: brooklyn.entity.nosql.redis.RedisStore id: redis name: Redis Server
Установка и запуск Brooklyn Service Broker
Затем загрузите, настройте и разверните Brooklyn Service Broker. Брокер службы также будет развернут на локальном хосте.
cd ~/example git clone https://github.com/cloudfoundry-community/brooklyn-service-broker cd brooklyn-service-broker
Есть некоторые свойства, которые должны быть определены в файле application.properties, прежде чем мы сможем запустить посредник.
brooklyn.uri=127.0.0.1:8081 brooklyn.username=brooklyn-username security.user.name=simple-user security.user.password=simple-password
Свойство brooklyn.username необходимо для запуска посредника, а security.user.name и security.user.password используются для аутентификации посредника.
// Start the broker, available at localhost:8080 gradle clean bootRun // Verify the broker is working. A JSON response containing information about // the Redis server added earlier will be returned // Enter simple-password when prompted for a password curl -u simple-user localhost:8080/v2/catalog
Добавление Apache Brooklyn Services в Stackato
Добавьте сервисного брокера в Stackato, который представит различные чертежи каталога из Бруклина. Сервис под названием «Redis» теперь должен отображаться в списке сервисов, доступных для Stackato. По умолчанию все планы обслуживания являются частными, поэтому они должны быть общедоступными, чтобы организации могли их использовать.
// Add the broker to Stackato stackato create-service-broker --username simple-user --password simple-password --url http://192.168.68.29:8080 brooklyn-service-broker // Verify example catalog 'Redis' is available stackato services // Make service plan public, plan name = aws-oregon stackato update-service-plan --public aws-oregon --vendor Redis
Теперь сервис может быть привязан к приложениям. В Stackato некоторым сервисам присваивается переменная окружения * _URL, содержащая строку соединения uri с сервисом. Например, такие службы, как база данных MySQL или очередь сообщений RabbitMQ, будут иметь переменную среды MYSQL_URL и RABBITMQ_URL соответственно. Удобство такой переменной среды недоступно для сервисов, предоставляемых через брокера сервисов. Вместо этого нужно будет проанализировать переменную среды VCAP_SERVICES, чтобы получить учетные данные для установления соединения со службой.
Когда stackato создает сервис, Brooklyn предоставит экземпляр AWS Elastic Computer Cloud с Redis в регионе Орегон (определенный ранее с помощью файла brooklyn.properties). Для запуска экземпляра потребуется несколько минут, прежде чем он будет готов.
В этом примере служба будет привязана к развернутому экземпляру приложения Python Currency Converter .
// Deploy the Currency Converter app git clone https://github.com/Stackato-Apps/bottle-currency cd ~/bottle-currency git checkout brooklyn-example stackato push -n --no-start // Create and bind the Brooklyn-enabled Redis Server to the Currency Converter app stackato create-service Redis --plan aws-oregon bottle-currency-db bottle-currency
Мы также можем использовать Redis-Cli для прямого подключения к нашему серверу Redis, чтобы убедиться, что все работает.
// Connect to the Redis server redis-cli -h host.address -p redis.port // Connection is established > keys * 1) "CADUSD" > get CADUSD "0.79475461951123"
Ниже приведен фрагмент файла wsgi.py из нашего примера приложения-конвертера валют, адаптированного для сервера Redis с включенным Бруклином.
vcap_services = json.loads(os.getenv('VCAP_SERVICES')) ... credentials = vcap_services['Redis'][0]['credentials']['Redis Server'] host = credentials['host.address'] port = credentials['redis.port'] rdb = Redis(host=host, port=port)
Вывод
Интересуетесь возможностями Apache Brooklyn на Stackato? Загрузите Stackato Micro Cloud или зарегистрируйтесь на 20 ГБ лицензии и попробуйте сами.
Информация в этом блоге была основана на «Интеграции Cloud Foundry с Apache Brooklyn Part 1: Service Broker» Роберта Мосса