ਇੱਕ ਉੱਚ-ਟ੍ਰੈਫਿਕ ਵਾਲੀ ਵੀਡੀਓ ਸਾਈਟ ਨੇ ਆਪਣੀ ਟ੍ਰੈਂਡਿੰਗ-ਪੇਜ ਫੀਡ ਲਈ ਡਾਟਾਬੇਸ ਕੁਐਰੀਆਂ ਨੂੰ ਪ੍ਰਤੀ ਮਿੰਟ 4,000 ਤੋਂ ਘਟਾ ਕੇ 50 ਤੋਂ ਵੀ ਘੱਟ ਕਰ ਦਿੱਤਾ ਅਤੇ Varnish ਅਤੇ Edge Side Includes (ESI) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਪੂਰੇ-ਪੇਜ ਕੈਸ਼ਿੰਗ (whole-page caching) ਤੋਂ ਫਰੈਗਮੈਂਟ ਕੈਸ਼ਿੰਗ (fragment caching) 'ਤੇ ਜਾ ਕੇ ਆਪਣੀ 95ਵੀਂ-ਪਰਸੈਂਟਾਈਲ ਰਿਸਪਾਂਸ ਸਮੇਂ ਨੂੰ 380 ms ਤੋਂ ਘਟਾ ਕੇ 40 ms ਕਰ ਦਿੱਤਾ।

ਸਾਈਟ ਨੂੰ ਵੱਖਰੀ ਕੈਸ਼ ਰਣਨੀਤੀ ਦੀ ਲੋੜ ਕਿਉਂ ਸੀ

ਫਰੰਟ ਪੇਜ ਜੋ ਦਿਨ ਦੇ ਸਭ ਤੋਂ ਵੱਧ ਦੇਖੇ ਜਾਣ ਵਾਲੇ ਕਲਿੱਪ ਦਿਖਾਉਂਦਾ ਹੈ, ਉਹ ਇੱਕ ਖੇਤਰ ਵਿੱਚ ਲਗਭਗ ਹਰ ਵਿਜ਼ਟਰ ਲਈ ਇੱਕੋ ਜਿਹਾ ਹੁੰਦਾ ਹੈ: ਲੱਖਾਂ ਯੂਜ਼ਰਾਂ ਲਈ ਲਗਭਗ 95 ਪ੍ਰਤੀਸ਼ਤ HTML ਇੱਕੋ ਜਿਹਾ ਹੁੰਦਾ ਹੈ, ਜਦੋਂ ਕਿ ਬਾਕੀ 5 ਪ੍ਰਤੀਸ਼ਤ ਵਿੱਚ ਨਿੱਜੀ ਡੇਟਾ ਹੁੰਦਾ ਹੈ ਜਿਵੇਂ ਕਿ ਲੌਗ-ਇਨ ਕੀਤੇ ਹੋਏ ਯੂਜ਼ਰ ਦਾ ਨਾਮ ਜਾਂ ਸਰਚ ਬਾਕਸ। ਇੰਜੀਨੀਅਰਿੰਗ ਟੀਮ ਦੇ ਸਾਹਮਣੇ ਦੋ ਅਣਚਾਹੇ ਵਿਕਲਪ ਸਨ:

  • ਪੂਰੇ ਪੇਜ ਨੂੰ ਕੈਸ਼ ਕਰਨਾ ਅਤੇ ਲੌਗ-ਇਨ ਕੀਤੇ ਹੋਏ ਯੂਜ਼ਰਾਂ ਨੂੰ ਪੁਰਾਣਾ (stale) ਨਿੱਜੀ ਡੇਟਾ ਦਿਖਾਉਣ ਦਾ ਜੋਖਮ ਲੈਣਾ।
  • ਕੈਸ਼ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਬਾਈਪਾਸ ਕਰਨਾ ਅਤੇ ਹਰ ਰਿਕਵੈਸਟ ਨੂੰ ਡਾਟਾਬੇਸ 'ਤੇ ਬੋਝ ਪਾਉਣ ਦੇਣਾ।

ਦੋਵੇਂ ਤਰੀਕੇ ਯੂਜ਼ਰ ਅਨੁਭਵ ਨੂੰ ਖਰਾਬ ਕਰਦੇ ਸਨ। ਟੀਮ ਨੇ ESI ਵੱਲ ਮੁੱਖ ਕਰਿਆ, ਜੋ ਕਿ ਇੱਕ ਅਜਿਹੀ ਤਕਨੀਕ ਹੈ ਜੋ ਇੱਕ ਰਿਵਰਸ-ਪ੍ਰੌਕਸੀ (reverse-proxy) ਨੂੰ ਨੈੱਟਵਰਕ ਦੇ ਕਿਨਾਰੇ (edge) 'ਤੇ ਸੁਤੰਤਰ ਰੂਪ ਵਿੱਚ ਕੈਸ਼ ਕੀਤੇ ਗਏ ਫਰੈਗਮੈਂਟਸ ਤੋਂ ਇੱਕ ਪੇਜ ਤਿਆਰ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦੀ ਹੈ।

ਫਰੈਗਮੈਂਟ ਕੈਸ਼ਿੰਗ ਨੂੰ ਕਿਵੇਂ ਲਾਗੂ ਕੀਤਾ ਗਿਆ

Varnish, ਜੋ ਕਿ ਇੱਕ ਓਪਨ-ਸੋਰਸ HTTP ਐਕਸਲਰੇਟਰ ਹੈ, ਨੇ ਪੇਜ ਨੂੰ ਤਿੰਨ ਬਦਲਣਯੋਗ ਹਿੱਸਿਆਂ ਵਾਲੇ ਇੱਕ ਢਾਂਚੇ (skeleton) ਵਜੋਂ ਲਿਆ:

  • ਵੀਡੀਓ ਗਰਿੱਡ (Video grid) – ਟ੍ਰੈਂਡਿੰਗ ਵੀਡੀਓਜ਼ ਦੀ ਮਹਿੰਗੀ, ਖੇਤਰ-ਵਿਆਪੀ ਸੂਚੀ। ਇਸ ਨੂੰ 60 ਸੈਕਿੰਡ ਲਈ ਕੈਸ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਅਕਸਰ ਬਦਲਦੀ ਰਹਿੰਦੀ ਹੈ ਪਰ ਹਰ ਅਨਾਮ (anonymous) ਵਿਜ਼ਟਰ ਲਈ ਇੱਕੋ ਜਿਹੀ ਹੁੰਦੀ ਹੈ।
  • ਭਾਸ਼ਾ ਬਦਲਣ ਵਾਲਾ (Language switcher) – ਇੱਕ ਸਟੈਟਿਕ UI ਐਲੀਮੈਂਟ ਜੋ ਬਹੁਤ ਘੱਟ ਬਦਲਦਾ ਹੈ। ਇਸ ਨੂੰ 24 ਘੰਟਿਆਂ ਲਈ ਕੈਸ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।
  • ਹੈਡਰ (Header) – ਇਕਲੌਤਾ ਅਸਲ ਨਿੱਜੀ ਫਰੈਗਮੈਂਟ (ਯੂਜ਼ਰ ਦਾ ਨਾਮ, ਅਵਤਾਰ, ਨੋਟੀਫਿਕੇਸ਼ਨ)। ਇਸ ਨੂੰ ਕਦੇ ਵੀ ਕੈਸ਼ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ; Varnish ਹਰ ਵਾਰ ਰਿਕਵੈਸਟ ਨੂੰ ਐਪਲੀਕੇਸ਼ਨ ਸਰਵਰ ਨੂੰ ਫਾਰਵਰਡ ਕਰਦਾ ਹੈ।

ਜਦੋਂ ਕੋਈ ਰਿਕਵੈਸਟ ਆਉਂਦੀ ਹੈ, ਤਾਂ Varnish ਕੈਸ਼ ਕੀਤੇ ਹੋਏ ਢਾਂਚੇ (skeleton) ਨੂੰ ਸਰਵ ਕਰਦਾ ਹੈ, ਆਪਣੇ ਲੋਕਲ ਸਟੋਰ ਤੋਂ ਦੋ ਕੈਸ਼ ਕੀਤੇ ਫਰੈਗਮੈਂਟਸ ਲੈਂਦਾ ਹੈ, ਅਤੇ ਬੈਕਐਂਡ ਤੋਂ ਲਾਈਵ ਹੈਡਰ ਨੂੰ ਇਨਸਰਟ ਕਰਦਾ ਹੈ।

ਮਹੱਤਵਪੂਰਨ ਅੰਕੜੇ

ਬਦਲਾਅ ਤੋਂ ਬਾਅਦ:

  • ਟ੍ਰੈਂਡਿੰਗ ਪੇਜ ਲਈ ਡਾਟਾਬੇਸ ਲੋਡ ਪ੍ਰਤੀ ਮਿੰਟ 4,000 ਕੁਐਰੀਆਂ ਤੋਂ ਘਟ ਕੇ 50 ਤੋਂ ਵੀ ਘੱਟ ਹੋ ਗਿਆ।
  • 95ਵੀਂ-ਪਰਸੈਂਟਾਈਲ ਲੇਟੈਂਸੀ 380 ms ਤੋਂ 40 ms ਤੱਕ ਡਿੱਗ ਗਈ।

ਰੋਲਆਊਟ ਤੋਂ ਤਿੰਨ ਵਿਵਹਾਰਕ ਸਬਕ

1. ਗ੍ਰੇਸ ਪੀਰੀਅਡ (Grace periods) ਕੈਸ਼ ਮਿਸਿਜ਼ ਨੂੰ ਸੁਚਾਰੂ ਬਣਾਉਂਦੇ ਹਨ ਜਦੋਂ ਕਿਸੇ ਫਰੈਗਮੈਂਟ ਦੀ TTL ਮਿਆਦ ਖਤਮ ਹੋ ਜਾਂਦੀ ਹੈ, ਤਾਂ Varnish ਆਮ ਤੌਰ 'ਤੇ ਤਾਜ਼ਾ ਸਮੱਗਰੀ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਰੁਕ ਜਾਂਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਲੇਟੈਂਸੀ ਵਿੱਚ ਅਚਾਨਕ ਵਾਧਾ ਹੁੰਦਾ ਹੈ ਜੋ ਬੈਕਐਂਡ ਕਾਲਾਂ ਦੇ ਇੱਕ "ਥੰਡਰਿੰਗ ਹਰਡ" (thundering herd) ਵਿੱਚ ਬਦਲ ਸਕਦਾ ਹੈ। ਇੱਕ ਗ੍ਰੇਸ ਪੀਰੀਅਡ ਕੌਂਫਿਗਰ ਕਰਕੇ, Varnish ਪੁਰਾਣੇ ਫਰੈਗਮੈਂਟ ਨੂੰ ਸਰਵ ਕਰਨਾ ਜਾਰੀ ਰੱਖਦਾ ਹੈ ਜਦੋਂ ਕਿ ਉਹ ਪਿਛੋਕੜ (background) ਵਿੱਚ ਚੁੱਪਚਾਪ ਕੈਸ਼ ਨੂੰ ਰਿਫ੍ਰੈਸ਼ ਕਰਦਾ ਹੈ। ਯੂਜ਼ਰਾਂ ਨੂੰ ਕੋਈ ਰੁਕਾਵਟ ਨਹੀਂ ਦਿਖਾਈ ਦਿੰਦੀ; ਬੈਕਐਂਡ ਨੂੰ ਇੱਕ ਸਥਿਰ, ਪ੍ਰਬੰਧਨਯੋਗ ਰਿਕਵੈਸਟ ਰੇਟ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ।

2. ਅਨਾਮ ਫਰੈਗਮੈਂਟਸ ਲਈ ਕੁਕੀਜ਼ ਨੂੰ ਹਟਾਓ ਹਰ ਰਿਕਵੈਸਟ ਨਾਲ ਜੁੜੀਆਂ ਕੁਕੀਜ਼ Varnish ਨੂੰ ਹਰ ਰਿਕਵੈਸਟ ਨੂੰ ਵਿਲੱਖਣ ਮੰਨਣ ਲਈ ਮਜਬੂਰ ਕਰਦੀਆਂ ਹਨ, ਜਿਸ ਨਾਲ ਕੈਸ਼ ਹਿੱਟਸ ਖਤਮ ਹੋ ਜਾਂਦੇ ਹਨ। ਟੀਮ ਨੇ ਵੀਡੀ