З телефону в хмари: Microsoft Mobile Services. З чого почати?


Автор: Анастасія Бєлокурова, .NET Developer DataArt.

Я розповім, як і навіщо використовувати хмарну систему Microsoft Mobile Services для ваших мобільних додатків. Для цього ми розберемо невеликий додаток, на прикладі якого побачимо, як це все працює, торкнемося і практику і теорію.

Але перед цим давайте згадаємо, які переваги хмарних технологій і яке відношення ці технології мають до мобільних пристроїв.

Переваги хмарних технологій
Термін «хмарні обчислення» з'явився досить давно, але його значення дещо змінювалося. Спочатку хмарними обчисленнями називали просто розподілені обчислення. Але зараз хмарна платформа — великий набір зручних сервісів, які ви можете використовувати для вирішення своїх завдань.

Отже, чому ж хмари? Вони надають наступні переваги вашого додатком:
  • Масштабованість.
  • Надійність.
  • Великий вибір сервісів.


Уявіть, що ви запускаєте невеликий інтернет-магазин — спочатку просто хочете перевірити, чи буде він взагалі затребуваний. Бюджет у вас невеликий. Тому ви пишете невелике веб-додаток і розміщуєте його на своєму комп'ютері, який не вимикаєте на ніч. До вашого сайту є доступ ззовні, і він може витримати, припустимо, 10 користувачів одночасно. З часом ваш сайт стає популярним, і вам вже потрібно, щоб він витримував 100 користувачів одночасно. Але комп'ютер не здатний впоратися з таким навантаженням. І тут ви починаєте думати, не перетворити мені мою квартиру в серверну?.. Ні, це жахливо незручно! Тоді ви купуєте сервера, що надаються хостингом. Тепер ваш сайт підтримує 100 запитів в хвилину і навіть тисячу. Нарешті в якийсь момент ви розумієте, що виходите на глобальний ринок, тому що у вас дуже багато користувачів, цілодобово, і сервери, які ви купили, вже не справляються.

Тут ми підходимо до першого переваги хмарних платформ — вони надають масштабованість практично все практично в будь-який момент часу. І це робиться дуже просто, швидко та зручно: вам залишається думати тільки про розробку, а не про розміщення і навантаженні. Це перша перевага.

Друга. Припустимо, у вас успішний проект з безліччю відвідувачів і користувачів, розміщений на серверах. І тут на ваші сервери падає метеорит або ще що-небудь таке відбувається. А на них зберігалися взагалі всі дані вашого проекту… Між тим, велика частина хмарних платформ підтримує реплікацію: ви вибираєте регіон, в якому буде розміщуватися додаток, але при цьому воно автоматично буде дублюватися на серверах в якомусь іншому регіоні. Тому хмарні провайдери завжди надійно зберігають ваші дані: вони обіцяють, що у форс-мажорних ситуаціях вони будуть відновлені хвилин за 20. Такий надійного захисту даних, ви ніколи не досягнете, якщо будете зберігати свої дані в одному місці.

Третє, теж дуже важлива перевага: зараз велика частина провайдерів хмарних надає безліч сервісів — велосипедів, якими можна користуватися. Це код, який ми можемо використовувати в кожному проекті. Тому ми можемо не писати кожного разу один і той же код, не будувати одну і ту ж архітектуру — багато що з цього нам надається. Ми можемо скористатися цим і думати тільки про те специфічне, що потрібно для конкретного проекту.

Мобільні пристрої і хмарні технології
Мобільні пристрої пов'язані з хмарами?

Багато мобільні додатки працюють тільки з підключеним інтернетом. Тому вони можуть використовувати логіку, яка знаходиться не на телефоні, а розміщений десь на серверах — це дозволяє економити ресурси пристрою.

Варто відзначити, що зараз спостерігається тенденція до зростання використання мобільних пристроїв в повсякденному житті — у однієї людини може бути навіть кілька таких пристроїв. І, звичайно ж, зручно, якщо дані між усіма цими мобільними пристроями синхронізуються. Якщо всі наші пристрої, наприклад, від Apple — з цим немає жодних проблем. Але що робити, якщо у наших пристроїв різні ОС? Окремо писати програми для кожної ОС? Це незручно! І де зберігати загальні дані? Таким чином, можна виділити наступний список проблем:
  • Необхідний запуск на різних платформах.
  • Незручно писати один додаток для різних платформ.
  • Доступ до даних потрібен з інших додатків.


Хмарні технології допомагають вирішити ці проблеми. Давайте розглянемо рішення на прикладі Microsoft Mobile Services.

Створюємо додаток з допомогою Microsoft Mobile Services
Додаток, який ми розглянемо, — список завдань. Це просте додаток, який ви можете завантажити, зайшовши на Azure Portal. У цій програмі можна створювати завдання, видаляти і перейменовувати. Додаток включає в себе базову функціональність для роботи з сервісами Azure.



Нам потрібно, щоб це додаток працювало на різних пристроях з різними ОС, і щоб всі синхронізувати. Подивимося на прикладі списку завдань, як написати мобільний додаток з використанням Microsoft Mobile Services за допомогою PhoneGap. PhoneGap — фреймворк, який дозволяє писати код один раз, а потім компілювати його для декількох платформ. Іншими словами, вам не потрібно писати нативні програми для кожної ОС.

Крім PhoneGap, для розробки такої програми знадобляться:
  • SQL Azure — база, в якій будуть зберігатися всі ваші дані. Цей сервіс працює незалежно від Mobile Services, але Mobile Services присутня функціональність, яка дозволяє зручніше працювати з SQL Azure.
  • SDK: Android SDK, Visual Studio Express for Windows Phone 8 і/або Xcode — в залежності від того, для якої платформи ви розробляєте. Я вам покажу розробку на Visual Studio.


Щоб вирішити поставлені перед нами завдання, потрібно створити сервіс Microsoft Mobile. Для цього нам потрібно зайти на Azure Portal, і натиснути «створити мобільний сервіс» (compute>mobile service>create):



Що важливо в мобільному сервісі? Його URL, база даних, з якою він буде працювати (без неї мобільний сервіс ми створити не можемо), регіон (місце, де будуть розміщені ваші дані) та мова, на якій ви будете писати сервісну логіку. Я, наприклад, обрала Node.js для цього програми (можна також вибрати .NET).





Після створення сервісу ви заходьте на портал:



Тут ви бачите ваш сервіс. Заходите в нього, бачите наступну «стартову сторінку:



Тут можна вибрати одну з платформ, яку ви будете використовувати для подання (UI) вашого додатка. Тобто наступним кроком ви будете завантажувати вже готовий проект з усіма потрібними підключеними бібліотеками на потрібному мовою, з якими ви будете далі працювати.

Звичайно, можна створювати оточення в інших середовищах, можна писати взагалі з нуля, але зручніше буде завантажити звідси. Тут можна завантажити рідні додатки для Android, iOS або Windows, або просто HTML-додаток. Xamarin і PhoneGap — фреймворки, що надають можливість кроссплатформної розробки. Вони відрізняються тим, що в Xamarin ви пишете .NET, а в PhoneGap — на JS; а потім ви просто компилируете код і запускаєте додаток на потрібній вам платформі.

Вибравши PhoneGap, ви бачите таку невеличку покрокову інструкцію:



Тут перераховані потрібні інструменти. На другому кроці ви повинні створити таблицю для базової програми — це буде таблиця в базі даних, асоційована з вашим мобільним сервісом. Потім ви завантажуєте додаток і можете ним користуватися. Всі!

Трохи теорії
А тепер я розповім про те, як це все працює.

Будь-яке подібне додаток, що працює з даними, буде мати наступну структуру:



Звичайно, ваш додаток може бути складніше, але воно в будь-якому випадку включає ці частини: подання (єдине, що буде розміщено на пристрої), бази даних, з якою працює додаток) і внутрішню логіку (те, що буде передавати дані з бази поданням). На схемі видно, що за базу даних і внутрішню логіку відповідає Azure. Серверна логіка у вас вже спочатку написана Azure-ви можете її лише трохи видозмінювати у відповідності з вашими потребами.



Що ще надає Azure, крім зберігання даних і логіки?
  • Аутентифікація. Вона здійснюється, в тому числі, за допомогою популярних соцмереж, т. ч. ви не можете писати для неї логіку самі.
  • Сервіс повідомлень (push notifications), який показує користувачеві повідомлення на його мобільному пристрої, якщо він у мережі.
  • Планувальник завдань. Він потрібен, наприклад, щоб ваш додаток, припустимо, раз на тиждень показувало користувачам які-небудь повідомлення (у випадку інтернет-магазину це може бути інформація про знижки).


База даних
Що стосується бази даних, SQL база. Ви можете писати до неї будь-які запити, і там є індексація, яка вам потрібна.

Дуже приємна річ — динамічна схема, яка дозволяє вам не будувати повністю всі таблиці. Припустимо, у вашому додатку передбачені чотири колонки в таблиці, а туди ввели ще якісь дані, для яких вони не передбачені. Нічого страшного — все додасться!

Базою даних легко можна керувати з усіх можливих порталів і додатків, призначених для цього. Це може бути Azure Portal (зчитування та видалення), SQL Portal (Silverlight), SQL Management Studio (Windows) і REST API.

REST API
REST API додається не тільки для роботи з базою даних, але і до сервісу взагалі. Це єдиний механізм взаємодії з сервісами Azure, який є у нашого смартфона. Всі запити будуть йти через HTTP (хоча, треба сказати, зараз вже з'являються мобільні сервіси, що дозволяють працювати офлайн). Запити будуть виглядати так:



Базовий адреса складається з таких елементів: [ваша назва сервісу].azure-mobile.net/tables/[ім'я таблиці].

Колонки в todoitem
Ще трохи поговоримо про бази даних.

У будь-якій таблиці є колонки «id», «створено», «оновлений», «версія» і «вилучений». Ці колонки, за винятком «id», ми не отримуємо з бази даних за замовчуванням, коли отримуємо елемент. Вони використовуються для визначення часу створення і т. д. Головне — пам'ятати, що вони є, і не створювати щось зайве. Також є дві колонки («text» і «complete»), створені з допомогою динамічної схеми.



А ось приклад заповнення таблиці (який тип даних використовується в кожній колонці, ви можете побачити на зображенні вище):




Колонка "_deleted" — реалізація механізму «м'якого видалення». Тобто, коли ви видаляєте якусь запис, ви видаляєте її уявно: вона залишається в таблиці, але користувачі не будуть бачити, а, якщо вона знадобиться, ви зможете швидко відновити. Якщо ж вам все-таки потрібно зовсім видаляти запис при дії видалення, можна написати для цього свою реалізацію — вона пишеться дуже просто. Або ж можна видаляти запис вручну, якщо це який-небудь етап тестування.

Серверна логіка
Для мобільних сервісів підтримуються два серверної мови логіки: .NET Web API і Node.js.



Node.js надає за замовчуванням налаштовані SQL-таблиці. Запити до таблиць приховані — ми не пишемо сам запит.

.NET Web API надає всі можливості, які є при розробці звичайних серверних додатків. Можна навіть підключати NoSQL-бази даних: MongoDB і Table Storage.

Приклад реалізації
Саме зручне, що є в мобільних сервісах — це те, що вам не потрібно ніякого оточення, ніякої середовища, щоб писати внутрішню логіку. Ось, наприклад, скріншот з порталу:



Ви вибираєте таблицю, вибираєте вкладку «script» і бачите готові сценарії для чотирьох операцій: вставки, оновлення, видалення і отримання. За замовчуванням, сценарій зводиться до “request.execute". Тобто ми отримуємо наш item, користувача, що здійснює ці дії, і об'єкт, який відповідає за цей запит. Тут написана логіка для валідації: вона відбувається вже тут, а, якщо не проходить, відправляємо особливий об'єкт «statusCodes» і якесь повідомлення, а «execute» не виконуємо.

І ось я написала на порталі цей код, зберегла його, і моє додаток, що працює через інтернет (я його не перекомпилировала і не змінювала), буде працювати виходячи з цієї нової логіки.

Що ще можна зробити з хмарним сервісом?
Давайте ще раз подивимося на «стартову сторінку нашого сервісу:



Тут є вкладка «Data» — робота з базою даних. Там ви побачите список таблиць і зможете створити нові. У самій таблиці ви побачите дані, які в ній знаходяться. А в розділі «Script» побачите, які зараз є операції для роботи з таблицею.

Наступна вкладка — «API». Ми можемо написати свій API, якщо нам недостатньо простих функцій створення, оновлення та видалення, якщо у нас є, наприклад, якесь складне взаємодія між кількома таблицями.

Є «Scheduler» — планувальник завдань.

«Push» — створення повідомлень.

«Identity» — можна налаштувати механізм аутентифакции в додатку. Всі дані для ідентифікації будуть в об'єкті «user», який ви бачили на скріншоті.

«Scale» — можливості масштабування сервісу: можна змінювати кількість ресурсів, які виділяються під обслуговування ваших сервісів, налаштовувати кількість push-повідомлень і т. д.

Що стосується мов, зараз ви можете писати програми .NET, Node.js, Java, PHP і Python, розміщувати їх в Azure і взаємодіяти з усіма наданими сервісами.

Azure, звичайно, не безкоштовний, однак для учнів існує програма DreamSpark, яка надає багато можливостей безкоштовно. Є також пробна підписка на місяць.

В цілому, працювати з Microsoft Mobile Services дуже зручно і просто: всі зміни вносяться на льоту (принаймні, в разі Node.js) нічого не потрібно перекомпілювати. Код можна швидко змінити з будь-якого пристрою. Це ідеальний варіант для простих додатків і для прототипів. А ось для складних проектів навряд чи підходить — одного разу ми зіткнемося з обмеженнями, які буде досить важко обійти.

Наостанок хочу зазначити, що з моменту написання статті Microsoft Azure встиг представити новий сервіс, Azure Mobile Apps, який в майбутньому призначений замінити Microsoft Mobile Services. Але це — тема наступної статті.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.