Upload
happydev-lite
View
92
Download
0
Embed Size (px)
Citation preview
Как устроен Web изнутри
Анна Тарасенко, 7bits,генеральный директор
Что за паутина?
Web (World Wide Web, WWW) — всемирная “паутина”, состоящая из сотен миллионов серверов, хранящих и обрабатывающих документы
А что еще?
Пользовательские устройства
1. Персональные компьютеры и ноутбуки
2. Планшеты и смартфоны3. GSM-телефоны и навигаторы4. Шлемы виртуальной реальности
Пользовательские устройства
5. Бытовая техника, автомобили, медицинская техника
6. Банкоматы, кассы, POS-терминалы7. Носимая электроника: умные часы,
фитнес-браслеты8. …
Интернет вещей (Internet of Things)
Устройства могут:1. Запускать программное
обеспечение (ПО)○ с интерфейсом пользователя
■ графическим■ консольным■ сенсорным, кнопочным и т.д.
○ без интерфейса пользователя
Устройства могут:
2. Принимать и передавать данные по сети○ проводной○ беспроводной (например, WiFi,
Bluetooth)
Устройства могут:3. Обмениваться данными со спутниками
для позиционирования в пространстве○ GPS○ ГЛОНАСС
4. Обмениваться данными с сотовыми вышками○ GSM, CDMA (2G)○ 3G, 4G
Устройства могут:5. Собирать и хранить данные с датчиков
○ движения и углов наклона○ температуры○ света○ прикосновения○ давления○ …
Устройства могут:
6. Взаимодействовать с контроллерами аналоговых устройств:○ моторов○ светодиодов и лампочек○ аудио и видео устройств○ …
Клиент и сервер
Это деление очень условно
Роли могут меняться для каждого взаимодействия
Мы рассмотрим таких клиентов
Они взаимодействуют с Интернет
1. Через браузер
2. Через мобильное приложение3. Через десктопное приложение (иногда
это тоже браузер)
Адреса в сетиIP-address (Internet Protocol Address):
● Внешний: 93.158.134.3 (IPv4), уникален в Интернет
● Внутренний: 192.168.0.1, уникален в локальной сети
Определяется провайдером Интернет
Адреса в сети
Адреса в сетиDomain name:
● yandex.ru● google.com● wikipedia.org
Сайтом обычно называют то, что скрывается за доменным именем
Адреса в сети
DNS — Domain Name System, позволяет сопоставить доменному имени IP-адрес и наоборот
Адреса в сети
Протоколы и уровни
Протокол — набор правил, действий и их очередности, позволяющий осуществлять соединение и обмен данными между устройствами в сети
Протоколы и уровниСетевая модель OSI (не вся):● Прикладной уровень (7) — HTTP, FTP
(семантические данные)● Транспортный уровень (4) — TCP, UDP
(сегменты, дейтаграммы)● Сетевой уровень (3) — IPv4, IPv6 (пакеты)● Физический (1) — USB, витая пара (биты)
Модель запрос-ответ
Модель запрос-ответ в HTTP● HTTP-request посылается
клиентом, он ждет ответа в рамках соединения с сервером
● HTTP-Response отправляется сервером, либо соединение рвется
Пример HTTP-request
Метод запроса Запрашиваемый ресурс Протокол
GET /wiki/Tim_Berners-Lee HTTP/1.1Host: ru.wikipedia.org
……еще заголовки
Пример HTTP-response
Протокол Код ответа
HTTP/1.1 200 OK(далее следует запрошенная страница в HTML)
Пример HTTP-requestМетод запроса Запрашиваемый ресурс Протокол
POST /addcomment HTTP/1.1Host: youtube.comcomment=Hello
У этих запросов есть тело (body), содержащее данные
Пример HTTP-response
Протокол Код ответа
HTTP/1.1 500 Internal Server Error
Сервер может прислать код ошибки вместо страницы
Задачи сервера
1. Принимать запросы клиентов2. Отправлять ответы клиентам3. Хранить и обрабатывать данные4. Искать и систематизировать данные по
запросу (иногда с других серверов)
Все это делает запущенное на сервере ПО
Типовая архитектура
Что умеет web-приложение
1. Чтение HTTP-запроса, формирование HTTP-ответа
2. Взаимодействие с базой данных3. Запуск процессов по расписанию4. Обработка и генерация данных5. …
Языки программирования в webC++, C#, Clojure, Erlang, Java, JavaScript, Haskell, Perl, PHP, Python, Ruby, Scala, …
На самом деле любые — нужно просто уметь читать и писать символы :-)
Самые важные языки
Самые важные языки
● English
Самые важные языки
● English● Русский
Libraries and FrameworksМногие типовые задачи уже решены и на большинстве языков написаны библиотеки и/или фреймворки
Фреймворк кроме инструментов задает каркас приложения
Фреймворки в web
● C#: .NET framework● Java: Spring и много непопулярных● JavaScript: Node.js как платформа,
на ее основе Express, Sails● PHP: Zend framework, symfony,
Cake, Cohana, Yii и много других
Фреймворки в web
● Python: Django, Pyramid, Flask● Ruby: Ruby on Rails (RoR), Sinatra● Scala: Play framework, Akka, Spark
Выбор языка не так важен, как выбор фреймворка!
А еще важнее глубокое понимание принципов работы сети и архитектуры приложений, безотносительно языков и фреймворков!
Базы данных (без подробностей)● Реляционные: Oracle, Postgres,
MySQL, MS SQL, MariaDB● Документо-ориентированные:
MongoDB, CouchDB● Колоночные: Cassandra, HBase● Графовые: Neo4j, OrientDB
Выбор базы данных едва ли не более холиварная тема в ИТ, чем выбор языка или фреймворка :-)
А что еще изучать?1. Безопасность: шифрование данных,
атаки и защиты2. Оптимизация поиска в базе данных3. Масштабирование: подстройка системы
под увеличивающееся число запросов4. Синхронизация данных между
несколькими серверами
А что еще изучать?5. Многопоточность, параллельные и
распределенные вычисления6. Модель акторов7. Шаблоны (patterns) проектирования и
SOLID-принципы8. Математическая логика, теория
алгоритмов, логика Хоара
Как лучше начать?
1. Курсы и стажировки для начинающих2. Coursera, Khan academy, Hexlet3. Книги от столпов индустрии: Роберт
Мартин, Стив МакКоннел, Кент Бек и другие
Что почитать?1. Р. Мартин “Идеальный программист”2. Р. Мартин “Чистый код”3. К. Бек “Разработка через тестирование”4. С. МакКоннел “Совершенный код”5. Д. Томас, Э. Хант “Программист-
прагматик. Путь от подмастерья к мастеру”
Что почитать?
6. (*) Г. Эндрюс “Основы многопоточного, параллельного и распределенного программирования”
7. (*) Э. Таненбаум, М. Ван Стеен “Распределенные системы. Принципы и парадигмы”