আমরা শেষ-ব্যবহারকারীদের কাছে আমাদের সফ্টওয়্যার প্রকাশ করার আগে, অ্যাপ্লিকেশনটি বাগ-মুক্ত এবং ব্যবসার প্রয়োজনীয়তা পূরণ করে তা নিশ্চিত করতে আমরা বিভিন্ন ধরণের পরীক্ষা করি। যদিও আমরা অনেক পরীক্ষা করি, আমরা নিশ্চিত হতে পারি না যে ব্যবহারকারীরা আসলে এটি ব্যবহার না করে সফ্টওয়্যারটি স্থিতিশীল। শেষ-ব্যবহারকারীরা অ্যাপ্লিকেশনটি ব্যবহার করা শুরু করার পরে, নিম্নলিখিত কিছু কারণে অ্যাপ্লিকেশনটি আমাদের প্রত্যাশা অনুযায়ী আচরণ না করতে পারে:
- ব্যবহারকারীর আচরণ অপ্রত্যাশিত হতে পারে;
- ব্যবহারকারীরা বিভিন্ন স্থানে বিতরণ করা হয়;
- একই সময়ে বিপুল সংখ্যক ব্যবহারকারী অ্যাপ্লিকেশন ব্যবহার করতে পারে।
বৃহৎ আকারের অ্যাপ্লিকেশনের জন্য, পূর্ণাঙ্গ প্রকাশের আগে এই বিষয়গুলি জানা খুবই গুরুত্বপূর্ণ। আমাদের অ্যাপ্লিকেশনটি প্রত্যাশিতভাবে কাজ করে তা নিশ্চিত করতে, এর কার্যকারিতা চালু করার সময় আমাদের কয়েকটি বিষয় বিবেচনা করতে হবে:
- পর্যায়ক্রমে রোলআউট - পর্যায়ক্রমে রোলআউটের সময়, প্রত্যেকের কার্যকারিতা অ্যাক্সেস করার আগে অ্যাপ্লিকেশনটি ব্যবহারকারীদের একটি ছোট অংশ দ্বারা পরীক্ষা করা যেতে পারে। এটি আমাদের ব্যবহারকারীর আচরণ নির্ধারণ করতে সাহায্য করবে৷
- লোড টেস্টিং৷ -একটি পর্যায়ক্রমে রোলআউটের সময়, আমরা ব্যবহারকারীর আচরণ নির্ধারণ করতে পারি, কিন্তু আমরা জানতে পারি না যে প্ল্যাটফর্মটি কীভাবে কাজ করে যখন অনেক ব্যবহারকারী একই সময়ে বিভিন্ন অবস্থান থেকে অ্যাপ্লিকেশন ব্যবহার করে
লোড টেস্টিং কি এবং পারফরম্যান্স টেস্টিং থেকে এটি কীভাবে আলাদা?
নিম্নলিখিত তিনটি পদ একই রকম শোনাতে পারে, কিন্তু তারা ভিন্ন:
- পারফরম্যান্স টেস্টিং,
- লোড টেস্টিং, এবং
- স্ট্রেস টেস্টিং।
কর্মক্ষমতা পরীক্ষা প্রদত্ত ইনপুট দিয়ে অ্যাপ্লিকেশনটি কীভাবে কার্য সম্পাদন করে তা মূল্যায়ন করতে ব্যবহৃত একটি সাধারণ পরীক্ষার প্রক্রিয়া। এটি একটি একক-ব্যবহারকারীর সাথে অ্যাপ্লিকেশন ব্যবহার করে বা একাধিক ব্যবহারকারীর সাথে করা যেতে পারে। এটি কিছু নির্দিষ্ট মেট্রিক্সের মূল্যায়ন করার জন্য পরিচালিত হয়, যেমন প্রতিক্রিয়া সময় এবং CPU/মেমরি ব্যবহার। লোড/স্ট্রেস টেস্টিং হল কর্মক্ষমতা পরীক্ষার একটি উপসেট।
লোড টেস্টিং৷ নির্দিষ্ট সংখ্যক ব্যবহারকারীর সাথে একযোগে একটি নির্দিষ্ট সময়ের মধ্যে অ্যাপ্লিকেশন ব্যবহার করে অ্যাপ্লিকেশনটি প্রত্যাশা অনুযায়ী কার্য সম্পাদন করে তা নিশ্চিত করার জন্য পরিচালিত হয়। এটি একটি সিস্টেম কতজন ব্যবহারকারীকে পরিচালনা করতে পারে তা নির্ধারণে সহায়তা করে৷
স্ট্রেস টেস্টিং এবং লোড টেস্টিং একে অপরের সাথে ঘনিষ্ঠভাবে সম্পর্কিত। স্ট্রেস টেস্টিং লোড টেস্টিংয়ের মতো একই পদ্ধতির সাথে করা যেতে পারে, তবে পরীক্ষার লক্ষ্য ভিন্ন। লোড পরীক্ষার লক্ষ্য হল আমাদের অ্যাপ্লিকেশন নির্দিষ্ট সংখ্যক ব্যবহারকারীর সাথে কাজ করে কিনা তা নির্ধারণ করা, যেখানে লোড সীমা আঘাত করার পরে অ্যাপ্লিকেশনটি কীভাবে আচরণ করে এবং ব্যর্থতা পরিচালনা করে তা নির্ধারণ করতে স্ট্রেস টেস্টিং পরিচালিত হয়।
র্যাম্প-আপ সময়ের উপর ভিত্তি করে, কর্মক্ষমতা পরীক্ষাকে একটি স্পাইক পরীক্ষা হিসাবে শ্রেণীবদ্ধ করা যেতে পারে অথবা একটি সোক টেস্ট . অল্প সময়ের মধ্যে ব্যবহারকারীদের মধ্যে আকস্মিক স্পাইক একটি স্পাইক পরীক্ষা, এবং দীর্ঘ সময় ধরে ব্যবহারকারীদের ধীরগতির র্যাম্প-আপ একটি ভিজানো পরীক্ষা।
কার্যক্ষমতা পরীক্ষা কেন গুরুত্বপূর্ণ?
রেল প্রকল্পগুলির একটিতে, আমরা অদূর ভবিষ্যতে ব্যবহারকারীদের মধ্যে অনেক বৃদ্ধির প্রত্যাশা করছিলাম। আমরা নিশ্চিত করতে চেয়েছিলাম যে অ্যাপ্লিকেশনটি প্রত্যাশিতভাবে সঞ্চালিত হয়েছে এবং ব্যবহারকারীর সংখ্যা বৃদ্ধির সাথে গুরুত্বপূর্ণ কার্যকারিতা নষ্ট না হয়েছে। সুতরাং, আমরা কিভাবে এটি নিশ্চিত করব? আমরা একটি লোড পরীক্ষা করেছি এবং পরীক্ষা করেছি যে অ্যাপ্লিকেশনটি ব্যবহারকারীদের প্রদত্ত বৃদ্ধি পরিচালনা করতে পারে কিনা৷ কর্মক্ষমতা পরীক্ষা অন্যান্য অনেক ক্ষেত্রে গুরুত্বপূর্ণ হতে পারে:
- যদি ব্ল্যাক ফ্রাইডে-এর মতো একটি নির্দিষ্ট দিনে অ্যাপ্লিকেশনটির ব্যবহারকারীদের সংখ্যা বাড়বে বলে আশা করা হয়, তাহলে একটি সংক্ষিপ্ত র্যাম্প-আপ সময়ের সাথে অ্যাপ্লিকেশনটির স্পাইক পরীক্ষা করা আমাদের সিস্টেমে সম্ভাব্য সমস্যাগুলি খুঁজে পেতে সহায়তা করতে পারে।
- লোড টেস্টিং সিস্টেমের বাগগুলি সনাক্ত করতে সাহায্য করে যা দৃশ্যমান নয় বা খুব কম হয় যখন শুধুমাত্র কিছু ব্যবহারকারী এটি ব্যবহার করে৷
- এটি বর্ধিত লোড দ্বারা প্ল্যাটফর্মের গতি কীভাবে প্রভাবিত হয় তা আমাদের মূল্যায়ন করতে দেয়। যদি অ্যাপ্লিকেশন ধীর হয়, আমরা গ্রাহক হারাতে পারি।
- এটি বর্ধিত লোডের মধ্যে আমাদের সিস্টেম কীভাবে কাজ করে এবং 10,000 ব্যবহারকারী থাকাকালীন সিস্টেমটি উচ্চ CPU বা মেমরি ব্যবহারের সাথে ক্র্যাশ হলে তা মূল্যায়ন করতে সহায়তা করে।
- লোড পরীক্ষার মাধ্যমে নির্দিষ্ট সংখ্যক ব্যবহারকারীর জন্য অ্যাপ্লিকেশন চালানোর খরচ নির্ধারণ করা যেতে পারে।
লোড পরীক্ষা করার সময় আমরা আমাদের Rails অ্যাপে একটি বাগ খুঁজে পেয়েছি। আমি একটি অনুরূপ পরিস্থিতি বর্ণনা করব যেখানে আমরা একটি সমস্যা চিহ্নিত করেছি। একটি হোটেল বুকিং অ্যাপের একটি খোলা বুকিং প্রক্রিয়া ছিল এবং যখন মাত্র কয়েকজন ব্যবহারকারী একটি রুম বুক করার চেষ্টা করছিলেন, তখন সবকিছু ঠিকঠাক ছিল। যাইহোক, যখন একাধিক ব্যবহারকারী একই রুম বুক করার চেষ্টা করছিলেন, তখন দুটি ভিন্ন ব্যবহারকারী এটি সফলভাবে বুক করতে সক্ষম হন। আমাদের অ্যাপ লোড পরীক্ষা করে, আমরা বৈশিষ্ট্যটি প্রকাশ করার আগে সমস্যাটি সনাক্ত করতে এবং প্রাথমিক পর্যায়ে এটি সমাধান করতে সক্ষম হয়েছি।
একটি রেল অ্যাপ পরীক্ষা করার জন্য Apache JMeter ব্যবহার করে
JMeter হল একটি Apache 2.0-লাইসেন্সযুক্ত ওপেন সোর্স লোড টেস্টিং টুল। এটি থ্রেড-ভিত্তিক লোড পরীক্ষা প্রদান করে। থ্রেড-ভিত্তিক পরীক্ষার মাধ্যমে, আমরা সহজেই অনুকরণ করতে পারি আমাদের সিস্টেমের চাপের মধ্যে যখন অনেক ব্যবহারকারী একসাথে আমাদের অ্যাপ্লিকেশন ব্যবহার করে। JMeter পরীক্ষার ফলাফলের ভাল রিপোর্টিং প্রদান করে।
আমাদের সিস্টেম ব্যবহার করে অনেক ব্যবহারকারীকে অনুকরণ করে সিস্টেমের সম্ভাব্য সমস্যা এবং আমাদের অ্যাপ্লিকেশনের প্রতিক্রিয়া সময় সনাক্ত করতে আমরা কীভাবে Apache JMeter ব্যবহার করতে পারি তা দেখব৷
JMeter নিম্নলিখিত লিঙ্ক থেকে ডাউনলোড করা যেতে পারে:https://jmeter.apache.org/download_jmeter.cgi#binaries
কিছু JMeter টার্মিনোলজির সাথে পরিচিত হতে হবে
- পরীক্ষা পরিকল্পনা টেস্ট প্ল্যান হল উপরের স্তরের জিনিস, যা আমরা লোড টেস্টিং উপাদান হিসাবে সংজ্ঞায়িত করি। গ্লোবাল কনফিগারেশন এবং ভেরিয়েবল এখানে সংজ্ঞায়িত করা হয়েছে।
- থ্রেড গ্রুপ থ্রেড এবং কনফিগারগুলিকে সংজ্ঞায়িত করতে ব্যবহৃত হয়, যেমন থ্রেডের সংখ্যা, র্যাম্প-আপ পিরিয়ড, থ্রেডের মধ্যে বিলম্ব এবং লুপ। এটিকে সমান্তরাল ব্যবহারকারীর সংখ্যা হিসাবে বিবেচনা করা যেতে পারে যার সাথে আপনি লোড পরীক্ষা চালাতে চান।
- স্যাম্পলার যা একটি একক থ্রেড কার্যকর করে। বিভিন্ন ধরনের নমুনা আছে, যেমন HTTP অনুরোধ, SMTP অনুরোধ, বা TCP অনুরোধ।
- প্রাক/পোস্ট প্রসেসর নমুনা চালানোর আগে বা পরে কিছু কার্যকর করতে ব্যবহৃত হয়। পোস্ট-প্রসেসররা একটি API কল থেকে প্রতিক্রিয়া ডেটা নিতে পারে এবং পরবর্তীতে ব্যবহারের জন্য এটি পাস করতে পারে।
- শ্রোতা স্যাম্পলারের প্রতিক্রিয়া শোনে এবং প্রতিটি থ্রেড থেকে প্রতিক্রিয়া সময় বা প্রতিক্রিয়ার সমষ্টিগত প্রতিবেদন সরবরাহ করে।
- অভিজ্ঞতা আমরা নমুনাকারীর কাছ থেকে যা আশা করেছিলাম সেই প্রতিক্রিয়া ডেটাই তা যাচাই করতে কার্যকর হতে পারে।
- কনফিগ উপাদান কনফিগারেশন সংজ্ঞায়িত করে, যেমন HTTP হেডার, HTTP কুকিজ, বা CSV ডেটাসেট কনফিগারেশন।
একটি লোড পরীক্ষা চালানোর জন্য, আমাদের প্রথমে একটি JMX ফাইল তৈরি করতে হবে যেখানে আমরা উপরে বর্ণিত JMeter পরিভাষাগুলি সংজ্ঞায়িত করি৷
লোড পরীক্ষার জন্য একটি JMX ফাইল প্রস্তুত করা
JMX হল XML ফরম্যাটে লেখা একটি JMeter প্রকল্প ফাইল। একটি JMX ফাইল ম্যানুয়ালি লেখা কঠিন হতে পারে, তাই আমরা ফাইল তৈরি করতে JMeter ইন্টারফেস ব্যবহার করব৷
JMeter ইন্টারফেস খুলুন এবং পরীক্ষা পরিকল্পনা সনাক্ত করুন. পরীক্ষার পরিকল্পনার ভিতরে, আমরা থ্রেড এবং এর লোড টেস্ট কনফিগারেশন যোগ করব।
পরীক্ষার পরিকল্পনা তৈরির জন্য JMeter ইন্টারফেস
আমরা কি জন্য লোড টেস্টিং করছি সেই অনুযায়ী পরীক্ষার পরিকল্পনার নাম পরিবর্তন করা যেতে পারে। আমরা একটি থ্রেড গ্রুপ (ব্যবহারকারী) কনফিগার করতে পারি। আপনি এখানে ডিফল্ট সেটিংস রাখতে পারেন এবং থ্রেড গ্রুপ তৈরি করতে এগিয়ে যেতে পারেন।
Add -> Threads(Users) -> Thread Group
থ্রেড গ্রুপে, ডিফল্টরূপে, একটি একক থ্রেড নির্দিষ্ট করা থাকবে। অ্যাপ অ্যাক্সেসকারী ব্যবহারকারীর সংখ্যা অনুকরণ করতে প্রয়োজন অনুসারে নম্বরটি পরিবর্তন করুন।
যেহেতু আমরা একটি ওয়েব-ভিত্তিক রেল অ্যাপ লোড করব, তাই আমরা একটি HTTP নমুনা যোগ করব। আমরা একটি নমুনা যোগ করতে পারি, যা একটি ThreadGroup
এর ভিতরে থাকবে . একটি HTTP Sampler
যোগ করুন নিম্নলিখিত নেভিগেট করে:
Add -> Sampler -> HTTP Request
এখানে, আমরা আইপি বা ডোমেন কনফিগার করি যা আমরা পরীক্ষা করছি এবং HTTP পদ্ধতি এবং HTTP এন্ডপয়েন্টের জন্য প্রয়োজনীয় যেকোন অনুরোধ বডি।
অবশেষে, লোড পরীক্ষার রিপোর্ট দেখতে, আমরা থ্রেড গ্রুপে একজন শ্রোতা যোগ করতে পারি।
Add -> Listener -> View Result Tree
ভিউ ফলাফল ট্রি প্রতিটি থ্রেডের প্রতিক্রিয়া সময় প্রদর্শন করবে। আমরা এখানে অন্যান্য ধরনের প্রতিবেদনও যোগ করতে পারি। 'ফলাফল ট্রি দেখুন' শুধুমাত্র ডিবাগিং প্রস্তাবের জন্য ব্যবহার করা উচিত এবং প্রকৃত পরীক্ষার জন্য নয়৷
এইভাবে, আমরা একটি সাধারণ পরীক্ষার পরিকল্পনা তৈরি করতে পারি এবং এটি কার্যকর করতে পারি। পরীক্ষাটি চালানোর জন্য JMeter-এর উপরের বারে প্লে আইকনে আঘাত করুন।
একটি রেল অ্যাপ লোড করার আগে যে বিষয়গুলি বিবেচনা করতে হবে
উপরের উদাহরণটি একটি খুব সহজ, একক শেষবিন্দু HTTP অনুরোধ। আমাদের Rails অ্যাপের ক্ষেত্রে, আমরা যে শেষ পয়েন্টগুলি পরীক্ষা করতে চাই সেগুলি প্রমাণীকরণের সাথে লক করা আছে। অতএব, আমাদের নিশ্চিত করতে হবে যে আমাদের কাছে নিম্নলিখিত জিনিসগুলি রয়েছে:
- ওয়েব কুকি - এইচটিটিপি এন্ডপয়েন্টে একটি কুকি হেডার থাকা দরকার আগে আমরা সেগুলিতে লোড পরীক্ষা করতে পারি। JMeter একটি ব্যবহারকারী লগ ইন করার পরে কুকি যোগ করার কার্যকারিতা প্রদান করে। পরবর্তী বিভাগে, আমরা কীভাবে ব্রাউজার অনুরোধ রেকর্ড করতে পারি এবং আমাদের লোড পরীক্ষার জন্য এটিকে একটি JMX ফাইলে রূপান্তর করতে পারি তা দেখব। আমরা কুকি রেকর্ডিংও কভার করব।
- Rails CSRF টোকেন - রেলগুলি একটি CSRF টোকেন প্রদান করে অ্যাপটিকে নিরাপত্তার দুর্বলতা থেকে রক্ষা করে, তাই আমাদের লোড পরীক্ষা করার আগে আমাদের অনুরোধের শিরোনামে CSRF প্রমাণীকরণ রয়েছে তা নিশ্চিত করতে হবে। এই CSRF টোকেনটি
header
-এ উপস্থিত রয়েছে একটিmeta
এর ভিতরে HTML এ ট্যাগ করুন।
রেল CSRF টোকেন একটি পোস্ট-প্রসেসর ব্যবহার করে JMeter এ আনা যেতে পারে। HTTP অনুরোধে রাইট-ক্লিক করুন যা CSRF টোকেন ধারণকারী ওয়েব পৃষ্ঠা লোড করে এবং তারপর Add -> Post Processor -> Regular Expression Extractor
নির্বাচন করুন। . এখানে, হেডার মেটা ট্যাগ থেকে CSRF মান পড়ার জন্য আপনি নিম্নলিখিত রেগুলার এক্সপ্রেশন এক্সট্র্যাক্টর কনফিগ যোগ করতে পারেন:
-
রেফারেন্স নাম:
csrf_value
-
রেগুলার এক্সপ্রেশন:
name="csrfToken" content="(.+?)"
-
টেমপ্লেট:
$1$
-
মিল নম্বর:
1
এখন, পরিবর্তনশীল csrf_value
অনুরোধ করতে ব্যবহার করা যেতে পারে।
একটি JMX ফাইল তৈরি করার জন্য ব্রাউজার থেকে রেকর্ডিং অনুরোধ
কম HTTP এন্ডপয়েন্ট সহ, JMeter ইন্টারফেস থেকে একটি JMX ফাইল তৈরি করা সহজ হতে পারে। যাইহোক, একটি বড় পরীক্ষার ক্ষেত্রে, এটি কঠিন হতে পারে। এছাড়াও, একটি সুযোগ রয়েছে যে আমরা একটি ব্যবহারকারী অ্যাপ্লিকেশন ব্যবহার করার সময় করা প্রকৃত অনুরোধগুলি মিস করতে পারি। আমরা চাই ব্রাউজার থেকে করা প্রকৃত অনুরোধগুলো রেকর্ড করা হোক এবং JMX ফাইল স্বয়ংক্রিয়ভাবে তৈরি হোক।
JMeter Rails অ্যাপ এবং ব্রাউজারের মধ্যে একটি প্রক্সি হিসাবে যোগ করা যেতে পারে। এর সাথে, সমস্ত অনুরোধ JMeter দ্বারা রেল সার্ভারে ফরোয়ার্ড করা হবে। এটিকে MITM (মাঝখানের মানুষ) আক্রমণও বলা হয়।
JMeter রেকর্ডিং
JMeter এ একটি রেকর্ডিং তৈরি করতে, file -> templates -> recording
এ যান এবং তৈরি ক্লিক করুন। আপনি যে হোস্টনেমটি রেকর্ড করছেন সেটি উল্লেখ করুন। এটি কুকি ম্যানেজার সহ আপনার জন্য স্বয়ংক্রিয়ভাবে কিছু জিনিস তৈরি করবে৷ কুকি ম্যানেজার প্রমাণীকরণের জন্য প্রয়োজনীয় কুকি সংরক্ষণ করবে।
JMeter SSL সার্টিফিকেট দিয়ে HTTP-র অনুরোধ যাচাই করা হচ্ছে
আমরা ব্রাউজার থেকে এই অনুরোধটি JMeter-এ ফরোয়ার্ড করা হবে, এবং JMeter এটিকে ওয়েব পরিষেবাতে ফরোয়ার্ড করবে এবং অনুরোধগুলি রেকর্ড করবে যাতে আমরা JMeter রেকর্ডিং থেকে লোড পরীক্ষা চালাতে পারি। অ্যাপ্লিকেশনটির যদি SSL সংযোগের জন্য একটি https প্রোটোকলের প্রয়োজন হয়, তাহলে ব্রাউজারে একটি শংসাপত্র যোগ করতে হবে। শংসাপত্র যোগ করতে, আসুন Firefox
খুলি বা অন্য কোন ব্রাউজার। Firefox,
-এ settings > Privacy > Manage certificate
এ যান এবং JMeter শংসাপত্র যোগ করুন যাতে ব্রাউজার JMeter দ্বারা তৈরি শংসাপত্র চিনতে পারে।
cmd + sht + g
লিখুন এবং পাথ লিখুন /usr/local/Cellar/jmeter/5.2/libexec/bin/jmeter
শংসাপত্র যোগ করতে
Aa প্রক্সি হিসাবে JMeter ব্যবহার করতে Firefox কনফিগার করুন
এর পরে, আমাদেরকে Firefox থেকে আমাদের JMeter রেকর্ডিং স্ক্রিপ্টে অনুরোধ ফরোয়ার্ড করতে হবে। এটি ফায়ারফক্সে প্রক্সি কনফিগার করে করা যেতে পারে। Firefox খুলুন এবং Preferences -> Advanced -> Connection(settings)
এ যান . এখানে, HTTP প্রক্সিটিকে "localhost" এবং পোর্টটিকে "8080" এ সেট করুন এবং "সমস্ত প্রোটোকলের জন্য এই প্রক্সি সার্ভারটি ব্যবহার করুন" চেক করুন।
এখন, আমরা JMeter এবং Script recording
-এ যেতে পারি আমরা আগে বেছে নেওয়া টেমপ্লেট থেকে বিভাগ। একবার আমরা স্টার্ট বোতামে চাপ দিলে, JMeter আগত অনুরোধগুলি গ্রহণ করা শুরু করে। যখন আমরা ফায়ারফক্সে যাই এবং যে অ্যাপ্লিকেশনটি আমরা লোড টেস্টিং করি তা ব্রাউজ করি, এটি রেকর্ড করে এটিকে একটি JMX ফাইলে রূপান্তর করবে, যা আমরা লোড পরীক্ষার জন্য চালাতে পারি।
জেমিটারের সাহায্যে বিতরণ করা লোড পরীক্ষা
পরীক্ষা চালানোর সময়, আমরা আমাদের স্থানীয় মেশিনগুলির একটি থেকে একটি পরীক্ষা করতে পারি। পরীক্ষার পরিকল্পনা তৈরি করার সময় এটি করা ঠিক আছে, কিন্তু প্রকৃত পরীক্ষা চালানোর সময়, আমাদের এটি পরিবর্তন করতে হবে। একটি একক মেশিনে লোড পরীক্ষা করার জন্য হার্ডওয়্যার সীমাবদ্ধতা থাকবে (যেমন, CPU এবং মেমরি) এবং অবস্থানের সীমাবদ্ধতার অনুরোধ করা হবে। অ্যাপ্লিকেশন ব্যবহার করে প্রকৃত ব্যবহারকারীদের ট্র্যাফিক অনুকরণ করতে এই পরীক্ষাগুলি চালানো হয়। এই উদ্দেশ্যে, আমাদের পরীক্ষাগুলিকে বিভিন্ন সার্ভারে বিতরণ করতে হবে এবং সমস্ত ফলাফল দেখার জন্য একটি একক স্থান থাকতে হবে৷
JMeter পরীক্ষার অর্কেস্ট্রেট করার জন্য একটি প্রাথমিক নোড এবং পরীক্ষা চালানোর জন্য একাধিক মাধ্যমিক নোড সরবরাহ করে। এটি অ্যাপ্লিকেশন ব্যবহার করে প্রকৃত ব্যবহারকারীদের অনুকরণ করতে সহায়তা করে। আমরা আমাদের প্রকৃত ব্যবহারকারীদের কাছাকাছি বিভিন্ন অঞ্চলে পরীক্ষার সার্ভারগুলি বিতরণ করতে পারি৷
JMeter বিতরণ পরীক্ষা
একটি বিতরণ পরীক্ষা সম্পাদন করতে, প্রাথমিক এবং মাধ্যমিক উভয় সার্ভারে JMeter ইনস্টল করে শুরু করুন৷
সেকেন্ডারি সার্ভারে করণীয়:
-
jmeter/bin
এ যান এবংjmeter-server
চালান আদেশ এটি পরীক্ষা চালানোর জন্য সার্ভার শুরু করবে। - যদি পরীক্ষার জন্য কোনো CSV ইনপুট প্রয়োজন হয়, এই সার্ভারে এই ফাইলগুলি যোগ করুন৷
প্রাথমিক সার্ভারে করণীয়:
- jmeter/bin ডিরেক্টরিতে যান এবং
jmeter.properties
খুলুন ফাইল। -
remote_hosts
ধারণকারী লাইনটি সম্পাদনা করুন এবং কমা দ্বারা পৃথক করা সেকেন্ডারি সার্ভারের আইপি যোগ করুনremote_hosts=<s1_ip>,<s2_ip>
. - JMeter পরীক্ষা চালান।
সেকেন্ডারি সার্ভার প্রকৃত পরীক্ষা চালানোর জন্য দায়ী থাকবে, এবং প্রাথমিক সার্ভার রিপোর্টগুলিকে একত্রিত করবে।
লোড টেস্টিং সঞ্চালনের জন্য, UI থেকে পরীক্ষাটি ট্রিগার করার পরিবর্তে আমাদের সর্বদা CLI কমান্ড ব্যবহার করা উচিত, কারণ এটি লোড টেস্টিং সার্ভারগুলির জন্য কর্মক্ষমতা সমস্যা সৃষ্টি করতে পারে। আমরা JMX ফাইলের নাম উল্লেখ করে JMeter কমান্ড ব্যবহার করতে পারি:
> jmeter -n -t path/to/test.jxm -r
বা
> jmeter -n -t path/to/test.jxm -R s1_ip,s2_ip,…
-r
jmeter.properties
-এ নির্দিষ্ট করা রিমোট সার্ভার ব্যবহার করে
-n
এটিকে GUI মোড ছাড়াই চালাবে
-t
jmx ফাইলের পথ
আমরা কীভাবে আমাদের রেল সার্ভারের জন্য পুমা বনাম ইউনিকর্ন ব্যবহার করার সিদ্ধান্ত নিয়েছি
Puma এবং Unicorn হল রেলের জন্য দুটি ভিন্ন ওয়েব সার্ভার। উভয়েরই সুবিধা আছে, তাহলে আমরা কীভাবে সিদ্ধান্ত নেব কোনটি সেরা? এটা আবেদন উপর নির্ভর করে। কিছু অ্যাপ্লিকেশান ইউনিকর্নের সাথে সবচেয়ে ভাল কাজ করে এবং কিছু Puma এর সাথে সবচেয়ে ভাল কাজ করে। আমাদের রেল অ্যাপগুলির একটির জন্য আমাদের ইউনিকর্ন এবং পুমার মধ্যে বেছে নিতে হয়েছিল, এবং আমরা লোড টেস্টিং থেকে প্রাপ্ত ডেটার ভিত্তিতে তা করেছি৷ আমরা রেল অ্যাপে একবার ইউনিকর্নের সাথে এবং অন্যবার Puma ব্যবহার করে একটি লোড পরীক্ষা করেছি। রেল অ্যাপের ওয়েব সার্ভারটি আমরা পরিবর্তন করেছি।
আমরা এই পরীক্ষা থেকে নিম্নলিখিত ফলাফল পেয়েছি:পুমা এবং ইউনিকর্নের মধ্যে প্রতিক্রিয়ার সময় আলাদা
আমরা দেখেছি যে প্ল্যাটফর্মে প্রচুর সংখ্যক ব্যবহারকারী থাকাকালীন Puma আমাদের Rails অ্যাপের জন্য আরও ভাল পারফর্ম করে। এর মানে হল আমরা কম সংখ্যক অ্যাপ্লিকেশন সার্ভার সহ আরও ব্যবহারকারীদের পরিচালনা করতে সক্ষম হব৷
দ্রষ্টব্য:এটি আপনি যে ধরনের সার্ভার ইন্সট্যান্স ব্যবহার করছেন এবং অ্যাপটি কী ধরনের ব্যবসায়িক লজিক প্রক্রিয়াকরণ করে তার উপর নির্ভর করে।
রেলস অ্যাপে চাপ দেওয়ার সময় কিছু সাধারণ ব্যর্থতা এবং সেগুলি কীভাবে প্রতিকার করা যায়
- অঅপ্টিমাইজ করা ডাটাবেস কোয়েরি
- n+1 ক্যোয়ারী সমস্যা দূর করুন।
- অ্যাক্সেস প্যাটার্ন অনুযায়ী একটি সূচক যোগ করুন।
- ডাটাবেসের সামনে একটি Redis-এর মতো ক্যাশিং স্তর ব্যবহার করুন।
- ধীরে রুবি কোড কর্মক্ষমতা
- কোড অপ্টিমাইজ করতে মেমোাইজ করুন।
- o(n^2) জটিলতা বের করুন এবং সর্বোত্তম অ্যালগরিদম ব্যবহার করুন।
- মাইক্রো-সার্ভিস আর্কিটেকচারে, পরিষেবাগুলির মধ্যে অনেকগুলি HTTP কল হতে পারে। নেটওয়ার্ক কল ধীর।
- মাইক্রো সার্ভিসের জন্য একটি মেসেজিং সিস্টেম ব্যবহার করে HTTP কলের সংখ্যা হ্রাস করুন।
- একসাথে তৈরি হলে একই রেকর্ড দুবার তৈরি হয়।
- একটি ডাটাবেস-অনন্য সীমাবদ্ধতা যোগ করুন।
- ফিফো ইভেন্ট (সারি)-ভিত্তিক সম্পদ তৈরি ব্যবহার করুন।
- ব্যাকগ্রাউন্ড প্রসেসিং ব্যবহার করুন, যেমন Sidekiq, যখনই সম্ভব।
- এপিআই প্রতিক্রিয়া সময়ের জন্য একটি SLA সংজ্ঞায়িত করুন এবং উন্নয়ন জীবনচক্রের একটি অংশ হিসাবে কর্মক্ষমতা পরীক্ষা অন্তর্ভুক্ত করুন৷
লোড টেস্টিং করার জন্য কোন পরিবেশ ব্যবহার করা উচিত?
একটি উত্পাদন পরিবেশে একটি লোড পরীক্ষা করা একটি আদর্শ পছন্দ নয় কারণ এটি উত্পাদনে সমস্যা এবং এমনকি ডাউনটাইম সৃষ্টি করতে পারে। আমরা উত্পাদন পরিবেশে সমস্যা তৈরি করতে চাই না, তবে আমরা এখনও নিশ্চিত করতে চাই যে পরীক্ষার প্রতিবেদনটি উত্পাদনের মতো সত্য ডেটা প্রতিফলিত করে। লোড/স্ট্রেস পরীক্ষার জন্য, উত্পাদনের একটি প্রতিরূপ পরিবেশ তৈরি করার পরামর্শ দেওয়া হয়। এর মধ্যে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত রয়েছে:
- অ্যাপ্লিকেশন সার্ভারের সংখ্যা।
- ডাটাবেস সার্ভারের হার্ডওয়্যার স্পেসিফিকেশন, প্রতিলিপি সহ।
- পরীক্ষা ডাটাবেসে উৎপাদনের মতো ডেটা। এটি উত্পাদনের সম্মুখীন হওয়া প্রায় সমান ডেটা ভলিউম অন্তর্ভুক্ত করা উচিত।
একটি উত্পাদনের মতো পরিবেশ তৈরি করা চ্যালেঞ্জিং এবং ব্যয়বহুল হতে পারে। সুতরাং, আমরা যা লোড পরীক্ষা করছি তার উপর ভিত্তি করে, শুধুমাত্র সেই উপাদানগুলিকে স্পর্শ করে এমন পরিকাঠামো উৎপাদনের মতো আপগ্রেড করা যেতে পারে। এটি খরচ বাঁচায়। প্রতি তিন মাসে একবার আপনার অ্যাপ লোড/স্ট্রেস পরীক্ষা করা ভাল। যাইহোক, একজন একক ব্যবহারকারীর সাথে পারফরম্যান্স পরীক্ষা করা এবং প্রতিক্রিয়ার সময়টি সংজ্ঞায়িত স্ট্যান্ডার্ডের (200 মি এর মত কিছু) আছে তা যাচাই করা এমন কিছু যা আমাদের বিকাশ চক্রে যোগ করতে হবে।
লোড টেস্টিং করার সময়, আমাদের ডেটা-পয়েন্টেরও প্রয়োজন, যেমন লক্ষ্য সার্ভারের CPU/মেমরি ব্যবহার। মেমরি/সিপিইউ ব্যবহারের একটি স্পাইক অ্যাপ্লিকেশন ক্র্যাশ হতে পারে। হার্ডওয়্যার কেপিআই পরিমাপ করতে, লোড পরীক্ষা শুরু করার আগে প্রমিথিউসের মতো মনিটরিং টুল যোগ করুন।
Apache JMeter লোড পরীক্ষার জন্য একটি শক্তিশালী টুল। আমরা Apache JMeter ব্যবহার করেছি লোড টেস্টিং রেল অ্যাপের জন্য, কিন্তু এটি যেকোনো স্ট্যাকের উপর একটি অ্যাপ্লিকেশন বিল্ডের লোড/স্ট্রেস টেস্টিং করতে ব্যবহার করা যেতে পারে। লোড টেস্টিং অ্যাপ্লিকেশনে ডেটা-চালিত সিদ্ধান্ত নিতে সাহায্য করে। লোড টেস্টিং ভীতিকর শোনাতে পারে, তবে শুরুতে সামান্য বিনিয়োগের সাথে, এটি দীর্ঘমেয়াদে অ্যাপ্লিকেশনটিতে অনেক স্থিতিশীলতা এবং নির্ভরযোগ্যতা যোগ করতে পারে।