Взаимозависимости и package.json



В предыдущем примере наши приложения имели внешние взаимозависимости наподобие модулей express, redis, mongoose и ntwitter. Использование базовых мо­дулей, которые не подключаются к внешним сервисам (например, Express или Twitter), — весьма незамысловатое решение. Поскольку обычно мы не отправляем в облачное хранилище каталог node_modules, нужно просто удостовериться в том, что все взаимозависимости перечислены в файле package.json.

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

var express = require("express"), http = require("http"), app = express(),

port = process.env.PORT || 3000;; http.createServer(app).listen(port); console.log("Express is listening on port " + port); app.getC'/hello", function (req, res) { res.send("Hello, World!");

});

app.get("/goodbye", function (req, res) { res.send("Goodbye World!");

});

Нужно будет включить взаимозависимость с модулем Express в файл package.json, что мы и сделали в предыдущем примере с package.json:

{

"name": "sp_express",

"description": "a sample Express app",

"dependencies": {

"express": "3.4.x”

}

}

Как видите, я указал, что приложение зависит от модуля Express, в частности от всех версий, номер которых начинается с 3.4 (х — подстановочный символ). Таким образом, CLoud Foundry понимает, какую версию нужно установить, чтобы приложение работало корректно. Поскольку взаимозависимости включены в файл package.json, мы можем отправить его в Cloud Foundry с помощью той же самой команды, что и раньше:

vagrant $ ~/app$ cf push --command "node server.js"

Name> sp_expressexample

Сделав это, мы можем зайти на http://sp_expressexample.cfapps.io/hello или http:// sp_expressexample.cfapps.io/goodbye, чтобы увидеть ответ приложения!

Но заставить работать наши приложения Twitter или Amazeriffic несколько сложнее, так как они зависят от других хранилищ данных — в частности, Redis или MongoDB. Это значит, что нужно создать сервисы, а затем заставить приложения их использовать.

Привязка Redis к приложению

Когда мы запускаем приложение на виртуальной машине, такие сервисы, как Redis или MongoDB, работают локально. Но это будет не так, если мы запустим прило­жение из PaaS. Иногда сервисы работают на том же самом хосте, но в некоторых случаях могут запускаться и на другом.

В любом случае начать следует с настройки сервиса, который требуется запу­стить при взаимодействии с cf. В этой секции настроим Redis в Cloud Foundry, а за­тем подключим к нему счетчик твитов.

Начнем с копирования приложения Twitter из главы 7 в папку Chapter8. Убеди­тесь в том, что файл Package .json существует и включает взаимозависимости ntwitter и redis. Мой выглядит вот так:

{

"name": "tweet_counter",

"description": "tweet counter example for learning web app development", "dependencies": {

"ntwitter":"0.5.x",

"redis":"0.9.x"

}

}

Нужно также обновить файл server.js так, чтобы сервер слушал по порту, ука­занному в process.env.PORT. Сделав это, мы можем попробовать развернуть прило­жение! Я так и сделаю (забегая вперед, скажу, что попытка будет неудачной, но даст возможность развернуть сервис Redis):

vagrant $ cf push --command "node server.js"

Name> sp_tweetcounter

Instances> 11: 128M 2: 256M 3: 512M 4: 1G

Memory Limit> 256MCreating sp_tweetcounter... OK 1: sp_tweetcounter 2: none

Subdomain> sp_tweetcounter

1: cfapps.io 2: none

Domain> cfapps.io

Binding sp_tweetcounter.cfapps.io to sp_tweetcounter... OK

Create services for application?> y

1: blazemeter n/a, via blazemeter

2: cleardb n/a, via cleardb

3: cloudamqp n/a, via cloudamqp

4: elephantsql n/a, via elephantsql

5: loadimpact n/a, via loadimpact

6: mongolab n/a, via mongolab 7: newrelic n/a, via newrelic 8: rediscloud n/a, via garantiadata 9: sendgrid n/a, via sendgrid 10: treasuredata n/a, via treasuredata 11: user-provided , via

Обратите внимание: мы сказали Cloud Foundry, что хотим создать сервис для приложения:

What kind?> 8Name?> rediscloud-dfc38

1: 20mb: Lifetime Free Tier Which plan?> 1

Creating service rediscloud-dfc38... OK

Binding rediscloud-dfc38 to sp_tweetcounter... OK

Create another service?> n

Bind other services to application?> n

Save configuration?> n

Закончив диалог, вы обнаружите, что попытка развертывания не удалась. Так случилось потому, что мы еще не указали приложению, как подключиться к вне­шнему сервису Redis. Логи должны дать нам подсказку об этом. И в самом деле, запустив cf logs sp_tweetcounter, я увижу что-то похожее в моем logs/stderr.log:

Reading logs/stderr.log... OK events.js:72

throw er; // Unhandled 'error' event

A

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED at RedisClient.on_error (/home/vcap/app/node_modules/redis/index.js:189:24) at Socket.<anonymous> (/home/vcap/app/node_modules/redis/index.js:95:14) at Socket.EventEmitter.emit (events.js:95:17) at net.js:441:14

at process._tickCallback (node.js:415:13)

В наших приложениях мы не отправляем никаких аргументов Redis, поэтому она пытается подключиться к локальному серверу (127.0.0.1), используя порт по умолчанию (6379). Нужно дать указание подключаться к облачному сервису Redis по хосту и порту, которые предоставляет Cloud Foundry. Где же найти эту информацию? Как и номер порта, все о связях сервисов указано в переменной process.env!

Если вы уже ввели cf logs sp tweetcounter, то можете прокрутить окно вниз, чтобы просмотреть переменные окружения и содержание переменной VCAP_SERVICES. В логах она представлена в виде одной длинной строки JSON, поэтому здесь я при­вел ее к более удобочитаемому виду:

VCAP_SERVICES = {

"rediscloud-n/a": [{

"name": "rediscloud-dfc38",

"label": "rediscloud-n/a",

"tags": ["redis", "key-value"],

"plan": "20mb",

"credentials": {

"port": "18496",

"hostname": "pub-redis-18496.us-east-1-4.2.ec2.garantiadata.com",

"password": "REDACTED"

}

}]

}

Здесь находится вся информация, необходимая для подключения к удаленному сервису Redis, включая URL, порт и пароль. Можно было бы напрямую прописать данные для входа в Redis в нашей программе, но, скорее всего, лучше будет сделать это программным способом, аналогично тому как мы установили номер порта.

 

Лекция 9. Перспективы развития WWW. Семантический web

(15 неделя, 1 час)

 

Небольшой (по историческим меркам) срок существования сервиса WWW показал его востребованность все возрастающему числу пользователей. Это стало хорошим стимулом для развития веб-ориентированных концепций и технологий, увеличивающих возможности пользователей. Массовое внедрение и использование этих решений - причина качественных изменений во Всемирной паутине, своего рода смена «версии» Web. На текущий момент аналитики Интернет выделяют три таких «версии» — Web 1.0, Web 2.0 и Web 3.0 (стоит отметить, что деление это условное и часто критикуемое).

Web 1.0

Понятие Web 1.0 — это общий термин, описывающий состояние Всемирной Паутины за первое десятилетие ее существования. Для 90-х годов XX века были характерны низкая компьютерная грамотность пользователей, медленные типы подключения и ограниченное число сервисов Интернет. Веб-сайтам того времени были присущи следующие основные черты:

• Статичное содержимое веб-страниц, контент создавался и поддерживался разработчиками веб-сайта.

• Фреймовая и/или табличная верстка.

• Низкое качество разметки (зачастую контент был представлен в виде обычного текста, заимствованного из конференций UseNet и подобных источников, и заключенного в тег <pre>).

• Широкое использование нестандартных тегов, поддерживаемых только конкретным браузером (см. «войны браузеров» самостоятельно).

• Использование физических или внедренных стилей, редко - встраиваемых и, тем более, связанных таблиц стилей.

• Указание информации о рекомендованной версии браузера и разрешении монитора, при которых дизайн сайта отображается корректно.

• Гостевые книги, форумы или чаты — как инструменты обратной связи и придания интерактивности.

• Использование графических и текстовых информеров (погода, курс доллара и т.п.) для агрегирования информации.

Условное окончание эпохи «Web 1.0» датируется 2001 годом, когда произошел обвал акций интернет- компаний (об этом говорят так: «лопнул пузырь доткомов» (от англ. .com)). Собственно, существовавшие сайты никуда не делись, но вот вновь создаваемые сайты все больше и больше отличались от типичных «веб-один-нольных».

Web 2.0

Web 2.0 — совокупность веб-технологий, ориентированная на активное участие пользователей в создании контента веб-сайтов. Появление названия Web 2.0 принято связывать со статьёй Тима О’Рейли «What Is Web 2.0» от 30 сентября 2005 года Особенности web 2.0

• Привлечение «коллективного разума» для наполнения сайта;

• Взаимодействие между сайтами с использованием веб-сервисов;

• Обновление веб-страниц без перезагрузки;

• Агрегирование и синдикация информации;

• Объединение различных сервисов для получения нового функционала;

• Дизайн с применением стилевой разметки и акцентом на юзабилити.

Основные элементы web 2.0

Веб-сервисы

Веб-сервисы (веб-службы) — это сетевые приложения, доступные по протоколу HTTP, в качестве протоколов взаимодействия использующие основанные на XML форматы данных (RPC, SOA и подобные). В результате программное обеспечение может использовать веб-службы вместо того, чтобы самостоятельно реализовывать требуемый функционал (например, проверить введенный в форме почтовый адрес). В отличие от обычных динамических библиотек, такой подход обладает рядом плюсов:

• Веб-служба находится на серверах компании, которая её создала (рис. 1). Поэтому в любой момент пользователю доступна самая свежая версия программы и ему не приходится заботиться об обновлениях и вычислительных мощностях, требуемых для выполнения операции.

• Инструменты для работы с HTTP и XML есть в любом современном языке программирования, поэтому веб-службы являются платформонезависимыми.

• Asynchronous JavaScript and XML — подход к построению пользовательских интерфейсов веб-приложений, при котором веб-страница, не перезагружаясь, асинхронно загружает нужные пользователю данные. Использование Ajax стало наиболее популярно после того, как Google начала активно использовать его при создании своих сайтов, таких как Gmail и Google Maps. Часто Ajax считают синонимом Веб 2.0, что совершенно не так. Веб 2.0 не привязан к какой-то одной технологии или набору технологий, с тем же успехом ещё в 1999 году возможность асинхронного обновления страницы уже предоставлял Flash 4.

Веб-синдикация

Одновременное распространение информации в том числе аудио- и видео- на различные страницы или web-сайты, как правило, с использованием технологий RSS или Atom. Принцип заключается в распространении заголовков материалов и ссылки на них (например, последние сообщения форумов, и т. п.). Первоначально эта технология использовалась на новостных ресурсах и в блогах, но постепенно сфера применения расширилась.

Веб mash-up (дословный перевод — «смешение») — сервис, который полностью или частично использует в качестве источников информации другие сервисы, предоставляя пользователю новую функциональность для работы. В результате такой сервис может становиться также новым источником информации для других веб mash-up сервисов. Таким образом образуется сеть зависимых друг от друга сервисов, интегрированных друг с другом.

Например, сайт транспортной фирмы может использовать карты сервиса Google Maps для отслеживания местонахождения перевозимого груза.

Метки (теги)

Ключевые слова, описывающие рассматриваемый объект, либо относящие его к какой-либо категории. Это своего рода метки, которые присваиваются объекту, чтобы определить его место среди других объектов. С понятием меток тесно связано понятие фолксономии — термина, о котором широко заговорили именно в связи с ростом сервисов Веб 2.0, таких как Flickr, del.icio.us, и, в дальнейшем, Wink.

Появление и быстрое распространение блогов тоже вписывается в концепцию Веб 2.0, создавая так называемую «редактируемую Паутину» (writable web).

Возможность пометить документ ключевыми словами существует и в языке HTML (англ. keywords), однако этот способ был полностью скомпрометирован широким его использованием в целях поискового спама.

Социализация

Использование разработок, которые позволяют создавать сообщества пользователей.

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

• Поощрение, поддержка и доверие «коллективному разуму».

• При формировании сообщества большое значение имеет соревновательный элемент, Репутация или Карма, которые позволяют сообществу саморегулироваться и ставить пользователям дополнительные цели присутствия на сайте.

Дизайн

Понятие Веб 2.0 также отразилось и в дизайне. Предпочтительными стали округлость, имитация выпуклых поверхностей, имитация отражений на манер глянцевого пластика современных hi-end устройств (к примеру, плееры). В целом, восприятие внешнего вида на глаз кажется более приятным. Графика таких сайтов занимает больший объём, нежели при использовании аскетичного дизайна. Отчасти эта тенденция связана с совпавшим по времени выходом новых версий операционных систем использующих вышеупомянутые идеи.

Однако однообразие таких сайтов явно и в последнее время считается, графический облик классического дизайна веб 2.0, устаревшим и не креативным. Особенно это отражается в современной тенденции создания информативных сайтов, где главную роль играет простота, изящество, графичность и юзабилити. В дизайне не должно быть ограничений, но веб 2.0 их прививает.

Недостатки Веб 2.0

При использовании технологий web 2.0 вы становитесь арендатором сервиса и/или дискового пространства у какой-то сторонней компании. Возникающая при этом зависимость формирует ряд недостатков новых сервисов:

• зависимость сайтов от решений сторонних компаний, зависимость качества работы сервиса от качества работы многих других компаний;

• слабая приспособленность нынешней инфраструктуры к выполнению сложных вычислительных задач в браузере;

• уязвимость конфиденциальных данных, хранимых на сторонних серверах, для злоумышленников (известны случаи хищения личных данных пользователей, массовых взломов учётных записей блогов).

Фактически сайт эпохи Веб 2.0 на первый взгляд интерактивен и дружелюбен, позволяет себя легко настраивать. Однако сбор статистики о пользователях, их предпочтениях и интересах, личной жизни, карьере, круге друзей могут помочь владельцу сайта манипулировать сообществом. По самым пессимистичным прогнозам многочисленные сайты Веб 2.0 вкупе с другими современными технологиями дают прообраз тоталитарной системы «Большого брата».

Web 3.0

Web 3.0 — это принципиально новый подход к обработке информации, представленной во Всемирной паутине. Web 3.0 в первую очередь подразумевает под собой иной подход к обработке информации сообществом пользователей. Если Web 1.0 предполагает веб-мастера в качестве поставщика контента, а Web 2.0 — сообщество равноправных пользователей, генерирующих контент в рамках тематического проекта, то Web 3.0 уже позволяет этим самым равноправным пользователям "выбирать" экспертов в заданной области (или в нескольких областях) и "наделять его властью". Такие общепризнанные эксперты-выдвиженцы постепенно расширяют свое влияние на сообщество, могут выступать его модераторами, управлять сообществом при помощи дополнительных прав и расширенных возможностей в рамках интернет-проекта. Это исключает возможность управления сообществом некомпетентных и малозначимых его участников, что является очень важным вещью — достаточно вспомнить «вебдванольное» равноправие на проекте Wikipedia, из-за которого ее создатель должен был более десятка раз исправлять свою собственную (!) биографию - пользователи считали, что в ней есть неточности и честно ее исправляли.

Также термином Web 3.0 часто называют концепцию семантической паутины (Semantic Web).

Semantic Web

Семантическая паутина (англ. Semantic Web) — часть глобальной концепции развития сети Интернет, целью которой является реализация возможности машинной обработки информации, доступной во Всемирной паутине. Основной акцент концепции делается на работе с метаданными, однозначно характеризующими свойства и содержание ресурсов Всемирной паутины, вместо используемого в настоящее время текстового анализа документов. Термин впервые введён Тимом Бернерсом-Ли в мае 2001 года в журнале «Scientific American», и называется им «следующим шагом в развитии Всемирной паутины». В семантической паутине предполагается повсеместное использование, во-первых, унифицированных идентификаторов ресурсов (URI), а во-вторых — онтологий и языков описания метаданных.

Эта концепция была принята и продвигается Консорциумом W3 (Рис. 2). Для её внедрения предполагается создание сети документов, содержащих метаданные о ресурсах Всемирной паутины и существующей параллельно с ними. Тогда как сами ресурсы предназначены для восприятия человеком, метаданные используются машинами (поисковыми роботами и другими интеллектуальными агентами) для проведения однозначных логических заключений о свойствах этих ресурсов.

Рис. 2. Стек протоколов Semantic Web

 

Основная идея

Семантическая паутина — это надстройка над существующей Всемирной паутиной, которая призвана сделать размещённую в ней информацию более понятной для компьютеров. Машинная обработка возможна в семантической паутине благодаря двум её важнейшим характеристикам:

• Повсеместное использование унифицированных идентификаторов ресурсов (URI). Традиционная схема использования таких идентификаторов в современном Интернете сводится к установке ссылок, ведущих на объект, им адресуемый. Очевидным свойством такой ссылки является возможность «загрузки» объекта, на который она указывает. Таким объектом может быть веб-страница, файл произвольного содержания, фрагмент веб-страницы, а также неявное указание на обращение к реально существующему физическому ресурсу по протоколу, отличному от HTTP (например, ссылки mailto:). Концепция семантической паутины расширяет это понятие, включая в него ресурсы, недоступные для скачивания. Адресуемыми с помощью URI ресурсами могут быть, например, отдельные люди, города и другие географические сущности, художественные артефакты и т. д. К идентификатору предъявляются несколько простых требований: он должен быть уникальной строкой определённого формата, адресующей реально существующий объект.

• Повсеместное использование онтологий и языков описания метаданных. Современные методы автоматической обработки данных, доступных в Интернете, как правило, основаны на частотном и лексическом анализе текстового содержимого, которое прежде всего предназначено для восприятия человеком. В семантической паутине предлагается использовать форматы описания, доступные для машинной обработки (например, семейство форматов, часто упоминаемое в литературе как «Semantic Web family»: RDF, RDF Schema или RDF-S, и OWL), в свою очередь, использующие URI для адресации описываемых и описывающих объектов, а также онтологии и дескрипционные логики в качестве базовых математических формализмов.

Критика

Несмотря на все преимущества, предоставляемые семантической паутиной в случае её внедрения, существуют сомнения в возможности её полной реализации.

Практическая нереализуемость

Разные комментаторы высказывают различные причины, которые могут быть препятствием к этому, начиная с человеческого фактора (люди склонны избегать работы по поддержке документов с метаданными, открытыми остаются проблемы истинности метаданных, и т. д.), и заканчивая сложностью определения онтологии верхнего уровня (корня иерархии), критической для семантической паутины.

Дублирование информации

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


Дата добавления: 2018-02-28; просмотров: 189;