Apache Thrift
থ্রিফ্ট একটি ইন্টারফেস সংজ্ঞা ভাষা এবং বাইনারি যোগাযোগ প্রোটোকল যা অসংখ্য প্রোগ্রামিং ভাষার জন্য পরিষেবাগুলি সংজ্ঞায়িত এবং তৈরি করতে ব্যবহৃত হয়। এটি "স্কেলেবল ক্রস-ল্যাঙ্গুয়েজ সার্ভিসেস ডেভেলপমেন্ট"-এর জন্য ফেসবুকে তৈরি করা হয়েছিল এবং 2020 সাল পর্যন্ত এটি অ্যাপাচি সফ্টওয়্যার ফাউন্ডেশনের একটি ওপেন সোর্স প্রকল্প। একটি রিমোট প্রসিডিউর কল (আরপিসি) কাঠামোর সাহায্যে এটি একটি কোড জেনারেশন ইঞ্জিনের সাথে একটি সফ্টওয়্যার স্ট্যাককে একত্রিত করে ক্রস-প্ল্যাটফর্ম পরিষেবা তৈরি করে যা অ্যাকশনস্ক্রিপ্ট, সি, সি + +, সি #, ক্যাপুচিনো, কোকো, ডেলফি, এরলাং, গো, হাস্কেল, জাভা, জাভাস্ক্রিপ্ট, অবজেক্টিভ-সি, ওসিএএমএল, পার্ল, পিএইচপি, পাইথন, রুবি, এলিক্সির, রাস্ট, স্কালা, স্মলটক এবং সুইফট সহ বিভিন্ন ভাষা এবং কাঠামোতে লিখিত অ্যাপ্লিকেশনগুলিকে সংযুক্ত করতে পারে। 2007 সালের এপ্রিল মাসে ফেসবুক দ্বারা প্রকাশিত একটি প্রযুক্তিগত গবেষণাপত্রে বাস্তবায়নের বর্ণনা দেওয়া হয়েছিল, যা এখন অ্যাপাচেতে হোস্ট করা হয়েছে। আর্কিটেকচার থ্রিফ্টে ক্লায়েন্ট এবং সার্ভার তৈরির জন্য একটি সম্পূর্ণ স্ট্যাক রয়েছে। উপরের অংশটি থ্রিফ্ট সংজ্ঞা থেকে কোড তৈরি করা হয়। এই ফাইল থেকে পরিষেবাগুলি ক্লায়েন্ট এবং প্রসেসর কোড তৈরি করে। বিল্ট-ইন প্রকারের বিপরীতে, তৈরি করা ডেটা স্ট্রাকচারগুলি জেনারেটেড কোডের ফলস্বরূপ পাঠানো হয়। প্রোটোকল এবং পরিবহন স্তর রানটাইম লাইব্রেরির অংশ। থ্রিফ্ট দিয়ে, কোডটি পুনরায় কম্পাইল না করে একটি পরিষেবা সংজ্ঞায়িত করা এবং প্রোটোকল এবং পরিবহন পরিবর্তন করা সম্ভব। ক্লায়েন্ট অংশ ছাড়াও, থ্রিফ্টে ব্লকিং, নন-ব্লকিং এবং মাল্টি-থ্রেডেড সার্ভারের মতো প্রোটোকল এবং পরিবহনগুলিকে একত্রে বেঁধে রাখার জন্য সার্ভার পরিকাঠামো অন্তর্ভুক্ত রয়েছে। স্ট্যাকের অন্তর্নিহিত আই/ও অংশটি বিভিন্ন ভাষার জন্য আলাদাভাবে প্রয়োগ করা হয়। থ্রিফ্ট বেশ কয়েকটি প্রোটোকল সমর্থন করেঃ টিবিনাইরি প্রোটোকল-একটি সোজা বাইনারি বিন্যাস, সহজ, কিন্তু স্থান দক্ষতার জন্য অনুকূলিত নয়। টেক্সট প্রোটোকলের তুলনায় প্রক্রিয়াটি দ্রুততর কিন্তু ডিবাগ করা আরও চ্যালেঞ্জিং। টি. সি. কমপ্যাক্টপ্রোটোকল-আরও কমপ্যাক্ট বাইনারি বিন্যাস; সাধারণত প্রক্রিয়াকরণের জন্য আরও দক্ষ পাশাপাশি টি. জে. এস. ও. এনপ্রোটোকল-তথ্য এনকোডিংয়ের জন্য জে. এস. ও. এন ব্যবহার করে। টি. সিম্পল. জে. এস. ও. এন. প্রোটোকল-শুধুমাত্র লেখার একটি প্রোটোকল যা থ্রিফ্ট দ্বারা বিশ্লেষণ করা যায় না কারণ এটি জে. এস. ও. এন ব্যবহার করে মেটাডেটা ফেলে দেয়। স্ক্রিপ্টিং ভাষা দ্বারা পার্স করার জন্য উপযুক্ত। সমর্থিত পরিবহনগুলি হলঃ টি. সিম্পলফাইলট্রান্সপোর্ট-এই পরিবহনটি একটি ফাইলে লেখা হয়। টিফ্রেমডট্রান্সপোর্ট-নন-ব্লকিং সার্ভার ব্যবহার করার সময় এই পরিবহনের প্রয়োজন হয়। এটি ফ্রেমে তথ্য পাঠায়, প্রতিটি দৈর্ঘ্যের তথ্যের আগে। টি. এম. মেমরিট্রান্সপোর্ট-আই/ও-এর জন্য মেমরি ব্যবহার করে। জাভা বাস্তবায়ন একটি সহজ অভ্যন্তরীণ ব্যবহার করে। টি-সকেট-পরিবহনের জন্য ব্লকিং সকেট আই/ও ব্যবহার করে। TZlibTransport-Zlib ব্যবহার করে সংকোচন সম্পাদন করে। অন্য পরিবহনের সাথে ব্যবহার করা হয়। থ্রিফ্ট বেশ কয়েকটি সার্ভারও সরবরাহ করে, যা হল টিএননব্লকিং সার্ভার-নন-ব্লকিং আই/ও ব্যবহার করে একটি মাল্টি-থ্রেডেড সার্ভার (জাভা বাস্তবায়ন এনআইও চ্যানেল ব্যবহার করে)। এই সার্ভারের সঙ্গে অবশ্যই টিফ্রেমেডট্রান্সপোর্ট ব্যবহার করতে হবে। টি সিম্পল সার্ভার-স্ট্যান্ডার্ড ব্লকিং আই/ও ব্যবহার করে একটি একক-থ্রেডেড সার্ভার। পরীক্ষার জন্য উপযোগী। টিথ্রেডেড সার্ভার-একটি মাল্টি-থ্রেডেড সার্ভার যা প্রতি সংযোগ মডেল এবং স্ট্যান্ডার্ড ব্লকিং আই/ও-তে একটি থ্রেড ব্যবহার করে। টিথ্রেডপুল সার্ভার-একটি মাল্টি-থ্রেডেড সার্ভার যা একটি থ্রেড পুল এবং স্ট্যান্ডার্ড ব্লকিং আই/ও ব্যবহার করে। থ্রিফ্টের কিছু বর্ণিত সুবিধার মধ্যে রয়েছেঃ বাইনারি বিন্যাস ব্যবহারের কারণে এস. ও. এ. পি-এর মতো বিকল্পগুলির তুলনায় কম ওভারহেড সহ ক্রস-ল্যাঙ্গুয়েজ সিরিয়ালাইজেশন। কোনও এক্স. এম. এল কনফিগারেশন ফাইল নেই। ভাষার বন্ধন স্বাভাবিক বলে মনে হয়। উদাহরণস্বরূপ, জাভা ব্যবহার করে। সি + + এ স্ট্যাডঃঃ ভেক্টর <স্ট্যাডঃঃ স্ট্রিং> ব্যবহার করা হয়। অ্যাপ্লিকেশন-স্তরের তারের বিন্যাস এবং সিরিয়ালাইজেশন-স্তরের তারের বিন্যাস পরিষ্কারভাবে পৃথক করা হয়েছে। এগুলি স্বাধীনভাবে পরিবর্তন করা যেতে পারে। পূর্বনির্ধারিত ক্রমিককরণ শৈলীগুলির মধ্যে রয়েছেঃ বাইনারি, এইচটিটিপি-বান্ধব এবং কম্প্যাক্ট বাইনারি। ক্রস-ল্যাঙ্গুয়েজ ফাইল সিরিয়ালাইজেশন হিসাবে দ্বিগুণ। প্রোটোকল। থ্রিফ্টের জন্য মেজর-ভার্সন/মাইনর-ভার্শনের মতো কেন্দ্রীভূত এবং সুস্পষ্ট পদ্ধতির প্রয়োজন হয় না। আলগাভাবে সংযুক্ত দলগুলি অবাধে আরপিসি কলগুলি বিকাশ করতে পারে। কোনও বিল্ড ডিপেন্ডেন্সি বা অ-মানক সফ্টওয়্যার নেই। অসঙ্গতিপূর্ণ সফ্টওয়্যার লাইসেন্সের কোনও মিশ্রণ নেই। থ্রিফ্ট সার্ভিস তৈরি করা থ্রিফ্ট সি + +-এ লেখা হয়, তবে বেশ কয়েকটি ভাষার জন্য কোড তৈরি করতে পারে। একটি থ্রিফ্ট পরিষেবা তৈরি করতে, একজনকে থ্রিফ্ট ফাইল লিখতে হবে যা এটি বর্ণনা করে, গন্তব্য ভাষায় কোড তৈরি করতে হবে, সার্ভার শুরু করার জন্য কিছু কোড লিখতে হবে এবং ক্লায়েন্টের কাছ থেকে কল করতে হবে। এই ধরনের বিবরণ ফাইলের একটি কোড উদাহরণ এখানে দেওয়া হলঃ এনম ফোনটাইপ {হোম, ওয়ার্ক, মোবাইল, অন্যান্য} কাঠামো ফোন {1: আই32 আইডি, 2: স্ট্রিং নম্বর, 3: ফোনটাইপ টাইপ} পরিষেবা ফোন সার্ভিস {ফোন ফাইন্ডবাইড (1: আই32 আইডি), তালিকা <ফোন> ফাইন্ডঅ্যাল ()} থ্রিফ্ট এই বর্ণনামূলক তথ্য থেকে কোড তৈরি করবে। উদাহরণস্বরূপ, জাভাতে, ফোন টাইপ ফোন ক্লাসের অভ্যন্তরে একটি সহজ এনম হবে। আরও দেখুন ডেটা সিরিয়ালাইজেশন ফরম্যাটের তুলনা অ্যাপাচি অ্যাভ্রো অ্যাবস্ট্রাক্ট সিনট্যাক্স নোটেশন ওয়ান (ASN.1) হেসিয়ান প্রোটোকল বাফার এক্সটার্নাল ডেটা রিপ্রেজেন্টেশন (এক্সডিআর) ইন্টারনেট কমিউনিকেশন ইঞ্জিন (আইস) জিআরপিসি এসডিএক্সএফ রেফারেন্স এক্সটার্নাল লিঙ্ক থ্রিফ্ট অ্যাপ্লিকেশন লেয়ার প্রোটোকল ডেটা সিরিয়ালাইজেশন ফরম্যাট ইন্টার-প্রসেস কমিউনিকেশন রিমোট পদ্ধতি কল থ্রিফ্ট