Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Keeping Wikipedia fast [WeLoveSpeed]

Keeping Wikipedia fast [WeLoveSpeed]


Peter Hedenskog

September 20, 2019

More Decks by Peter Hedenskog

Other Decks in Technology


  1. Keeping Wikipedia fast Peter Hedenskog - @soulislove

  2. Keeping Wikipedia fast Peter Hedenskog - @soulislove

  3. @soulislove

  4. @soulislove Sweden France

  5. @soulislove

  6. @soulislove

  7. What to do? @soulislove

  8. @soulislove

  9. @soulislove

  10. @soulislove NO!!!!!

  11. @soulislove Jean Bernadotte?

  12. @soulislove

  13. @soulislove Sweden France

  14. @soulislove

  15. @soulislove

  16. @soulislove

  17. Lets talk about performance @soulislove

  18. @soulislove Today Our setup RUM & Synthetic Learnings I’ve got

    the last four years Case study one regression
  19. @soulislove https://news.ycombinator.com/item?id=20903868

  20. @soulislove https://phabricator.wikimedia.org

  21. @soulislove https://grafana.wikimedia.org

  22. Why is performance important? @soulislove

  23. We want to bring free knowledge to the world independently

    of where you live and your economic status. @soulislove
  24. @soulislove

  25. Engineers/dev cares too! @soulislove

  26. Why is performance hard (for us)? @soulislove

  27. Keeping Wikipedia fast @soulislove https://news.ycombinator.com/item?id=20903868 Keeping Wikipedia fast is easy

  28. @soulislove

  29. The Wikipedia Performance Team Challenge All Wikis are different (JS/CSS)

    All pages are different (JS/CSS) All users are different (JS/CSS) @soulislove
  30. Our history of performance testing @soulislove

  31. PHP -> RUM-> Synthetic @soulislove

  32. RUM @soulislove

  33. @soulislove Metrics from real users Sampled (1/100) Buckets: platform, browser,

    location https://github.com/wikimedia/mediawiki-extensions-NavigationTiming https://grafana.wikimedia.org/d/000000143/navigation-timing?refresh=5m&orgId=1
  34. @soulislove

  35. @soulislove

  36. @soulislove

  37. How we use RUM @soulislove Metrics from “all” users/scenarios Median,

    75, 95, 99 - percentiles Alert on regressions First Paint / LoadEventEnd BFF with synthetic
  38. Synthetic testing @soulislove

  39. @soulislove

  40. @soulislove Browsertime + WebPageReplay

  41. That flat line @soulislove

  42. Deviation @soulislove

  43. How we use synthetic @soulislove Fixing the chaos (or creating

    more?) Wayback machine Three URLs per alert First Visual Change BFF with RUM
  44. Learnings: Synthetics @soulislove

  45. Validate metrics! @soulislove

  46. @soulislove

  47. https://phabricator.wikimedia.org/T187981 @soulislove

  48. @soulislove

  49. page1 != page2 @soulislove

  50. @soulislove Deviation

  51. @soulislove User journey: second view

  52. @soulislove User journey: second view

  53. Server matters! @soulislove

  54. 1. AWS vs GCS vs other cloud providers 2. Servers

    change over time (what runs on the same physical server?) 3. C4.xlarge != C4.xlarge @soulislove
  55. @soulislove https://phabricator.wikimedia.org/T192138 https://phabricator.wikimedia.org/T192138 https://phabricator.wikimedia.org/T192138 https://youtu.be/pYbgcDfM2Ts?t=1575

  56. Testing multiple steps are hard @soulislove

  57. How long time do your user stay on each page?

    How long do browsers keep HTTP connections open? @soulislove
  58. Browser versions matter @soulislove

  59. None
  60. Know when browsers are updated!!! @soulislove

  61. Learnings: RUM @soulislove

  62. RUM can be good for finding regressions @soulislove

  63. None
  64. User Timing API != what shows on screen @soulislove

  65. @soulislove

  66. New element timings are better! @soulislove

  67. @soulislove

  68. Browser versions are important @soulislove

  69. @soulislove

  70. @soulislove

  71. The hidden tabs incident @soulislove

  72. @soulislove The idea: async all the things … use setTimeout

    to run things later.
  73. @soulislove https://phabricator.wikimedia.org/T146510 setTimeout

  74. @soulislove https://phabricator.wikimedia.org/T146510

  75. @soulislove 10% of the traffics opens in another tab!

  76. What are we missing? @soulislove

  77. @soulislove

  78. @soulislove RUM Higher sample rate Buckets per page type Which

    metrics are important?
  79. @soulislove Synthetic Real mobile phones (T197847) Easier for devs to

    add tests (T225416)
  80. Case study: 3/9-2019 incident @soulislove https://phabricator.wikimedia.org/T231929

  81. @soulislove Firefox

  82. @soulislove Firefox

  83. @soulislove Chrome

  84. @soulislove Firefox

  85. @soulislove WebPageTest

  86. @soulislove

  87. @soulislove TTFB? No: because visible with WebPageReplay

  88. @soulislove ttfb?

  89. @soulislove ttfb?

  90. @soulislove ttfb?

  91. @soulislove Screenshots/video Diff the HAR using https://compare.sitespeed.io or size per

    content type in Graphite
  92. @soulislove ttfb?

  93. @soulislove We got 311 span class=“cs1-visible-error”!!! Citation errors: not shown

    to readers https://en.wikipedia.org/wiki/Help:CS1_errors
  94. @soulislove Credits Pippi and father - SVT Quick et Flupke

    - Hergé The king shouting - Expressen The scream - Edward Munch Napoleon - Horace Vernet Engineers India Space Shuttle - Expressen Various pictures of Carl Gustaf - Swedish tax payers through the apanage
  95. @soulislove Questions?? @soulislove peter@wikimedia.org