আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
টার্গেটএন্ডপয়েন্ট কনফিগারেশন নির্ধারণ করে যে Apigee Edge কীভাবে একটি ব্যাকএন্ড পরিষেবা বা API-এর সাথে সংযোগ স্থাপন করবে। এটি ব্যাকএন্ড পরিষেবাতে অনুরোধ পাঠায় এবং সেখান থেকে প্রতিক্রিয়া গ্রহণ করে। ব্যাকএন্ড পরিষেবাটি একটি HTTP/HTTPS সার্ভার, NodeJS, বা হোস্টেড টার্গেট হতে পারে।
TargetEndpoint-এর ব্যাকএন্ড সার্ভিসটি নিম্নলিখিত উপায়গুলোর যেকোনো একটির মাধ্যমে চালু করা যেতে পারে:
- একটি HTTP বা HTTPS সার্ভারের সরাসরি URL
- Edge-এ হোস্ট করা একটি Node.js স্ক্রিপ্টের জন্য ScriptTarget
- হোস্টেড টার্গেট এনভায়রনমেন্টে ডেপ্লয় করা NodeJS-এর জন্য হোস্টেড টার্গেট।
- টার্গেটসার্ভার কনফিগারেশন
একইভাবে, এপিআই প্রক্সি ফ্লো থেকে যেকোনো বাহ্যিক পরিষেবাতে কল করার জন্য সার্ভিস কলআউট পলিসি ব্যবহার করা যেতে পারে। এই পলিসিটি সরাসরি পলিসির মধ্যেই অথবা একটি টার্গেটসার্ভার কনফিগারেশন ব্যবহার করে HTTP/HTTPS টার্গেট ইউআরএল নির্ধারণ করা সমর্থন করে।
টার্গেটসার্ভার কনফিগারেশন
টার্গেটসার্ভার কনফিগারেশন, টার্গেটএন্ডপয়েন্ট কনফিগারেশন বা সার্ভিস কলআউট পলিসি থেকে নির্দিষ্ট এন্ডপয়েন্ট ইউআরএলগুলোকে বিচ্ছিন্ন করে। টার্গেটএন্ডপয়েন্টে একটি টার্গেটসার্ভারকে ইউআরএল-এর পরিবর্তে একটি নাম দ্বারা উল্লেখ করা হয়। টার্গেটসার্ভার কনফিগারেশনে ব্যাকএন্ড সার্ভিসের হোস্টনেম, পোর্ট নম্বর এবং অন্যান্য বিবরণ থাকবে।
এখানে একটি নমুনা টার্গেটসার্ভার কনফিগারেশন দেওয়া হলো:
<TargetServer name="target1"> <Host>www.mybackendservice.com</Host> <Port>80</Port> <IsEnabled>true</IsEnabled> </TargetServer>
টার্গেটসার্ভার আপনাকে প্রতিটি এনভায়রনমেন্টের জন্য ভিন্ন ভিন্ন কনফিগারেশন রাখার সুযোগ দেয়। একটি লোডব্যালেন্সার ব্যবহার করে এক বা একাধিক নামযুক্ত টার্গেটসার্ভার দিয়ে একটি টার্গেটএন্ডপয়েন্ট/সার্ভিস কলআউট পলিসি কনফিগার করা যায়। লোডব্যালেন্সিংয়ের জন্য অন্তর্নির্মিত সাপোর্ট এপিআই-গুলোর প্রাপ্যতা এবং কনফিগার করা ব্যাকএন্ড সার্ভার ইনস্ট্যান্সগুলোর মধ্যে ফেইলওভার উন্নত করে।
টার্গেটসার্ভার ব্যবহার করে একটি নমুনা টার্গেটএন্ডপয়েন্ট কনফিগারেশন নিচে দেওয়া হলো:
<TargetEndpoint name="default">
<HTTPTargetConnection>>
<LoadBalancer>
<Server name="target1"/>
<Server name="target2"/>
</LoadBalancer>
</HTTPTargetConnection>
</TargetEndpoint>ম্যাক্সফেলিউরস
MaxFailures কনফিগারেশনটি টার্গেট সার্ভারে অনুরোধ ব্যর্থ হওয়ার সর্বোচ্চ সংখ্যা নির্দিষ্ট করে, যার পরে টার্গেট সার্ভারটিকে ডাউন হিসেবে চিহ্নিত করা হবে এবং পরবর্তী সমস্ত অনুরোধের জন্য রোটেশন থেকে সরিয়ে দেওয়া হবে।
MaxFailures নির্দিষ্ট করা একটি উদাহরণ কনফিগারেশন:
<TargetEndpoint name="default">
<HTTPTargetConnection>
<LoadBalancer>
<Server name="target1"/>
<Server name="target2"/>
<MaxFailures>5</MaxFailures>
</LoadBalancer>
</HTTPTargetConnection>
</TargetEndpoint>উপরের উদাহরণে, যদি 'টার্গেট১'-এর জন্য পরপর পাঁচটি অনুরোধ ব্যর্থ হয়, তাহলে 'টার্গেট১'-কে রোটেশন থেকে সরিয়ে দেওয়া হবে এবং পরবর্তী সমস্ত অনুরোধ শুধুমাত্র টার্গেট২-এর কাছে পাঠানো হবে।
অ্যান্টিপ্যাটার্ন
TargetEndpoint অথবা Service Callout পলিসির LoadBalancer কনফিগারেশনে MaxFailures এর মান শূন্য নয় এমন কোনো মানে সেট করে একটিমাত্র TargetServer রাখা বাঞ্ছনীয় নয়, কারণ এর বিরূপ প্রভাব থাকতে পারে।
নিম্নলিখিত নমুনা কনফিগারেশনটি বিবেচনা করুন, যেখানে 'target1' নামের একটিমাত্র TargetServer রয়েছে এবং MaxFailures মান 5 (অশূন্য) সেট করা আছে:
<TargetEndpoint name="default">
<HTTPTargetConnection>
<LoadBalancer>
<Algorithm>RoundRobin</Algorithm>
<Server name="target1" />
<MaxFailures>5</MaxFailures>
</LoadBalancer>
</HTTPTargetConnection> যদি "target1" টার্গেটসার্ভারে করা অনুরোধগুলি পাঁচবার ব্যর্থ হয় ( MaxFailures এ নির্দিষ্ট করা সংখ্যা অনুযায়ী), তাহলে টার্গেটসার্ভারটিকে রোটেশন থেকে সরিয়ে দেওয়া হয়। যেহেতু ফেইলওভার করার জন্য অন্য কোনো টার্গেটসার্ভার নেই, তাই এই কনফিগারেশনযুক্ত এপিআই প্রক্সিতে করা পরবর্তী সমস্ত অনুরোধ 503 Service Unavailable ত্রুটির সাথে ব্যর্থ হবে।
এমনকি যদি টার্গেটসার্ভার "টার্গেট১" তার স্বাভাবিক অবস্থায় ফিরে আসে এবং সফলভাবে সাড়া পাঠাতে সক্ষম হয়, তবুও এপিআই প্রক্সিতে পাঠানো অনুরোধগুলো 503 ত্রুটি দেখাতে থাকবে। এর কারণ হলো, টার্গেটটি পুনরায় চালু হওয়ার পরেও এজ স্বয়ংক্রিয়ভাবে টার্গেটসার্ভারটিকে রোটেশনে ফিরিয়ে আনে না। এই সমস্যাটির সমাধান করতে, এজ-কে টার্গেটসার্ভারটিকে রোটেশনে ফিরিয়ে আনার জন্য এপিআই প্রক্সিটি পুনরায় ডেপ্লয় করতে হবে ।
যদি সার্ভিস কলআউট পলিসিতে একই কনফিগারেশন ব্যবহার করা হয়, তাহলে টার্গেটসার্ভার "টার্গেট১"-এ করা অনুরোধ ৫ বার ব্যর্থ হওয়ার পর এপিআই অনুরোধগুলোতে ৫০০ এরর আসবে।
প্রভাব
TargetEndpoint বা Service Callout পলিসির LoadBalancer কনফিগারেশনে MaxFailures এর মান শূন্য নয় এমন কিছুতে সেট করে একটিমাত্র TargetServer ব্যবহার করলে নিম্নলিখিত ফলাফল হয়:
- API প্রক্সি পুনরায় স্থাপন না করা পর্যন্ত, (MaxFailures সংখ্যক বার অনুরোধ ব্যর্থ হওয়ার পর) API অনুরোধগুলি ক্রমাগত 503/500 ত্রুটির সাথে ব্যর্থ হতে থাকবে।
- এই অ্যান্টিপ্যাটার্নটি সম্পর্কে পূর্ব জ্ঞান না থাকলে, এর কারণ নির্ণয় করা জটিল এবং এতে বেশি সময় লাগতে পারে বলে বিভ্রাটের সময় দীর্ঘ হতে পারে।
সর্বোত্তম অনুশীলন
- উচ্চতর প্রাপ্যতার জন্য
LoadBalancerকনফিগারেশনে একাধিক টার্গেটসার্ভার রাখুন। যখন
MaxFailuresমান শূন্য নয় এমন কোনো সংখ্যায় সেট করা থাকে, তখন সর্বদা একটি হেলথ মনিটর নির্ধারণ করুন । যখন ব্যর্থতার সংখ্যাMaxFailuresএ নির্দিষ্ট করা সংখ্যায় পৌঁছায়, তখন একটি টার্গেট সার্ভারকে রোটেশন থেকে সরিয়ে দেওয়া হবে। একটি হেলথ মনিটর থাকলে এটি নিশ্চিত হয় যে টার্গেট সার্ভারটি পুনরায় উপলব্ধ হওয়ার সাথে সাথেই সেটিকে রোটেশনে ফিরিয়ে আনা হবে, যার অর্থ হলো প্রক্সিটি পুনরায় ডিপ্লয় করার কোনো প্রয়োজন নেই ।এজ টার্গেট সার্ভারগুলোর সাথে সংযোগ স্থাপনের জন্য যে পোর্ট নম্বর ব্যবহার করে, হেলথ চেকটি যেন সেই একই পোর্ট নম্বরে সম্পাদিত হয়, তা নিশ্চিত করতে Apigee পরামর্শ দেয় যে,
<TCPMonitor>এর অধীনে থাকা<Port>চাইল্ড এলিমেন্টটি বাদ দিন, যদি না এটি TargetServer পোর্ট থেকে ভিন্ন হয়। ডিফল্টরূপে<Port>এবং TargetServer পোর্ট একই থাকে।হেলথমনিটর সহ নমুনা কনফিগারেশন:
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="target1" /> <Server name="target2" /> <MaxFailures>5</MaxFailures> </LoadBalancer> <Path>/test</Path> <HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <TCPMonitor> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> </TCPMonitor> </HealthMonitor> </HTTPTargetConnection> </TargetEndpoint>যদি এমন কোনো সীমাবদ্ধতা থাকে যে শুধুমাত্র একটি টার্গেটসার্ভার ব্যবহার করা যাবে এবং হেলথমনিটরও ব্যবহৃত না হয়, তাহলে
LoadBalancerকনফিগারেশনেMaxFailuresউল্লেখ করবেন না।MaxFailures-এর ডিফল্ট মান হলো 0। এর মানে হলো, Edge প্রতিটি অনুরোধের জন্য সর্বদা টার্গেট সার্ভারের সাথে সংযোগ করার চেষ্টা করে এবং রোটেশন থেকে টার্গেট সার্ভারটিকে কখনোই সরিয়ে দেয় না।