কোন অ্যাপ্লিকেশনকে স্কেলযোগ্য করে তোলে?


37

আমি চাকরীর পোস্টিংগুলিতে দেখছি যে আবেদনকারীর অবশ্যই "স্কেলেবল" অ্যাপ্লিকেশন লেখার অভিজ্ঞতা থাকতে হবে। কোন অ্যাপ্লিকেশনকে স্কেলযোগ্য করে তোলে এবং আমি কীভাবে জানি যে আমার কোডটি কয়েক মিলিয়ন ব্যবহারকারীর কাছে স্কেল করতে পারে?


আমার মনে হয় এই প্রশ্নের উচ্চারণের আরও ভাল উপায় হ'ল: আমি কীভাবে স্কেলাবিলিটিটিকে মাথায় রেখে আমার কোডটি লিখতে পারি? যাতে কোডটি কোনও চিন্তাভাবনার বিপরীতে গেট-গো থেকে স্কেলযোগ্য। কিছু নকশা পদ্ধতি আছে? বা এটি কেবল কাজের জন্য সঠিক অ্যালগরিদম বাছাইয়ের বিষয়?

উত্তর:


24

স্কেলাবিলিটির দুটি দিক রয়েছে:

  • উল্লম্ব (ওরফে স্কেলিং আপ): দ্রুত সিপিইউ, আরও র‌্যাম, আরও ডিস্কের স্থান;
  • অনুভূমিক (ওরফে স্কেলিং আউট): সিপিইউতে আরও বেশি কোর, আরও সিপিইউ, আরও সার্ভার;

প্রথমটির জন্য, আপনাকে কেবল খেয়াল রাখতে হবে যে আপনার কোনও স্বেচ্ছাচারিতা সীমাবদ্ধতা নেই। এগুলি হয় খুব ছোট পূর্ণসংখ্যার আকার বা স্থির / সীমিত দৈর্ঘ্যের কাঠামোর কারণে। এই কাঠামোগুলি অন্তর্নিহিত ওএসের সাথে সম্পর্কিত হতে পারে। উদাহরণস্বরূপ, যদি আপনি আরও থ্রেড বা প্রক্রিয়াগুলি ব্যবহার করে স্কেল বাড়ানোর চেষ্টা করেন তবে এক পর্যায়ে আপনি ওএসের সীমাতে পৌঁছে যাচ্ছেন। এজন্য বর্তমানে উচ্চ-স্কেলাবিলিটির জন্য সার্ভারগুলি বিলম্বে অ্যাসিঙ্ক্রোনাস ইভেন্টের ভিত্তিতে একযোগে কাজ করে। এই সমস্যাটি বিখ্যাত সি 10 কে নথিতে বর্ণিত হয়েছে ।

দ্বিতীয়টি আরও কঠিন। এর জন্য দুটি বিষয় মাথায় রেখে প্রোগ্রামিং দরকার: ডেটা সমান্তরালে প্রক্রিয়া করা হবে এবং ডেটা শারীরিকভাবে বিতরণ করা হতে পারে। নোডের মধ্যে যোগাযোগ সীমাবদ্ধ করা উচিত। অনুশীলনে যার অর্থ সাধারণত এসিডের কিছু অংশকে ত্যাগ করা হয় (এটি প্রমাণিত হয় যে আপনার কাছে পুরো এসিডি এবং একই সময়ে স্কেল-আউট করার ক্ষমতা থাকতে পারে না)। এই দৃষ্টান্তে ডেটা সঞ্চয় করার জন্য সর্বাধিক পরিচিত সমাধান হ'ল নো এসকিউএল সমাধান। এগুলি খুব সহজ কী-মান স্টোর থেকে শুরু করে সিস্টেমগুলি আরডিবিএমএস-এর মতো, কেবল সামিল হওয়ার ক্ষমতা ছিনিয়ে নেওয়া। কী-মান দোকানে অতি মাপযোগ্য, কিন্তু যে একটি মূল্য হিসাবে আসে। আপনি প্রাথমিকভাবে কেবল প্রাথমিক কীতে জিজ্ঞাসা করতে পারেন। যদিও এর সমাধান রয়েছে, এটি মানচিত্র হ্রাস করবে। যদি আপনি সংক্ষিপ্ত জটিলতার দৃষ্টিকোণটি দেখে থাকেন তবে এটি খুব সাবঅপটিমাল বলে মনে হতে পারে তবে আপনার মনে রাখতে হবে এটি ব্যাপকভাবে সমান্তরালভাবে চলছে।

আপনি যদি বাস্তব জীবনের উদাহরণগুলির সাথে মাপযোগ্যতা সম্পর্কে আরও জানতে চান তবে হাইস্কুলাবিলিটি.কম ব্লগটি দেখুন


স্কেল আউট উল্লেখ করার জন্য +1। সিদ্ধান্ত গ্রহণকারীদের কাছে আরও সংস্থান যুক্ত করা খুব দ্রুত এবং আকর্ষণীয় (কয়েকটি হেক্স-কোর কিনুন এবং স্মৃতি দ্বিগুণ করুন!)। কিন্তু যদি অ্যাপ্লিকেশনটি তাদের উপর চাপ না ফেলতে পারে তবে আপনার আরও বড় সমস্যা রয়েছে।
jqa

14

স্কেলাবিলিটিটি কিছু ভেরিয়েবলের ভিত্তিতে থ্রুপুটের ক্ষেত্রে পরিমাপ করা হয়। উদাহরণস্বরূপ, এক্স ব্যবহারকারীদের সাথে অনুরোধ / সেকেন্ডের সংখ্যা । স্কেলাবিলিটি বর্ণনা করার সহজ উপায় হ'ল:

লোড বৃদ্ধি হিসাবে দক্ষতার একটি পরিমাপ ।

স্কেলাবিলিটির জন্য ডিজাইনিংয়ের ক্ষেত্রে আপনাকে প্রথমে বুঝতে হবে আপনার আবেদনের জন্য কোন পরিমাপ সবচেয়ে গুরুত্বপূর্ণ? দক্ষতা পরিমাপের বিভিন্ন উপায় রয়েছে যা স্কেলাবিলিটির মূল উপাদান:

  • প্রতি সেকেন্ডে একযোগে অনুরোধগুলি
  • প্রতি অনুরোধের গড় প্রতিক্রিয়া সময়
  • প্রতি সেকেন্ড / মিনিটে প্রক্রিয়া করা রেকর্ডের সংখ্যা

আরও দক্ষতার পরিমাপ রয়েছে যা ব্যবহার করা যেতে পারে তবে এটি ওয়েব ভিত্তিক সিস্টেম বা ব্যাচ প্রসেসিং সিস্টেমের জন্য সাধারণ।

স্কেলাবিলিটির পরবর্তী দিকটি বোঝা যাচ্ছে যে লোড বাড়ার সাথে সাথে আপনার দক্ষতার কী হয়। লোড বাড়ানোর সাধারণ উপায়গুলি:

  • আরও ব্যবহারকারী সার্ভারে আঘাত করছে (যেমন আরও ওয়েব ট্র্যাফিক)
  • ডাটাবেসে আরও ডেটা (যেমন ক্যোয়ারীগুলি বেশি সময় নেয়, বা প্রসেসিংয়ে বেশি সময় লাগে)
  • একটি RAID- এ হার্ড ড্রাইভ ব্যর্থতা (স্টোরেজ কর্মক্ষমতা / নির্ভরযোগ্যতা প্রভাবিত হয়)
  • নেটওয়ার্ক স্যাচুরেশন

স্কেলযোগ্য অ্যাপ্লিকেশনটির লক্ষ্য হ'ল হয় লোড সমস্যা মোকাবেলা করার সাথে সাথে দক্ষতা বজায় রাখা বা উন্নতি করা। সংক্ষেপে, যদি প্রতিক্রিয়া সময়টি খুব বেশি সময় নিচ্ছে, আমরা কি সমানভাবে লোড বিতরণ করতে অন্য সার্ভার যুক্ত করতে পারি? এই পদ্ধতির ফলে একটি সার্ভারের কাজ করার পরিমাণ হ্রাস হয় এবং দক্ষতার জন্য সার্ভারগুলি সেই "মিষ্টি স্পটে" চালিত করে।

আপনার অ্যাপ্লিকেশনটি স্কেল করার জন্য বিশেষভাবে ডিজাইন করা দরকার। এর অর্থ আপনাকে সেশন ডেটা সম্পর্কে সতর্কতা অবলম্বন করতে হবে, অনুরোধকে সঠিক সার্ভারে রাউটিং করতে হবে, বাধা হ্রাস করতে হবে যা অ্যাপ্লিকেশনটির স্কেল করার ক্ষমতা সীমাবদ্ধ করে।


5

আপনি যখন ব্যবহারকারী সংখ্যা বৃদ্ধি করেন এবং / অথবা একটি বৃহত্তর ডেটা সেট প্রক্রিয়া করেন, এবং / অথবা আরও ভাষাতে আপনার ইন্টারফেস অফার করেন তখন আপনি মূলত পারফরম্যান্সের বাধাগুলি এড়াতে চান etc.

আপনি মূলত আপনার ডাটাবেস স্কিমা, আপনার অ্যালগরিদম এবং আপনার সফ্টওয়্যার বিকাশ প্রক্রিয়াটি একবার দেখুন এবং ভবিষ্যতের সমস্যার পূর্বাভাস দেওয়ার চেষ্টা করুন। সমস্যাগুলি তৈরি করা শুরু করার সময় আপনি চিহ্নিত করতে পারফরম্যান্স মনিটরিং সেটআপ করতে চান।

বিল্ডিং স্কেলেবল ওয়েব সাইটগুলি পড়ার সময় আমি এই টিপসগুলি গ্রহণ করেছি (অ্যামাজনের লিঙ্ক)।

আশাকরি এটা সাহায্য করবে!


3

অ্যাপ্লিকেশনগুলি সত্যই স্কেলেবল হতে পারে, এর একমাত্র উপায় হ'ল কোনও বিধিনিষেধ না রেখে যা পাস করা যায় না (বা কেবল খুব ব্যয়বহুল)।

একটি সাধারণ উদাহরণ হ'ল আপনি যখন সিপিইউ-সাইকেল উপলভ্য হন তখন কী ঘটে? যদি আপনার প্রোগ্রামটি বহু-ট্রেড হয় তবে আপনি একাধিক কোর সহ একটি বাক্সে চলতে পারেন তবে যখন আপনি আর কোনও বড় বাক্স কিনতে না পারেন তখন কি হবে? আপনার অ্যাপ্লিকেশন সহজভাবে আর বাড়তে পারে না, এবং সুতরাং স্কেলেবল হয় না।

যে কোনও সত্যই স্কেলযোগ্য অ্যাপ্লিকেশন অবশ্যই একাধিক কম্পিউটারে স্বচ্ছ ফ্যাশনে ছড়িয়ে দিতে সক্ষম হবে এবং কোনও লক্ষণীয় বাধা ছাড়াই এটি করতে সক্ষম হবে। এটি সহজ নয় এবং গুগল এতটা সফল হওয়ার কারণগুলির মধ্যে এটি অন্যতম।


1

বড় মাপের অ্যাপ্লিকেশন সমর্থন করার সাথে আসে এমন অনন্য সমস্যা রয়েছে। চাকরির পোস্টিং সেই আবেদনকারীদের সন্ধান করছে যারা সেই পরিবেশে কাজ করেছে এবং এই জাতীয় সমস্যাগুলি সমাধান করতে হয়েছিল।

একটি উচ্চ স্তরের অ্যাপ্লিকেশন থেকে ক্রমাগত এই প্রশ্নটি জিজ্ঞাসা করে এই কোডের টুকরোটিকে খুব অল্প সময়ের মধ্যে কয়েক হাজার বার চালানোর জন্য অনুরোধ করা হলে কী হবে তা জিজ্ঞাসা করে স্কেলেবল তৈরি করা হয়। এর অর্থ আপনার মেমরির পদচিহ্নগুলি পরিচালনা করা, মোট এবং ডেটার ক্যাশে ব্যবহার করা, ডেটা উত্সগুলি যা নিজেরাই স্কেলযোগ্য are


1

আপনি যদি এমন কোনও অনুসন্ধান বৈশিষ্ট্য তৈরি করে যা ভাল পারফরম্যান্স করে যখন এটিতে ডিবিতে 100 টি সারি থাকে এবং এটিতে একবারে 10 জন ব্যবহারকারী এটি ব্যবহার করে। এটি যখন 100 জন ব্যবহারকারী একই সময়ে এটি ব্যবহার করে এবং 100 কে সারি সন্ধান করতে হয় তখন এটি কতটা ভাল সম্পাদন করবে।

যদি এটি একই রকম হয় তবে তা খুব ভাল। এটি যদি ব্যবহারকারীর / ডেটার পরিমাণের সমানুপাতিক সম্পাদন করে (যার অর্থ 10x আরও ডেটা == প্রক্রিয়ায় 10x দীর্ঘ) তবে এটি ভাল। যদি এটির আরও বেশি পরিমাণে ডেটা সঞ্চালিত হয় (10x মোড ডেটা == 10x ^ 10 প্রসেস করতে আরও দীর্ঘ) তবে এটি ভাল স্কেল করে না।

আমার উদাহরণগুলি সত্যই বিগ ও স্বরলিপিতে দেখানো উচিত তবে আমি বর্তমানে এটি বিগ ও-তে উদাহরণগুলি লিখতে যথেষ্ট ভাল জানি না

আপনি আপনার ডিবিতে ডামি ডেটা ডাম্পিং করে আরও ডেটা সিমুলেট করতে পারেন, এবং অ্যাপাচি এবির মতো আরও ব্যবহারকারীদের অনুকরণ করার সরঞ্জাম রয়েছে tools

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.