অপ্টিমাইজড 6amMart: একই স্ক্রিপ্ট, মাপা ও ঠিক করা
AllsWeb সর্বশেষ 6amMart রিলিজ ইনস্টল করে — একই স্ক্রিপ্ট, একই অ্যাডমিন, একই অ্যাপ — এমন কোডের উপর, যা আমরা মেপেছি এবং ঠিক করেছি। গ্রাহকমুখী স্ক্রিন স্টকের চেয়ে 10× থেকে 22× দ্রুত চলে, 342টি ত্রুটি বন্ধ করা হয়েছে, আর বিল্ডের সাথে আসা একটি টেস্ট সুইট সেটি প্রমাণ করে।
অপ্টিমাইজড কোড ইনস্টলেশনের দামের মধ্যেই আছে। এটি কোনো আপগ্রেড, অ্যাড-অন বা আলাদা টিয়ার নয়।
10× – 22×
গ্রাহকমুখী স্ক্রিনে দ্রুততর
342
ত্রুটি খুঁজে বের করে ঠিক করা হয়েছে
799
পাঁচটি রিপোজিটরি জুড়ে কমিট
1–3 days
প্রয়োজনীয়তা সম্পূর্ণ হলে ডেলিভারি
একটি AI সহকারীর সাথে এই পৃষ্ঠাটি পড়ছেন?
এটি থাকলে বনাম না থাকলে
দোকান খোলার দিনে যা বদলে যায়
বাঁ দিকে স্টক 6amMart, ডান দিকে AllsWeb যে কোড ইনস্টল করে। একই স্ক্রিপ্ট, একই অ্যাডমিন প্যানেল, একই অ্যাপ, ভেন্ডরের একই রিলিজ — প্রতিটি সংখ্যা একই 4 GB, 2-কোর সার্ভারে, একই ডেটা দিয়ে মাপা।
ক্রেতা যে স্ক্রিনটি প্রথমে দেখেন
স্টক
হোম স্ক্রিনের ফিচার্ড সারিটি ভরতে 8.19 সেকেন্ড লাগে। ফোনে থাকা একজন ক্রেতার পক্ষে অ্যাপটিকে নষ্ট ভেবে বন্ধ করে দেওয়ার জন্য সেটাই যথেষ্ট।
অপ্টিমাইজড
সেই একই সারি ভরে 0.37 সেকেন্ডে — 22× দ্রুত, CDN বাইপাস করে মাপা, যাতে যা মাপা হচ্ছে তা অ্যাপ্লিকেশন, কোনো ক্যাশ নয়।
স্টোরের আর্নিংস রিপোর্ট
স্টক
একটি রিপোর্ট আঁকতে ডেটাবেসকে 8,614টি আলাদা প্রশ্ন করা হয়, আর ততক্ষণ একটি কানেকশন খোলা থাকে। কয়েকজন অ্যাডমিন একসাথে এটি খুললেই গোটা দোকান সবার জন্য ভারী হয়ে যায়।
অপ্টিমাইজড
সেই একই রিপোর্ট 12টি প্রশ্ন করে। আগে টেস্টে এটি স্বাভাবিক দেখাত, কারণ ছোট ডেটায় ওই 8,614টি প্রশ্নের প্রতিটিই দ্রুত।
কুপনের সর্বনিম্ন খরচ
স্টক
অ্যাডমিন প্যানেল আপনাকে সেট করতে দেয়, আর কোড কখনও সেটি পড়ে না। লাইভে প্রমাণিত: ₹999 সর্বনিম্ন চাওয়া একটি কুপন ₹1-এর অর্ডারে গৃহীত হয়েছিল, আর এভাবে সেট করা ছিল ছয়টি সক্রিয় কুপন।
অপ্টিমাইজড
অর্ডারের দাম যে তিন জায়গায় হিসাব হতে পারে, তিনটিতেই এটি এখন কার্যকর।
সন্ধ্যার ডিসকাউন্ট
স্টক
ডেটাবেস চলত UTC-তে আর অ্যাপ্লিকেশন ভারতের সময়ে — লাইভ ইনস্টলে দুটির ফারাক মাপা হয়েছিল 5 ঘণ্টা 30 মিনিট। ফলে 18:00–22:00-এর সান্ধ্য ডিসকাউন্ট সন্ধ্যায় কখনও বসত না, বসত রাত 2টায়। লিস্টিং স্ক্রিন আর চেকআউট আলাদা ঘড়ি ব্যবহার করত, তাই একটি স্টোরকে ডিসকাউন্টে দেখিয়ে পুরো দাম নেওয়া সম্ভব ছিল।
অপ্টিমাইজড
একটিই ঘড়ি, তাই ক্রেতাকে যে ডিসকাউন্ট দেখানো হয়, সেটিই তার কাছ থেকে নেওয়া হয়।
একজন গ্রাহকের অর্ডার কে পড়তে পারে
স্টক
ছয়টিরও বেশি এন্ডপয়েন্ট যেকোনো অর্ডার আইডি আর অনুমান করা গেস্ট আইডি মেনে নিত। কোনো অথেন্টিকেশন ছাড়াই এটি আবার ঘটানো হয়েছে: রেসপন্সে ছিল অন্য গ্রাহকের আইটেম, দাম আর ডেলিভারি ঠিকানা। একই পথের ওয়ালেট-পেমেন্ট এন্ডপয়েন্টে ব্যালান্স চেকও ছিল না।
অপ্টিমাইজড
ক্ষতিগ্রস্ত প্রতিটি এন্ডপয়েন্টে মালিকানার স্কোপ, আর বৈধ গেস্ট চেকআউট আগের মতোই কাজ করে।
আপনি যে পেমেন্ট গেটওয়ে বন্ধ করেছেন
স্টক
অ্যাডমিন প্যানেলে বন্ধ করলে তা কেবল গ্রাহকের পছন্দের তালিকা থেকে সরত। তার কলব্যাক URL সচল থেকে যেত, আর অনেক গেটওয়ে কলব্যাক URL-এ শুধু একটি স্টেটাস শব্দ দেখেই অর্ডারকে পেইড ধরে নেয় — তাই সব গেটওয়ে বন্ধ রেখেও একটি কলব্যাক সফল হত, আর গ্রাহক টাকা না দিয়েই নিজের অর্ডার নিশ্চিত করতে পারত।
অপ্টিমাইজড
এখন এটি বন্ধ অবস্থায় ব্যর্থ হয়, আর প্রতিটি গেটওয়ে প্রিফিক্সে 102টি প্রোব নিশ্চিত করে যে নিষ্ক্রিয় থাকলে কোনোটিই চলে না।
এতে আপনার কী খরচ
স্টক
স্টক 6amMart-ই একটি সাধারণ ইনস্টলেশন আপনাকে যা দেয়।
অপ্টিমাইজড
সেই একই ইনস্টলেশন, সর্বশেষ 6amMart রিলিজে। দ্বিতীয় কোনো লাইসেন্স নয়, দ্বিতীয় দাম নয়, আপগ্রেড টিয়ার নয় — ইনস্টলেশনটি এভাবেই ডেলিভার করা হয়।
এখানে "অপ্টিমাইজড" মানে কী
একই 6amMart। ভেতরটা আলাদা।
এটি সেই একই 6amMart — চলতি রিলিজ, আপনার ইনস্টল তৈরির দিন 6amTech যা-ই শিপ করুক। একই অ্যাডমিন প্যানেল, একই ভেন্ডর প্যানেল, একই কাস্টমার, স্টোর ও রাইডার অ্যাপ, একই ডেটা মডেল, ডেমোতে দেখা একই ফিচার। কিছুই বদলে ফেলা হয়নি, কোনো কিছুর নাম বদলানো হয়নি। বদলেছে ভেতরটা: AllsWeb 14টি কর্ম-সেশন ব্যয় করেছে স্ক্রিপ্টটি মাপতে, প্রোফাইল করতে এবং মাপে যা ধরা পড়েছে তা ঠিক করতে — 13 জুলাই থেকে 9 আগস্ট 2026-এর মধ্যে পাঁচটি রিপোজিটরি জুড়ে 799টি কমিট, ব্যাকএন্ড, অ্যাডমিন প্যানেল, ওয়েবসাইট ও তিনটি অ্যাপে। ওই প্রতিটি পরিবর্তন গ্রহণ করার আগে তাকে বাইট-অভিন্ন ডেটা ফেরত দিতে হয়েছে। এটি আলাদা কোনো প্রোডাক্ট নয় যা আপনাকে বেছে নিতে হবে। আমরা এখন এভাবেই 6amMart ইনস্টল করি।
আপনি যা কিনছেন
- সার্ভিস অপরিবর্তিত
- আপনার হোস্টিংয়ে 6amMart-এর সম্পূর্ণ ইনস্টলেশন, সেটআপ ও কনফিগারেশন — অ্যাডমিন প্যানেল, ভেন্ডর প্যানেল, Android APK + AAB, iOS বিল্ড, কাস্টমার ওয়েবসাইট, আপনার ব্র্যান্ডিং, SMTP, Maps, Firebase পুশ ও OTP, সোশ্যাল লগইন, আপনার পেমেন্ট গেটওয়ে, আপনার ল্যাঙ্গুয়েজ ফাইল, এবং একটি প্রাইভেট GitHub রিপোজিটরিতে কাস্টমাইজ করা সোর্স কোড।
- ডেলিভারি
- আপনার প্রয়োজনীয়তা সম্পূর্ণ হলে 1–3 কার্যদিবস।
- ফ্রি লাইফটাইম সাপোর্ট
- সেটআপ সমস্যা ও ছোট সংশোধনের জন্য।
- আপনার নিজের CodeCanyon লাইসেন্স
- আপনি CodeCanyon থেকে নিজের 6amMart লাইসেন্স কিনে নিজেই তার মালিক হন; আমরা তার উপরে ইনস্টল করি।
অপ্টিমাইজড কোড ইনস্টলেশন দামের মধ্যেই আছে। এটি কোনো আপগ্রেড, অ্যাড-অন বা আলাদা টিয়ার নয়।
স্টক কেন ধীর ছিল
একটি বাক্য, আর একটি আবিষ্কার
ডেটাবেস ধীর ছিল না। অ্যাপ্লিকেশনটিই প্রতি পেজে একই প্রশ্ন কয়েকশো বার করছিল।
যে অংশটি বেশিরভাগ মানুষ দেখেননি
একটি কাস্টমার এন্ডপয়েন্টে একটিমাত্র রিকোয়েস্ট 112টি ডেটাবেস কোয়েরি চালাত। তার মধ্যে 86টি — 76% — চলত তৈরি হয়ে যাওয়া ফলাফলকে JSON-এ রূপান্তর করে পাঠানোর সময়, কারণ অ্যাট্রিবিউট অ্যাক্সেসরগুলো সিরিয়ালাইজেশনের সময় প্রতি সারিতে একবার করে আলাদাভাবে ডেটা আনত। সাতটি কোয়েরি ডেটা আনত আর এগারোটি তা প্রস্তুত করত। এ কারণেই শুধু ইনডেক্স যোগ করে কিছুই বদলাত না: খরচটা পেজের চালানো কোয়েরিতে ছিল না।
সেই এন্ডপয়েন্ট এখন 45টি চালায়।
86 ÷ 112 = 76.8%, ছাপা হয়েছে 76% হিসেবে। উৎসে ছাপা আছে 77%; উৎস উপরের দিকে রাউন্ড করলেই এই পেজ উপরের দিকে রাউন্ড করার অনুমতি পায় না।
মাপা তুলনা
একই সার্ভারে, আগে ও পরে
পদ্ধতির বিবরণ
| শর্ত | যা ছিল |
|---|---|
| আগে | পরীক্ষার সময় CodeCanyon যেভাবে পাঠিয়েছিল ঠিক সেই স্টক স্ক্রিপ্ট — বেসলাইন কমিট d92ce004, 8 জুলাই 2026 ‡ |
| পরে | AllsWeb-এর অপ্টিমাইজেশন ও হার্ডেনিং প্রোগ্রামের পরে সেই একই স্ক্রিপ্ট, তার উপরে ভেন্ডরের পরবর্তী রিলিজ বসানো অবস্থায় |
| সার্ভার | দুটি রানেই একই মেশিন — 2 vCPU, 3.9 GB RAM |
| পদ্ধতি | সার্ভারের দিক থেকে মাপা, CDN বাদ দিয়ে |
| পরিবর্তনের পরিমাণ | 799টি কমিট · 342টি ফিক্স · 171টি গতি-পরিবর্তন · 37টি ফিচার |
| গ্রহণের নিয়ম | প্রতিটি পারফরম্যান্স পরিবর্তন গ্রহণ করার আগে তাকে বাইট-অভিন্ন ডেটা ফেরত দিতে হয়েছে |
- ‡ কী মাপা হয়েছিল। আগের সংখ্যাগুলো নেওয়া হয়েছিল CodeCanyon-এর 8 জুলাই 2026-এ পাঠানো স্টক স্ক্রিপ্টের বিপরীতে — 6amTech যে রিলিজকে 4.0.1 নম্বর দিয়েছিল — এবং ভেন্ডরের পরবর্তী রিলিজ পরে অপ্টিমাইজড কোডের উপরে বসানো হয়েছিল। এটি পরীক্ষার বিবরণ, যাতে একই শুরুর বিন্দু থেকে আগের সংখ্যাগুলো আবার তৈরি করা যায়। আপনি কী পাবেন, এটি তার বিবরণ নয়: আমরা যেদিন আপনার বিল্ড তৈরি করি, সেদিন 6amTech যে রিলিজ শিপ করছে সেটিই ইনস্টল করি। 13–15 আগস্ট 2026-এ আরও উল্লেখযোগ্য কাজ যোগ হয়েছে, যা 9 আগস্টের রিপোর্টে নেই।
- গ্রহণের নিয়ম, এক লাইনে। "দ্রুততর মানে কখনোই আলাদা হতে দেওয়া হয়নি।"
- রাউন্ডিং আমাদের বিপক্ষে। যেখানে মাপা মান একটি পরিসর, সেখানে গুণিতকগুলো সংখ্যাগুলো যতটা কম চাটুকার হতে দেয় ততটাই ধরা হয়েছে — সবচেয়ে কম "আগে"-কে সবচেয়ে বেশি "পরে" দিয়ে ভাগ করে। আমাদের নিজেদের রিপোর্টে মধ্যবিন্দুর গুণিতক লেখা আছে, যা এর চেয়ে বেশি আসে।
নয়টি সারি, সবই আগে/পরে, আর সেগুলো সব এক ধরনের মাপ নয়, তাই টেবিলে কোনটি কী তা লেখা আছে। 1–5 নম্বর সারি হলো একই সার্ভারে CDN বাদ দিয়ে নেওয়া রেসপন্স টাইম। 6–7 নম্বর সারি হলো প্রতি পেজে ডেটাবেসকে করা প্রশ্নের সংখ্যা, যেখানে "CDN বাদ দিয়ে" শর্তটির কোনো মানে হয় না। 8–9 নম্বর সারি সার্ভারের মাপই নয়, তাই সেগুলোর সাথে † আছে। এগুলো সেই সারি যা একজন দোকানমালিক আসলে টের পান, আমাদের হাতে থাকা সবচেয়ে বড় সংখ্যা নয়।
| # | এটি কী | স্টক 6amMart | অপ্টিমাইজড | গুণিতক |
|---|---|---|---|---|
| 1 | হোম স্ক্রিনে ফিচার্ড আইটেম | 8.19 s | 0.37 s | 22× দ্রুত |
| 2 | প্রোডাক্ট সার্চ | 1.64 – 1.96 s | 0.09 – 0.12 s | অন্তত 13× দ্রুত |
| 3 | স্টোরফ্রন্ট হোম পেজ | ~1.47 s | 0.073 – 0.096 s | অন্তত 15× দ্রুত |
| 4 | টপ ক্যাটাগরি | 3.34 s | 0.27 s | 12× দ্রুত |
| 5 | চালু হওয়ার সময় অ্যাপ কনফিগারেশন | 0.53 – 1.15 s | 0.045 s | অন্তত 11× দ্রুত |
| 6 | স্টোর আর্নিংস এক্সপোর্ট — প্রতি পেজে ডেটাবেস প্রশ্ন | 8,614 | 12 | 717× কম |
| 7 | প্রোডাক্ট ক্যাটালগ তালিকা — প্রতি পেজে ডেটাবেস প্রশ্ন | 557 | 92 | ~6× কম |
| 8 | † ওয়েবসাইটের প্রতিটি পেজে পাঠানো স্টাইলিং — এটি বিল্ড-আউটপুটের বাইট সংখ্যা, সার্ভারের টাইমিং নয় | 921,603 bytes | 12,386 bytes | −98.6% (74× ছোট) |
| 9 | † পরপর দশটি অ্যাপ রিকোয়েস্ট — মোবাইল ডেটায় একটি হ্যান্ডসেট থেকে মাপা, সার্ভারে নয় | 6,140 ms | 1,876 ms | −69% (3.2× দ্রুত) |
† 8 ও 9 নম্বর সারি সার্ভারের মাপ নয়। "একই সার্ভার, CDN বাদ দিয়ে" কাঠামোটি শুধু 1–5 নম্বর সারির রেসপন্স টাইমের ক্ষেত্রে প্রযোজ্য; স্টাইলিংয়ের সংখ্যাটি বিল্ড-আউটপুট আর দশ-রিকোয়েস্টের সংখ্যাটি মোবাইল ডেটায় নেওয়া।
হিসাবটি, ছেপে দেওয়া হলো
6 নম্বর সারিতে 717× ছাপা হয়েছে, আমাদের নিজেদের রিপোর্টে লেখা 718× নয়: 8,614 ÷ 12 = 717.83, আর এই পেজ নিজের সুবিধার দিকে কোনো সংখ্যা উপরে রাউন্ড করে না। একই কারণে 9 নম্বর সারিতে 3.2× ছাপা হয়েছে — 6,140 ÷ 1,876 = 3.27। 8 নম্বর সারির বাইট হিসাব 921,603 ÷ 12,386 = 74.4, ছাপা হয়েছে 74× হিসেবে। উপরের 76% হলো 86 ÷ 112 = 76.8%, একই দিকে রাউন্ড করা।
একসাথে কতজন — প্রমাণ যেভাবে বলতে দেয় ঠিক সেভাবেই বলা
একই 2 vCPU সার্ভারে, স্টোর-লিস্টিং এন্ডপয়েন্টের উপর একটি লোড র্যাম্প চালিয়ে দেখা গেছে একই সার্ভারে 13× বেশি গ্রাহক একসাথে এটি ব্যবহার করতে পারেন। এর পেছনের প্রতি-সেকেন্ডে-রিকোয়েস্টের জোড়াটি ইচ্ছে করেই ছাপা হয়নি: উৎসে লোড র্যাম্পের কথা আছে কিন্তু তার কনকারেন্সি বা সময়কাল লেখা নেই, আর যে প্রতি-সেকেন্ডে-রিকোয়েস্ট সংখ্যা তার এন্ডপয়েন্ট, কনকারেন্সি ও সময়কাল বলতে পারে না, তা এই পেজে যায় না। নিচের SixPanel-এর সংখ্যাটিতে তিনটিই আছে, তাই সেটিকে হারে ছাপা হয়েছে।
দুটি সারি, যেগুলো গতির গল্প নয়
| এটি কী | স্টক 6amMart | অপ্টিমাইজড |
|---|---|---|
| একটি পরিষ্কার ইনস্টলে সার্ভার এরর দেওয়া এন্ডপয়েন্ট | 3 (জনপ্রিয় স্টোর, সাম্প্রতিক স্টোর, পেমেন্ট মেথড) | 0 — তিনটিই এখন 41–150 ms-এ উত্তর দেয় |
| ডিপেনডেন্সির পরিচিত নিরাপত্তা অ্যাডভাইজরি, 9 আগস্ট 2026-এ গোনা | 111 | 0 |
ওই 111টি আসলে কী ছিল। তার মধ্যে 110টি ছিল পাঁচটি অ্যাডঅন-মডিউলের package.json ফাইলের ভেতরের axios ও vite ভার্সন, যেগুলোর বিল্ড পাইপলাইন কোনোদিনই কাজ করেনি — চারটি এমন সোর্স ফাইলের দিকে দেখায় যা মডিউলে নেই, আর পঞ্চমটি এমন দুটি ফাইলের দিকে দেখায় যেগুলো শূন্য বাইটের। তবু সেগুলো তোলা হয়েছিল, কারণ যে অ্যালার্ট আপনি উপেক্ষা করার সিদ্ধান্ত নিয়েছেন, সেই অ্যালার্ট আপনি পড়াই বন্ধ করে দেন। নিজে থেকেই যেটি গুরুত্বপূর্ণ ছিল সেটি হলো 7.0.0-এর নিচে firebase/php-jwt (CVE-2025-45769), যা আগে ঠিক করা যায় না বলে লেখা ছিল, এখন ^7.0.2-এ আছে এবং আসল Apple, Passport, Firebase ও Google কি দিয়ে যাচাই করা হয়েছে।
অ্যাডভাইজরির সারিটির সাথে একটি তারিখ দেওয়া আছে কারণ অ্যাডভাইজরি ফিড অনবরত বদলায়, আর 9 আগস্ট 2026-এ নেওয়া গণনা সেই দিনটির কথা বলে, বিল্ডের স্থায়ী বৈশিষ্ট্যের কথা নয়। চলতি সংখ্যা পেতে নিজের ইনস্টলে অডিটটি আবার চালান।
বর্তমান অবস্থা, শর্তসহ 306টি এন্ডপয়েন্ট রিকোয়েস্টের একটি সুইপে শূন্য সার্ভার এরর এবং 250 ms-এর বেশি সময় নেওয়া শূন্যটি এন্ডপয়েন্ট পাওয়া যায় — যেসব রিকোয়েস্ট আসলে চলেছে তার হিসাবে। একটি বৈধ রানে প্ল্যাটফর্মের নিজের রেট লিমিটারই তার মধ্যে 66–68টি বাতিল করে, অর্থাৎ সুইপের প্রায় এক-পঞ্চমাংশ, আর বাতিল হওয়া রিকোয়েস্ট কোনো এন্ডপয়েন্ট ফলাফল নয়। লিপিবদ্ধ বৈধ রানের ভাগ (~235টি সফল, 66–68টি বাতিল) যোগ করলে হয় প্রায় 302, 306 নয়; আমাদের হাতে থাকা উৎস থেকে বাকি রিকোয়েস্টগুলোর হিসাব মেলাতে পারিনি। নিজে চালান আর নিজের ভাগটি পড়ুন — নিচের যাচাই অংশে কীভাবে তা লেখা আছে।
মূল কারণ
নাম বলার মতো তিনটি কারণ
এগুলোই টেবিলটিকে বিশ্বাসযোগ্য করে তোলে।
আর্নিংস এক্সপোর্ট 2,867 বার ভুল জিনিস চেয়েছিল।
এটি ডেটাবেসকে বলত অর্ডারের মাধ্যমে প্রতিটি লেনদেনের স্টোর আনতে, অথচ কোড স্টোরটি সরাসরি লেনদেন থেকে পড়ত — অন্য একটি সংযোগ। নির্দেশটি কখনো কাজে লাগেনি, তাই 2,867টি সারিই নিজের স্টোর আলাদাভাবে এনেছে।
প্রতিটি ভেন্ডর পেজ দুটি নেভিগেশন মেনু আঁকত।
একটি স্টাইলশিট দিয়ে লুকানো, আর দুটিই একই অর্ডার ব্যাজ গুনত।
একটি পেজ হেডার স্টোরের পুরো অর্ডার ইতিহাস লোড করত।
সবচেয়ে ব্যস্ত স্টোরের জন্য 466টি অর্ডার, পেজের এমন একটি অংশ ভরার জন্য যা কমেন্ট করে বন্ধ করে রাখা হয়েছিল।
আর ইনডেক্সের আবিষ্কারটি
ডেটাবেস যেসব কলামে জয়েন করে, তার দশটিতে কোনো ইনডেক্সই ছিল না। ইনডেক্স দেওয়ার পর একটি লুকআপ 51,074টি সারি পড়া থেকে নেমে একটি সারি পড়ায় এসেছে।
অ্যাডমিন কাস্টমার তালিকা 98টি সারি ফেরত দিতে 16,092,496,536টি সারি পরীক্ষা করছিল — সার্ভারের মোট স্লো-কোয়েরি সময়ের 82%, আর একটি পেজ লোড হতে 18 মিনিট পর্যন্ত।
কী কী ঠিক করা হয়েছে
পারফরম্যান্স, নিরাপত্তা, নির্ভুলতা
পারফরম্যান্স
একটি রিকোয়েস্টে ডেটাবেসকে করা প্রশ্নের সংখ্যা — পরিবর্তন গ্রহণের আগে প্রতিটিই বাইট-অভিন্ন বলে যাচাই করা হয়েছে।
কাস্টমার API
| কাজ | স্টক | অপ্টিমাইজড |
|---|---|---|
| প্রোডাক্ট ক্যাটালগ তালিকা (31টি আইটেম) | 557 | 92 |
| ভেন্ডর অর্ডার তালিকা (41টি অর্ডার) | 212 | 12 |
| অর্ডার বিবরণ ফরম্যাটিং (40টি সারি) | 121 | 4 |
| কাস্টমারের অর্ডার ইতিহাস | 166 | 97 |
| উইশলিস্ট (6টি আইটেম) | 140 | 37 |
| স্টোর তালিকা | 78 | 39 |
| অ্যাপ কনফিগারেশন | 54 | 21 |
| ক্যাটাগরি তালিকা | 43 | 16 |
অ্যাডমিন ও ভেন্ডর প্যানেল
| স্ক্রিন | স্টক | অপ্টিমাইজড |
|---|---|---|
| স্টোর আর্নিংস এক্সপোর্ট | 8,614 | 12 |
| অ্যাডমিন অর্ডার সার্চ | 259 | 14 |
| ফ্ল্যাশ-সেল প্রোডাক্ট পিকার | 186 | 42 |
| প্রোডাক্ট গ্যালারি | 166 | 48 |
| রেন্টাল প্রোভাইডার তালিকা | 159 | 9 |
| রিলস স্টোর ড্রপডাউন | 127 | 62 |
| কাস্টমার বিবরণ পেজ | 106 | 34 |
| রেন্টাল ভেহিকল তালিকা | 94 | 13 |
| স্টোর আর্নিংস পেজ | 89 | 13 |
| প্রতিটি ভেন্ডর পেজ, তার নিজের কনটেন্টের আগেই | 61 | 52 |
অ্যাডমিন ও ভেন্ডর প্যানেল কখনো মাপাই হয়নি — স্টক 6amMart-এর নিজের অটোমেটেড পরীক্ষা শুধু কাস্টমার API ঢাকে। 586টি অ্যাডমিন ও 165টি ভেন্ডর পেজ প্রোফাইল করা হয়েছে, ডেটাবেস প্রশ্নের সংখ্যায় গোনা হয়েছে "কারণ গণনা নিখুঁত ও পুনরাবৃত্তিযোগ্য, অথচ শেয়ার করা সার্ভারে স্টপওয়াচ এদিক-ওদিক সরে যায়"।
ওয়েবসাইট
- প্রতিটি পেজের 921,603 বাইট স্টাইলিংয়ের মধ্যে 902 KB ছিল তিনটি সম্পূর্ণ আইকন লাইব্রেরি — 21,459টি আইকন সংজ্ঞা পাঠানো হতো যাতে সাইটটি 89টি আইকন দেখাতে পারে। বিল্ড এখন কেবল যেসব আইকন আসলে ব্যবহার হয় সেগুলোই পাঠায়, আর প্রতি পেজে মোট স্টাইলিং 12,386 বাইট, −98.6%।
- শেয়ার করা JavaScript 429 kB → 269 kB (−37%)।
- JavaScript লোড না হওয়া পর্যন্ত ল্যান্ডিং পেজটি ছিল একটি খালি খোল; এখন এটি সার্ভারের রেন্ডার করা 273,110 বাইট পাঠায়।
- কনফিগারেশন রিকোয়েস্ট: প্রতি দর্শকের প্রতি পেজ ভিউয়ে একটি → প্রতি ভাষায় প্রতি মিনিটে একটি।
- যে 9টি পেজে কোনো ম্যাপ দেখানো হয় না, সেগুলোতেও Maps লাইব্রেরি পাঠানো হচ্ছিল।
- প্রতি সারিতে তারিখ ফরম্যাটিং: 8.45 µs → 0.39 µs (21× সস্তা)।
- ওয়েবসাইটের 50টি রুটের সবগুলোই উন্নত হয়েছে বা আগের মতোই আছে; কোনোটিই খারাপ হয়নি।
মোবাইল অ্যাপ
- প্রতিটি রিকোয়েস্ট একটি চালু সংযোগ পুনরায় ব্যবহার না করে একেবারে নতুন সুরক্ষিত সংযোগ খুলছিল — মোবাইল ডেটায় প্রতি রিকোয়েস্টে প্রায় 426 ms। পরপর দশটি রিকোয়েস্ট: 6,140 ms → 1,876 ms।
- হোম স্ক্রিন: প্রতিবার চালু হতে ~30টি রিকোয়েস্ট → 14টি সেকশন ঢাকা 1টি রিকোয়েস্ট।
- 40 পিক্সেলের একটি অ্যাভাটারের পেছনে 1000×1000 ছবি ডিকোড হচ্ছিল; ছবি এখন যে মাপে দেখানো হয় সেই মাপেই ডিকোড হয়।
- রিলিজ করা অ্যাপের ভেতরে 309টি ডিবাগ লগিং স্টেটমেন্ট যাচ্ছিল। এখন শূন্য।
- রাইডার GPS: স্থির অবস্থায় প্রতি ঘণ্টায় 360 → ~30টি অবস্থান রিপোর্ট।
- ভেন্ডর অর্ডার স্ক্রিন প্রতি 10 সেকেন্ডে সবকিছু আবার আঁকত; এখন কেবল ডেটা বদলালে আঁকে।
নিরাপত্তা — বিক্রি হওয়া স্ক্রিপ্টে যে নির্দিষ্ট ফাঁকগুলো পাওয়া গেছে
এই অংশের কোনো কিছুই পছন্দ-অপছন্দের ব্যাপার নয়। প্রতিটিই স্টক 6amMart-এ থাকা ত্রুটি, আর ঠিক করার আগে প্রতিটিকেই আবার ঘটিয়ে দেখানো হয়েছে।
প্রতিটি স্টোর তালিকা থেকে পৌঁছানো যায় এমন, লগইন ছাড়াই SQL ইনজেকশন।
স্টোর-লিস্টিং কোড রিকোয়েস্ট হেডারের কাঁচা অক্ষাংশ ও দ্রাঘিমাংশ সরাসরি SQL দূরত্ব হিসাবের ভেতরে বসিয়ে দিত। কোনো লগইন বা টোকেন ছাড়াই পৌঁছানো যেত। ডেটাবেস পর্যন্ত পৌঁছানো নিশ্চিত করা হয়েছে — একটি ইনজেক্ট করা পেলোড লাইভ লগে ডেটাবেস সিনট্যাক্স এরর তৈরি করেছে। বাউন্ড প্যারামিটার দিয়ে ঠিক করা হয়েছে; দ্বিতীয় একটি অব্যবহৃত ইনজেকশন পয়েন্ট মুছে ফেলা হয়েছে।
যেকোনো গ্রাহকের অর্ডার যে কেউ পড়তে ও বদলাতে পারত।
ছয়টির বেশি অর্ডার এন্ডপয়েন্ট যেকোনো অর্ডার ID-র সাথে আন্দাজ করা গেস্ট ID মেনে নিত। লাইভে দেখানো হয়েছে: কোনো অথেনটিকেশন ছাড়া একটি রিকোয়েস্ট অন্য গ্রাহকের আইটেম, দাম ও ডেলিভারি ঠিকানা ফেরত দিয়েছে। একই পথের ওয়ালেট-পেমেন্ট এন্ডপয়েন্টে কোনো ব্যালেন্স পরীক্ষা ছিল না। প্রভাবিত প্রতিটি এন্ডপয়েন্টে মালিকানা স্কোপ যোগ করে ঠিক করা হয়েছে, আর বৈধ গেস্ট চেকআউট চালু রাখা হয়েছে।
বন্ধ করে রাখা পেমেন্ট গেটওয়েও পেমেন্ট নিষ্পত্তি করতে পারত।
অ্যাডমিন প্যানেলে গেটওয়ে বন্ধ করলে তা কেবল গ্রাহকের পছন্দের তালিকা থেকে সরত — তার কলব্যাক URL চালু থেকে যেত, আর অনেক গেটওয়ে কলব্যাক শুধু URL-এ থাকা একটি স্ট্যাটাস শব্দ দেখেই অর্ডারকে পেইড হিসেবে চিহ্নিত করে। সব গেটওয়ে বন্ধ থাকা অবস্থাতেও একটি কলব্যাক সফলভাবে চলেছে, অর্থাৎ একজন গ্রাহক টাকা না দিয়েই নিজের অর্ডার নিশ্চিত করতে পারতেন। ফেইল-ক্লোজড করে ঠিক করা হয়েছে; প্রতিটি গেটওয়ে প্রিফিক্স জুড়ে 102টি প্রোব এখন নিশ্চিত করে যে নিষ্ক্রিয় অবস্থায় কোনোটিই চলে না।
ভেন্ডররা অন্য ভেন্ডরের ডেটায় হাত দিতে পারত।
যেকোনো ভেন্ডর অন্য স্টোরের প্রোডাক্ট, অ্যাড-অন ও ব্যানার সম্পাদনা বা মুছে দিতে পারত — এমনকি অ্যাডমিনের নিজের হোম-স্ক্রিন ব্যানারও। কোনো রিভিউয়ের উত্তর দিলে সেই রিভিউ উত্তরদাতা ভেন্ডরের স্টোরের নামে চলে যেত। স্টোর স্কোপিং দিয়ে ঠিক করা হয়েছে।
একটি চালু ডেমো-লগইন ব্যাকডোর — এবং যা তার নাগালে ছিল না।
6amMart একটি ডেমো শর্টকাট দেয়, যাতে অ্যাপ-স্টোরের রিভিউয়ার SMS ছাড়াই সাইন ইন করতে পারেন। এটি কনফিগ থেকে ফোন নম্বর ও কোড পড়ে, আর কনফিগ না থাকলে ডেমো মানগুলোকে ফলব্যাক হিসেবে ব্যবহার করে — আর সাইট স্ট্যান্ডার্ড প্রোডাকশন ক্যাশিং ধাপটি চালালেই কনফিগ ঠিক তখনই অনুপস্থিত থাকে, যা প্রতিটি লাইভ ইনস্টলই করে। লাইভ সাইটে একটি হার্ডকোড করা নম্বরকে কার্যকর কোড দেওয়া হচ্ছিল, কোনো SMS পাঠানো হয়নি এবং কনফিগে তেমন কিছু চাওয়াও ছিল না। প্রভাব সীমিত ছিল, আর আমরা সেই সীমাটি বলছি: ওই নম্বরে কোনো অ্যাকাউন্ট ছিল না, তাই পথটি ফোন ভেরিফিকেশন এড়িয়ে একটি নতুন অ্যাকাউন্টে যেত — কারও বিদ্যমান অ্যাকাউন্ট দখলে যেত না। ফলব্যাকটিই একে বিপজ্জনক করেছিল: যে অপারেটর এই সেটিংয়ের নামও শোনেননি, তিনিও ব্যাকডোরটি শিপ করে ফেলতেন। 28টি অটোমেটেড পরীক্ষা এখন প্রমাণ করে যে ইচ্ছে করে চালু না করলে এটি থাকতে পারে না।
পুরো প্রোজেক্ট ফোল্ডারটি HTTPS-এ পড়া যেত।
6amMart ওয়েব সার্ভারকে public/ নয়, অ্যাপ্লিকেশন ফোল্ডারের দিকে তাক করায়, আর একে ঠেকিয়ে রাখে কেবল হাতে লেখা একটি ডিনাই-লিস্ট। ডিনাই-লিস্ট কেবল সেই পথগুলো রক্ষা করে যেগুলোর কথা কেউ ভেবেছে; চোদ্দটি পথ তাতে ছিল না, প্রতিটিই আসল রিকোয়েস্ট দিয়ে নিশ্চিত করা হয়েছে — এর মধ্যে ছিল 679 KB-র একটি ইনস্টলার ডেটাবেস ডাম্প, public ফোল্ডারের 5.9 MB-র একটি আর্কাইভ, এবং একটি PHP ফাইল যা সার্ভার সত্যিই চালিয়েছে এবং একটি ফেটাল-এরর পেজ ফিরিয়ে দিয়েছে যা সার্ভারের পুরো পাথ ফাঁস করেছে। ওয়েব রুট public/-এ সরানো হয়েছে; চোদ্দটিই এখন 404 ফেরত দেয়, আর 19টি অটোমেটেড পরীক্ষা তা ধরে রাখে।
রেট লিমিটিংয়ের গল্পটি একটি নয়, তিনটি আলাদা ত্রুটি।
- 1
API-তে কোনো রেট লিমিটই ছিল না।
ফ্রেমওয়ার্ক কনফিগারেশনে প্রতি মিনিটে 600-এর একটি API লিমিটার লেখা ছিল, কিন্তু কেউ কখনো তা প্রয়োগ করেনি — API মিডলওয়্যার গ্রুপে সম্পর্কহীন একটিমাত্র এন্ট্রি ছাড়া আর কিছু ছিল না, তাই লিমিটারটি ছিল মৃত কনফিগারেশন। পরিবর্তনের আগে মাপা হয়েছে: একটি অ্যাকাউন্টের বিপরীতে 40টি ভুল-পাসওয়ার্ড সাইন-ইন চেষ্টা, curl যত দ্রুত পারে তত দ্রুত — 40টি প্রত্যাখ্যান, কোনো থ্রটল নেই, দেরি নেই, লগে কিছু নেই। এখন তিনটি সীমা প্রযোজ্য: 600/মিনিটের একটি ব্যাকস্টপ, অথেনটিকেশন চেষ্টায় 10/মিনিট — যার চাবি ঠিকানা ও আক্রান্ত অ্যাকাউন্ট দুটোই, আর যেসব রুট সত্যিকারের SMS পাঠায় সেগুলোতে 5/মিনিট। যাচাই করা হয়েছে: দ্রুত 25টি ভুল পাসওয়ার্ড → 10টি প্রত্যাখ্যান তারপর 15টি থ্রটল; একই ঠিকানা থেকে একই সময়সীমায় অন্য একটি অ্যাকাউন্ট → থ্রটল হয়নি; এক ঝাঁকে 60টি সাধারণ ব্রাউজিং রিকোয়েস্ট → সবগুলোই সফল।
- 2
এরপর লিমিটারটি এমন একটি পরিচয়ে চাবি বানাত যা প্ল্যাটফর্মের অর্ধেকের কখনোই থাকে না — আর এটি আমরা নিজেরাই নিজেদের ফিক্স পর্যালোচনা করতে গিয়ে ধরেছি।
নতুন লিমিটারের চাবি ছিল সাইন-ইন করা ব্যবহারকারী, না পাওয়া গেলে নেটওয়ার্ক ঠিকানা। কিন্তু ভেন্ডর ও ডেলিভারিম্যান API অথ গার্ডের মধ্য দিয়ে নয়, একটি টেবিলে বেয়ারার টোকেন খুঁজে অথেনটিকেট করে, তাই ব্যবহারকারী সবসময় null থাকত এবং চাবি ঠিকানায় নেমে আসত। এক অফিসের একই সংযোগে কর্মী থাকা একটি স্টোর, কিংবা ক্যারিয়ার NAT-এর পেছনের রাইডাররা একটিমাত্র 600/মিনিট বাজেট ভাগ করে নিতেন — আর ডেলিভারি অ্যাপ প্রতি 10 সেকেন্ডে পোল করে, তাই ব্যস্ত শিফটে কাজ করা মানুষজনই বাধা পেতেন। চাবি এখন প্রথমে বেয়ারার টোকেনের হ্যাশে নামে। যাচাই করা হয়েছে: দুটি ভেন্ডর-টোকেন কল → নিজেদের কাউন্টারে 599 তারপর 598 বাকি; সাথে সাথেই একটি কাস্টমার টোকেন → আলাদা বাজেটে 599; টোকেন নেই → এখনও ঠিকানাতেই চাবি, 600 অক্ষত।
- 3
প্ল্যাটফর্ম আসল দর্শককে দেখতে পেত না।
CDN-এর পেছনে প্রতিটি রিকোয়েস্ট CDN-এর ঠিকানা থেকে আসত আর অ্যাপ্লিকেশন সেটিকেই দর্শক ভাবত — ফলে রেট লিমিটিং সব গ্রাহককে একজন ধরে থ্রটল করত, ফ্রড পরীক্ষা ভুল ঠিকানা মেলাত, আর প্রতিটি অর্ডারে যিনি অর্ডার করেছেন তাঁর বদলে একটি প্রক্সি IP জমা হতো। মূল কারণ: ফ্রেমওয়ার্ক তার গ্লোবাল স্ট্যাকে প্রক্সি হ্যান্ডলিং দেয়, আর 6amMart সেই পুরো স্ট্যাকটাই বদলে দেওয়ায় সেটি বাদ পড়ে যায়, তাই শুধু ট্রাস্টেড প্রক্সি কনফিগার করলেও তার যুক্ত হওয়ার জায়গা থাকত না। দুই অংশই এখন জায়গামতো আছে, আর ফরোয়ার্ড করা রিকোয়েস্ট আসল ক্লায়েন্ট ঠিকানায় গিয়ে দাঁড়ায়। প্ল্যাটফর্ম এখন গোটা ইন্টারনেটকে একজন ব্যবহারকারী না ধরে আসল দর্শককে দেখে।
একটি ক্যাশ-পয়জনিং প্রিমিটিভ।
লিস্টিং ক্যাশ তার চাবি বানাত URL কোয়েরি স্ট্রিং থেকে, কিন্তু এন্ডপয়েন্টগুলো প্যারামিটার পড়ত এমন একটি মেথড দিয়ে যা রিকোয়েস্ট JSON কনটেন্ট টাইপ ঘোষণা করলেই রিকোয়েস্ট বডিকে অগ্রাধিকার দেয় — GET-এর ক্ষেত্রেও। ফলে একটি রিকোয়েস্ট URL-এ এক সার্চ শব্দ আর বডিতে অন্য একটি চাইতে পারত: চাবি বানানো হতো প্রথমটির জন্য, সার্চ চলত দ্বিতীয়টির জন্য, আর ভুল সারিগুলো প্রথম চাবির নিচে জমা হয়ে এন্ট্রির মেয়াদ শেষ না হওয়া পর্যন্ত ওই শব্দ খোঁজা প্রতিটি আসল গ্রাহককে দেওয়া হতো। এতে লগইন লাগত না, আর আক্রমণকারী দুই দিকই বেছে নিত — একজন ক্রেতা কোন প্রোডাক্ট দেখবেন, কোন স্টোর থেকে, কোন দামে। যে রিকোয়েস্টের ইনপুট চাবি দেখতে পায় না, তার উত্তর এখন ক্যাশের বাইরে থেকেই দেওয়া হয়।
আরও যা বন্ধ করা হয়েছে
যে কেউ গুনতে পারলেই প্রতিটি ইনভয়েস ডাউনলোড করতে পারত।
অর্ডার, সাবস্ক্রিপশন ও ট্রিপ ইনভয়েস URL দিয়ে একটার পর একটা বের করা যেত।
ভেন্ডর থেকে অ্যাডমিনে স্টোরড XSS।
ভেন্ডরের লেখা প্রোডাক্ট বিবরণ 8টি অ্যাডমিন ও ভেন্ডর স্ক্রিনে কাঁচা HTML হিসেবে রেন্ডার হতো, তাই একজন ভেন্ডর অ্যাডমিনের ব্রাউজারে স্ক্রিপ্ট চালাতে পারতেন। স্যানিটাইজ করা হয়েছে, আর 25,726টি লাইভ প্রোডাক্ট বিবরণের বিপরীতে নিরাপদ প্রমাণিত হয়েছে — দৃশ্যমান কোনো লেখাই বদলায়নি।
পেমেন্ট কলব্যাক রিপ্লে।
কলব্যাকগুলো আইডেমপোটেন্ট ছিল না, তাই একই কলব্যাক আবার এলে গ্রাহক দুবার ক্রেডিট পেতেন। 47টি গেটওয়ের সবগুলোতেই হুক স্তরে ঠিক করা হয়েছে।
অ্যাপ-রিডাইরেক্ট রুটে একটি ওপেন রিডাইরেক্ট।
আপনার নিজের ডোমেইনে একটি ফিশিং আকার। ঠিক করা হয়েছে, তারপর পর্যালোচনায় একটি ব্যাকস্ল্যাশ বাইপাস ধরা পড়ায় আবার ঠিক করা হয়েছে; 17-কেসের একটি টেস্ট এখন এটি পাহারা দেয়।
দুটি পাবলিক ডিবাগ রুট।
একটি কোনো অথেনটিকেশন ছাড়াই ক্যাশ মুছে ফেলার কমান্ড চালাত, অন্যটি ছিল খোলা একটি ইমেজ রিলে। দুটিই মুছে ফেলা হয়েছে।
ইন্টারনেট থেকে laravel.log ডাউনলোড করা যেত।
যাতে ছিল ডেটাবেস ইউজারনেম, বাইন্ডিংসহ ব্যর্থ SQL, আর সার্ভারের পুরো পাথ।
প্রতিটি ইনস্টলে একটিই অ্যাপ্লিকেশন কি যেত।
উদাহরণ এনভায়রনমেন্ট ফাইলে একটি আসল কি ছিল; নতুন এনভায়রনমেন্ট ফাইল সেটি কপি করে, আর কি তৈরির ধাপটি কেবল ফাঁকা মান থাকলেই চলে, তাই সেটি বাদ পড়ে যেত — এভাবে তৈরি প্রতিটি ইনস্টল একই কি নিয়ে চলত, যা প্রোডাক্টের প্রতিটি কপির ভেতরেই ছাপা ছিল।
যেসব GET রিকোয়েস্ট সেটিংস বদলায় — প্রশমিত করা হয়েছে, আর সংকীর্ণভাবেই বলা হচ্ছে।
স্টক 6amMart-এ সেটিং বদলানো মানে সাধারণ একটি লিঙ্কে ক্লিক, তাই 64টি অ্যাডমিন ও ভেন্ডর GET রুট স্টেট লেখে। অ্যাডমিন সাইন ইন করা অবস্থায় একটি ক্রলার, একটি লিঙ্ক প্রিভিউ, একটি ইমেজ ট্যাগ বা একটি ব্যাকগ্রাউন্ড ফেচ সেটিংস বদলে দিতে পারে। এটি তাত্ত্বিক নয়: 1 আগস্ট আমাদের নিজেদের পারফরম্যান্স প্রোফাইলার পেজের গতি মাপার সময় ওই ঠিকানাগুলোতে রিকোয়েস্ট করে 45 সেকেন্ডে 8টি লাইভ সেটিং বদলে ফেলেছিল — প্যানেলের লেখার দিক উল্টে যায়, ল্যান্ডিং পেজ বন্ধ হয়ে যায়, একজন ভেন্ডর নিষ্ক্রিয় হয়ে যায়। এক ঘণ্টার মধ্যেই আগের অবস্থায় ফিরিয়ে যাচাই করা হয়েছে। যে ফিক্সটি শিপ করা হয়েছে সেটি একবার নিবন্ধিত একটিমাত্র গার্ড, যা ব্রাউজারের Fetch Metadata হেডার পড়ে — যেগুলো বলে দেয় রিকোয়েস্টটি কেন করা হয়েছে এবং আক্রমণকারীর JavaScript সেগুলো নকল করতে পারে না — আর যে আকারগুলো কখনোই মানুষের ক্লিক নয় সেগুলো ফিরিয়ে দেয়। লাইভে যাচাই করা হয়েছে: সেটিংস ঠিকানার একটি ইমেজ-ট্যাগ লোড ফিরিয়ে দেওয়া হয়; একটি প্রিফেচ ফিরিয়ে দেওয়া হয়; ক্রস-সাইট ব্যাকগ্রাউন্ড ফেচ ফিরিয়ে দেওয়া হয়; আসল অ্যাডমিনের ক্লিক কাজ করে; প্যানেলের নিজের 338টি ব্যাকগ্রাউন্ড রিকোয়েস্ট কাজ করে; যেসব পুরোনো ব্রাউজার এমন হেডার পাঠায় না সেগুলোও কাজ করে। গার্ড চালু ও বন্ধ — দুই অবস্থাতেই 102টি আসল প্যানেল পেজ বাইট-অভিন্নভাবে রেন্ডার হয়, আর 53টি অটোমেটেড পরীক্ষা এটি ঢাকে। একবার নিবন্ধন করলেই 1,348টি রুট ঢাকা পড়ে, নিজেদের রুট গ্রুপ ঘোষণা করা মডিউলগুলোসহ।
ব্রাউজার থেকে আসা এক্সপ্লয়েটের পথ বন্ধ। রুটগুলো নিজেরা এখনও GET-এ লেখে — সৎ সীমাবদ্ধতা দেখুন।
নির্ভুলতা — টাকার সাথে জড়িত ত্রুটি
| স্টক 6amMart-এর ত্রুটি | যা মাপা হয়েছে |
|---|---|
| কুপনের সর্বনিম্ন খরচ কখনোই প্রয়োগ হতো না | অ্যাডমিনরা এটি সেট করতে পারতেন; কোড কখনো তা পড়ত না। লাইভে প্রমাণিত: ₹999 সর্বনিম্ন চাওয়া একটি কুপন ₹1-এর অর্ডারে গৃহীত হয়েছে। ছয়টি লাইভ কুপনে সর্বনিম্ন সেট করা ছিল। অর্ডারের দাম যে তিন জায়গায় ঠিক হতে পারে, এখন তিন জায়গাতেই প্রয়োগ হয়। |
| ছাড় বিচার করা হতো ভুল ঘড়ি দিয়ে | ডেটাবেস চলত UTC-তে আর অ্যাপ্লিকেশন ভারতের সময়ে — লাইভে মাপা ব্যবধান 5h30m। 18:00–22:00 সন্ধ্যার ছাড় সন্ধ্যায় কখনো মিলত না, চালু হতো রাত 2–3টায়। আরও খারাপ, তালিকা স্ক্রিন আর চেকআউট আলাদা ঘড়ি ব্যবহার করত, তাই একটি স্টোরকে ছাড়ে দেখানো হয়ে পুরো দাম নেওয়া হতে পারত। |
| অ্যাড-অনের পরিমাণ ভুল অ্যাড-অনের নামে চার্জ হতো | পরিমাণগুলো তালিকায় অবস্থান দেখে অ্যাড-অনের সাথে জোড়া হতো, কিন্তু গ্রাহকের অ্যাপ পাঠায় মেনুর ক্রম আর ডেটাবেস ফেরত দেয় ইন্টারনাল-ID-র ক্রম। সার্ভারে দেখানো হয়েছে: ₹270-এর উদ্দেশ্যে করা একটি অর্ডারে বিল হয়েছে ₹550। কোডের যে 8টি জায়গায় এটি হতো, সব জায়গাতেই ঠিক করা হয়েছে। |
| স্টক কমত ভুল প্রোডাক্টের | ক্যাম্পেইনের একটি কেনাকাটা প্রোডাক্ট টেবিলে ক্যাম্পেইন ID দিয়ে প্রোডাক্ট খুঁজত। তিনটি লাইভ ক্যাম্পেইন ID-ই প্রোডাক্ট ID হিসেবেও ছিল। |
| চেকআউটের স্টক পরীক্ষা যে সংখ্যা দেখত আর যেটি লিখত, দুটি আলাদা ছিল | শেষ পরীক্ষাটি প্রোডাক্টের সামগ্রিক স্টক মেলাত; কমানো হতো বেছে নেওয়া ভ্যারিয়েশনের স্টক। লাইভ ডেটায় মাপা: 56টি সক্রিয় প্রোডাক্ট যেখানে বৈধ কেনাকাটা প্রত্যাখ্যাত হতো, আর 1,451টি যেখানে ওভারসেল ধরাই পড়ত না। |
| একই গেটওয়ে কলব্যাক আবার এলে পেমেন্ট দুবার ক্রেডিট হতো | গ্রাহক রিটার্ন পেজ রিফ্রেশ করলেও এটি ঘটত। 47টি গেটওয়ের সবগুলোতেই হুক স্তরে ঠিক করা হয়েছে। |
| বাই-নাউ চেকআউট ফোন যা পাঠাত তারই দাম ধরত | সার্ভারের কার্টের বদলে। |
| একটি উইথড্রয়াল দুবার অনুমোদন করা যেত এবং ওয়ালেট ঋণাত্মক হয়ে যেত | লাইভে দেখানো হয়েছে: দুবার অনুমোদন করলে তোলা মোট টাকা দুবার ক্রেডিট হয় এবং পেন্ডিং ব্যালেন্স −50.00-এ নেমে যায়। একটি ব্যাক-বাটন বা একটি ডাবল-ক্লিকই যথেষ্ট ছিল। |
| অর্ডার ID হাতে বসানো হতো | কোড সবচেয়ে বড় বিদ্যমান অর্ডার ID পড়ে তার সাথে এক যোগ করত — অটো-ইনক্রিমেন্ট খারাপভাবে আবার তৈরি করা, আর একসাথে চেকআউট হলে সংঘর্ষ। |
| দুজন রাইডার একই অর্ডার নিতে পারতেন | আর দুজন গ্রাহক শেষ ইউনিটটি কিনতে পারতেন। আগে-দেখে-পরে-লেখার রেস, এখন অ্যাটমিক ডেটাবেস ক্লেইম, একসাথে চলা ট্রানজ্যাকশন দিয়ে প্রমাণিত। |
যে দুটি গণনা আপনি উদ্ধৃত হতে দেখবেন। প্রকল্পের নিজের হিসাবে 342টি ঠিক করা ত্রুটির মধ্যে 4টি নিরাপত্তা ফাঁককে সংকটজনক আর 6টি ত্রুটিকে টাকার সাথে জড়িত ধরা হয়েছে। এগুলোই কম, প্রকাশিত হিসাব, তাই এই পেজ সেগুলোই ব্যবহার করে। এগুলো এই পেজে তালিকাভুক্ত জিনিসের গণনা নয়: উপরের নিরাপত্তা অংশে চারটির বেশি নিরাপত্তা ত্রুটির নাম আছে আর উপরের টেবিলে দশটি টাকা-সংক্রান্ত ত্রুটি আছে, কারণ আমরা যেগুলো আবার ঘটিয়ে দেখাতে পেরেছি সবগুলোই লিখি, শুধু ওই দুই হিসাবের ভেতরেরগুলো নয়।
টাকার সাথে জড়িত নয়, তবু উল্লেখযোগ্য নির্ভুলতার সমস্যা
- শিডিউলার কখনো চলেইনি। ডিপ্লয়মেন্টের পর থেকে পাঁচটি নির্ধারিত ব্যাকগ্রাউন্ড কাজ একবারও চলেনি — সিস্টেমের ক্রন এন্ট্রিটি কখনো বসানোই হয়নি।
- মাসিক পেআউট কাজটি মাসে চারবার চলত (শিডিউল লেখা ছিল "28–31 তারিখ", "মাসের শেষ দিন" নয়)।
- অর্ডার ইতিহাসে প্রতিটি স্টোরকে রেটিংহীন দেখাত — সর্বত্র 0 তারা, অথচ একটি স্টোরের আসল রেটিং ছিল 29টি রিভিউয়ে 4.31।
- রাইডারের ডেলিভারি প্রোডাক্টের জনপ্রিয়তায় কখনো যোগ হতো না — বাড়ানোর লুপটি এমন একটি প্রপার্টির নাম ব্যবহার করত যা ওই রেকর্ডে নেই, তাই ব্লকটি চুপচাপ কিছুই করত না এবং প্রতিটি "টপ প্রোডাক্ট" তালিকা বেঁকে যেত।
- পুশ নোটিফিকেশন চুপচাপ বন্ধ ছিল — এমন একটি ওয়ার্কারের সারিতে পাঠানো হতো যা হয়তো ছিলই না; কিছুই পৌঁছাত না, কোনো এররও উঠত না।
- অ্যাডমিন ও ভেন্ডর প্যানেল জুড়ে 34টি সার্ভার এরর → শূন্য।
- স্টোর সারি নেই এমন একজন ভেন্ডর নিজের প্যানেলের 12টি পেজের 9টি, ভেন্ডর ওয়েব লগইন এবং স্টোর অ্যাপের লগইন অচল করে দিতেন — একটি শেয়ার করা হেল্পার একটি খালি রিলেশনের প্রথম উপাদান ফেরত দিত, যা null না দিয়ে এরর তোলে। 43টি পরীক্ষা, যার মধ্যে জোড়া অ্যাসারশন আছে যে একজন বৈধ ভেন্ডর এখনও পাস করেন।
- একটি অ্যাডমিন রিপোর্ট এই সফটওয়্যারের কোনো ইনস্টলেশনেই কোনোদিন কাজ করেনি — এটি অবৈধ PHP-তে কম্পাইল হতো এবং সবসময় ব্যর্থ হতো। 895টি স্ক্রিন টেমপ্লেট পরীক্ষা করে ধরা পড়েছে; ত্রুটিপূর্ণ ছিল কেবল এটিই।
অপ্টিমাইজড ইনস্টলের সাথে যা আসে, স্টকে যা নেই
| সক্ষমতা | এটি কী |
|---|---|
| অটোমেটেড যাচাই সুইট | স্ক্রিপ্ট, যেগুলো আপনি নিজে চালান। প্রতিটি অ্যাসারশন গ্রহণের আগে প্রমাণ করতে হয়েছে যে পুরোনো কোডে সেটি ব্যর্থ হয় — যে টেস্ট ভাঙা সিস্টেমেও পাস করে, সেটি কিছুই প্রমাণ করে না। 9 আগস্টের রিপোর্টে 60টি স্ক্রিপ্ট ছিল, অর্থাৎ 55টি অ্যাসারশন আর 5টি রিপোর্টিং টুল, আর রিপোর্টিং টুল কিছুই অ্যাসার্ট করে না। এর সাথে 49টি ইউনিট ও ফিচার টেস্ট। |
| স্কিমা পুনরুৎপাদনের প্রমাণ | ডেটাবেসটি শুধু কোড থেকেই আবার তৈরি করা যায় — শূন্য থেকে তৈরি করে 184টি টেবিলের সবগুলো কলাম ধরে ধরে ও ইনডেক্স ধরে ধরে মিলিয়ে প্রমাণ করা হয়েছে, কোনো পার্থক্য নেই। |
| SixPreflight | সার্ভার প্রস্তুত কি না দেখার টুল: হার্ডওয়্যার, PHP, অ্যাপ্লিকেশনের স্বাস্থ্য, পারমিশন, ওয়েব সার্ভার, ক্যাশিং, ডেটাবেস সেটিংস, পাবলিক এক্সপোজার এবং প্রতিটি বাইরের সার্ভিস জুড়ে ~134টি পরীক্ষা। লঞ্চের আগে ব্রাউজারে খুলুন, এটি বলে দেবে কী ভাঙবে। |
| ডিপ্লয়মেন্ট রানবুক | নথিভুক্ত ইনস্টল ও আপডেটের ধাপ, সাথে ফাঁদগুলো: কোন কমান্ড চুপচাপ কনফিগ ক্যাশ মুছে দেয়, কোন ক্যাশগুলো একে অন্যকে তৈরি করে না, একটি সেটিং সেভ করলে হোস্টিং প্যানেল কী কী বাতিল করে দেয়। |
| iOS বিল্ড | তিনটি অ্যাপই Android-এর পাশাপাশি Apple-এর জন্যও সাইন করা ও বিল্ড হচ্ছে — এই প্রকল্পের জন্য তৈরি প্রথম Apple বিল্ড। |
| লাইভ অর্ডার ট্র্যাকিং সত্যিই চালু | ওয়েবসকেট সার্ভিস চালু করা হয়েছে এবং যে দুটি ত্রুটি একে বন্ধ রাখত সেগুলো ঠিক করা হয়েছে; সার্টিফিকেট নবায়ন প্রমাণিত। |
নিজে যাচাই করুন
প্রতিটি সংখ্যা নিজে যাচাই করুন
এই পেজের সবচেয়ে বিশ্বাসযোগ্য জিনিসটি কোনো সংখ্যা নয়। সেটি হলো, আপনি প্রতিটি সংখ্যা নিজে যাচাই করতে পারেন।
যাচাই সুইট আপনার ইনস্টলের সাথেই আসে। আপনার নিজের সার্ভারে:
bash tests/Scripts/run-all.sh # যাচাই পরীক্ষাগুলোphp tests/Scripts/api-smoke.php # প্রতিটি API এন্ডপয়েন্ট সুইপ করে1প্রতিটি অ্যাসারশন গ্রহণের আগে প্রমাণ করতে হয়েছে যে পুরোনো কোডে সেটি ব্যর্থ হয়।
যে টেস্ট ভাঙা সিস্টেমেও পাস করে, সেটি কিছুই প্রমাণ করে না।
2এন্ডপয়েন্ট সুইপ 306টি রিকোয়েস্ট পাঠায়।
এটি প্রতি এন্ডপয়েন্টে সার্ভার এরর ও রেসপন্স টাইম জানায় — তাই "শূন্য সার্ভার এরর, 250 ms-এর বেশি শূন্যটি এন্ডপয়েন্ট" এমন কিছু যা আপনি নিজে আবার চালান, আমাদের কথায় বিশ্বাস করার জিনিস নয়। টাইমিং পড়ার আগে নিজের রানে বাতিল হওয়া সংখ্যাটি পড়ুন; নিচের পরিচালনা-নোট দেখুন।
3সুইটে নিরাপত্তার অ্যাসারশনগুলোও আছে।
শুধু গতির নয়: ওয়েব-রুট এক্সপোজার সুইপ, ডেমো-OTP ব্যাকডোর পরীক্ষা, পেমেন্ট-হুক আইডেমপোটেন্সি পরীক্ষা, ক্রস-অ্যাকাউন্ট গার্ড, ক্যাশ-পয়জনিং পরীক্ষা, এবং কোন GET রুট স্টেট লেখে তার একটি অডিট।
4স্কিমা পরীক্ষা শুধু কোড থেকেই ডেটাবেস আবার তৈরি করে।
এটি আপনার লাইভ ডেটাবেসের সাথে 184টি টেবিলের পার্থক্য মিলিয়ে দেখে।
সৎ পরিচালনা-নোট এন্ডপয়েন্ট সুইপ পরপর অনেকবার চালালে প্ল্যাটফর্মের নিজের রেট লিমিটার চালু হয়ে যায়। থ্রটল হওয়া রিকোয়েস্ট ডেটাবেসের কোনো কাজ করে না, তাই মোট কোয়েরি কমে যায় এবং রানটি প্রায় কিছুই পরীক্ষা না করেই দ্রুত মনে হয়। একটি বৈধ রানে প্রায় 235টি সফল এবং 66–68টি বাতিল রিকোয়েস্ট দেখা যায়; শত শত বাতিল হলে রানটি বাদ দিন।
আর সুইটের বর্তমান অবস্থা, ঠিক যেভাবে আছে 9 আগস্টের রিপোর্টে লেখা ছিল 60টি স্ক্রিপ্ট — 55টি অ্যাসারশন আর 5টি রিপোর্টিং টুল — এবং 49টি ইউনিট ও ফিচার টেস্ট। ডিরেক্টরিটি এরপর বেড়ে 86টি এন্ট্রি হয়েছে, যার মধ্যে রিপোর্টিং টুল ও অন্যান্য নন-অ্যাসারশন ফাইল আছে, তাই এটি পরীক্ষার সংখ্যা নয়। সর্বশেষ লিপিবদ্ধ পূর্ণ রানে 70টি চলেছে: 61টি পাস, 2টি ফেল, 7টি স্কিপ। দুটি ব্যর্থতারই নাম প্রমাণে আছে — রেন্টাল নেই এমন ইনস্টলে সার্ভার এরর দেওয়া দুটি রেন্টাল অ্যাডমিন রিপোর্ট, আর একটি অনুপস্থিত অ্যাসেট ম্যাপ-ব্যাক — আর অন্তত রেন্টালেরটি পরে ঠিক করা হয়েছে। নিজের ইনস্টলে সুইটটি আবার চালান আর নিজের সংখ্যা পড়ুন।
সৎ সীমাবদ্ধতা
এই পেজ যা দাবি করে না
যে পেজ বলে "আমরা এটাই মেপেছি, এভাবে যাচাই করবেন, আর এগুলো আমরা সমাধান করতে পারিনি", সেটিকে অবিশ্বাস করা কেবল জয়ের কথা ছাপা পেজের চেয়ে কঠিন।
342টি ত্রুটি খুঁজে বের করে ঠিক করা হয়েছে। কী বাকি আছে তার তালিকা কেউ দিতে পারে না।
এই আকারের একটি প্ল্যাটফর্মের সৎ চেহারা এটিই।
এই প্রোগ্রামে অন্য কোনো ভেন্ডরের কাজ মাপা হয়নি।
তাই এই পেজ আর কারও বিল্ড নিয়ে কোনো দাবি করে না। এখানকার প্রতিটি সংখ্যা হলো সেই সময়ে পাঠানো স্টক স্ক্রিপ্টের সাথে আমাদের অপ্টিমাইজড কোডের তুলনা, একটি সার্ভারে।
এই পেজের প্রতিটি সংখ্যা আমাদের বিপক্ষে রাউন্ড করা, কখনো আমাদের পক্ষে নয়।
গ্রাহকমুখী স্ক্রিনে মাপা উন্নতি 10× থেকে 22×, অর্থাৎ 90 থেকে 95% কম অপেক্ষা — 22× আসলে 95.4% আর আমরা ছাপি 95। মাপ যেখানে একটি পরিসর, সেখানে গুণিতক হলো সবচেয়ে কম "আগে" ভাগ সবচেয়ে বেশি "পরে"।
এই পেজের 10,000,000 অর্ডারের সংখ্যাগুলো একটি স্কেল টেস্ট, লাইভ পারফরম্যান্স নয়।
এগুলো এসেছে বিশেষভাবে তৈরি একটি ডেটাবেস থেকে, যাতে 10,000,000টি অর্ডার, 1,000,000টি প্রোডাক্ট ও 200,000 জন গ্রাহক ভরা ছিল এবং ইচ্ছে করেই কম বরাদ্দের 128 MB বাফার পুলে চালানো হয়েছিল, যাতে সেটি বাস্তবের কম-সম্পদের সার্ভারের মতো I/O-নির্ভর হয়। অডিট করা প্রোডাকশন ইনস্টলে আছে 3,282টি অর্ডার।
স্কেল টেস্টের ছয়টি সারি এখনও এক সেকেন্ড বা তার বেশি, আর আমরা নিচে এগারোটি সারিই ছাপছি।
ডিসপ্যাচ ব্যাজ 12 s; popular_products 7.1 s; গভীর পেজ অফসেটে অ্যাডমিন অর্ডার তালিকা 3.1 s; আইটেম রিপোর্ট এক মাসের জন্য 12.5 s আর সর্বকালের জন্য 131 s; অ্যাডমিন কাস্টমার তালিকা প্রায় 1–1.5 s। আইটেম রিপোর্টের সর্বকালের সংখ্যাটি আমাদের মাপা সবচেয়ে খারাপ জিনিস, আর যে স্টক রানের সাথে এটির তুলনা হওয়ার কথা সেটি 120 সেকেন্ডে থামিয়ে দিতে হয়েছিল, তাই সেখানে আমরা উন্নতির দাবিই করতে পারি না — কেবল বলতে পারি যে আমাদেরটি শেষ হয়।
যেসব GET রিকোয়েস্ট সেটিংস বদলায় সেগুলো প্রশমিত, নির্মূল নয়।
ব্রাউজার দিয়ে চালানো এক্সপ্লয়েটের পথ বন্ধ ও যাচাই করা; 64টি অ্যাডমিন ও ভেন্ডর রুট নিজেরা এখনও GET-এ স্টেট লেখে, আর সেগুলোকে সুরক্ষিত ফর্মে বদলানোর চেষ্টা ইচ্ছে করেই করা হয়নি, কারণ বহু ডেরাইভড প্রকল্পে এখন কাজ করছে এমন একটি প্ল্যাটফর্মে সেটি বড় রিগ্রেশনের ঝুঁকি।
গার্ডটি দুর্বলতার চেয়ে বেশি চওড়া।
নিরীহ একটি রিড-অনলি তালিকাও ফিরিয়ে দেওয়া হয় যদি সেটি প্রিফেচ বা ইমেজ লোড হিসেবে আসে, কারণ প্যানেলের ~860টি রিড-অনলি ঠিকানাকে 64টি বিপজ্জনক ঠিকানা থেকে আলাদা করতে ঠিক সেই ভঙ্গুর তালিকাটিই লাগে যা আমরা লিখব না বলে ঠিক করেছি। এটি বন্ধ করার জন্য এক লাইনের একটি সুইচ আছে।
রেট লিমিটিং নিরাপদ সার্ভারগুলো যেখানে বসে আছে তার কারণে, হেডার নকল করা যায় না বলে নয়।
কনফিগারেশন ফরোয়ার্ড করা হেডারকে বিশ্বাস করে, যা কেবল ততক্ষণই টেকে যতক্ষণ প্রক্সি চেইন ছাড়া আর কোনোভাবে PHP-তে পৌঁছানো যায় না। সরাসরি পৌঁছানো যায় এমন একটি মেশিনে ক্লায়েন্ট হেডার নকল করে প্রতি রিকোয়েস্টে নতুন বাজেট নিতে পারবে।
অ্যাপের ডাউনলোড সাইজ প্রায় বদলায়নি।
মোট প্রায় 0.7 MB, কারণ আমরা যে অব্যবহৃত কোড সরিয়েছি রিলিজ কম্পাইলার আগে থেকেই তা বাদ দিয়ে দিত। অ্যাপ-সাইজ নিয়ে আমরা কোনো দাবি করি না।
রেফারেন্স ইনস্টলে তিনটি বিষয় খোলা এবং লুকানোর বদলে নাম ধরে বলা হচ্ছে।
Google Maps কি-গুলো অনিয়ন্ত্রিত, সেগুলো সীমিত করা দরকার; স্টক 6amMart-এর নিজের আপলোড হেল্পার যে Apple Sign-In প্রাইভেট কি পাবলিক স্টোরেজে রেখে দিয়েছিল সেটি বাতিল করে নতুন করে নিতে হবে; আর তিনজন ভেন্ডরের এখনও কোনো স্টোর সারি নেই — ওই অবস্থার কারণে যেসব 500 হতো সেগুলো ঠিক করা হয়েছে, কিন্তু অবস্থাটি এখনও ঘটতে পারে, কারণ দুটি রেজিস্ট্রেশন পথই ভেন্ডর ও স্টোরকে একটিমাত্র ট্রানজ্যাকশনের বাইরে সেভ করে। তিনটিই হ্যান্ডওভার নথিতে আছে।
রেফারেন্স সার্ভারে এখন সীমা হার্ডওয়্যার, কোড নয়।
20–40 জন একসাথে ব্যবহারকারী নিয়ে লোড টেস্ট করা হয়েছে, শূন্য এরর; ওই বিন্দুতে 2 vCPU মেশিনটি ভরে যায়।
এই সব বেঞ্চমার্ক একটি সার্ভার, একটি ডেটাসেটের।
এই ইনস্টলে কী বদলেছে তা বলার জন্য এগুলো যথেষ্ট। প্রতিটি 6amMart ডিপ্লয়মেন্ট নিয়ে সাধারণ কোনো বক্তব্য এগুলো নয়।
স্টক 6amMart একটি বহুল ব্যবহৃত বাণিজ্যিক প্রোডাক্ট।
উপরের ত্রুটিগুলো তথ্য হিসেবেই বলা হয়েছে, আর সেটুকুই যথেষ্ট।
স্কেল টেস্ট, পুরোটাই ছাপা — প্রতিটি সারি, খারাপগুলোসহ
স্কেল টেস্ট — বিশেষভাবে তৈরি 10,000,000 অর্ডারের একটি ডেটাবেস, লাইভ ট্র্যাফিক নয়।
| স্ক্রিন | স্টক | অপ্টিমাইজড | এখনও ধীর? |
|---|---|---|---|
| অ্যাডমিন অর্ডার তালিকা, প্রথম পেজ | 27.4 s | 13.6 ms | |
| প্রতিটি ভেন্ডর পেজে অর্ডার-সংখ্যার ব্যাজ | 136 ms | 20 ms | |
| আইটেম রিপোর্ট, this_week | 120 s-এ থামানো হয়েছে | 542 ms | |
| get_stores | 9.8 s | 901 ms | |
| প্রতিটি অ্যাডমিন পেজে অর্ডার-সংখ্যার ব্যাজ | 8.5 s | 830 ms | |
| অ্যাডমিন কাস্টমার তালিকা, প্রথম পেজ | 20.7 s | ~1.0 – 1.5 s | ≥ 1 s |
| অ্যাডমিন অর্ডার তালিকা, গভীর পেজ অফসেট | 100 s | 3.1 s | ≥ 1 s |
| popular_products | 12.8 s | 7.1 s | ≥ 1 s |
| ডিসপ্যাচ ব্যাজ | 29.8 s | 12 s | ≥ 1 s |
| আইটেম রিপোর্ট, this_month | 120 s-এ থামানো হয়েছে | 12.5 s | ≥ 1 s |
| আইটেম রিপোর্ট, all_time | 120 s-এ থামানো হয়েছে | 131 s (365-দিনের সীমা) | ≥ 1 s — আমাদের সবচেয়ে খারাপ সারি |
কোনো সারিতে দুটি উৎস একমত না হলে, এই টেবিল দুই দিকেই কম চাটুকার সংখ্যাটি ছাপে।
আমাদের নিজেদের রিপোর্টে অ্যাডমিন কাস্টমার তালিকা ~1.0 s লেখা, অথচ কাঁচা হারনেস লগে লেখা 1.5 s, তাই পরিসরটি ছাপা হয়েছে। রিপোর্টে অ্যাডমিন ব্যাজ 8.5 s → 830 ms লেখা, যেখানে কাঁচা লগে 57.4 s → 791 ms, আর ভেন্ডর ব্যাজ 136 ms → 20 ms লেখা, যেখানে কাঁচা লগে 270 ms → 13 ms; দুই ক্ষেত্রেই ছোট "আগে" আর বড় "পরে" ছাপা হয়েছে।
এটি কি আমার জন্য গুরুত্বপূর্ণ হবে?
বাস্তবসম্মত 100,000 অর্ডারে — অডিট করা ইনস্টলের বর্তমান পরিমাণের ত্রিশ গুণ — এবং অর্ডার-ব্যাজের উইন্ডো বন্ধ রেখে, ওই পরিমাণে প্রোফাইল করা নয়টি স্ক্রিনই 250 ms বা তার কমে মাপা হয়, আর নয়টির ছয়টি 50 ms বা তার কমে: ভেন্ডর ব্যাজ 3.4 ms, get_latest_products 10 ms, কাস্টমার তালিকা 31 ms, আইটেম রিপোর্ট 46 ms, জনপ্রিয় প্রোডাক্ট 47 ms, স্টোর তালিকা 50 ms, ডিসপ্যাচ ব্যাজ 146 ms, অ্যাডমিন অর্ডার তালিকা 155 ms, অ্যাডমিন সাইডবার ব্যাজ 179 ms। ব্যাজ উইন্ডো (ORDER_BADGE_WINDOW_DAYS=60) একটি শিপ করা সেটিং, আর সেটি চালু আছে কি না তার উপর এই সংখ্যাগুলো বদলায়, তাই মাপটি কোন শর্তে নেওয়া হয়েছে সেটিও আমরা বলছি।
FAQ
ক্রেতারা আসলে যেসব প্রশ্ন করেন
12টি প্রশ্ন, পেজের বাকি অংশের একই সংখ্যা দিয়ে উত্তর দেওয়া।
আমি আসলে কী কিনছি?
AllsWeb বরাবর যা বিক্রি করে এসেছে ঠিক সেটিই: আপনার হোস্টিংয়ে 6amMart-এর সম্পূর্ণ ইনস্টলেশন, সেটআপ ও কনফিগারেশন — অ্যাডমিন প্যানেল, ভেন্ডর প্যানেল, Android APK ও AAB, iOS বিল্ড, কাস্টমার ওয়েবসাইট, আপনার ব্র্যান্ডিং, SMTP, Google Maps, Firebase পুশ ও OTP, সোশ্যাল লগইন, আপনার পেমেন্ট গেটওয়ে, আপনার ল্যাঙ্গুয়েজ ফাইল, এবং একটি প্রাইভেট GitHub রিপোজিটরিতে সোর্স কোড। প্রয়োজনীয়তা সম্পূর্ণ হলে 1–3 কার্যদিবসে ডেলিভারি, সেটআপ সমস্যা ও ছোট সংশোধনের জন্য ফ্রি লাইফটাইম সাপোর্টসহ। ওই ইনস্টল এখন অপ্টিমাইজড কোডেই তৈরি হয়।
আমি কি একই 6amMart পাব?
হ্যাঁ — সর্বশেষ 6amMart রিলিজ, আমরা যেদিন আপনার ইনস্টল তৈরি করি সেদিন 6amTech যা-ই শিপ করুক। একই অ্যাডমিন প্যানেল, একই ভেন্ডর প্যানেল, একই কাস্টমার, স্টোর ও রাইডার অ্যাপ, একই ডেটা মডেল, একই ফিচার। প্রতিটি পারফরম্যান্স পরিবর্তন গ্রহণের শর্ত ছিল বাইট-অভিন্ন ডেটা ফেরত দেওয়া, তাই আপনার স্ক্রিন আগে যা দেখাত তা-ই দেখাবে, শুধু দ্রুত।
অপ্টিমাইজড কোডের জন্য কি বাড়তি টাকা লাগে?
না। আলাদা কোনো প্রোডাক্ট নেই, আলাদা লাইসেন্স নেই, প্রিমিয়াম টিয়ার নেই। ক্যাটালগে যে ইনস্টলেশনের দাম আছে সেটিই দাম, আর অপ্টিমাইজড কোড তার মধ্যেই আছে। আপনি তবু CodeCanyon থেকে নিজের 6amMart লাইসেন্স কিনে নিজেই তার মালিক থাকেন।
আসলে কতটা দ্রুত?
লাইভ সার্ভারে, CDN বাদ দিয়ে: ফিচার্ড আইটেম 8.19 s → 0.37 s (22×), টপ ক্যাটাগরি 3.34 s → 0.27 s (12×), প্রোডাক্ট সার্চ 1.64–1.96 s → 0.09–0.12 s (অন্তত 13×), স্টোরফ্রন্ট হোম পেজ ~1.47 s → 0.073–0.096 s (অন্তত 15×)। সারির গুণিতকগুলো মাপ যতটা কম চাটুকার হতে দেয় ততটাই ধরা হয়েছে। গ্রাহকমুখী স্ক্রিন জুড়ে সাধারণ সংখ্যাটি 10× থেকে 22× দ্রুত — 90 থেকে 95% কম অপেক্ষা।
ওই সংখ্যাগুলো কোথা থেকে আসে, আর কোন হার্ডওয়্যারে?
"আগে" হলো পরীক্ষার সময় CodeCanyon যেভাবে পাঠিয়েছিল ঠিক সেই স্টক স্ক্রিপ্ট — উপরের পদ্ধতি-নোটে ফুটনোট দিয়ে লেখা আছে সেটি কোন বিল্ড ছিল এবং ফুটনোটটি কেন আছে। "পরে" হলো প্রোগ্রামের পরে সেই একই স্ক্রিপ্ট, তার উপরে ভেন্ডরের পরবর্তী রিলিজ বসানো। দুটিই মাপা হয়েছে একই 2 vCPU / 3.9 GB সার্ভারে, সার্ভারের দিক থেকে, CDN বাদ দিয়ে — বড় কোনো মেশিনে নয়, আর CDN-কে দিয়ে কাজ করিয়েও নয়। তুলনার টেবিলের দুটি সারি সার্ভারের টাইমিং নয় এবং সেভাবেই চিহ্নিত: একটি বিল্ড-আউটপুটের বাইট সংখ্যা, আর একটি মোবাইল ডেটায় হ্যান্ডসেটের মাপ।
আমি কি এর কিছু নিজে যাচাই করতে পারি, নাকি পেজটাকে বিশ্বাস করতেই হবে?
আপনি পুরোটাই যাচাই করতে পারেন। যাচাই সুইট আপনার ইনস্টলের সাথেই আসে: bash tests/Scripts/run-all.sh পরীক্ষাগুলো চালায় আর php tests/Scripts/api-smoke.php 306টি API রিকোয়েস্ট সুইপ করে রেসপন্স টাইম ছাপে। প্রতিটি অ্যাসারশন গ্রহণের আগে প্রমাণ করতে হয়েছে যে পুরোনো কোডে সেটি ব্যর্থ হয়, তাই পাস করার মানে আছে। একটি সতর্কতা আমরা বরং নিজেরাই বলে দিই: একটি বৈধ সুইপে প্ল্যাটফর্মের নিজের রেট লিমিটার প্রায় 66–68টি রিকোয়েস্ট বাতিল করে, আর শত শত বাতিল হওয়া রান বাদ দেওয়া উচিত।
6amTech-এর নিজের আপডেট কি এতে কাজ করবে?
কারিগরিভাবে হ্যাঁ — করা হয়েছে। ভেন্ডরের পরবর্তী রিলিজ অপ্টিমাইজড কোডের উপরে বসানো হয়েছে, আর 9 আগস্টের রিপোর্টের পরেও কাজ যোগ হয়েছে: ক্যাশ হার্ডেনিং, নতুন করে তৈরি খরচের তালিকা, এবং একটি অ্যাপ্লিকেশন-কি ত্রুটি যা ভেন্ডরের উদাহরণ কনফিগারেশন থেকে তৈরি প্রতিটি ইনস্টলে ছিল। সৎ বিবরণটি হলো, আমাদের ফিক্সগুলো 6amTech যেসব ফাইল শিপ করে সেই একই ফাইলে বসে, তাই ভেন্ডরের রিলিজ মানে আমাদের করা একটি মার্জ, আপনার নিজের চালানো ফাইল-ধরে-ধরে ওভাররাইট নয়।
6amTech পরের 6amMart রিলিজ শিপ করলে কী হবে?
এখন কিনলে সেটি আপনি পাবেন — আমরা যেদিন বিল্ড করি সেদিন যা চলতি তা-ই ইনস্টল করি। আগে ডেলিভারি করা কোনো ইনস্টলের ক্ষেত্রে আমাদের ক্যাটালগের যেকোনো স্ক্রিপ্টের যেকোনো গ্রাহকের মতোই হয়: নতুন রিলিজে যাওয়া মানে স্ট্যান্ডার্ড আপডেট সার্ভিস, ইনস্টলেশন দামের 50%, কারণ আপনার প্রথম সেটআপের কনফিগারেশন আবার ব্যবহার করা হয়। অপ্টিমাইজড কোডে সেটি প্রয়োগ করা মানে আগের উত্তরে বলা মার্জ, আর সেটি আমাদের কাজ, আপনার নয়।
স্টক স্ক্রিপ্টে আসলে কী কী নিরাপত্তা সমস্যা ছিল?
আবার ঘটিয়ে দেখানো, তারপর ঠিক করা: প্রতিটি স্টোর তালিকা থেকে পৌঁছানো যায় এমন, লগইন ছাড়াই SQL ইনজেকশন; সাইন ইন না করেই যেকোনো গ্রাহকের অর্ডার ও ডেলিভারি ঠিকানা পড়া যেত; অ্যাডমিনে বন্ধ করা পেমেন্ট গেটওয়ে, যাদের কলব্যাক তবু পেমেন্ট নিষ্পত্তি করত; ভেন্ডররা অন্য ভেন্ডরের প্রোডাক্ট ও ব্যানার সম্পাদনা করতে পারতেন; একটি চালু ডেমো-লগইন ব্যাকডোর (সীমিত — এটি ফোন ভেরিফিকেশন এড়িয়ে নতুন অ্যাকাউন্টে নিয়ে যেত, বিদ্যমান অ্যাকাউন্ট দখলে নয়); HTTPS-এ পড়া যেত এমন চোদ্দটি প্রোজেক্ট পাথ, যার মধ্যে 679 KB-র একটি ইনস্টলার ডেটাবেস ডাম্প; URL দিয়ে একটার পর একটা বের করা যায় এমন প্রতিটি ইনভয়েস; আর একেবারেই রেট লিমিট নেই এমন একটি API — পরপর 40টি ভুল-পাসওয়ার্ড চেষ্টা সবই গৃহীত হয়েছে, কোনো থ্রটল হয়নি আর লগেও কিছু ওঠেনি।
আমার দোকান বড় হলেও কি এটি দ্রুত থাকবে?
প্রায় 100,000 অর্ডার পর্যন্ত হ্যাঁ: ওই পরিমাণে প্রোফাইল করা নয়টি স্ক্রিন, অর্ডার-ব্যাজের উইন্ডো বন্ধ রেখে, সবই 250 ms বা তার কমে মাপা হয় আর নয়টির ছয়টি 50 ms বা তার কমে। সেটি অডিট করা ইনস্টলের বর্তমান পরিমাণের ত্রিশ গুণ। এর বেশি হলে উপরের সৎ সীমাবদ্ধতা অংশে স্কেল টেস্টটি পড়ুন — সেখানে সবই জয় নয়। কম বরাদ্দের ডেটাবেসে 10,000,000 অর্ডারে অ্যাডমিন অর্ডার তালিকা 27.4 s থেকে 13.6 ms-এ নামে, কিন্তু ডিসপ্যাচ ব্যাজ এখনও 12 s, জনপ্রিয় প্রোডাক্ট 7.1 s আর সর্বকালের আইটেম রিপোর্ট 131 s। এগুলো বিশেষভাবে তৈরি একটি ডেটাবেসে করা স্কেল-টেস্টের সংখ্যা, আপনার লাইভ সার্ভারের নয়।
আপনারা কি দাবি করছেন আর কোনো ত্রুটি নেই?
না। 342টি ত্রুটি খুঁজে বের করে ঠিক করা হয়েছে। এই আকারের প্ল্যাটফর্মে কী বাকি আছে তার তালিকা কেউ দিতে পারে না। আমরা যা দেখাতে পারি তা হলো কী মাপা হয়েছে, কীভাবে আবার মাপবেন, আর কোন বিষয়গুলো এখনও খোলা — এই পেজের সৎ সীমাবদ্ধতা অংশে সেগুলো আছে, এখনও ধীর স্কেল-টেস্টের সারিগুলো আর যেসব রুট আমরা নতুন করে না লিখে প্রশমিত করেছি সেগুলোসহ।
কোন জিনিসগুলো নিয়ে আপনারা এখনও সন্তুষ্ট নন?
কয়েকটি, আর আমরা চাই আপনি সেগুলো এখানেই পড়ুন। 10,000,000 অর্ডারের স্কেল টেস্টে ছয়টি সারি এখনও এক সেকেন্ড বা তার বেশি — সবচেয়ে খারাপ হলো সর্বকালের আইটেম রিপোর্ট, 131 সেকেন্ড, আর যে স্টক রানের সাথে এটির তুলনা হওয়ার কথা সেটি 120 সেকেন্ডে থামিয়ে দিতে হয়েছিল, তাই সেখানে আমরা উন্নতির দাবিই করতে পারি না; ডিসপ্যাচ ব্যাজ 12 সেকেন্ড। 64টি অ্যাডমিন ও ভেন্ডর রুট এখনও সাধারণ GET-এ স্টেট বদলায় — ব্রাউজারের এক্সপ্লয়েট পথ বন্ধ ও যাচাই করা, কিন্তু রুটগুলো নিজেরা বদলানো হয়নি। আর রেফারেন্স ইনস্টলে Google Maps কি-গুলো অনিয়ন্ত্রিত, একটি Apple Sign-In কি বাতিল করে নতুন করে নিতে হবে, আর তিনজন ভেন্ডরের এখনও কোনো স্টোর সারি নেই।
সহযোগী টুল
SixPanel আর SixPreflight কোথায় বসে
উপরের সবকিছু 6amMart কোড নিয়েই। AllsWeb-এর দুটি টুল তার দুই পাশে বসে — একটি সেই সার্ভার চালায় যেখানে দোকানটি থাকে, অন্যটি বলে দেয় আপনার হাতে থাকা সার্ভার এর জন্য প্রস্তুত কি না। এদের সংখ্যাগুলো ভিন্ন সময়ে ভিন্ন মেশিনে মাপা, তাই আমরা সেগুলো আলাদা টেবিলে রাখি এবং উপরের সংখ্যার সাথে কখনো মেলাই না।
SixPanel
যখন আপনি চান সার্ভারটি ম্যানেজ করে দেওয়া হোক
এটি কী
একটি ব্যবস্থাপনা প্যানেল, যা একটি ভাড়া নেওয়া VPS-এ একটি 6amMart দোকান, বা একাধিক দোকান চালায় — MariaDB, Redis, nginx, লাইভ অর্ডার ট্র্যাকিংয়ের জন্য websocket সার্ভিস, আর ঐচ্ছিক একটি Next.js স্টোরফ্রন্ট। দুটি রানটাইম: সুপারিশকৃতটি সবকিছু সরাসরি মেশিনে বসায় রিলিজের নিজের ডিস্ট্রিবিউশন আর্কাইভ থেকে, systemd-এর অধীনে; আর SixPanel Docker একই স্ট্যাক চালায় Docker Compose সার্ভিস হিসেবে। একটিমাত্র ইনস্টল কমান্ড, CodeCanyon-এর zip থেকে বা git থেকে ডিপ্লয়, স্বয়ংক্রিয় নবায়নসহ Let's Encrypt সার্টিফিকেট, রিটেনশনসহ নির্ধারিত সময়ে restic ইনক্রিমেন্টাল ব্যাকআপ, প্রতি প্রজেক্টে আলাদা ভার্চুয়াল হোস্ট, হার্ডওয়্যার অনুযায়ী স্বয়ংক্রিয় টিউনিং, আর একটি স্ব-নিরাময়কারী ওয়াচডগ যা চালু থাকলেও কাজ করছে না এমন সার্ভিস আবার চালু করে দেয়। তিনটি জায়গা থেকে চালানো যায়: ব্রাউজারে প্যানেল, মেশিনে sixpanel কমান্ড, আর ইনস্টলার। সঙ্গে আসে 24 অধ্যায়ের গ্রাহক ম্যানুয়াল, যা প্যানেলের ভিতরেই পড়া যায়।
মাপা, এবং প্রকাশ করা নিরাপদ
| যা মাপা হয়েছে | সংখ্যাটি, তার শর্তসহ |
|---|---|
| পরিবেশিত রিকোয়েস্ট — সার্চ এন্ডপয়েন্ট, 20 কনকারেন্ট, 30 সেকেন্ড | একটি 2-কোর / 4 GB সার্ভার একটি আসল দোকানের 66,701টি অর্ডারের ডেটায় প্রতি সেকেন্ডে প্রায় 53টি রিকোয়েস্ট শেষ করেছে, আর ডেটাবেস পড়ার 99.99% উত্তর মেমরি থেকে দিয়েছে। এটি ওই এন্ডপয়েন্ট, ওই ডেটাসেট আর দুটি কোরের কথা বলে। এটি প্ল্যাটফর্মের সাধারণ কোনো সংখ্যা নয়। |
| নজরদারি ছাড়া ইনস্টলের সময় | পরীক্ষা করা তিনটি অপারেটিং সিস্টেমে 273 – 303 সেকেন্ড — প্রায় পাঁচ মিনিট |
| টিউন করা প্রতিদ্বন্দ্বীর বিপরীতে গতি | একই হার্ডওয়্যারে একই 66,701 অর্ডারের দোকান চালিয়ে, পুরোপুরি টিউন করা aaPanel-এর চেয়ে এক অনুরোধে 1.76× এবং একসঙ্গে চারটিতে 1.82× দ্রুত — এর প্রায় 60% ব্যবধান একটি PHP ডিরেক্টরি সীমাবদ্ধতার, 8% ভুল JIT মোডের, 0% PHP সংস্করণের, আর প্রায় 32% অব্যাখ্যাত হিসেবেই প্রকাশ করা |
| প্রস্তাবিত OS | Ubuntu 26.04 LTS, এপ্রিল 2031 পর্যন্ত নিরাপত্তা আপডেট। বাকি দুটি সমর্থিত রিলিজ Ubuntu 24.04 LTS ও Debian 13 — মোট তিনটি, এর বাইরে কিছু নয় |
আরও একটি কথা বলার মতো, কারণ প্রায় কেউই এটি প্রকাশ করে না। আমরা একই হার্ডওয়্যারে একই আসল ডেটা দিয়ে তিনটি অপারেটিং সিস্টেম বেঞ্চমার্ক করেছি। ফল সমান হয়েছে — তাদের মধ্যে পার্থক্য একই মেশিনের নিজের সাথে নিজের পার্থক্যের চেয়েও কম ছিল। তাই আমরা গতি নয়, সাপোর্টের মেয়াদ দেখে বেছে নিয়েছি, আর যে গতির পার্থক্য আমরা মাপতে পারিনি সেটি আমরা বলব না।
সৎ সীমাবদ্ধতা — SixPanel
- ব্যাকআপ একই মেশিনে রিস্টোর হয়। অন্য মেশিনে রিস্টোর করলে পুরোনো মেশিনের ডেটাবেস পাসওয়ার্ড ও পাথ থেকে যায় এবং একটি Update না চালানো পর্যন্ত অ্যাপ কানেক্ট করতে পারে না; আর রিস্টোর কাজটি কখনোই ডেটাবেস মাইগ্রেশন ধাপটি চালায় না, তাই নতুন কোডের নিচে পুরোনো ডাম্প স্কিমার পেছনে পড়ে থাকে। দুটিই ভাঙা হিসেবে লিপিবদ্ধ — লিপিবদ্ধ, ঠিক করা নয় — আর দুটিরই হাতে করার একটি উপায় আছে।
- সেলফ-হিলিং ওয়াচডগ উপরের ফিচার তালিকার দুটি সার্ভিস দেখতে পায় না। ওয়েবসকেট সার্ভিস ও ঐচ্ছিক Next.js স্টোরফ্রন্টে কোনো হেলথচেক নেই, তাই ওয়াচডগ সেগুলো ঢাকে না। এটি খোলা বিষয়।
- রোলব্যাক ডেটাবেস মাইগ্রেশন ফিরিয়ে আনে না। মাইগ্রেশনের পরে কোড রোলব্যাক করতে হলে ব্যাকআপ রিস্টোর লাগে।
- প্যানেল নিজের TLS সার্টিফিকেট বুটের সময় একবারই পড়ে। দৈনিক নবায়ন কাজটি nginx রিলোড করে কিন্তু প্যানেল নয়, তাই নবায়ন করা সার্টিফিকেট নিতে প্যানেলটি রিস্টার্ট করতে হয়।
- প্যানেলটি গঠনগতভাবেই ওই মেশিনে root-সমতুল্য — এটি প্যাকেজ ইনস্টল করে, সিস্টেম কনফিগারেশন লেখে আর সার্ভিস রিস্টার্ট করে। Docker রানটাইমে এটি অতিরিক্তভাবে Docker সকেট মাউন্ট করে এবং স্ট্যাক ডিরেক্টরিটি লেখার অনুমতিসহ যুক্ত করে।
- অ্যাডমিন অ্যাকাউন্ট ঠিক একটিই, কোনো রোল নেই। মাল্টি-ইউজার নেই, টিম নেই।
- শুধু 4 GB মেশিনই মাপা হয়েছে। এই পেজের কিছুই 8 GB বা তার বেশি নিয়ে বলে না।
কখন SixPanel প্রযোজ্য
আপনি একটি VPS ভাড়া নিচ্ছেন আর nginx, MariaDB টিউনিং, সার্টিফিকেট, ব্যাকআপ ও ডিপ্লয় নিজে সামলাতে চান না — কিংবা একটি সার্ভারে একাধিক দোকান চালাতে চান।
SixPreflight
যখন আপনি লাইভে যাওয়ার আগে জানতে চান কী ভাঙবে
এটি কী
ছোট একটি PHP টুল, যা আপনি নিজের Laravel সাইটের public/ ফোল্ডারে রাখেন এবং পাসওয়ার্ডের পেছনে ব্রাউজারে খোলেন। এটি হার্ডওয়্যার, PHP, অ্যাপ্লিকেশনের স্বাস্থ্য, এনভায়রনমেন্ট ফাইল, পারমিশন, ওয়েব সার্ভার, ক্যাশিং, ডেটাবেস সেটিংস, পাবলিক এক্সপোজার এবং প্রতিটি বাইরের সার্ভিস — পেমেন্ট, ইমেইল, SMS, ম্যাপ, পুশ — জুড়ে প্রায় 134টি পরীক্ষা চালায়, আর সেটিং পড়ার বদলে সত্যিই প্রতিটির সাথে যোগাযোগ করে। এটি একটি লেটার গ্রেড, একটি সোজাসাপ্টা রায়, আর পরিণাম অনুযায়ী সাজানো একটি ফিক্স তালিকা দেয়, যেখানে সম্ভব সেখানে পেস্ট করার মতো মানসহ। আপনি চলতি রিলিজটি পান।
রেফারেন্স ইনস্টলে
এটি 103টি পাস, 7টি ফেল, 24টি সতর্কতা জানিয়েছে — আর ব্যর্থতাগুলো ছিল হোস্টিং সেটিংস, অ্যাপ্লিকেশনের ত্রুটি নয়।
কখন SixPreflight প্রযোজ্য
aaPanel, CloudPanel বা cPanel-এ আছেন? SixPreflight আপনার জন্য। SixPanel চালাচ্ছেন? এই পরীক্ষাগুলো তার Shop check-up পেজে আগে থেকেই আছে।
টুল দুটি আলাদা অপারেটিং সিস্টেমের পরামর্শ দেয়, আর আপনি নিজে ধরার আগে আমরা এখানেই বলে দিচ্ছি। SixPanel, SixPanel Docker আর SixPreflight — তিনটিই Ubuntu 26.04 LTS সুপারিশ করে। নেটিভ রানটাইম PHP, MariaDB, nginx ও Redis নেয় রিলিজের নিজের ডিস্ট্রিবিউশন আর্কাইভ থেকে, আর তিনটি সমর্থিত রিলিজেই একটি কার্যকর সেট আছে — 26.04 দেয় PHP 8.5 ও MariaDB 11.8, Debian 13 দেয় 8.4 ও 11.8, Ubuntu 24.04 দেয় 8.3 ও 10.11। এর কোনোটিই গতির সুপারিশ নয়: ছয়টি মাপা অক্ষের একটিতেও সংস্করণ বদলে রিপোর্ট করার মতো পার্থক্য আসেনি, আর বাইট-হিসেবে অভিন্ন দুটি মেশিন নিজেদের মধ্যেই 11.6 % অমিল দেখিয়েছে। সিদ্ধান্তটি আসে সাপোর্টের বাকি মেয়াদ থেকে — 26.04-এ প্যাচ আসবে এপ্রিল 2031 পর্যন্ত।
আমার কোনটি দরকার?
| আপনার অবস্থা | উত্তর |
|---|---|
| আপনি 6amMart ইনস্টল করাতে চান, কিংবা আপনার চলতি 6amMart ধীর বা দাম কিংবা পেমেন্ট নিয়ে আপনাকে ভুগিয়েছে | অপ্টিমাইজড 6amMart ইনস্টল |
| আপনার একটি VPS আছে আর nginx, MariaDB, SSL, ব্যাকআপ ও ডিপ্লয় নিজে চালাতে চান না | SixPanel |
| আপনার অন্য কোনো প্যানেলে সার্ভার আছে আর লঞ্চের আগে জানতে চান কী ভাঙবে | SixPreflight |
এই পেজের প্রতিটি সংখ্যা একটি লাইভ ইনস্টলে মাপা হয়েছে
আর যে সুইট দিয়ে মাপা হয়েছে সেটি আপনার বিল্ডের সাথেই আসে।
বরং শূন্য থেকে তৈরি কিছু দরকার? কাস্টম কাজ নিয়ে আমাদের সাথে কথা বলুন