Содержание


Golang-фотоархив в облаке

Использование языка Go для создания приложения, размещенного в Bluemix, которое использует Object Storage v2 при поддержке общедоступного облака IBM

Comments

Язык программирования с открытым исходным кодом Go (golang) обеспечивает простоту, универсальность и высокую производительность труда разработчика. Он становится фаворитом современных разработчиков благодаря простой для понимания модели параллелизма, способности взаимодействовать с низкоуровневыми модулями на языке C, широкой поддержке целевых платформ, скромным требованиям к памяти и компактным двоичным файлам, а также способности производить автономный исполняемый код без зависимостей. IBM Bluemix - это превосходная облачная платформа для развертывания golang-приложений, которая позволяет повысить их надежность и доступность и достичь намеченных целей масштабируемости.

Служба Bluemix Object Storage (v2) - это универсальное и масштабируемое решение для хранения данных. Object Storage v2 может добавить надежное, масштабируемое хранилище объектов к любому приложению, размещенному в Bluemix или в другом месте. Его независимые экземпляры можно настроить на поддержку общедоступного облака IBM или интеграцию с частным облаком своего предприятия. Служба Object Storage v2, основанная на OpenStack Swift, использует механизм проверки подлинности OpenStack Keystone. Приложения, написанные на golang, могут легко взаимодействовать с Object Storage v2 с помощью зрелых, проверенных библиотек с открытым исходным кодом.

В этом руководстве представлено приложение для архивирования и хранения фотографий, написанное на golang и развернутое в Bluemix при поддержке Object Storage v2. Читатель узнает:

  • как развернуть golang-приложение в Bluemix,
  • создать несвязанный экземпляр Object Storage v2 и управлять им с панели управления IBM Cloud Management (реализация проекта информационной панели OpenStack Horizon),
  • обращаться к экземпляру Object Storage v2 через библиотеку с открытым исходным кодом в golang-приложении,
  • построить пример фотоархива и отобразить веб-приложение с хранилищем фотографий, опираясь на Object Storage v2.

Bluemix - это превосходная облачная платформа для развертывания golang-приложений, которая позволяет повысить их надежность и доступность и достичь намеченных целей масштабируемости.

Что для этого нужно

  • Учетная запись Bluemix
  • Следующее программное обеспечение, установленное и работающее на локальной системе:
    • среда разработки golang,
    • инструмент управления зависимостями godep,
    • интерфейс командной строки Cloud Foundry для Bluemix 6.10 или более поздней версии,
    • клиент командной строки git.

Многие из процедур этого руководства можно выполнять с панели управления Bluemix. Однако везде, где это возможно, я буду говорить об использовании клиента командной строки cf. Клиент командной строки имеет преимущество поддержки сценариев, и его можно интегрировать в процессы автоматизированной разработки и развертывания.

Запустить приложениеПолучить код

Приложение фотоархива на языке gophoto

Вот как выглядит gophoto-приложение при запуске в браузере мобильного устройства.

gophoto на смартфоне
gophoto на смартфоне

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

Шаг 1. Создание автономного экземпляра Object Storage v2

Экземпляры Object Storage v2 (как и экземпляры Object Storage v1) можно привязать к Bluemix-приложению. Однако автономные экземпляры Object Storage v2 более универсальны, так как они также доступны из других приложений, инструментов и панелей управления.

  1. Войдите в Bluemix из интерфейса командной строки Cloud Foundry:

    cf login

  2. Создайте автономный экземпляр Object Storage v2, используя любое имя:

    cf create-service "Object Storage" Free instance_name

  3. Убедитесь, что автономный экземпляр Object Storage v2 работает, получив перечень служб, связанных с вашей учетной записью Bluemix:

    cf services

Шаг 2. Получение реквизитов доступа к экземпляру Object Storage v2

Чтобы получить реквизиты доступа к автономному экземпляру Object Storage v2, нужно использовать панель Bluemix.

  1. Войдите в Bluemix через браузер.
  2. На панели управления найдите и выберите созданный вами экземпляр Object Storage.
  3. Нажмите кнопку Show CredentialsСкриншот экземпляра службы Object Storage в Bluemix
    Скриншот экземпляра службы Object Storage в Bluemix
  4. Скопируйте и сохраните JSON-структуру, подобную следующему примеру:
    { 
      "CloudIntegration": { 
        "auth_url": "https://keystone2.open.ibmcloud.com" 
        "swift_url": "https://swift2.open.ibmcloud.com/v1/AUTH_axxxxx" 
        "sdk_auth_url": "https://keystone2.open.ibmcloud.com" 
        "project": "xxx-xx-xxx-xxxx-xxxxx", 
        "region": "dal09", 
        "credentials": { 
          "userid": "westmakaha@yahoo.com", 
          "password": "xxxxxxxxxxxxx" 
        } 
      } 
    }
  5. Запомните значения userid и password, которые понадобятся на следующем шаге.

Шаг 3. Доступ к экземпляру Object Storage v2 через Cloud Management Dashboard

  1. Откройте Cloud Management Dashboard в браузере.
  2. Войдите с именем пользователя и паролем из реквизитов, полученных на шаге 2.
  3. Выберите пункт меню Object Store -> Containers в левой части страницы Containers, где можно добавлять и удалять контейнеры, а также скачивать и загружать объекты.
  4. Создайте контейнер с именем myphotos. Здесь ваше приложение будет хранить загруженные фотографии.

Шаг 4. Получение исходного кода приложения gophoto

  1. Убедитесь, что у вас настроена переменная GOPATH.
  2. Выполните следующую команду, чтобы проверить исходный код и поместить его в подкаталог src/github.com/Sing-Li/gophoto согласно переменной GOPATH:

    go get github.com/Sing-Li/gophoto

    Иначе, можно проверить код непосредственно с помощью git:

    git clone https://github.com/Sing-Li/gophoto.git

Шаг 5. Развертывание приложения в Bluemix

  1. Перейдите в каталог gophoto и выполните следующую команду:

    godep save

    Эта команда создает подкаталог Godeps и каталог _workspace, содержащий весь исходный код сторонней библиотеки.
  2. Чтобы развернуть приложение в Bluemix, перейдите в каталог gophoto и выполните следующую команду:

    cf push your app name

    Bluemix обнаружит исходный код golang (файлы .go) и автоматически использует buildpack-пакет Bluemix golang.

Шаг 6. Копирование в приложение реквизитов доступа к Object Storage v2

Чтобы приложение могло использовать экземпляр Object Storage v2 для архивирования фотографий, нужно скопировать в приложение реквизиты доступа. Это можно сделать, настроив в приложении gophoto переменную среды V2CREDS.

  1. Выполните следующую команду, чтобы настроить V2CREDS для всей JSON-структуры, полученной на шаге 2:

    cf set-env your app name V2CREDS "{ JSON structure from Step 2 }"

    Важное замечание. В JSON-структуре необходимо добавить символ \, чтобы избежать двойных кавычек, например, так:

    cf set-env your app name V2CREDS "{ \"CloudIntegration\" : { \"auth_url\" : \"https://keystone2.open.ibmcloud.com\" ... }}"

  2. Обновите приложение:

    cf restage

  3. После обновления обратитесь к приложению по его URL-адресу: http://имя вашего приложения.mybluemix.net/
  4. Попробуйте загрузить фотографию в формате JPG. Сразу после загрузки вы сможете просматривать фотографии в своем приложении.

Шаг 7. Управление контейнерами и переданными объектами с помощью Cloud Management Dashboard

Снова зайдите на сайт Cloud Management Dashboard и войдите. Вы увидите свои фотографии как объекты в контейнере myphotos, созданном на шаге 3. Можно удалить любые объекты или контейнеры или создать новые контейнеры и перемещать объекты между ними.

Здесь представлена панель управления с шестью загруженными фотографиями.

Сведения о контейнерах в окне Cloud Management Dashboard
Сведения о контейнерах в окне Cloud Management Dashboard

Шаг 8. Исследование исходного кода (необязательно)

Тем, кто захочет исследовать исходный код gophoto, будут полезны следующие моменты. Перед началом работы с кодом убедитесь, что у вас есть переменная GOPATH и код организации, соответствующий стандарту разработки Go.

Martini

Для реализации веб-приложения gophoto используется платформа веб-сервисов/приложений Martini. Она позволяет соединять URL-маршруты веб-приложений с кодом обработчика golang.

В коде gophoto обрабатываются три маршрута:

  • / - приложение для просмотра фотографий gophoto;
  • /upload - форма окна, в котором пользователь может выбрать фотографии для загрузки;
  • /up - обработчик загрузки, поддерживающий загрузку файлов в HTML на основе форм. Этот маршрут направляет загруженный файл в Object Storage v2 и возвращает запрос по маршруту /route.

Библиотека ncw/swift

Приложение gophoto обращается к Object Storage v2 через библиотеку с открытым исходным кодом ncw/swift Ника Крейг-Вуда. Для Object Storage v2 требуется специальная схема проверки подлинности на основе OpenStack Keystone. Соединение в библиотеке ncw/swift означает не установление соединения на основе TCP, а структуру данных, в которой хранится аутентифицированный маркер доступа и URL-адрес хранения. Приложение gophoto использует эту структуру и сначала создает в коде аутентифицированное соединение с именем c, а затем использует его для всех операций доступа swift в пределах приложения.

Пользовательский интерфейс

Пользовательский интерфейс gophoto создается с помощью библиотеки JavaScript JQuery Mobile. Пользовательские интерфейсы на основе JQuery Mobile оптимизированы для сенсорного экрана и готовы к работе на современных мобильных устройствах. Для поддержки функции смахивания используется компонент карусели изображений jQuery Scooch из библиотеки с открытым исходным кодом Mobify.

Для обнаружения мобильных и планшетных браузеров в коде используется сценарий с открытым исходным кодом detectmobilebrowser.js. Если мобильный браузер не обнаружен, приложение отображает ссылки Previous и Next в верхней строке. В мобильных браузерах эти ссылки не отображаются, а фотографии можно просматривать с помощью жеста смахивания.

В файле layout.tmpl вы увидите функцию JavaScript barclicked(). Она изменяет поведение кнопки-гамбургера в верхнем левом углу экрана, чтобы пользователи могли переключаться между загрузкой и отображением фотографий.

Заключение

Развертывание golang-приложений Bluemix - простой процесс, который можно полностью осуществлять с помощью клиента командной строки с поддержкой сценариев Cloud Foundry. Bluemix Object Storage v2 - это универсальная служба хранения, поддерживаемая частным или общественным облаком, которой можно управлять через веб-интерфейс. Object Storage v2 можно легко интегрировать с любым golang-приложением (размещенном в Bluemix или в другом месте) посредством готовых библиотек с открытым исходным кодом Swift.

Примеру приложения gophoto недостает некоторых функций, необходимых производственным приложениям. Ниже перечислены несколько идей по его расширению, которые можно воплотить в жизнь.

  • Внедрение системы управления учетными записями и проверки подлинности пользователей, чтобы несколько пользователей могли архивировать свои фотографии в gophoto.
  • Более эффективное хранение фотографий. Gophoto загружает файлы JPG как есть. Для более эффективной работы большие файлы нужно переформатировать, и может понадобиться хранить изображения разного размера.
  • Предоставьте пользователям возможность добавлять к фотографиям метаданные для поиска с помощью фильтра или по тегам.
  • Повысьте эффективность переключения между загрузкой и галереей. В настоящее время шаблон Martini во время такого переключения восстанавливает всю страницу. Можно написать код JavaScript, чтобы выполнять переключение целиком в jQuery Mobile.
  • Добавьте выбор и загрузку нескольких файлов для упрощения процесса загрузки большого количества фотографий.
  • Поддержка других форматов изображений (PNG, GIF и т.д.) и других типов медиа (например, видео).

Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Облачные вычисления, Open source, Web-архитектура
ArticleID=1029849
ArticleTitle=Golang-фотоархив в облаке
publish-date=04112016