Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Hwdi 0.2 реализация движения данных в owox BI ROI

114 views

Published on

Макс Волошин, Team Lead, OWOX
6 февраля, 2016

Published in: Education
  • Be the first to comment

  • Be the first to like this

Hwdi 0.2 реализация движения данных в owox BI ROI

  1. 1. Ежедневно мы импортируем данные о расходах на > $ 200 000 для > 1 500 проектов
  2. 2. OWOX BI
  3. 3. UI: WebComponents (Polymer), Material Design
  4. 4. Backend: Microservices (PHP/Java)
  5. 5. OWOX BI ROI: PHP 5.5 и MySQL 5.6 (Percona Server)
  6. 6. Сегодня в программе 1.Моделирование движения данных 2.Трудности работы с внешними API 3.Решения проблем эксплуатации продукта
  7. 7. 1/3: Моделирование движения данных
  8. 8. <?php //делаем запрос к рекламному сервису //отправляем полученные данные в Google Analytics //PROFIT!
  9. 9. Спасибо за внимание! Вопросы?
  10. 10. Не так быстро! рекламные сервисы и Google Analytics имееют различные лимиты обращения к API некоторые рекламные сервисы отдают информацию о затратах в асинхронном режиме данные в Google Analytics загружаются асинхронно
  11. 11. <?php while (/* нельзя делать запрос к рекламному сервису */) { sleep(60); } //делаем запрос к рекламному сервису while (/* нельзя делать запрос к GA */) { sleep(60); } //отправляем полученные данные в Google Analytics while (/* данные недоступны в GA */) { sleep(60); } //PROFIT!
  12. 12. Получение расходов и их загрузка это разные процессы (сущности)
  13. 13. Unix way: делай одно дело, но делай хорошо
  14. 14. Ads Export GA Import
  15. 15. Делаем “Minimum Viable Product”
  16. 16. waiting active formation completed error tasks runner task process task process ... GA Import f w e a c w f e w a c a w a c f w e Rules-Based Programming daemon N workers task = rules + action
  17. 17. Алгоритм задачи 1.найти процессы в состоянии X 2.проверить выполнение условий Y 3.перевести в состояние Zи/или поставить отдельную задачу на перевод в новое состояние
  18. 18. GA Import f w e a c w f e w a c a w a c f w e
  19. 19. createImportTasks GA Import f w e a c w f e w a c a w a c f w e waiting active error
  20. 20. importCosts #1 GA Import f w e a c w f e w a c a w a c f w e active completed error importCosts #2 importCosts #3 importCosts #4
  21. 21. importCosts #1 GA Import f w e a c w f e w a c a w a c f w e active completed error importCosts #2 importCosts #3 importCosts #4
  22. 22. importCosts #1 GA Import f w e a c w f e w a c a w a c f w e active completed error importCosts #2 importCosts #3 importCosts #4
  23. 23. importCosts #1 GA Import f w e a c w f e w a c a w a c f w e active completed error importCosts #2 importCosts #3 importCosts #4
  24. 24. PROFIT!
  25. 25. Ads Export GA Import N statesK states f w e a c w f e a c w a c f w f w e a c w f e a c w a c f w UI dashboard K * N states
  26. 26. Ads Export GA Import GA Upload N states M statesK states f w e a c w f e a c w a c f w f w e a c w f e a c w a c f w f w e a c w f e a c w a c f w UI dashboard K * N * M states
  27. 27. Detect Changes Ads Export GA Import GA Upload N states M statesK statesL states f w e a c w f e a c w a c f w f w e a c w f e a c w a c f w f w e a c w f e a c w a c f w f w e a c w f e a c w a c f w UI dashboard L * K * N * M states
  28. 28. Detect Changes Ads Export GA Import GA Upload Calc Diff UI dashboard L * K * N * M * P states N states M statesK statesL states P states f w e a c w f e a c w a c f w f w e a c w f e a c w a c f w f w e a c w f e a c w a c f w f w e a c w f e a c w a c f w f w e a c w f e a c w a c f w
  29. 29. L * K * N * M * P states!
  30. 30. Нужно моделировать всё движение данных как один процесс!
  31. 31. Почему? 1.не нужно исскуственно формировать состояние UI dashboard 2.нет лишних состояний в UI dashboard 3.код задач снова становится простым 4.выборки БД снова стали простыми и быстрыми
  32. 32. PROFIT!
  33. 33. 2/3: Трудности работы с внешними API
  34. 34. Неидеальный мир внешних API 1.не все знают чем отличаются 4xx от 5xx 2.кастомные названия временных зон 3.кастомные названия валют 4.неконсистентные данные в разных методах (без версионирования) 5.нестабильные точки доступа 6.большие ответы без возможности партиционирования
  35. 35. Давайте своим примером показывать как нужно разрабатывать API
  36. 36. Совет по работе со службами поддержки Вы можете быть бесконечно правы. Но какой в этом толк, если запрос и ответ вместе с заголовками не были сохранены
  37. 37. 3/3: Решения проблем эксплуатации продукта
  38. 38. Никто не любит разбираться с проблемами, поэтому в нашей команде этим занимаются все
  39. 39. Держим руку на пульсе Ежедневные уведомления на почту о задачах с ошибками/JS ошибках Мгновенные уведомления в Slack о ошибках приложения/сервера ВАЖНО: уведомление это всегда действие!
  40. 40. Мониторинг очередей состояний
  41. 41. Мониторинг очередей состояний
  42. 42. Мониторинг жизненного цикла потока
  43. 43. Мониторинг жизненного цикла потока
  44. 44. Спасибо за внимание! Вопросы?

×