SlideShare a Scribd company logo
1 of 162
Download to read offline
Как мы запустили
offline-версию cайта rg.ru
официально
1 000 000
Offline-версия уже доступна
для любого сайта
Доставка пиццы
Вкусная
пицца
Всё что угодно
Service Worker -
сердце оффлайн приложения
Позволяет
Позволяет
- КОНТРОЛИРОВАТЬ СТРАНИЦЫ
Позволяет
- КОНТРОЛИРОВАТЬ СТРАНИЦЫ
- ПЕРЕХВАТЫВАТЬ ЗАПРОСЫ
Позволяет
- КОНТРОЛИРОВАТЬ СТРАНИЦЫ
- ПЕРЕХВАТЫВАТЬ ЗАПРОСЫ
- КЕШИРОВАТЬ РЕСУРСЫ
Позволяет
- КОНТРОЛИРОВАТЬ СТРАНИЦЫ
- ПЕРЕХВАТЫВАТЬ ЗАПРОСЫ
- КЕШИРОВАТЬ РЕСУРСЫ
Принцип работы Service Worker
register
Принцип работы Service Worker
register install
Принцип работы Service Worker
register install activation
register
register
navigator
.serviceWorker
.register(
‘/sw.js’,
{ scope: ‘/article/’}
)
register
navigator
.serviceWorker
.register(
‘/sw.js’,
{ scope: ‘/article/’}
)
install
install
self.addEventListener(
‘install’,
event => {
....
setCache()
}
)
activation
activation
self.addEventListener(
‘activate’,
event => {
....
checkCache()
}
)
Принцип работы Service Worker
Слушаем события:
message
Принцип работы Service Worker
Слушаем события:
- MESSAGE
Принцип работы Service Worker
Слушаем события:
- MESSAGE
fetch
- FETCH
Принцип работы Service Worker
Слушаем события:
- MESSAGE
- FETCH
push
- PUSH
Принцип работы Service Worker
Слушаем события:
- MESSAGE
- FETCH
- PUSH
sync - SYNC
Подходы к построению
оффлайн приложения
1 Статика
1 Статика
HTML
1 Статика
HTML CSS
1 Статика
HTML CSS JS
1 Статика
HTML CSS JS
IMG / SVG / FONTS
2 Offline first
3 SPA
3 SPA
3 SPA
3 SPA
3 SPA
Идея создания
offline версии rg.ru
Как у них?
This page is not availiable
Reload More
This page is not availiable
Reload More
This page is not availiable
Reload More
This page is not availiable
Reload More
This page is not availiable
Reload More
Описание интерфейса
offline
offline
offline
offline
offline
Фильтруем контент
Как работает offline-версия
сайта rg.ru
Page
Page
register
SW
Page
install
Cache
SW
Page
activate
Clear
SW
Page
fetch
Filter
SW
self.addEventListener(‘fetch’, event => {
event.respondWith(
fetch(request)
.catch(() => {
return caches.match(offlineApp);
});
);
});
Page SW
Update
Принцип работы приложения
Controller
Controller
index.html
Controller
Model
index.html
Controller
Model
{{...}}
View
index.html
Controller
HTML
Model
{{...}}
View
index.html
Доступность сети
Доступность сети
- ONONLINE
Доступность сети
- ONONLINE
- ONOFFLINE
Доступность сети
- ONONLINE
- ONOFFLINE
- navigator.onLine
Доступность сети
Google
Analytics
SEND
Проблемы...
Обновление данных
Проблема...
Проблема... Есть идеи?
Проблема... Есть идеи? setInterval?
Проблема... Есть идеи? setInterval? ...
Page
Page
new Date()
Time 1
Page
new Date()
Time 1
Local Storage
Reload
Page
new Date()
Time 2
Page
new Date()
Time 2
Local Storage
Time 1
Page
new Date()
Time 2
Local Storage
Time 1
ВРЕМЯ
ПОСЛЕДНЕГО
ПОСЕЩЕНИЯ
Page
new Date()
Time 2
Local Storage
Time 1
>15
Page
Update
periodicSync
registration.periodicSync.register({
tag: ‘updateData’,
minPeriod: 15 * 60 * 1000
...
})
Задержки
при получении данных
https://rg.ru/
offline
fetch(PATH_TO_OFFLINE_DATA)
.then(renderApp)
Запрос на получение данных
OfflineApp
OfflineApp
FETCH
OfflineApp
sendMsgToSW(‘getCacheResource’, {
resourceName: ‘OFFLINE_DATA’
})
Запрос на получение данных
Два Service Worker
в одном scope
PUSH NOTIFICATION
RG.RU
{ scope: ‘/article/’} { scope: ‘/rubrics/’}
RG.RU
{ scope: ‘/article/’} { scope: ‘/rubrics/’}
RG.RU
{ scope: ‘./’} { scope: ‘./’}
RG.RU
{ scope: ‘./’} { scope: ‘./’}
importScripts(‘offline’);
importScripts(‘notification’);
ServiceWorker.js
importScripts(‘offline’);
importScripts(‘notification’);
ServiceWorker.js
navigator
.serviceWorker
.register(‘/sw.js’)
.then(() => {
// Оффлайн: инициализация сервиса
initOfflineService();
// Уведомления: инициализация сервиса
initNotifyService();
})
Проксирование трафика
через ServiceWorker
Request to Service Worker ~ 9.0 s
Было
self.addEventListener(‘fetch’, event => {
event.respondWith(
fetch(event.request)
.catch(() => {
return caches.match(‘offlineApp’);
})
Стало
self.addEventListener(‘fetch’, event => {
if (
) {
event.respondWith(
fetch(event.request)
.catch(() => {
return caches.match(‘offlineApp’);
})
Стало
self.addEventListener(‘fetch’, event => {
if (request.method === ‘GET’
) {
event.respondWith(
fetch(event.request)
.catch(() => {
return caches.match(‘offlineApp’);
})
Стало
self.addEventListener(‘fetch’, event => {
if (request.method === ‘GET’ &&
request.headers.get(‘accept’).includes(‘text/html’) &&
) {
event.respondWith(
fetch(event.request)
.catch(() => {
return caches.match(‘offlineApp’);
})
Стало
self.addEventListener(‘fetch’, event => {
if (request.method === ‘GET’ &&
request.headers.get(‘accept’).includes(‘text/html’) &&
!request.headers.has(‘range’)) {
event.respondWith(
fetch(event.request)
.catch(() => {
return caches.match(‘offlineApp’);
})
Аналитика
Page
Page
get
Google
Analytics
DATA
Index DB
Index DB
- асинхронно
Index DB
- асинхронно
- транзакции
Index DB
- асинхронно
- транзакции
- индексы
Index DB
- асинхронно
- транзакции
- индексы
- большие объемы
Index DB
- асинхронно
- транзакции
- индексы
- большие объемы
- работа из SW
Index DB
- асинхронно
- транзакции
- индексы
- большие объемы
- работа из SW
Page
Page
pageview
DB
Page
pageview
DB
get
DATA
GA
+10% аудитории
Page DB
get
DATA
GA
Что мы имеем
на данный момент
Данные о посещаемости
Данные о посещаемости
3000 из Offline
30% - Desktop
Блокировка сайтов
302 редирект
Блокировка сайтов
Блокировка сайтов
self.addEventListener(‘fetch’, event => {
event.respondWith(
fetch(request)
.then(response => {
		
if (response.status === 0) {
return caches.match(WARNING);
}
		
if (response) return response;
		
})
.catch(...)
Блокировка сайтов
self.addEventListener(‘fetch’, event => {
event.respondWith(
fetch(request)
.then(response => {
		
if (response.status === 0) {
return caches.match(WARNING);
}
		
if (response) return response;
		
})
.catch(...)
Ошибки сервера 5xx
Ошибки сервера 5xx
self.addEventListener(‘fetch’, event => {
event.respondWith(
fetch(request)
.then(response => {
		
if (response.status >= 500 || response.status <= 504) {
return caches.match(WARNING);
}
		
if (response) return response;
		
})
.catch(...)
Ошибки сервера 5xx
self.addEventListener(‘fetch’, event => {
event.respondWith(
fetch(request)
.then(response => {
		
if (response.status >= 500 || response.status <= 504) {
return caches.match(WARNING);
}
		
if (response) return response;
		
})
.catch(...)
back end
back end front end
back end front end
PWA
Edge Firefox Chrome Opera
11 52
53
54
55
56
IE
11 15
57
58
59
60
61
49
56
49
10
10.1 44
45
46
Edge Firefox Chrome Opera iOS Safari
Android
Browser
Chrome for
Android
11 52
53
54
55
56
IE
11 15
57
58
59
60
61
49
56
49
10
10.1 44
45
46
10.2
10.3
9.3
4.4.4
56
4.4
57
Резюме
- РАСШИРЕНИЕ ДОСТУПНОСТИ САЙТА
- ОБРАБОТКА ОШИБОК СЕРВЕРА
- РАБОТАЕТ УЖЕ СЕЙЧАС
Вопросы?
Максим Чагин
e-mail: MaxChagin@gmail.com
Алексей Чернышев
e-mail: mr.lozchka@gmail.com
skype: mr.lozchka
Ссылки по теме:
rg.ru/front2017/

More Related Content

What's hot

Retro vs Volley
Retro vs VolleyRetro vs Volley
Retro vs VolleyArtjoker
 
Дмитрий Милых «Деплой Django-проекта с помощью Fabric»
Дмитрий Милых «Деплой Django-проекта с помощью Fabric»Дмитрий Милых «Деплой Django-проекта с помощью Fabric»
Дмитрий Милых «Деплой Django-проекта с помощью Fabric»DataArt
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15MoscowJS
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in railssergeymoiseev
 

What's hot (7)

Retro vs Volley
Retro vs VolleyRetro vs Volley
Retro vs Volley
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Дмитрий Милых «Деплой Django-проекта с помощью Fabric»
Дмитрий Милых «Деплой Django-проекта с помощью Fabric»Дмитрий Милых «Деплой Django-проекта с помощью Fabric»
Дмитрий Милых «Деплой Django-проекта с помощью Fabric»
 
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
"Dependency Injection. JavaScript.", Сергей Камардин, MoscowJS 15
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
Python infrastructure from scratch
Python infrastructure from scratchPython infrastructure from scratch
Python infrastructure from scratch
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in rails
 

Similar to Как мы запустили offline-версию сайта RG.RU / Алексей Чернышев, Максим Чагин (Российская Газета)

[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...
[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...
[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...Maxim Salnikov
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
Принципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраПринципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраYandex
 
Медиавозможности HTML5. WebRTC
Медиавозможности HTML5. WebRTCМедиавозможности HTML5. WebRTC
Медиавозможности HTML5. WebRTCoelifantiev
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest
 
"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндекс"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндексit-people
 
Страх и ненависть в Event Bus
Страх и ненависть в Event BusСтрах и ненависть в Event Bus
Страх и ненависть в Event Bus0leGG
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»DevDay
 
Дополненная Реальность в Облаке
Дополненная Реальность в ОблакеДополненная Реальность в Облаке
Дополненная Реальность в ОблакеGeeksLab Odessa
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJSYura Bogdanov
 
JPoint 2017 - Where is my service, dude?
JPoint 2017 - Where is my service, dude?JPoint 2017 - Where is my service, dude?
JPoint 2017 - Where is my service, dude?Viet Nguyen
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
Беспроводные контроллеры нового поколения (NGWC) – настройка беспроводного до...
Беспроводные контроллеры нового поколения (NGWC) – настройка беспроводного до...Беспроводные контроллеры нового поколения (NGWC) – настройка беспроводного до...
Беспроводные контроллеры нового поколения (NGWC) – настройка беспроводного до...Cisco Russia
 
Secr презентация гардиенков
Secr презентация гардиенковSecr презентация гардиенков
Secr презентация гардиенковLuxoftTraining
 

Similar to Как мы запустили offline-версию сайта RG.RU / Алексей Чернышев, Максим Чагин (Российская Газета) (20)

[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...
[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...
[Russian] Сервис-воркеры: используем накопленные знания для светлого будущего...
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
Service workers
Service workersService workers
Service workers
 
SSRS не для dba
SSRS не для dbaSSRS не для dba
SSRS не для dba
 
Chef
ChefChef
Chef
 
Принципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраПринципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометра
 
Медиавозможности HTML5. WebRTC
Медиавозможности HTML5. WebRTCМедиавозможности HTML5. WebRTC
Медиавозможности HTML5. WebRTC
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлениюCodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
CodeFest 2013. Родионов А. — От Selenium к Watir — путь к просветлению
 
"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндекс"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндекс
 
Страх и ненависть в Event Bus
Страх и ненависть в Event BusСтрах и ненависть в Event Bus
Страх и ненависть в Event Bus
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
 
Дополненная Реальность в Облаке
Дополненная Реальность в ОблакеДополненная Реальность в Облаке
Дополненная Реальность в Облаке
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJS
 
JPoint 2017 - Where is my service, dude?
JPoint 2017 - Where is my service, dude?JPoint 2017 - Where is my service, dude?
JPoint 2017 - Where is my service, dude?
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
UA Mobile 2012
UA Mobile 2012UA Mobile 2012
UA Mobile 2012
 
Беспроводные контроллеры нового поколения (NGWC) – настройка беспроводного до...
Беспроводные контроллеры нового поколения (NGWC) – настройка беспроводного до...Беспроводные контроллеры нового поколения (NGWC) – настройка беспроводного до...
Беспроводные контроллеры нового поколения (NGWC) – настройка беспроводного до...
 
Secr презентация гардиенков
Secr презентация гардиенковSecr презентация гардиенков
Secr презентация гардиенков
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Как мы запустили offline-версию сайта RG.RU / Алексей Чернышев, Максим Чагин (Российская Газета)