Яндекс
Авто 2.0 на Node.js
Вячеслав Олиянчук,
разработчик интерфейсов
auto2.yandex.ru
Пример с сайта nodejs.org
var http = require('http');
http
.createServer(function (req, res) {
res.writeHead(200, { 'Conte...
Архитектура
Model
ControllerView
User
Model
Ресурсы
ControllerView
User
Чем ходить за данными?
Q, When, Vow
12
Q, When, Vow
mean time ops/sec
Q 10.982ms 91
When 11.360ms 88
Vow 1.373ms 729
13
Q, When, Vow
mean time ops/sec
Q 10.982ms 91
When 11.360ms 88
Vow 1.373ms 729
bit.ly/vow-speed
14
Как ходить за данными?
Ресурс: основные методы
— Resource_Catalog.prototype.prepareRequestOpts
— Resource_Catalog.prototype.processResultData
— R...
Доверяй, но проверяй
Ресурс: настройки
Resource_Complectations.cfg = {
timeout: 300
};
18
Ресурс: настройки
Resource_Complectations.cfg = {
timeout: 300,
maxRetries: 2
};
19
Ресурс: настройки
Resource_Complectations.cfg = {
timeout: 300,
maxRetries: 2,
cache: {
get: { keyTTL: 1000 * 60 * 60 }
}
...
Если ответа нет?
Сервис не доступен. Попробуйте
подождать и обновить страницу...
Ресурс: обязательность
// Only mandatory resources can reject promises
return resource('searcher', { ... }, { isMandatory:...
/nodules/asker
/nodules/vow-asker
Model
Ресурсы
ControllerView
User
Model
Ресурсы
Controller
Провайдеры
View
User
Контроллер: декларация блоков
{
block: 'b-content',
content: [ {
block : 'b-content-left',
data : [ 'catalog', 'related', ...
Контроллер: провайдеры
Page.dataProviderDecl('related', 'catalog', function(data) {
return resource('related', { ... })
.t...
Model
Ресурсы
Controller
Провайдеры
View
User
Model
Ресурсы
Controller
Провайдеры
View
БЭМ
User
Формируем bemjson
bit.ly/bemjson-ref
33
Накладываем bemhtml
Online bemhtml compiler: bit.ly/bem-online
34
Model
Ресурсы
Controller
Провайдеры
View
БЭМ
User
Model
Ресурсы
Controller
Провайдеры
View
БЭМ
User
Сусанин: добавляем роут
susanin.addRoute({
name: 'default',
pattern: '/(<controller>(/))',
conditions: { controller: [ 'se...
Сусанин: работа с роутом
var route = susanin.getRouteByName('default');
route.build(routeParams);
39
Сусанин: работа с роутом
var route = susanin.getRouteByName('default');
route.build(routeParams);
/*
/search?mark=bmw
/bmw...
Сусанин: строим ссылки
data.link('route-name', {
mark: data.mark.id,
model: data.model.id,
year_from: data.generation.year...
/nodules/susanin
Нагрузочное
тестирование
RPS
45
Время ответа
Квантиль мс
75% 244
90% 332
95% 404
96% 432
97% 471
99% 616
46
Профит
Frontend
Node.js App
Backend
JSON API
Backend
JSON API
Backend
XML API
Client side
Браузер
Спасибо за внимание!
готов к троллингу!
Вячеслав Олиянчук, разработчик интерфейсов.
Задавайте вопросы: @miripiruni
Пробуйте модули: github.com/...
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js
Upcoming SlideShare
Loading in …5
×

Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js

1,691 views

Published on

В докладе рассказывается о том, как наша команда запускала проект Авто 2.0 на Node.js. Обсуждаются проблемы деплоя, архитектура сервиса и некоторые особенности в Node.js, которые удалось обойти в процессе эксплуатации.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,691
On SlideShare
0
From Embeds
0
Number of Embeds
1,091
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Вячеслав Олиянчук — Яндекс.Авто 2.0 на Node.js

  1. 1. Яндекс Авто 2.0 на Node.js Вячеслав Олиянчук, разработчик интерфейсов auto2.yandex.ru
  2. 2. Пример с сайта nodejs.org var http = require('http'); http .createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello Worldn'); }).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/'); 3
  3. 3. Архитектура
  4. 4. Model ControllerView User
  5. 5. Model Ресурсы ControllerView User
  6. 6. Чем ходить за данными?
  7. 7. Q, When, Vow 12
  8. 8. Q, When, Vow mean time ops/sec Q 10.982ms 91 When 11.360ms 88 Vow 1.373ms 729 13
  9. 9. Q, When, Vow mean time ops/sec Q 10.982ms 91 When 11.360ms 88 Vow 1.373ms 729 bit.ly/vow-speed 14
  10. 10. Как ходить за данными?
  11. 11. Ресурс: основные методы — Resource_Catalog.prototype.prepareRequestOpts — Resource_Catalog.prototype.processResultData — ResourceError 16
  12. 12. Доверяй, но проверяй
  13. 13. Ресурс: настройки Resource_Complectations.cfg = { timeout: 300 }; 18
  14. 14. Ресурс: настройки Resource_Complectations.cfg = { timeout: 300, maxRetries: 2 }; 19
  15. 15. Ресурс: настройки Resource_Complectations.cfg = { timeout: 300, maxRetries: 2, cache: { get: { keyTTL: 1000 * 60 * 60 } } }; 20
  16. 16. Если ответа нет?
  17. 17. Сервис не доступен. Попробуйте подождать и обновить страницу...
  18. 18. Ресурс: обязательность // Only mandatory resources can reject promises return resource('searcher', { ... }, { isMandatory: true }) .then(function(searchResults) { ... }); 23
  19. 19. /nodules/asker /nodules/vow-asker
  20. 20. Model Ресурсы ControllerView User
  21. 21. Model Ресурсы Controller Провайдеры View User
  22. 22. Контроллер: декларация блоков { block: 'b-content', content: [ { block : 'b-content-left', data : [ 'catalog', 'related', 'articles', ... ] } ] } 27
  23. 23. Контроллер: провайдеры Page.dataProviderDecl('related', 'catalog', function(data) { return resource('related', { ... }) .then(function(related) { data.related = related; }); }); 28
  24. 24. Model Ресурсы Controller Провайдеры View User
  25. 25. Model Ресурсы Controller Провайдеры View БЭМ User
  26. 26. Формируем bemjson bit.ly/bemjson-ref 33
  27. 27. Накладываем bemhtml Online bemhtml compiler: bit.ly/bem-online 34
  28. 28. Model Ресурсы Controller Провайдеры View БЭМ User
  29. 29. Model Ресурсы Controller Провайдеры View БЭМ User
  30. 30. Сусанин: добавляем роут susanin.addRoute({ name: 'default', pattern: '/(<controller>(/))', conditions: { controller: [ 'search', 'index', ... ] }, defaults: { controller: 'index' }, data: { action: 'build', directory: 'pages/desktop' } }); 38
  31. 31. Сусанин: работа с роутом var route = susanin.getRouteByName('default'); route.build(routeParams); 39
  32. 32. Сусанин: работа с роутом var route = susanin.getRouteByName('default'); route.build(routeParams); /* /search?mark=bmw /bmw /hash#!/bmw */ 40
  33. 33. Сусанин: строим ссылки data.link('route-name', { mark: data.mark.id, model: data.model.id, year_from: data.generation.years.from, year_to: data.generation.years.to }); 41
  34. 34. /nodules/susanin
  35. 35. Нагрузочное тестирование
  36. 36. RPS 45
  37. 37. Время ответа Квантиль мс 75% 244 90% 332 95% 404 96% 432 97% 471 99% 616 46
  38. 38. Профит
  39. 39. Frontend Node.js App Backend JSON API Backend JSON API Backend XML API Client side Браузер
  40. 40. Спасибо за внимание!
  41. 41. готов к троллингу! Вячеслав Олиянчук, разработчик интерфейсов. Задавайте вопросы: @miripiruni Пробуйте модули: github.com/nodules/ Я

×