কম্পিউটার

আপনার সার্ভারহীন অ্যাপ্লিকেশন সীমিত হার

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

1- আপনার সম্পদ রক্ষা করুন: আপনি যদি একটি সর্বজনীন API প্রদান করেন, তাহলে ট্রাফিক স্পাইক পরিষেবার গুণমানকে হ্রাস করতে পারে এবং আপনার সমস্ত ব্যবহারকারীর জন্য পরিষেবা বিভ্রাটের দিকে নিয়ে যেতে পারে। আপনাকে এই ধরনের ক্যাসকেডিং ব্যর্থতার পাশাপাশি স্ব-প্ররোচিত Ddos ঘটনাগুলির বিরুদ্ধে আপনার সিস্টেমকে রক্ষা করতে হবে। আপনার অ্যাপ্লিকেশনে একটি বাগ আপনার সিস্টেমে এই ধরনের সমস্যা ট্রিগার করতে পারে। একটি অভ্যন্তরীণ প্রক্রিয়া যা ব্যর্থতার ক্ষেত্রে অনির্দিষ্টকালের জন্য একটি শেষবিন্দু পুনরায় চেষ্টা করে আপনার সংস্থানগুলি সহজেই নিঃশেষ করতে পারে৷

2- ব্যবহারকারী কোটা পরিচালনা করুন: আপনি আপনার পরিষেবার ন্যায্য ব্যবহারের জন্য আপনার ব্যবহারকারীদের জন্য কোটা সংজ্ঞায়িত করতে চাইতে পারেন। এছাড়াও আপনি যদি বিভিন্ন মূল্যের স্তরে আপনার পরিষেবা প্রদান করেন তবে আপনার কোটার প্রয়োজন হতে পারে।

3- খরচ নিয়ন্ত্রণ করুন: অনেক বাস্তব জীবনের উদাহরণ আছে কিভাবে একটি অনিয়ন্ত্রিত সিস্টেম বড় বিলের কারণ হতে পারে। এটি সার্ভারবিহীন অ্যাপ্লিকেশনগুলির জন্য একটি ঝুঁকিপূর্ণ কারণ এটির উচ্চ মাপযোগ্য প্রকৃতি। হার সীমিত করা আপনাকে এই খরচগুলি নিয়ন্ত্রণ করতে সাহায্য করবে৷

সমাধান

বিভিন্ন স্তরে একাধিক বিকল্প হার সীমিত সমাধান রয়েছে। আমি একটি সংক্ষিপ্ত ভালো/মন্দ বিশ্লেষণ সহ 3টি প্রধান তালিকা করব৷

1- কার্যকারিতা স্তর:

ক্লাউড প্রদানকারীরা আপনার সার্ভারহীন ফাংশন এক্সিকিউশন স্কেল করার জন্য একাধিক পাত্র তৈরি করে। আপনি সমসাময়িক পাত্র/দৃষ্টান্তের সর্বাধিক সংখ্যার জন্য একটি সীমা সেট করতে পারেন। যদিও এটি আপনাকে সঙ্গতি সীমিত করতে সাহায্য করতে পারে, এটি আপনার ফাংশনকে এক সেকেন্ডে কতবার কল করা হবে তা নিয়ন্ত্রণ করে না৷

এখানে আপনি কিভাবে AWS Lambda এবং Google ক্লাউড ফাংশনগুলির জন্য একযোগে সীমাবদ্ধ করতে পারেন৷

সুবিধা:

  • কোন ওভারহেড নেই
  • কনফিগার করা সহজ

কনস:

  • সম্পূর্ণ সমাধান নয়। শুধুমাত্র সঙ্গতি নিয়ন্ত্রণ করে। প্রতি সেকেন্ডে মৃত্যুদণ্ডের সংখ্যা সীমিত নয়।

2- API গেটওয়েতে হার সীমিত করা

আপনি যদি API গেটওয়ের মাধ্যমে আপনার ফাংশনগুলি অ্যাক্সেস করেন তবে আপনি API গেটওয়েতে আপনার রেট সীমিত নীতি প্রয়োগ করতে পারেন। AWS এবং GCP উভয়েরই তাদের সমাধানগুলি কীভাবে কনফিগার করতে হয় তার নির্দেশিকা রয়েছে৷

সুবিধা:

  • কোন ওভারহেড নেই
  • কনফিগার করা সহজ

কনস:

  • আপনি API গেটওয়ে ব্যবহার করলেই প্রযোজ্য৷
  • এটি ব্যবহারকারী প্রতি বা IP প্রতি কোটার মতো আরও পরিশীলিত ক্ষেত্রে সমর্থন করে না৷

3- রেডিসের সাথে সীমিত হার

এটি সবচেয়ে সম্পূর্ণ এবং শক্তিশালী সমাধান। অনেক Redis ভিত্তিক হার সীমিত লাইব্রেরি উপলব্ধ আছে. জেরেমি ডেলির ব্লগ পোস্টে, তিনি ইলাস্টিক্যাকে একটি সম্ভাব্য সমাধান হিসাবে প্রত্যাখ্যান করেছেন, বলেছেন যে* this adds a “non-serverless” component and another thing to manage * এখানে আপস্ট্যাশ তার সার্ভারহীন মডেল এবং প্রতি-অনুরোধ-মূল্য সহ একটি খুব ভাল বিকল্প হয়ে উঠেছে।

সুবিধা:

  • শক্তিশালী, আপনি একটি কাস্টমাইজড যুক্তি প্রয়োগ করতে পারেন যা আপনার ব্যবহারকারী মডেলের সাথে মানানসই।
  • স্কেলযোগ্য সমাধান। দেখুন কিভাবে Github হার সীমিত করার জন্য Redis ব্যবহার করে
  • রিচ ইকোসিস্টেম, অনেক ওপেন সোর্স লাইব্রেরি:redis_rate, redis-cell, node-ratelimiter

কনস:

  • রেডিস ব্যবহারের ওভারহেড।

কোড:Redis এর সাথে হার সীমাবদ্ধ করা

লাইব্রেরির হার সীমিত করার জন্য ধন্যবাদ, আপনার অ্যাপ্লিকেশন কোডে রেট সীমিত প্রয়োগ করা খুবই সহজ। এখানে নিচের উদাহরণ কোডটি প্রতি সেকেন্ডে প্রতি IP প্রতি AWS Lambda ফাংশন কার্যকর করাকে সীমাবদ্ধ করে:

const RateLimiter = require("async-ratelimiter");
const Redis = require("ioredis");
const { getClientIp } = require("request-ip");

const rateLimiter = new RateLimiter({
  db: new Redis("YOUR_REDIS_URL"),
  max: 1,
  duration: 5_000,
});

module.exports.hello = async (event) => {
  const clientIp = getClientIp(event) || "NA";
  const limit = await rateLimiter.get({ id: clientIp });
  if (!limit.remaining) {
    return {
      statusCode: 429,
      body: JSON.stringify({
        message: "Sorry, you are rate limited. Wait for 5 seconds",
      }),
    };
  }

  return {
    statusCode: 200,
    body: JSON.stringify({
      message: "hello!",
    }),
  };
};

সম্পূর্ণ উদাহরণের জন্য টিউটোরিয়াল দেখুন।

পঠন তালিকা

https://cloud.google.com/architecture/rate-limiting-strategies-techniques

https://www.jeremydaly.com/throttling-third-party-api-calls-with-aws-lambda/

https://medium.com/google-cloud/rate-limit-your-api-usage-with-cloud-endpoints-quotas-1270da55d2bf

https://github.blog/2021-04-05-how-we-scaled-github-api-sharded-replicated-rate-limiter-redis/

https://redis.io/commands/incr#pattern-rate-limiter

https://stripe.com/blog/rate-limiters


  1. কিভাবে আপনার পেপ্যাল ​​অ্যাকাউন্টে সীমাবদ্ধতা এড়াতে হয়

  2. আপনার সাধারণ পুরানো মনিটরের রিফ্রেশ রেট কীভাবে ওভারক্লক করবেন

  3. কিভাবে আপনার Windows 10 কম্পিউটারে RAM খালি করবেন?

  4. আপনার ম্যাকের ডিফল্ট অ্যাপ্লিকেশনগুলি পরিবর্তন করার পদক্ষেপগুলি