আমি গতিশীলভাবে উত্পন্ন পৃষ্ঠাগুলি (পিএইচপি-এফপিএম, এনজিআইএনএক্স) ক্যাশে করছি এবং তাদের সামনে বার্নিশ রেখেছি, এটি খুব ভালভাবে কাজ করে।
তবে একবার ক্যাশের সময়সীমা শেষ হয়ে গেলে আমি এটি দেখতে পেলাম:
- নতুন ক্লায়েন্ট অনুরোধ পৃষ্ঠা
- বার্নিশ ক্যাশে সময়সীমা স্বীকৃতি দেয়
- ক্লায়েন্ট অপেক্ষা
- বার্নিশ ব্যাকএন্ড থেকে নতুন পৃষ্ঠা এনেছে
- বার্নিশ ক্লায়েন্টকে নতুন পৃষ্ঠা সরবরাহ করে (এবং পরবর্তী অনুরোধের জন্য এটি তাত্ক্ষণিকভাবে পেলে পৃষ্ঠাকেও ক্যাশে করা হয়েছে)
আমি যা করতে চাই তা হ'ল:
- ক্লায়েন্ট অনুরোধ পৃষ্ঠা
- বার্নিশ সময়সীমা স্বীকৃতি দেয়
- বার্নিশ ক্লায়েন্টকে পুরানো পৃষ্ঠা সরবরাহ করে
- বার্নিশ ব্যাকএন্ড থেকে নতুন পৃষ্ঠা এনে তা ক্যাশে রাখে into
আমার ক্ষেত্রে এটি এমন সাইট নয় যেখানে পুরানো তথ্য এত বড় সমস্যা, বিশেষত যখন আমরা কয়েক মিনিট থেকে ক্যাশের সময়সীমা নিয়ে কথা বলি না not
তবে, আমি ব্যবহারকারীকে লাইনে অপেক্ষা করার জন্য এবং তাত্ক্ষণিকভাবে কিছু সরবরাহ করার জন্য শাস্তি দিতে চাই না। এটা কি কোনওভাবে সম্ভব?
উদাহরণস্বরূপ, এখানে আমার সার্ভারের বিরুদ্ধে 5 মিনিট অবরোধের একটি নমুনা আউটপুট যা এক মিনিটের জন্য ক্যাশে কনফিগার করা হয়েছিল:
HTTP/1.1,200, 1.97, 12710,/,1,2013-06-24 00:21:06
...
HTTP/1.1,200, 1.88, 12710,/,1,2013-06-24 00:21:20
...
HTTP/1.1,200, 1.93, 12710,/,1,2013-06-24 00:22:08
...
HTTP/1.1,200, 1.89, 12710,/,1,2013-06-24 00:22:22
...
HTTP/1.1,200, 1.94, 12710,/,1,2013-06-24 00:23:10
...
HTTP/1.1,200, 1.91, 12709,/,1,2013-06-24 00:23:23
...
HTTP/1.1,200, 1.93, 12710,/,1,2013-06-24 00:24:12
...
আমি শত শত অনুরোধগুলি চালিয়ে গিয়েছিলাম 0.02
or তবে এটি এখনও আমাকে উদ্বেগ করেছে যে তাদের কাঁচা এইচটিএমএল জন্য ব্যবহারকারীদের প্রায় 2 সেকেন্ড অপেক্ষা করতে হবে।
আমরা কি এখানে আরও ভাল কিছু করতে পারি না?
( ক্যাশে থাকাকালীন আমি বার্নিশ প্রেরণে এসে পৌঁছলাম , এটি একইরকম লাগছিল তবে ঠিক আমি যা করার চেষ্টা করছি তা নয়)
সমাধান
শেন ম্যাডেনের উত্তরটিতে সমাধানটি রয়েছে তবে আমি এখনই তা বুঝতে পারি নি। আমার প্রশ্নে আমি আরও একটি বিবরণ অন্তর্ভুক্ত করিনি কারণ আমি ভেবেছিলাম এটি প্রাসঙ্গিক নয়, তবে আসলে এটি।
আমি বর্তমানে যে সিএমএস সলিউশনটি ব্যবহার করছি তাতে একটি বার্নিশ ডাটাবেস শ্রোতা রয়েছে এবং যার পৃষ্ঠাগুলি পরিবর্তিত হয়েছে এমন পৃষ্ঠাগুলি নিষিদ্ধ করার জন্য বার্নিশকে অবহিত করার ক্ষমতা রয়েছে। এটি PURGE
নির্দিষ্ট পৃষ্ঠাগুলি নিষিদ্ধ করার জন্য কিছু রেইজেক্সের সাথে একটি অনুরোধ পাঠিয়েছে ।
মোট কথা বলতে গেলে দু'টি ক্ষেত্রেই আমি দুর্ভাগা ব্যবহারকারীদের পেয়েছি:
- একটি পৃষ্ঠার স্বাভাবিক বার্নিশ টিটিএল মেয়াদ শেষ হয়
- ব্যাকএন্ড ব্যবহারকারীরা সামগ্রী পরিবর্তন করে, এটি বার্নিশের একটি শুদ্ধ অনুরোধ প্রেরণ করে
উভয় ক্ষেত্রেই আমি "দুর্ভাগ্য" ব্যবহারকারী রয়েছি। দ্বিতীয় ক্ষেত্রে এটি সত্য যে ব্যাকএন্ড ব্যবহারকারীরা পৃষ্ঠা পরিবর্তন করার পরে সাধারণত পৃষ্ঠাটি পরীক্ষা করে; তবে অগত্যা নয়।
তবুও, দ্বিতীয় মামলার জন্য আমি একটি সমাধান তৈরি করেছি (হ্যাঁ, আমি বুঝতে পারি যে এই প্রশ্নটি প্রথম মামলার উত্তর ... আমার দিক থেকে খারাপভাবে সূচিত প্রশ্নটির উত্তর চেয়ে শুরু হয়েছিল):
শুদ্ধ অনুরোধ প্রেরণের পরিবর্তে, আমি শেনস পরামর্শটি ব্যবহার করেছি এবং ভিসিএল সামঞ্জস্য করেছি যাতে আমার বার্নিশ ডাটাবেস শ্রোতারা hash_always_miss
সেট করে একটি পৃষ্ঠা আনার জন্য একটি বিশেষ অনুরোধ প্রেরণ করতে পারে true
।
বর্তমান স্থাপত্যের সাথে আমার কাছে সত্যিকারের অ্যাসিনক্রোনাস অনুরোধ করার বিলাসিতা সত্যিই নেই, তবে কীভাবে আমি পিএইচপি-তে একটি অ্যাসিনক্রোনাস জিইটি অনুরোধ করব? আমি বার্নিশের জন্য একটি জিইটি অনুরোধটি তৈরি করতে সক্ষম হয়েছি যা পৃষ্ঠাটি লোড হওয়ার জন্য অপেক্ষা করে না তবে পৃষ্ঠপোষক থেকে পৃষ্ঠাটি আনার জন্য বার্নিশটি ট্রিগার করতে এবং এটি ক্যাশে করার পক্ষে যথেষ্ট ভাল।
নেট এফেক্টটি হ'ল ডেটাবেস শ্রোতা বার্নিশকে অনুরোধটি প্রেরণ করেছিলেন এবং আমি নির্দিষ্ট পৃষ্ঠায় ভোট দেওয়ার সময় এটি আমার অনুরোধগুলিকে কখনই "দুর্ভাগ্যকর" করে না তবে বার্নিশটি পৃষ্ঠপোষকটি পুরোপুরি ব্যাকএন্ড থেকে এনেছিল (এটি 300 মিমি থেকে 2 এস পর্যন্ত হতে পারে) এটি হঠাৎ সেখানে ছিল।
সাধারণ টিটিএল শেষ হয়ে গেলে একই সমস্যাগুলি এড়াতে কীভাবে সমাধান করতে হবে তা আমি এখনও সমাধানে পেয়েছি, তবে আমার ধারণা সমাধানটিও ঠিক একই রকম শেনের পরামর্শ অনুসারে: ট্রিগার চালানোর জন্য উইজেট ব্যবহার করে hash_always_miss
, আমাকে তালিকা পেতে যথেষ্ট স্মার্ট হতে হবে পৃষ্ঠাগুলি আমি রিফ্রেশ করতে হবে।