কিছু কথায়, ক্যানারি রিলিজের পিছনের ধারণা হল ব্যবহারকারীদের একটি ভগ্নাংশের কাছে একটি নতুন সফ্টওয়্যার সংস্করণ সরবরাহ করা, ফলাফলগুলি বিশ্লেষণ করা এবং আরও এগিয়ে যাওয়া বা না করার সিদ্ধান্ত নেওয়া। ফলাফল প্রত্যাশার সাথে সামঞ্জস্যপূর্ণ না হলে, ফিরে যান; যদি তারা হয়, সমস্ত ব্যবহারকারী নতুন সংস্করণ থেকে উপকৃত না হওয়া পর্যন্ত উন্মুক্ত ব্যবহারকারীর সংখ্যা বাড়ান।
এই পোস্টে, আমি এই ভূমিকাটি সংক্ষিপ্তভাবে বিস্তারিত করতে চাই, ভগ্নাংশকে সংজ্ঞায়িত করার বিভিন্ন উপায় ব্যাখ্যা করতে চাই, এবং Apache APISIX-এর সাথে কীভাবে এটি কার্যকর করতে হয় তা দেখাতে চাই।
"ক্যানারি" শব্দটি কয়লা খনির শিল্প থেকে উদ্ভূত হয়েছে। খনন করার সময়, বিষাক্ত গ্যাস নির্গত হওয়া অস্বাভাবিক নয়: একটি ছোট আবদ্ধ স্থানে, এর অর্থ দ্রুত মৃত্যু হতে পারে। আরও খারাপ, গ্যাসটি গন্ধহীন হতে পারে, তাই খননকারীরা এটি ছেড়ে যেতে দেরি না হওয়া পর্যন্ত এটি নিঃশ্বাস নেবে। কার্বন মনোক্সাইড কয়লা খনিতে বেশ সাধারণ এবং মানুষের ইন্দ্রিয় দ্বারা সনাক্ত করা যায় না।
এই কারণে, খনি শ্রমিকরা তাদের সাথে ভূগর্ভস্থ ক্যানারি নিয়ে এসেছিল। যদি ক্যানারিটি হঠাৎ করে মারা যায়, তাহলে সম্ভাবনা বেশি ছিল যে এই ধরনের একটি গ্যাস পকেট লঙ্ঘন করা হয়েছে, এবং জায়গাটি ছেড়ে যাওয়ার উপযুক্ত সময় ছিল।
বছর আগে, আমরা একটি নতুন সফ্টওয়্যার সংস্করণ প্রকাশ করার জন্য এই পদ্ধতি নিয়ে এসেছি। সাদৃশ্যটি এইরকম: খনি শ্রমিকরা সংস্করণটি মোতায়েনকারী অপস দল, ক্যানারিতে মুক্তির প্রভাব পরিমাপ করার জন্য সমস্ত সরঞ্জাম রয়েছে এবং গ্যাস একটি (গুরুত্বপূর্ণ) বাগ।
সবচেয়ে গুরুত্বপূর্ণ অংশ হল যে আপনাকে ব্যর্থতার হার, HTTP স্ট্যাটাস কোড ইত্যাদি সহ রিলিজের প্রভাব পরিমাপ করতে হবে এবং পূর্ববর্তী সংস্করণের সাথে তাদের তুলনা করতে হবে। এটি এই পোস্টের সুযোগের বাইরে, তবে আবার, আপনি যদি ক্যানারি রিলিজগুলি থেকে উপকৃত হতে চান তবে এটি গুরুত্বপূর্ণ। দ্বিতীয় সবচেয়ে গুরুত্বপূর্ণ অংশটি হল নতুন সংস্করণটি বগি থাকলে দ্রুত ফিরে আসার ক্ষমতা।
নোট করুন যে ক্যানারি রিলিজগুলি নতুন কোড প্রকাশের ঝুঁকি পরিচালনা করার একমাত্র উপায় নয়। উদাহরণস্বরূপ, বৈশিষ্ট্য পতাকা আরেকটি জনপ্রিয় উপায়:
ফিচার পতাকাগুলি রোলব্যাকের দিকে আরও চটপটে পদ্ধতির (শব্দের প্রকৃত অর্থে) প্রতিনিধিত্ব করে। যদি 10টির মধ্যে একটি বৈশিষ্ট্য বগি হয়, তাহলে আপনাকে নতুন সংস্করণটি আনডিপ্লয় করার দরকার নেই; আপনি শুধুমাত্র বগি বৈশিষ্ট্য নিষ্ক্রিয়. যাইহোক, এই সুপারপাওয়ারটি অতিরিক্ত কোডবেস জটিলতার খরচে আসে, আপনি তৃতীয় পক্ষের পণ্যের উপর নির্ভর করুন বা নিজে এটি বাস্তবায়ন করুন না কেন।
অন্যদিকে, ক্যানারিকে ইচ্ছামত মোতায়েন এবং আনডিপ্লোয় করতে সক্ষম হওয়ার জন্য একটি পরিপক্ক স্থাপনার পাইপলাইন প্রয়োজন।
ক্যানারি রিলিজের পিছনে ধারণা হল ব্যবহারকারীদের একটি ভগ্নাংশকে নতুন সংস্করণ অ্যাক্সেস করার অনুমতি দেওয়া। বেশিরভাগ ক্যানারি সংজ্ঞা শুধুমাত্র ব্যবহারকারীদের শতাংশ হিসাবে "ভগ্নাংশ" সংজ্ঞায়িত করে। যাইহোক, এটা আরো আছে.
প্রথম পদক্ষেপটি হতে পারে শুধুমাত্র যাচাইকৃত ব্যবহারকারীদের পরীক্ষা করার অনুমতি দেওয়া যে উৎপাদন পরিবেশে স্থাপনা প্রত্যাশিতভাবে কাজ করে। এই ক্ষেত্রে, আপনি শুধুমাত্র অভ্যন্তরীণ ব্যবহারকারীদের একটি নির্দিষ্ট সেট ফরোয়ার্ড করতে পারেন, যেমন , পরীক্ষক, নতুন সংস্করণে। আপনি যদি আগে থেকে লোকেদের চেনেন, এবং সিস্টেম ব্যবহারকারীদের প্রমাণীকরণ করে, আপনি পরিচয় দ্বারা এটি কনফিগার করতে পারেন; যদি না হয়, তাহলে আপনাকে কিছু জেনেরিক উপায়ে ফলব্যাক করতে হবে, যেমন , HTTP হেডার - X-Canary: Let-Me-Go-To-v2
।
মনে রাখবেন যে অসঙ্গতিগুলি দেখতে আমাদের অবশ্যই পুরানো এবং নতুন সিস্টেমগুলি পর্যবেক্ষণ করতে হবে। যদি কিছুই দেখা না যায়, নতুন সংস্করণে ফরওয়ার্ড করা ব্যবহারকারীদের পুল বাড়ানোর জন্য এটি একটি চমৎকার সময়। আমি ধরে নিচ্ছি আপনি আপনার নিজের কুকুরের খাবার খান, অর্থাৎ ; দলের সদস্যরা তারা যে সফটওয়্যার তৈরি করছে তা ব্যবহার করে। উদাহরণস্বরূপ, আপনি যদি বিলাসবহুল গাড়ির জন্য একটি ই-কমার্স সাইট না করেন তবে আপনাকে এই বিভাগটি এড়িয়ে যেতে স্বাগত জানাই৷
ঝুঁকি সীমিত করার সময় ব্যবহারকারীদের ভগ্নাংশ বাড়ানোর জন্য, আমরা এখন অভ্যন্তরীণ ব্যবহারকারীদের নির্বিচারে নতুন সংস্করণ সরবরাহ করতে পারি। এটি করার জন্য আমরা ক্লায়েন্ট আইপির উপর ভিত্তি করে নতুন সংস্করণে ফরওয়ার্ড করার জন্য সিস্টেমটিকে কনফিগার করতে পারি। এমন একটি সময়ে যখন লোকেরা সাইটে কাজ করত, তাদের আইপি একটি নির্দিষ্ট পরিসরে থাকায় এটি সহজ ছিল। ব্যবহারকারীরা সম্ভবত একটি VPN এর মাধ্যমে কোম্পানির নেটওয়ার্ক অ্যাক্সেস করার কারণে রিমোট খুব বেশি পরিবর্তন করে না।
আবার, নিরীক্ষণ এবং এই সময়ে তুলনা.
এই মুহুর্তে, অভ্যন্তরীণ ব্যবহারকারীদের জন্য প্রত্যাশিত হিসাবে সবকিছু কাজ করা উচিত, হয় কয়েক বা সমস্ত। কিন্তু কোনো পরিকল্পনা যেমন শত্রুর সঙ্গে যোগাযোগ রক্ষা করে না, তেমন কোনো ব্যবহারই উৎপাদন কাজের চাপের সম্পূর্ণ বৈচিত্র্যকে নকল করতে পারে না। সংক্ষেপে, আমাদের নিয়মিত ব্যবহারকারীদের নতুন সংস্করণ অ্যাক্সেস করতে দিতে হবে, কিন্তু একটি নিয়ন্ত্রিত উপায়ে, যেভাবে আমরা এখন পর্যন্ত ধীরে ধীরে ব্যবহারকারীর সংখ্যা বাড়িয়েছি: একটি ছোট ভগ্নাংশ দিয়ে শুরু করুন, এটি নিরীক্ষণ করুন এবং সবকিছু ঠিক থাকলে ভগ্নাংশ বাড়ান .
Apache APISIX এর সাথে এটি কীভাবে করবেন তা এখানে। Apache APISIX একটি প্লাগইন-ভিত্তিক আর্কিটেকচার অফার করে এবং একটি প্লাগইন প্রদান করে যা আমাদের চাহিদা পূরণ করে, যথা traffic-split
প্লাগইন।
traffic-split
প্লাগইনটি গতিশীলভাবে বিভিন্ন আপস্ট্রিম পরিষেবাগুলিতে ট্র্যাফিকের অংশগুলিকে নির্দেশ করতে ব্যবহার করা যেতে পারে।এটি
match
কনফিগার করার মাধ্যমে করা হয়, যা ট্রাফিককে বিভক্ত করার জন্য কাস্টম নিয়ম এবংweighted_upstreams
যা সরাসরি ট্রাফিকের জন্য আপস্ট্রিমের একটি সেট।
আসুন কিছু মৌলিক আপস্ট্রিম দিয়ে শুরু করি, প্রতিটি সংস্করণের জন্য একটি:
upstreams: - id: v1 nodes: "v1:8080": 1 - id: v2 nodes: "v2:8080": 1
আমরা traffic-split
প্লাগইন ব্যবহার করতে পারি বেশিরভাগ ট্রাফিককে v1 এ এবং একটি ভগ্নাংশ v2 এ ফরোয়ার্ড করতে:
routes: - id: 1 uri: "*" #1 upstream_id: v1 plugins: traffic-split: rules: - weighted_upstreams: #2 - upstream_id: v2 #3 weight: 1 #3 - weight: 99 #3
আবার, আমরা সবকিছু নিরীক্ষণ করি এবং নিশ্চিত করি যে ফলাফল আশানুরূপ হয়। তারপর, আমরা v2 এ ফরোয়ার্ড করা ট্রাফিকের ভগ্নাংশ বাড়াতে পারি, যেমন :
routes: - id: 1 uri: "*" upstream_id: v1 plugins: traffic-split: rules: - weighted_upstreams: - upstream_id: v2 weight: 5 #1 - weight: 95 #1
মনে রাখবেন যে Apache APISIX প্রতি সেকেন্ডে উপরের ফাইলে পরিবর্তনগুলি পুনরায় লোড করে। তাই, আপনি কাছাকাছি-রিয়েল টাইমে ট্রাফিক বিভক্ত করেন। বিকল্পভাবে, আপনি একই অর্জন করতে অ্যাডমিন API ব্যবহার করতে পারেন।
উপরে, আমি অভ্যন্তরীণ ব্যবহারকারীদের থেকে বহিরাগত ব্যবহারকারীদের একটি ভগ্নাংশে চলে এসেছি। সম্ভবত প্রতিটি অভ্যন্তরীণ ব্যবহারকারীকে ছেড়ে দেওয়া আপনার সংস্থার জন্য খুব বড় ঝুঁকি, এবং আপনার আরও বেশি নিয়ন্ত্রণ প্রয়োজন৷ মনে রাখবেন যে আপনি এই ক্ষেত্রে traffic-split
প্লাগইনটি আরও কনফিগার করতে পারেন।
routes: - id: 1 uri: /* upstream_id: v1 plugins: traffic-split: rules: - match: - vars: [["http_X-Canary","~=","Let-Me-Go-To-v2"]] #1 - weighted_upstreams: - upstream_id: v2 weight: 5 - weight: 95
X-Canary
HTTP হেডারে কনফিগার করা মান থাকলে শুধুমাত্র ট্রাফিককে বিভক্ত করুন।
নিম্নলিখিত কমান্ডটি সর্বদা v1 এ ফরোয়ার্ড করে:
curl http://localhost:9080
নিম্নলিখিত কমান্ডটি সর্বদা v1 এ ফরোয়ার্ড করে:
curl -H 'X-Canary: Let-Me-Go-To-v1' http://localhost:9080
নিম্নলিখিত কমান্ডটি কনফিগার করা ওজন অনুযায়ী ট্রাফিককে বিভক্ত করে, যেমন 95/5:
curl -H 'X-Canary: Let-Me-Go-To-v2' http://localhost:9080
এই পোস্টটি ব্যাখ্যা করেছে ক্যানারি রিলিজ এবং কিভাবে আপনি Apache APISIX এর মাধ্যমে কনফিগার করতে পারেন। আপনি বিভিন্ন অগ্রাধিকার সহ বিভিন্ন রুট দিয়ে শুরু করতে পারেন এবং traffic-split
প্লাগইনে যেতে পারেন। পরবর্তীটি এমনকি আরও জটিল ব্যবহারের ক্ষেত্রে অনুমতি দেওয়ার জন্য আরও কনফিগার করা যেতে পারে।
এই পোস্টের জন্য সম্পূর্ণ সোর্স কোড GitHub এ পাওয়া যাবে।
আরো যেতে:
মূলত 3রা ডিসেম্বর, 2023-এ A Java Geek- এ প্রকাশিত