Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)Ontico
HighLoad++ 2017
Зал «Москва», 8 ноября, 17:00
Тезисы:
http://www.highload.ru/2017/abstracts/2880.html
Поисковая выдача Яндекса (СЕРП) - сложное многофункциональное веб-приложение с высокими требованиями к скорости загрузки. По ряду причин мобильный веб медленнее десктопа: ограничения по CPU/памяти в телефонах, нестабильность мобильных сетей.
В докладе расскажем, как с учётом этих особенностей, мы ускоряем мобильный СЕРП.
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Tanya Denisyuk
"Мое выступление поможет ответить на следующие вопросы:
1. Что такое HTTP reverse proxy?
2. Настройка NGINX в режиме reverse proxy.
3. Стандартные способы выбора upstream server: Round Robin, Hash, Consistent Hash.
4. Не сдерживаем фантазию -- пишем свой алгоритм.
5. Примеры, когда создание собственного решения оправдано."
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
HighLoad++ 2017
Зал Конгресс-Холл, 7.ноября, 11:00
Презентация и тезисы:
http://www.highload.ru/2017/abstracts/2981.html
Что нового появилось в nginx за последнее время, и для чего всё это нужно? В докладе - рассказ про основные новые функции в nginx 1.11.x (доступно в стабильной ветке 1.12.x) и 1.13.x. Для чего нужен параметр сборки --with-compat, что делает директива mirror, будет ли работать TLS 1.3, как обновлять кэш с помощью proxy_cache_background_update, что такое stale-while-revalidate, как логировать JSON и что делать, если после обновления конфигурации старые рабочие процессы долго не завершаются.
Читаем CHANGES вместе и разбираем на примерах.
Оптимизации поисковой выдачи Яндекса / Иван Хватов, Сергей Ляджин (Яндекс)Ontico
HighLoad++ 2017
Зал «Москва», 8 ноября, 17:00
Тезисы:
http://www.highload.ru/2017/abstracts/2880.html
Поисковая выдача Яндекса (СЕРП) - сложное многофункциональное веб-приложение с высокими требованиями к скорости загрузки. По ряду причин мобильный веб медленнее десктопа: ограничения по CPU/памяти в телефонах, нестабильность мобильных сетей.
В докладе расскажем, как с учётом этих особенностей, мы ускоряем мобильный СЕРП.
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Tanya Denisyuk
"Мое выступление поможет ответить на следующие вопросы:
1. Что такое HTTP reverse proxy?
2. Настройка NGINX в режиме reverse proxy.
3. Стандартные способы выбора upstream server: Round Robin, Hash, Consistent Hash.
4. Не сдерживаем фантазию -- пишем свой алгоритм.
5. Примеры, когда создание собственного решения оправдано."
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
HighLoad++ 2017
Зал Конгресс-Холл, 7.ноября, 11:00
Презентация и тезисы:
http://www.highload.ru/2017/abstracts/2981.html
Что нового появилось в nginx за последнее время, и для чего всё это нужно? В докладе - рассказ про основные новые функции в nginx 1.11.x (доступно в стабильной ветке 1.12.x) и 1.13.x. Для чего нужен параметр сборки --with-compat, что делает директива mirror, будет ли работать TLS 1.3, как обновлять кэш с помощью proxy_cache_background_update, что такое stale-while-revalidate, как логировать JSON и что делать, если после обновления конфигурации старые рабочие процессы долго не завершаются.
Читаем CHANGES вместе и разбираем на примерах.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.Alexander Frolov
Краткий обзор существующих решений
Что такое web sockets
обеспечение работы web sockets на стороне сервера
основной механизм работы с web sockets в PHP
Нюансы использования
Distributed networks help control yourself online identity in the Internet.
A characteristic feature of them is absence of a central server. Nodes
in the network belong to each of its
participants, and the software runs on your computer
user or a trusted server. The user determines the distribution policy
of its data.
Distributed social networks built on open technologies: Atom,
WebFinder, OpenID/OAuth, Salmon, ActivityStreams and i.e.
Most of developing distributed networks is opensourced and under
development. Some of them is available for usage. For example:
SatausNet . StatusNet is the open source microblogging platform that
helps you share and connect in real-time within your own domain. Yet
another distibuted social network OneSocialWeb dream of a world where
all social networks are connected and work together in a way similar
to email.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.Alexander Frolov
Краткий обзор существующих решений
Что такое web sockets
обеспечение работы web sockets на стороне сервера
основной механизм работы с web sockets в PHP
Нюансы использования
Distributed networks help control yourself online identity in the Internet.
A characteristic feature of them is absence of a central server. Nodes
in the network belong to each of its
participants, and the software runs on your computer
user or a trusted server. The user determines the distribution policy
of its data.
Distributed social networks built on open technologies: Atom,
WebFinder, OpenID/OAuth, Salmon, ActivityStreams and i.e.
Most of developing distributed networks is opensourced and under
development. Some of them is available for usage. For example:
SatausNet . StatusNet is the open source microblogging platform that
helps you share and connect in real-time within your own domain. Yet
another distibuted social network OneSocialWeb dream of a world where
all social networks are connected and work together in a way similar
to email.
«Пиринговый веб на JavaScript», Денис ГлазковMail.ru Group
Доклад был посвящен проекту base.network. Благодаря криптовалюте Bitcoin, микроблогам Twister и мессенджеру Tox становится всё популярней тема пиринговых технологий. Теперь пришло время и распределенных сайтов. В своём выступлении Денис рассказал о создании децентрализованных клиентских приложений на JavaScript, общей схеме работы сети и криптографии c JS.
"В последнее время тема пиринговых технологий становится очень популярной. Уже не первый день работают такие проекты как криптовалюта Bitcoin, микроблоги Twister и мессенджер Tox. Теперь дошло дело и до децентрализованного веба.
Будет рассказано про общую схему работы сети, о работе с криптографией на JavaScript, о создании приложений на JavaScript без использования центральных серверов."
Антон Тюрин — Облачная платформа Cocaine — облако своими рукамиYandex
Облачные технологии шагают вперед семимильными шагами, количество компаний, переносящих свои бизнес-приложения в облака, увеличивается. В тоже время не все готовы доверить свои приложения и данные сторонней компании, предоставляющей облачную инфраструктуру. В этом случае отличным решением будет использование нашей открытой облачной платформы Cocaine, которую вы можете развернуть сами.
Платформа активно развивается, и мы хотим поделиться новыми интересными возможностями, которые в ней появились за последнее время. Например, рассказывая о сервисах, которые нужны практически каждому облачному приложению: о том, как пользоваться уже существующими и как написать свои.
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...PavelKonotopov
In my talk, I will tell how we built a geographically distributed system of personal data storage based on Open Source software and PostgreSQL. The concept of the inCountry business is to provide customers with a ready-to-use infrastructure for personal data storage. Our business customers are ensured that their customer’s personal data is securely stored within their country’s borders. We wrote an API and SDK and built a variety of services. Our system complies with generally accepted security standards (SOC Type 1, Type 2, PCI DSS, etc.). We built our infrastructure with Consul, Nomad, and Vault, used PostgreSQL, ElasticSearch as a storage system, Nginx, Jenkins, Artifactory, other tools to automate management and deployment. We have assembled our development and management teams - DevOps, Security, Monitoring, and DBA. We use both cloud providers and bare-metal servers located in different regions of the world. Development of the system architecture and ensuring the stability of the infrastructure, consistent and secure operation of all its components is the main task facing our teams.
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Ontico
В многоядерных высоконагруженных системах с высокой конкурентностью часто бывает сложно определить, чем занят отдельный процесс PostgreSQL. Он может находиться в ожидании локов высокого уровня, таких как локи таблиц, внутренних локов, используемых для синхронизации процессов, ввода-вывода и многих других.
В настоящий момент среди всех событий ожидания мониторить можно только локи высокого уровня с помощью представлений PostgreSQL. Другие типы ожиданий требуют использования низкоуровневых утилит типа perf, systemtap и других. Эти утилиты требуют специальных знаний и могут быть платформозависимыми. В то же время другие enterprise базы данных уже включают в себя инструменты для мониторинга ожиданий.
Мы разработали патч, который реализует мониторинг ожиданий в PostgreSQL. С минимальной настройкой (несколько конфигурационных параметров) этот патч показывает полную информацию о текущих ожиданиях в режиме реального времени и с небольшим оверхедом на всю систему. Этот патч уже работает на продакшен серверах Яндекса и показал свою полезность.
2 июля 2011, Я.Субботник в Екатеринбурге
Алексей Андросов "HTML5 в Я.Почте"
О докладе:
Вопросы практического применения современных технологий передачи и хранения данных в браузере на примере Яндекс.Почты, проблемы и ограничения, с которыми можно столкнуться, а также способы их решения.
Для чего нужны WebSocket, localStorage и кроссдоменные AJAX запросы? Как реализовать их поддержку с учетом старых браузеров, которые не поддерживают эти технологии? Как обойти проблемы и баги в этих технологиях?
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
Что нового появилось в nginx за последнее время и для чего всё это нужно?
В докладе - рассказ про основные новые функции в nginx 1.9.x (1.10.x) и 1.11.x. HTTP/2, модуль stream, динамическая загрузка модулей и так далее - зачем всё это нужно и как это использовать.
Читаем CHANGES вместе и разбираем на примерах.
5. Network Activity Log
5
Log all network requests
Simple way to see all events for every
request
HTTP headers and other related
information
Received/sent data for any request in
different formats
Including HTTPS requests
5пятница, 4 октября 13 г.
6. 2013-09-23 12:43:43.136 Start loading
2013-09-23 12:43:43.138 Will send request
2013-09-23 12:43:43.152 Received response
Response: 200
Header fields:{
"Cache-Control" = "no-cache";
Connection = "keep-alive";
"Content-Encoding" = gzip;
"Content-Length" = 351;
"Content-Type" = "text/xml; encoding=utf-8";
Date = "Mon, 23 Sep 2013 08:43:34 GMT";
Server = "nginx/1.2.1";
"X-YaMisc" = "region_id=9999;";
"X-YaReqFinish" = "1379925814.110185";
}
2013-09-23 12:43:43.153 Did receive data (685 bytes).
2013-09-23 12:43:43.153 Did finish loading.
2013-09-23 12:43:43.154 Stop loading
2013-09-23 12:43:44.169 Received response
Response: 200
Header fields:{
Connection = close;
"Content-Length" = 0;
"Content-Type" = "application/octet-stream";
Date = "Mon, 23 Sep 2013 08:43:35 GMT";
Server = nginx;
}
2013-09-23 12:43:44.169 Did finish loading.
2013-09-23 12:43:44.170 Stop loading
2013-09-23 12:43:58.314 Initialized
URL: http://www.yandex.com/?clid=2035378
HTTP Method: GET
HTTP Headers: {
Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
"User-Agent" = "Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/11A465";
Network Activity Log
6
NSLog(...)
6пятница, 4 октября 13 г.
7. "Content-Encoding" = gzip;
"Content-Type" = "text/css";
Date = "Mon, 23 Sep 2013 08:43:49 GMT";
Expires = "Thu, 31 Dec 2037 23:55:55 GMT";
"Last-Modified" = "Thu, 19 Sep 2013 18:25:56 GMT";
Server = "nginx/1.4.1";
"Transfer-Encoding" = Identity;
}
2013-09-23 12:43:58.476 Did receive data (23122 bytes).
2013-09-23 12:43:58.477 Did finish loading.
2013-09-23 12:43:58.477 Initialized
URL: http://yandex.st/www/1.686/com/pages-desktop/index/_index.js
HTTP Method: GET
HTTP Headers: {
Accept = "*/*";
Referer = "http://www.yandex.com/";
"User-Agent" = "Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/11A465";
}
HTTP Body:
2013-09-23 12:43:58.477 Start loading
2013-09-23 12:43:58.478 Will send request
2013-09-23 12:43:58.478 Start loading
2013-09-23 12:43:58.478 Will send request
2013-09-23 12:43:58.480 Received response
Response: 200
Header fields:{
"Access-Control-Allow-Origin" = "*";
"Cache-Control" = "max-age=315360000";
Connection = "keep-alive";
"Content-Encoding" = gzip;
"Content-Type" = "application/x-javascript";
Date = "Mon, 23 Sep 2013 08:43:49 GMT";
Expires = "Thu, 31 Dec 2037 23:55:55 GMT";
"Last-Modified" = "Thu, 10 May 2012 20:10:56 GMT";
Server = "nginx/1.4.1";
"Transfer-Encoding" = Identity;
}
2013-09-23 12:43:58.480 Did receive data (1553 bytes).
2013-09-23 12:43:58.481 Did finish loading.
2013-09-23 12:43:58.482 Received response
Response: 200
Header fields:{
"Accept-Ranges" = bytes;
"Access-Control-Allow-Origin" = "*";
"Cache-Cont
Network Activity Log
6
NSLog(...)
6пятница, 4 октября 13 г.
8. Network Activity Log
3rd party instruments
Wireshark
Charles
Fiddler
mitmproxy
– They are all good, but we want a look from inside the application.
7
7пятница, 4 октября 13 г.
9. Test Networking
8
Test application state after making
network requests:
– with various responses.
Test application state if a network request
fails due to numerous reasons:
– different HTTP status codes,
– timeout,
– etc.
8пятница, 4 октября 13 г.
11. Hybrid Applications
10
UIWebView as the main interface.
Ship static resources within the application
bundle.
Smart caching.
10пятница, 4 октября 13 г.
13. Extend iOS Networking
11
UIWebView support for new media formats
– WebP
– WebM
Application-wide support for new
protocols
– SPDY
11пятница, 4 октября 13 г.
17. @interface MyProtocol : NSURLProtocol
@end
[NSURLProtocol registerClass:[MyProtocol class]];
NSURLProtocol
15
Registration of the new protocol:
15пятница, 4 октября 13 г.
30. Network Activity Log
21
Log all network requests
Simple way to see all events for every
request
HTTP headers and other related
information
Received/sent data for any request in
different formats
Including HTTPS requests
21пятница, 4 октября 13 г.
41. Network Activity Log
28
URLProtocol Logger
Sample Code
github.com/dodonov/YACURLProtocolLogger
bit.ly/yac_nsurlprotocol
28пятница, 4 октября 13 г.
42. Test Networking
29
Test application state after making
network requests:
– with various responses.
Test application state if a network request
fails due to numerous reasons:
– different HTTP status codes,
– timeout,
– etc.
29пятница, 4 октября 13 г.
43. Test Networking
30
Special Test ProtocolNSURLConnection
iOS URLProtocols
NSURLConnection
Delegate
30пятница, 4 октября 13 г.
44. Test Networking
30
Special Test ProtocolNSURLConnection
iOS URLProtocols
NSURLConnection
Delegate
30пятница, 4 октября 13 г.
45. Test Networking
30
Special Test ProtocolNSURLConnection
iOS URLProtocols
NSURLConnection
Delegate
30пятница, 4 октября 13 г.
46. Test Networking
31
Sample test
- (void)testImageLoader
{
[NSURLProtocol registerClass:[ILCannedURLProtocol class]];
[ILCannedURLProtocol setCannedStatusCode:500];
[ILCannedURLProtocol setSupportedBaseURL:[NSURL URLWithString:@"yandex.ru"]];
ImageLoader *loader = [[ImageLoader alloc] init];
[loader load];
NSAssert([loader hasBadResponse], @"Loader should have bad response");
[NSURLProtocol unregisterClass:[ILCannedURLProtocol class]];
}
31пятница, 4 октября 13 г.
47. Test Networking
31
Sample test
- (void)testImageLoader
{
[NSURLProtocol registerClass:[ILCannedURLProtocol class]];
[ILCannedURLProtocol setCannedStatusCode:500];
[ILCannedURLProtocol setSupportedBaseURL:[NSURL URLWithString:@"yandex.ru"]];
ImageLoader *loader = [[ImageLoader alloc] init];
[loader load];
NSAssert([loader hasBadResponse], @"Loader should have bad response");
[NSURLProtocol unregisterClass:[ILCannedURLProtocol class]];
}
31пятница, 4 октября 13 г.
48. Test Networking
31
Sample test
- (void)testImageLoader
{
[NSURLProtocol registerClass:[ILCannedURLProtocol class]];
[ILCannedURLProtocol setCannedStatusCode:500];
[ILCannedURLProtocol setSupportedBaseURL:[NSURL URLWithString:@"yandex.ru"]];
ImageLoader *loader = [[ImageLoader alloc] init];
[loader load];
NSAssert([loader hasBadResponse], @"Loader should have bad response");
[NSURLProtocol unregisterClass:[ILCannedURLProtocol class]];
}
31пятница, 4 октября 13 г.
49. Test Networking
31
Sample test
- (void)testImageLoader
{
[NSURLProtocol registerClass:[ILCannedURLProtocol class]];
[ILCannedURLProtocol setCannedStatusCode:500];
[ILCannedURLProtocol setSupportedBaseURL:[NSURL URLWithString:@"yandex.ru"]];
ImageLoader *loader = [[ImageLoader alloc] init];
[loader load];
NSAssert([loader hasBadResponse], @"Loader should have bad response");
[NSURLProtocol unregisterClass:[ILCannedURLProtocol class]];
}
31пятница, 4 октября 13 г.
50. Test Networking
31
Sample test
- (void)testImageLoader
{
[NSURLProtocol registerClass:[ILCannedURLProtocol class]];
[ILCannedURLProtocol setCannedStatusCode:500];
[ILCannedURLProtocol setSupportedBaseURL:[NSURL URLWithString:@"yandex.ru"]];
ImageLoader *loader = [[ImageLoader alloc] init];
[loader load];
NSAssert([loader hasBadResponse], @"Loader should have bad response");
[NSURLProtocol unregisterClass:[ILCannedURLProtocol class]];
}
31пятница, 4 октября 13 г.
51. Test Networking
31
Sample test
- (void)testImageLoader
{
[NSURLProtocol registerClass:[ILCannedURLProtocol class]];
[ILCannedURLProtocol setCannedStatusCode:500];
[ILCannedURLProtocol setSupportedBaseURL:[NSURL URLWithString:@"yandex.ru"]];
ImageLoader *loader = [[ImageLoader alloc] init];
[loader load];
NSAssert([loader hasBadResponse], @"Loader should have bad response");
[NSURLProtocol unregisterClass:[ILCannedURLProtocol class]];
}
31пятница, 4 октября 13 г.
52. Test Networking
31
Sample test
- (void)testImageLoader
{
[NSURLProtocol registerClass:[ILCannedURLProtocol class]];
[ILCannedURLProtocol setCannedStatusCode:500];
[ILCannedURLProtocol setSupportedBaseURL:[NSURL URLWithString:@"yandex.ru"]];
ImageLoader *loader = [[ImageLoader alloc] init];
[loader load];
NSAssert([loader hasBadResponse], @"Loader should have bad response");
[NSURLProtocol unregisterClass:[ILCannedURLProtocol class]];
}
31пятница, 4 октября 13 г.
53. Test Networking
31
Sample test
- (void)testImageLoader
{
[NSURLProtocol registerClass:[ILCannedURLProtocol class]];
[ILCannedURLProtocol setCannedStatusCode:500];
[ILCannedURLProtocol setSupportedBaseURL:[NSURL URLWithString:@"yandex.ru"]];
ImageLoader *loader = [[ImageLoader alloc] init];
[loader load];
NSAssert([loader hasBadResponse], @"Loader should have bad response");
[NSURLProtocol unregisterClass:[ILCannedURLProtocol class]];
}
31пятница, 4 октября 13 г.
54. Test Networking
32
Testing via NSURLProtocol
github.com/InfiniteLoopDK/ILTesting
bit.ly/yac_nsurlprotocol
github.com/AliSoftware/OHHTTPStubs
32пятница, 4 октября 13 г.
55. Hybrid Applications
33
UIWebView as the main interface.
Ship static resources within the application
bundle.
Smart caching.
33пятница, 4 октября 13 г.
67. Extend iOS Networking
40
UIWebView support for new media formats
– WebP
– WebM
Application-wide support for new
protocols
– SPDY
40пятница, 4 октября 13 г.