Интернет, без которого вы уже не мыслите свое существование, обеспечивается разнообразным оборудованием — от серверов до роутеров в локальной сети — и программным обеспечением, которое работает на серверах, персональных компьютерах и других устройствах.
В докладе я постараюсь дать общее понимание того, как это все работает, и подскажу, что нужно изучать, чтобы оказаться в рядах разработчиков серверного программного обеспечения.
7. Устройства могут:
1. Запускать программное
обеспечение (ПО)
○ с интерфейсом пользователя
■ графическим
■ консольным
■ сенсорным, кнопочным и т.д.
○ без интерфейса пользователя
9. Устройства могут:
3. Обмениваться данными со спутниками
для позиционирования в пространстве
○ GPS
○ ГЛОНАСС
4. Обмениваться данными с сотовыми
вышками
○ GSM, CDMA (2G)
○ 3G, 4G
10. Устройства могут:
5. Собирать и хранить данные с датчиков
○ движения и углов наклона
○ температуры
○ света
○ прикосновения
○ давления
○ …
14. Они взаимодействуют с Интернет
1. Через браузер
2. Через мобильное приложение
3. Через десктопное приложение (иногда
это тоже браузер)
15. Адреса в сети
IP-address (Internet Protocol Address):
● Внешний: 93.158.134.3 (IPv4),
уникален в Интернет
● Внутренний: 192.168.0.1, уникален в
локальной сети
Определяется провайдером Интернет
20. Протоколы и уровни
Протокол — набор правил,
действий и их очередности,
позволяющий осуществлять
соединение и обмен данными
между устройствами в сети
21. Протоколы и уровни
Сетевая модель OSI (не вся):
● Прикладной уровень (7) — HTTP, FTP
(семантические данные)
● Транспортный уровень (4) — TCP, UDP
(сегменты, дейтаграммы)
● Сетевой уровень (3) — IPv4, IPv6 (пакеты)
● Физический (1) — USB, витая пара (биты)
23. Модель запрос-ответ в HTTP
● HTTP-request посылается
клиентом, он ждет ответа в
рамках соединения с сервером
● HTTP-Response отправляется
сервером, либо соединение
рвется
24. Пример HTTP-request
Метод запроса Запрашиваемый ресурс Протокол
GET /wiki/Tim_Berners-Lee HTTP/1.1
Host: ru.wikipedia.org
……
еще заголовки
26. Пример HTTP-request
Метод запроса Запрашиваемый ресурс Протокол
POST /addcomment HTTP/1.1
Host: youtube.com
comment=Hello
У этих запросов есть тело (body),
содержащее данные
28. Задачи сервера
1. Принимать запросы клиентов
2. Отправлять ответы клиентам
3. Хранить и обрабатывать данные
4. Искать и систематизировать данные по
запросу (иногда с других серверов)
Все это делает запущенное на сервере ПО
30. Что умеет web-приложение
1. Чтение HTTP-запроса,
формирование HTTP-ответа
2. Взаимодействие с базой данных
3. Запуск процессов по расписанию
4. Обработка и генерация данных
5. …
31. Языки программирования в web
C++, C#, Clojure, Erlang, Java,
JavaScript, Haskell, Perl, PHP,
Python, Ruby, Scala, …
На самом деле любые — нужно
просто уметь читать и писать символы
:-)
35. Libraries and Frameworks
Многие типовые задачи уже
решены и на большинстве языков
написаны библиотеки и/или
фреймворки
Фреймворк кроме инструментов
задает каркас приложения
36. Фреймворки в web
● C#: .NET framework
● Java: Spring и много непопулярных
● JavaScript: Node.js как платформа,
на ее основе Express, Sails
● PHP: Zend framework, symfony,
Cake, Cohana, Yii и много других
37. Фреймворки в web
● Python: Django, Pyramid, Flask
● Ruby: Ruby on Rails (RoR), Sinatra
● Scala: Play framework, Akka, Spark
Выбор языка не так важен, как выбор
фреймворка!
38. А еще важнее глубокое понимание
принципов работы сети и архитектуры
приложений, безотносительно языков
и фреймворков!
39. Базы данных (без подробностей)
● Реляционные: Oracle, Postgres,
MySQL, MS SQL, MariaDB
● Документо-ориентированные:
MongoDB, CouchDB
● Колоночные: Cassandra, HBase
● Графовые: Neo4j, OrientDB
40. Выбор базы данных едва ли не более
холиварная тема в ИТ, чем выбор
языка или фреймворка :-)
41. А что еще изучать?
1. Безопасность: шифрование данных,
атаки и защиты
2. Оптимизация поиска в базе данных
3. Масштабирование: подстройка системы
под увеличивающееся число запросов
4. Синхронизация данных между
несколькими серверами
42. А что еще изучать?
5. Многопоточность, параллельные и
распределенные вычисления
6. Модель акторов
7. Шаблоны (patterns) проектирования и
SOLID-принципы
8. Математическая логика, теория
алгоритмов, логика Хоара
43. Как лучше начать?
1. Курсы и стажировки для начинающих
2. Coursera, Khan academy, Hexlet
3. Книги от столпов индустрии: Роберт
Мартин, Стив МакКоннел, Кент Бек и
другие
44. Что почитать?
1. Р. Мартин “Идеальный программист”
2. Р. Мартин “Чистый код”
3. К. Бек “Разработка через тестирование”
4. С. МакКоннел “Совершенный код”
5. Д. Томас, Э. Хант “Программист-
прагматик. Путь от подмастерья к
мастеру”
45. Что почитать?
6. (*) Г. Эндрюс “Основы многопоточного,
параллельного и распределенного
программирования”
7. (*) Э. Таненбаум, М. Ван Стеен
“Распределенные системы. Принципы и
парадигмы”