প্রেসার টেস্ট
প্রেসার পরীক্ষার ফল কীভাবে প্রভাবিত হবে?
- প্রেসার মেশিন থেকে সার্ভারের নেটওয়ার্ক দেরি (অ্যাডভাইস করা হচ্ছে ইন্টারনেট বা প্রতিষ্ঠানে প্রেসার পরীক্ষা)
- প্রেসার মেশিন থেকে সার্ভারের ব্যান্ডউইথ (অ্যাডভাইস করা হচ্ছে ইন্টারনেট বা প্রতিষ্ঠানে প্রেসার পরীক্ষা)
- কি বা না HTTP keep-alive চালু (অ্যাডভাইস করা হচ্ছে চালু করা)
- কি না আবদ্ধতা পর্যাপ্ত (বাইরে পরীক্ষা করার জন্য বেশি সংখ্যক আবদ্ধতা খোলা হওয়া উচিত)
- সার্ভার প্রসেস সংখ্যা কি না যথার্থ (helloworld ব্যবসা প্রসেস সংখ্যা এবং cpu সংখ্যা এর সমান হওয়া উচিত, ডাটাবেস ব্যবসা প্রসেস সংখ্যা cpu এর চারগুণ বা এর বেশি হোক)
- ব্যবসার নিজস্ব কার্যকরতা (উদাহরণস্বরূপ কি না বাইরের ডাটাবেস ব্যবহার করা হচ্ছে)
HTTP keep-alive কী?
HTTP কীপ-অ্যালাইভ ব্যবহার করে একটি প্রযুক্তি যা একটি একক TCP সংযোগে একাধিক HTTP অনুরোধ এবং সাজানো প্রেরণ করা হয়, এটা কার্যকরভাবে পরিক্ষার ফল উদ্ভূতকরণের জন্য গুরুত্বপূর্ণ। কীপ-অ্যালাইভ বন্ধ করলে পরীক্ষার ফল সংখ্যা পরম্পরা ভাবে কমে যেতে পারে।
বর্তমানে ব্রাউজারগুলি সর্বোপরি কীপ-অ্যালাইভ চালু থাকে, অর্থাৎ ব্রাউজারগুলি একটি হ্টটিপি ঠিকানা পরিদর্শন করার পরে সংযোগটি অস্থায়ীভাবে বন্ধ করে না, পরবর্তী অনুরোধে এই সংযোগটি পুনরায় ব্যবহার করে, যা করে সাজানোর সুবিধার জন্য।
পরীক্ষা চালানোর সময় কীপ-অ্যালাইভ চালু রাখা উচিত।
এক্সট্রা দাবি করে এইচটিটিপি কিপ-এলাইভ কিভাবে চালু করবেন?
যদি এবি প্রোগ্রাম ব্যবহার করেন তবে -k প্যারামিটারটি সংযুক্ত করতে হবে, উদাহরণস্বরূপ ab -n100000 -c200 -k http://127.0.0.1:8787/
।
অ্যাপিপোস্টের ক্ষেত্রে কিপ-অ্যালাইভ চালু করতে হলে সে গিয়্যাপ হেডার ফেরত দেওয়া প্রয়োজন(apipost এর সমস্যা, নীচে দেখুন)।
অন্যভাবের প্রেসার প্রোগ্রাম সাধারণত ডিফল্ট অবস্থায় কিপ-অ্যালাইভ চালু করে।
বাইরের ইন্টারনেট দিয়ে কেন কিউপিএস খুব কম?
বাইরের ইন্টারনেটে ব্যবহৃত ল্যাটেন্সের কারণে কিউপিএস খুব কম হয়, এটা স্বাভাবিক ঘটনা। উদাহরণস্বরূপ, বাইডু পেজে প্রেসার করার সময় কিউপিএস শুধুমাত্র কিছু ডাকার হয় পারে।
অভ্যন্তরীণ বা স্থানীয় নেটওয়ার্কে প্রেসার করার সুপারিশ, যাতে নেটওয়ার্কের ল্যাটেন্স প্রভাব বাদ দেওয়া যায়।
যদি প্রয়োজন হয় বাইরের ইন্টারনেট থেকে প্রেসার করার, তাহলে ব্যান্ডউইথ পুরোপুরি নিশ্চিত করা সাথে প্যারালেল সংখ্যা বাড়াতে পারেন।
এনজিনক্স প্রক্সি করার পরে কেন পারফরম্যান্স কমে?
এনজিনক্স চালানোর জন্য সিস্টেম সম্পক্ষে সম্পদ অনুপযুক্ত করে। এছাড়া, এনজিনক্স এবং ওয়েবম্যান মধ্যে যোগাযোগ করা সিস্টেমের সম্পদ অনুপযুক্ত করে। তবে, সিস্টেমের সম্পদ সীমিত হওয়ায় ওয়েবম্যান সম্পৃক্ত সমস্ত সম্পদ পাওয়া যাবে না, তাই সম্পূর্ণ সিস্টেমের কার্যক্ষমতা নম্রন্বিতিকর হতে পারে।
এনজিনক্স প্রক্সি দ্বারা পারফরম্যান্স প্রভাবিতকরণকে সর্বোচ্চ সীমানায় রেখে নেওয়ার জন্য, এনজিনক্সের লগ বন্ধ(access_log off;
) করা এবং এনজিনক্স থেকে ওয়েবম্যানের মধ্যে কিপ-অ্যালাইভকে চালু করা যেতে পারে, এনজিনক্স প্রক্সি দেখুন।
অন্যদিকে, এইচটিটিপি এবং এইচটিটিপি কোন এবং কিসি সম্বন্ধে আরব্জির সম্পত্তি হবে। এইচটিটিপি এসএসএল/টিএলএস হীন নতুন আহ্বান এবং ডাটা একানক ডিক্রিপসন-প্রক্রিয়া করার প্রয়োজন দেখা দেয়। বাণিজ্যিক-ভিত্তিকএইচটিপিএসে ধারাবাহিকভাবে বড় ভাগ্য সংগ্রাহী করে,এর ফলে, পারফরম্যান্স প্রভাবিতকরণ হবে। কম্প্যারটেস্টিংয়ে যদি ছোটোআঁক আঁক হয় ('HTTP কিপ-অ্যালাইভ চালু না থাকা), তাহলে প্রতি বারে প্রয়োজনীয়তায় এক্ষন করার জন্য অতিরিক্ত এইচটিটিপিএস/টিএলএস আহ্বান হয় এবং পারফরম্যান্স অনেক নিম্ন হয়। কম্প্যারটেস্টিংএ এইচটিটিপিএস, এইচটিটিপিএস কিপ-অ্যালাইভ চালু থাকা উচিত।
সিস্টেম কি পারফরম্যান্স লিমিটে পৌঁছেছে বা না কিভাবে জানবো?
সাধারণভাবে সিস্টেমে CPU-এর ১০০% পর্যন্ত পৌঁছা হলে সিস্টেম পারফরম্যান্স লিমিটে পৌঁছে গেছে বলে ধারণা করা যায়। যদি CPU-তে ফ্রি স্পেস থাকে তাহলে সিস্টেম এখনো লিমিটে পৌঁছেনি, ঐ সময়ে ভর্তির সংখ্যা বাড়ানো এবং QPS বাড়ানোর চেষ্টা করা যেতে পারে।
যদি ভর্তির সংখ্যা বাড়ানো দিয়ে QPS বাড়ানো সম্ভব না থাকে তাহলে সম্ভবত webman প্রসেস সংখ্যা কম থাকতে পারে, অতএব webman প্রসেস সংখ্যা বাড়ানো উচিত। যদি এও কাজ করে না তাহলে ব্যান্ডউইথ পর্যাপ্ত আছে কিনা তা চিন্তা করা উচিত।
আমি কেন প্রেসার টেস্ট এর ফলাফলে দেখছি যে webman এর পারফরম্যান্স go এর gin ফ্রেমওয়ার্কের থেকে কম?
techempower এর প্রেসার টেস্টে প্রদর্শিত হয়েছে যে webman এর সকল প্যারামিটার (যেমন: পিওর টেক্সট, ডাটাবেস ক্যুরি, ডাটাবেস আপডেট) এগুলো গিন ফ্রেমওয়ার্কের প্যারামিটার থেকে প্রায় দ্বিগুন বেশী।
যদি আপনার কাছে এই ফলাফল না থাকে তাহলে সম্ভবত আপনি webman এ ORM ব্যবহার করেন যা পারফরম্যান্স ঝুলে দেয়, আপনি চেষ্টা করতে পারেন webman+নেটিভ PDO এবং gin+নেটিভ SQL কে তুলনা করতে।
ওআরএম ব্যবহার করা যদি webman-এর সংগে কি পারফরম্যান্স কম হবে? নীচে দেখানো হল একটি পরীক্ষার তথ্য।
পরিবেশ
আলিবাবা কাউন্টি 4-কোর 4জি সার্ভার, 10 হাজার রেকর্ড থেকে একটি রেকর্ড রেন্ডম সিলেক্ট করে Json ফর্ম্যাটে রিটার্ন করবে।
যদি প্রাকৃতিক PHP ডাটাবেস অবজেক্ট (PDO) ব্যবহার করি
তাহলে webman-এ সেকেন্ডে 1.78 হাজার জনপ্রিয় অনুসন্ধান (QPS)।
যদি laravel-এর Db::table() ব্যবহার করি
তাহলে webman-এ QPS হয় 0.94 হাজারে মেটে যাবে।
যদি laravel-এর Model ব্যবহার করি
তাহলে webman-এ QPS হয় 0.72 হাজারে মেটে যাবে।
থিংকঅআরএম এর ফলাফল সমান, ছোট পরিবর্তন আছে।
পরামর্শ
সংগঠিত প্রোগ্রামিং এর জন্য শুধুমাত্র কিছু ক্ষমতা হারাবার নীড়ে না, এটা পরিবেশনায় মিল রাখতে হয়। আমাদের উদ্যোগ, রক্ষা, চালানোর পূর্বে ডেভেলপমেন্ট সময়ে এবং সার্ভিস মেয়াদের ভিত্তিতে একটা ভালো পরিমাণের ব্যালান্স খোঁড়াই করতে হয়।কেন apipost দ্বারা প্রেসার টেস্টের QPS খুব কম?
apipost এর প্রেসার টেস্টিং মডিউলে বাগ আছে, যদি সার্ভারটি gzip হেডার ফেরত না দেয় তাহলে keep-alive বজায় রাখা যায় না, এর ফলে পারফর্মেন্স খুব কমে যায়।
সমাধান হিসাবে, ডেটা কম্প্রেস করে এবং gzip হেডার সংযুক্ত করতে সময় করে আবার ফেরত দিতে হবে, উদাহরণস্বরূপ<?php namespace app\controller; class IndexController { public function index() { return response(gzencode('hello webman'))->withHeader('Content-Encoding', 'gzip'); } }
এছাড়াও, কিছু সময় apipost সন্ধান করার আগে সন্তুষ্ট প্রেসার পরিশোধ করতে না পারলে, যা একেবারে ab-কে তুলনা করে প্রেসার ক্ষমতায় 50% কম QPS দেখা যায়।
প্রেসার টেস্ট পরামর্শ দেওয়া হচ্ছে ab, wrk বা অন্যান্য পেশাদার প্রেসার সফ্টওয়্যার ব্যবহার করা, বরং apipost ব্যবহার না করা উচিত।উচিত প্রসেস সংখ্যা নির্ধারণ করুন
ওয়েবম্যান ডিফল্টভাবে সিপিইউ*৪ প্রসেস চালু করে। হালকা ব্যবহারকে টেস্ট করায় প্রসেস সংখ্যা কে সিপিইউ এর সাথে মিলানো সবচেয়ে উপযুক্ত, যেহেতু এটি প্রসেস স্যাপিং রিডাক্স করে।
যদি এমন হয়, যেমন ডাটাবেস, রিডিস এর কাজে আরো প্রসেসের প্রয়োজন হয়, তাহলে প্রসেস সংখ্যা আধিক প্রকার করে সিপিইউ কে গুন করা যেতে পারে ৩-৮ বার, কারণ এই সময়ে আরো প্রসেস প্রয়োজন হবে, ইহাতে কোনও স্যাপিং খরচ লোপে যাবে না।
তৎপরপ্রেক্ষে টেস্ট করার সীমা
ক্লাউড সার্ভার ৪ কোর ৪জি ১৬ প্রসেস লোকাল/নেটওয়ার্ক প্রয়োজনীয়
- | কিপ-অ্যালাইভ চালু | কিপ-অ্যালাইভ বন্ধ |
---|---|---|
হ্যালো ওয়ার্ল্ড | ৮-১৬ হাজার কিউপিএস | ১-৩ হাজার কিউপিএস |
ডাটাবেস একক প্রশ্ন | ১-২ হাজার কিউপিএস | ১ হাজার কিউপিএস |
তৃতীয়পক্ষ টেকমোব প্রেসার ডেটা
প্রেসার টেস্ট কমান্ড উদাহরণ
ab
# 100000 অনুরোধ 200 স্থানান্তর কি-পছন্দ চালু করুন
ab -n100000 -c200 -k http://127.0.0.1:8787/
# 100000 অনুরোধ 200 স্থানান্তর কি-পছন্দ বন্ধ করা
ab -n100000 -c200 http://127.0.0.1:8787/
wrk
# 200 স্থানান্তরে 10 সেকেন্ড প্রেসার টেস্ট করুন কি-পছন্দ চালু (ডিফল্ট)
wrk -c 200 -d 10s http://example.com