Взаимозависимости и 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; просмотров: 329; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!