আশ্চর্য! এটি AI ফর ওয়েব ডেভস সিরিজের জন্য একটি বোনাস ব্লগ পোস্ট যা আমি সম্প্রতি গুটিয়েছি। আপনি যদি এখনও সেই সিরিজটি না পড়ে থাকেন তবে আমি আপনাকে উত্সাহিত করব
এই পোস্টটি বিদ্যমান প্রজেক্ট আর্কিটেকচার এবং অ্যাপ্লিকেশন ডেভেলপার এবং শেষ ব্যবহারকারী উভয়ের জন্য আমরা কীভাবে এটি উন্নত করতে পারি তা দেখবে।
আমি কিছু সাধারণ ধারণা নিয়ে আলোচনা করব এবং আমার উদাহরণগুলিতে নির্দিষ্ট আকমাই পণ্য ব্যবহার করব।
বিদ্যমান অ্যাপ্লিকেশনটি বেশ মৌলিক। একজন ব্যবহারকারী দুই প্রতিপক্ষকে জমা দেয়, তারপরে অ্যাপ্লিকেশনটি একটি এআই-উত্পন্ন প্রতিক্রিয়া ফেরত দেয় যে লড়াইয়ে কে জিতবে।
স্থাপত্যটিও সহজ:
ক্লায়েন্ট একটি সার্ভারে একটি অনুরোধ পাঠায়।
সার্ভার একটি প্রম্পট তৈরি করে এবং প্রম্পটটিকে OpenAI-তে ফরোয়ার্ড করে।
OpenAI সার্ভারে একটি স্ট্রিমিং প্রতিক্রিয়া প্রদান করে।
সার্ভার কোনো প্রয়োজনীয় সমন্বয় করে এবং ক্লায়েন্টের কাছে স্ট্রিমিং প্রতিক্রিয়া ফরোয়ার্ড করে।
আমি আকামাইয়ের ক্লাউড কম্পিউটিং পরিষেবা ব্যবহার করতাম (পূর্বে
🤵 দেখতে একটি অভিনব রেস্তোরাঁর সার্ভারের মতো, এবং 👁️🗨️ হল "একটি চোখ" বা AI৷ lolz
প্রযুক্তিগতভাবে এটি ঠিক কাজ করে, কিন্তু কিছু সমস্যা আছে, বিশেষ করে যখন ব্যবহারকারীরা ডুপ্লিকেট অনুরোধ করে। আমাদের সার্ভারে প্রতিক্রিয়াগুলি সঞ্চয় করার জন্য এটি দ্রুত এবং আরও সাশ্রয়ী হতে পারে এবং শুধুমাত্র অনন্য অনুরোধের জন্য OpenAI-তে যান৷
এটি অনুমান করে যে আমাদের প্রতিটি একক অনুরোধ অ-নির্ধারক হওয়ার প্রয়োজন নেই (একই ইনপুট একটি ভিন্ন আউটপুট তৈরি করে)। ধরা যাক একই ইনপুটের জন্য একই আউটপুট তৈরি করা ঠিক আছে। সর্বোপরি, লড়াইয়ে কে জিতবে তার ভবিষ্যদ্বাণী সম্ভবত পরিবর্তন হবে না।
আমরা যদি ওপেনএআই থেকে প্রতিক্রিয়াগুলি সঞ্চয় করতে চাই, সেগুলি রাখার একটি ব্যবহারিক জায়গা হল কিছু ধরণের ডাটাবেসে যা দুটি প্রতিপক্ষকে ব্যবহার করে দ্রুত এবং সহজে সন্ধানের অনুমতি দেয়। এইভাবে, যখন একটি অনুরোধ করা হয়, আমরা প্রথমে ডাটাবেস পরীক্ষা করতে পারি:
ক্লায়েন্ট একটি সার্ভারে একটি অনুরোধ পাঠায়।
সার্ভারটি ডাটাবেসের একটি বিদ্যমান এন্ট্রি পরীক্ষা করে যা ব্যবহারকারীর ইনপুটের সাথে মেলে।
পূর্ববর্তী রেকর্ড বিদ্যমান থাকলে, সার্ভার সেই ডেটার সাথে প্রতিক্রিয়া জানায় এবং অনুরোধটি সম্পূর্ণ হয়। নিম্নলিখিত পদক্ষেপগুলি এড়িয়ে যান।
যদি না হয়, সার্ভারটি পূর্ববর্তী প্রবাহের তৃতীয় ধাপ থেকে অনুসরণ করে।
প্রতিক্রিয়া বন্ধ করার আগে, সার্ভার ডাটাবেসে OpenAI ফলাফল সংরক্ষণ করে।
বিন্দুযুক্ত রেখাগুলি ঐচ্ছিক অনুরোধগুলিকে উপস্থাপন করে এবং 💽 ধরণের হার্ড ডিস্কের মতো দেখায়৷
এই সেটআপের সাথে, যেকোন সদৃশ অনুরোধ ডাটাবেস দ্বারা পরিচালনা করা হবে। কিছু OpenAI অনুরোধকে ঐচ্ছিক করে, আমরা সম্ভাব্যভাবে ব্যবহারকারীদের লেটেন্সি অভিজ্ঞতার পরিমাণ কমাতে পারি, পাশাপাশি API অনুরোধের সংখ্যা কমিয়ে অর্থ সাশ্রয় করতে পারি।
এটি একটি ভাল শুরু, বিশেষ করে যদি সার্ভার এবং ডাটাবেস একই অঞ্চলে বিদ্যমান থাকে। এটি OpenAI এর সার্ভারে যাওয়ার চেয়ে অনেক দ্রুত প্রতিক্রিয়ার সময় তৈরি করবে।
যাইহোক, আমাদের অ্যাপ্লিকেশন আরও জনপ্রিয় হয়ে উঠলে, আমরা সারা বিশ্ব থেকে ব্যবহারকারী পেতে শুরু করতে পারি। দ্রুত ডাটাবেস লুকআপগুলি দুর্দান্ত, তবে কী হবে যদি ফ্লাইটে কাটানো সময় থেকে বিঘ্নতা হয়?
আমরা ব্যবহারকারীর কাছে জিনিসগুলি সরানোর মাধ্যমে সেই উদ্বেগের সমাধান করতে পারি।
আপনি যদি "এজ" শব্দটির সাথে ইতিমধ্যে পরিচিত না হন তবে এই অংশটি বিভ্রান্তিকর হতে পারে, তবে আমি এটি সহজভাবে ব্যাখ্যা করার চেষ্টা করব। এজ বলতে ব্যবহারকারীর যতটা সম্ভব কাছাকাছি থাকা বিষয়বস্তুকে বোঝায়। কিছু লোকের জন্য, এর অর্থ হতে পারে IoT ডিভাইস বা সেলফোন টাওয়ার, কিন্তু ওয়েবের ক্ষেত্রে, ক্যানোনিকাল উদাহরণ হল একটি
আমি আপনাকে বিস্তারিত জানাব, কিন্তু একটি CDN হল বিশ্বব্যাপী বিতরণ করা কম্পিউটারগুলির একটি নেটওয়ার্ক যা নেটওয়ার্কের নিকটতম নোড থেকে ব্যবহারকারীর অনুরোধের প্রতিক্রিয়া জানাতে পারে (
এজ কম্পিউটের সাহায্যে, আমরা আমাদের অনেক ব্যাকএন্ড লজিক ব্যবহারকারীর খুব কাছাকাছি নিয়ে যেতে পারি এবং এটি গণনা করা বন্ধ করে না। বেশিরভাগ এজ কম্পিউট প্রদানকারীরা একই প্রান্তের নোডগুলিতে শেষ পর্যন্ত সামঞ্জস্যপূর্ণ কী-মান স্টোরের কিছু অফার করে।
কিভাবে যে আমাদের আবেদন প্রভাবিত করতে পারে?
ক্লায়েন্ট আমাদের ব্যাকএন্ডে একটি অনুরোধ পাঠায়।
এজ কম্পিউট নেটওয়ার্ক অনুরোধটিকে নিকটতম এজ নোডে নিয়ে যায়।
প্রান্ত নোড ব্যবহারকারীর ইনপুটের সাথে মেলে কী-মানের দোকানে একটি বিদ্যমান এন্ট্রি পরীক্ষা করে।
পূর্ববর্তী রেকর্ড বিদ্যমান থাকলে, প্রান্ত নোড সেই ডেটার সাথে প্রতিক্রিয়া জানায় এবং অনুরোধটি সম্পূর্ণ হয়। নিম্নলিখিত পদক্ষেপগুলি এড়িয়ে যান।
যদি না হয়, এজ নোডটি অরিজিন সার্ভারে অনুরোধটি ফরোয়ার্ড করে, যা এটিকে OpenAI এবং yadda yadda yadda বরাবর পাস করে।
প্রতিক্রিয়া বন্ধ করার আগে, সার্ভার প্রান্ত কী-মান স্টোরে OpenAI ফলাফল সংরক্ষণ করে।
প্রান্ত নোড হল নীল বক্স এবং এটিকে 🔪 দ্বারা প্রতিনিধিত্ব করা হয় কারণ এটির একটি প্রান্ত রয়েছে, EdgeWorker হল Akamai-এর এজ কম্পিউট পণ্য যা 🧑🏭 দ্বারা উপস্থাপিত হয় এবং EdgeKV হল Akamai-এর মূল-মূল্যের দোকান যা 🔑🤑🏪 দ্বারা প্রতিনিধিত্ব করে। ক্লাউডের অরিজিন সার্ভারের তুলনায় এজ বক্সটি ক্লায়েন্টের কাছাকাছি শারীরিক দূরত্বের প্রতিনিধিত্ব করতে।
অরিজিন সার্ভার এখানে কঠোরভাবে প্রয়োজনীয় নাও হতে পারে, তবে আমি মনে করি এটি সেখানে থাকার সম্ভাবনা বেশি। ডেটা, কম্পিউট এবং লজিক প্রবাহের জন্য, এটি বেশিরভাগ পূর্ববর্তী আর্কিটেকচারের মতোই। মূল পার্থক্য হল পূর্বে সংরক্ষিত ফলাফল এখন ব্যবহারকারীদের খুব কাছাকাছি বিদ্যমান এবং প্রায় সাথে সাথেই ফেরত দেওয়া যায়।
(দ্রষ্টব্য: যদিও ডেটা প্রান্তে ক্যাশে করা হচ্ছে, প্রতিক্রিয়াটি এখনও গতিশীলভাবে তৈরি করা হয়েছে। আপনার যদি গতিশীল প্রতিক্রিয়ার প্রয়োজন না হয়, তাহলে মূল সার্ভারের সামনে একটি CDN ব্যবহার করা এবং সঠিক HTTP শিরোনাম সেট করা সহজ হতে পারে প্রতিক্রিয়া ক্যাশ করুন। এখানে অনেক সূক্ষ্মতা রয়েছে, এবং আমি আরও বলতে পারি কিন্তু... আচ্ছা, আমি ক্লান্ত এবং সত্যিই চাই না। আপনার যদি কোনো প্রশ্ন থাকে তাহলে নির্দ্বিধায় যোগাযোগ করুন।)
এখন আমরা রান্না করছি! যেকোনো ডুপ্লিকেট অনুরোধে প্রায় সঙ্গে সঙ্গেই সাড়া দেওয়া হবে, পাশাপাশি আমাদের অপ্রয়োজনীয় API অনুরোধগুলিও সংরক্ষণ করা হবে।
এটি পাঠ্য প্রতিক্রিয়াগুলির জন্য আর্কিটেকচারটি সাজায়, তবে আমাদের কাছে এআই-উত্পন্ন চিত্রও রয়েছে।
আমরা আজ বিবেচনা করব শেষ জিনিস ইমেজ. ইমেজ নিয়ে কাজ করার সময়, আমাদের ডেলিভারি এবং স্টোরেজ সম্পর্কে চিন্তা করতে হবে। আমি নিশ্চিত যে OpenAI-এর লোকেদের নিজস্ব সমাধান আছে, কিন্তু কিছু সংস্থা নিরাপত্তা, সম্মতি বা নির্ভরযোগ্যতার কারণে সমগ্র পরিকাঠামোর মালিক হতে চায়। কেউ কেউ ওপেনএআই ব্যবহার করার পরিবর্তে তাদের নিজস্ব ইমেজ জেনারেশন পরিষেবা চালাতে পারে।
বর্তমান কর্মপ্রবাহে, ব্যবহারকারী একটি অনুরোধ করে যা শেষ পর্যন্ত OpenAI-তে চলে যায়। OpenAI ইমেজ তৈরি করে কিন্তু ফেরত দেয় না। পরিবর্তে, তারা OpenAI এর পরিকাঠামোতে হোস্ট করা ছবির URL সহ একটি JSON প্রতিক্রিয়া ফেরত দেয়।
এই প্রতিক্রিয়ার সাথে, URL ব্যবহার করে একটি <img>
ট্যাগ পৃষ্ঠায় যোগ করা যেতে পারে, যা প্রকৃত চিত্রের জন্য আরেকটি অনুরোধ শুরু করে।
আমরা যদি আমাদের নিজস্ব অবকাঠামোতে ছবিটি হোস্ট করতে চাই তবে এটি সংরক্ষণ করার জন্য আমাদের একটি জায়গা প্রয়োজন। আমরা অরিজিন সার্ভারের ডিস্কে চিত্রগুলি লিখতে পারি, তবে এটি দ্রুত ডিস্কের স্থান ব্যবহার করতে পারে এবং আমাদের সার্ভারগুলি আপগ্রেড করতে হবে, যা ব্যয়বহুল হতে পারে।
এটি স্টোরেজ প্রশ্নের সমাধান করে, তবে অবজেক্ট স্টোরেজ বালতিগুলি সাধারণত একটি একক অঞ্চলে স্থাপন করা হয়। এটি একটি ডাটাবেসে পাঠ্য সংরক্ষণের সাথে আমাদের যে সমস্যাটি ছিল তা প্রতিধ্বনিত করে। একটি একক অঞ্চল ব্যবহারকারীদের থেকে অনেক দূরে থাকতে পারে, যা অনেক বিলম্বের কারণ হতে পারে।
প্রান্তটি ইতিমধ্যেই চালু করার পরে, শুধুমাত্র স্ট্যাটিক সম্পদের জন্য CDN বৈশিষ্ট্য যুক্ত করা খুবই তুচ্ছ হবে (সত্যি বলতে গেলে, প্রতিটি সাইটে একটি CDN থাকা উচিত)। একবার কনফিগার হয়ে গেলে, সিডিএন প্রাথমিক অনুরোধে অবজেক্ট স্টোরেজ থেকে ছবি টেনে আনবে এবং একই অঞ্চলের দর্শকদের কাছ থেকে ভবিষ্যতের অনুরোধের জন্য সেগুলিকে ক্যাশে করবে।
চিত্রগুলির জন্য আমাদের প্রবাহটি দেখতে কেমন হবে তা এখানে:
একটি ক্লায়েন্ট তাদের প্রতিপক্ষের উপর ভিত্তি করে একটি ইমেজ তৈরি করার জন্য একটি অনুরোধ পাঠায়।
এজ কম্পিউট চেক করে যে সেই অনুরোধের ইমেজ ডেটা আগে থেকেই আছে কিনা। যদি তাই হয়, এটি URL প্রদান করে।
ছবিটি URL সহ পৃষ্ঠায় যোগ করা হয় এবং ব্রাউজারটি ছবিটির জন্য অনুরোধ করে।
যদি ইমেজটি আগে CDN-এ ক্যাশে করা থাকে, ব্রাউজার এটি প্রায় সঙ্গে সঙ্গে লোড করে। এই প্রবাহ শেষ.
যদি ইমেজটি আগে ক্যাশে করা না থাকে, তাহলে CDN ইমেজটিকে অবজেক্ট স্টোরেজ লোকেশন থেকে টেনে আনবে, ভবিষ্যতের অনুরোধের জন্য এর একটি কপি ক্যাশে করবে এবং ক্লায়েন্টের কাছে ছবিটি ফেরত দেবে। এটি প্রবাহের আরেকটি শেষ।
যদি ছবির ডেটা প্রান্ত কী-মান স্টোরে না থাকে, তাহলে ছবিটি তৈরি করার অনুরোধ সার্ভারে এবং OpenAI-তে যায়, যা ছবিটি তৈরি করে এবং URL তথ্য প্রদান করে। সার্ভারটি অবজেক্ট স্টোরেজ বালতিতে ছবিটি সংরক্ষণ করার জন্য একটি কাজ শুরু করে, এজ কী-ভ্যালু স্টোরে ইমেজ ডেটা সঞ্চয় করে এবং এজ কম্পিউটে ইমেজ ডেটা ফেরত দেয়।
নতুন ইমেজ ডাটা দিয়ে, ক্লায়েন্ট ইমেজ তৈরি করে যা একটি নতুন অনুরোধ তৈরি করে এবং উপরের ধাপ পাঁচ থেকে চলতে থাকে।
কন্টেন্ট ডেলিভারি নেটওয়ার্ক একটি ডেলিভারি ট্রাক (🚚) এবং একটি নেটওয়ার্ক সিগন্যাল (📶) দ্বারা চিহ্নিত করা হয় এবং অবজেক্ট স্টোরেজকে একটি বাক্সে থাকা মোজা (🧦📦) বা স্টোরেজে থাকা বস্তু দ্বারা চিহ্নিত করা হয়। এই ক্যাপশনটি সম্ভবত প্রয়োজনীয় নয়, কারণ আমি মনে করি এগুলি পরিষ্কার, কিন্তু আমি আমার ইমোজি গেমের জন্য খুব গর্বিত এবং বৈধতা প্রয়োজন৷ আমাকে প্ররোচিত করার জন্য আপনাকে ধন্যবাদ. চালিয়ে যান।
এই শেষ আর্কিটেকচার, স্বীকার করে, একটু বেশি জটিল, কিন্তু যদি আপনার অ্যাপ্লিকেশন গুরুতর ট্রাফিক পরিচালনা করতে যাচ্ছে, এটি বিবেচনা করা মূল্যবান।
ঠিক! এই সমস্ত পরিবর্তনের সাথে, আমরা অনন্য অনুরোধের জন্য এআই-জেনারেট করা পাঠ্য এবং চিত্র তৈরি করেছি এবং ডুপ্লিকেট অনুরোধের জন্য প্রান্ত থেকে ক্যাশে করা সামগ্রী পরিবেশন করেছি। ফলাফল হল দ্রুত প্রতিক্রিয়ার সময় এবং আরও ভাল ব্যবহারকারীর অভিজ্ঞতা (কম API কল ছাড়াও)।
আমি এই আর্কিটেকচার ডায়াগ্রামগুলিকে উদ্দেশ্যমূলকভাবে বিভিন্ন ডাটাবেস, এজ কম্পিউট, অবজেক্ট স্টোরেজ এবং CDN প্রদানকারীদের জন্য প্রযোজ্য রেখেছি। আমি আমার বিষয়বস্তু ব্যাপকভাবে প্রযোজ্য হতে চাই. তবে এটি উল্লেখ করার মতো যে প্রান্তকে একীভূত করা কেবল কর্মক্ষমতার চেয়ে বেশি কিছু। আপনি পাশাপাশি সক্ষম করতে পারেন এমন অনেকগুলি সত্যিই দুর্দান্ত সুরক্ষা বৈশিষ্ট্য রয়েছে৷
উদাহরণস্বরূপ, Akamai এর নেটওয়ার্কে, আপনি জিনিসগুলিতে অ্যাক্সেস পেতে পারেন
তাই, এখনকার জন্য, আমি আপনাকে পড়ার জন্য একটি বড় "ধন্যবাদ" দিয়ে চলে যাব। আমি আশা করি আপনি কিছু শিখেছেন. এবং সর্বদা হিসাবে, মন্তব্য, প্রশ্ন বা উদ্বেগের সাথে যেকোন সময় নির্দ্বিধায় যোগাযোগ করুন।
পড়ার জন্য আপনাকে অনেক ধন্যবাদ. আপনি যদি এই নিবন্ধটি পছন্দ করেন, এবং আমাকে সমর্থন করতে চান, তা করার সেরা উপায় হল
মূলত প্রকাশিত