অ্যাপাচি চিড়িয়াখানার ব্যাখ্যা


376

আমি চিড়িয়াখিপারকে বোঝার চেষ্টা করছি, এটি কীভাবে কাজ করে এবং এটি কী করে। চিড়িয়াখানার সাথে তুলনীয় এমন কোন অ্যাপ্লিকেশন রয়েছে কি?

যদি আপনি জানেন, তবে আপনি কীভাবে একজন সাধারণ লোকের কাছে চিড়িয়াখানাকে বর্ণনা করবেন?

আমি অ্যাপাচি উইকি, চিড়িয়াখানার সোর্সফোর্জে চেষ্টা করেছি ... তবে আমি এখনও এটির সাথে সম্পর্কিত হতে পারছি না।

আমি কেবল http://zooaker.sourceforge.net/index.sf.shtml এর মাধ্যমে পড়েছি , তাহলে এর মতো আরও পরিষেবা নেই? এটি কি ঠিক কোনও সার্ভার পরিষেবা প্রতিলিপি করার মতো সহজ?


6
অনুরূপ কিন্তু সঠিক উত্তর আপনি এ খুঁজছেন হয়: stackoverflow.com/questions/1479442/real-world-use-of-zookeeper
zengr


আপনি এই কাগজটি চিড়িয়াখানার পড়তে পারেন : ইন্টারনেট-স্কেল সিস্টেমগুলির জন্য অপেক্ষা করুন মুক্ত সমন্বয় দুটি ইয়াহু দ্বারা রচিত ! ইঞ্জিনিয়ার্স
ইয়াফেট

এখানে এমন একটি প্রযুক্তিগত আলাপ রয়েছে যা রেন্ট দ্য রুনওয়ের সিটিও হলেন কেমিল ফর্নিয়ারের অ্যাপাচি চিড়িয়াপ্পির পরিচয়। আমি এটা সহায়ক আশা করি।
Genadinik

@ লুকা গেরেটি ... আমার কথা স্বরূপ, জুক্পের এপিএসের সেট সরবরাহ করে যাতে আমরা বিতরণ অ্যাপ্লিকেশনটিকে সমন্বয় করতে এটি ব্যবহার করতে পারি। আমি ভুল হলে আমাকে সংশোধন করুন।
ব্যবহারকারী 3797438

উত্তর:


434

সংক্ষেপে, চিড়িয়াখানা আপনাকে বিতরণ অ্যাপ্লিকেশনগুলি তৈরি করতে সহায়তা করে।

কিভাবে এটা কাজ করে

আপনি চিড়িয়াখিপারকে চূড়ান্ত ধারাবাহিকতার সাথে একটি প্রতিলিপি সিঙ্ক্রোনাইজেশন পরিষেবা হিসাবে বর্ণনা করতে পারেন। এটি দৃust়, যেহেতু অবিচলিত ডেটা একাধিক নোডের মধ্যে বিতরণ করা হয় (নোডগুলির এই সেটটিকে "এনসেম্বেল" বলা হয়) এবং একটি ক্লায়েন্ট তাদের কোনওটির সাথে সংযুক্ত হয় (যেমন একটি নির্দিষ্ট "সার্ভার"), একটি নোড ব্যর্থ হলে স্থানান্তরিত হয়; যতক্ষণ না কঠোর সংখ্যাগরিষ্ঠ নোড কাজ করে ততক্ষণ জু-কিপ্পার নোডের জুড়িটি জীবিত। বিশেষত, একটি মাস্টার নোড গতিশীলভাবে উপস্থাপকের মধ্যে সম্মতি দ্বারা নির্বাচিত হয়; যদি মাস্টার নোড ব্যর্থ হয় তবে মাস্টারের ভূমিকা অন্য নোডে স্থানান্তরিত হয়।

লেখাগুলি কীভাবে পরিচালিত হয়

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

রৈখিক লেখার গ্যারান্টি হ'ল চিড়িয়াখানার লেখক-প্রভাবশালী কাজের চাপের জন্য ভাল পারফরম্যান্স না করার কারণ। বিশেষত, এটি বৃহত ডেটা, যেমন মিডিয়া বিনিময়ের জন্য ব্যবহার করা উচিত নয়। আপনার যোগাযোগে যতক্ষণ না ভাগ করা ডেটা জড়িত থাকে ততক্ষণ চিড়িয়াখানা আপনাকে সহায়তা করে। যখন ডেটা একসাথে লেখা যেতে পারে, চিড়িয়াখিপার আসলে পথে আসে, কারণ এটি লেখকদের দৃষ্টিকোণ থেকে কঠোরভাবে প্রয়োজন না হলেও এমনকি পরিচালনার কড়া আদেশ প্রদান করে। এর আদর্শ ব্যবহার হ'ল সমন্বয়ের জন্য, যেখানে ক্লায়েন্টদের মধ্যে বার্তাগুলি বিনিময় হয়।

পাঠগুলি কীভাবে পরিচালনা করা হয়

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

বিস্তারিত

চিড়িয়াখানার অনুলিপি করা ডাটাবেসে জোনোডের একটি গাছ রয়েছে , যা সুনির্দিষ্টভাবে ফাইল সিস্টেম নোডগুলিকে উপস্থাপন করে (এগুলি ডিরেক্টরি হিসাবে মনে করে) as প্রতিটি জোনোড বাইট অ্যারে দ্বারা সমৃদ্ধ হতে পারে, যা ডেটা সঞ্চয় করে। এছাড়াও, প্রতিটি জোনোডের এর অধীনে অন্যান্য জ্নোড থাকতে পারে, কার্যত অভ্যন্তরীণ ডিরেক্টরি সিস্টেম গঠন করে।

সিক্যুয়াল জেনোড odes

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

ইফিমেরাল জোনডস

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

ঘড়ি

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

কোথায় এবং কীভাবে এটি ব্যবহার করবেন

চিড়িয়াখানার ব্যবহারের একটি সাধারণ উদাহরণ বিতরণ করা হয় - মেমরি গণনা, যেখানে কিছু ডেটা ক্লায়েন্ট নোডের মধ্যে ভাগ করা হয় এবং সিঙ্ক্রোনাইজেশনের জন্য অ্যাকাউন্ট করার জন্য খুব সতর্কতার সাথে অ্যাক্সেস / আপডেট করতে হবে।

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

চিড়িয়াখানা হ'ল বৈশিষ্ট্যযুক্ত, অর্থাত্ নেতৃত্বের নির্বাচন, তালা, বাধা ইত্যাদির মতো প্রক্রিয়া ইতিমধ্যে উপস্থিত নেই, তবে চিড়িয়াখানা চিঠিপত্রের উপরে লেখা যেতে পারে। যদি সি / জাভা API আপনার উদ্দেশ্যে খুব জবরজং হয়, তাহলে আপনি যেমন ZooKeeper নির্মিত লাইব্রেরি উপর নির্ভর করা উচিত নয় খাঁচা এবং বিশেষ করে কিউরেটর

কোথায় আরও পড়তে হয়

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


2
আমি নিশ্চিত নই যে আপনি যে যোগাযোগ প্রকল্পের পরামর্শ দিচ্ছেন আমি তা বুঝতে পেরেছি তবে আপনি প্রযোজকের কাছ থেকে তথ্য "প্রকাশ" করতে চিড়িয়াখিপার ব্যবহার করতে পারেন এবং বেশ কয়েকটি গ্রাহক এটি পড়তে পারেন। অন্যদিকে যদি প্রতিটি ধরণের সার্ভারের কেবলমাত্র একটি উদাহরণ উপস্থিত থাকে তবে জেডকে ব্যবহার করার কোনও সুবিধা নেই।
লুকা গেরেটি

57
আইএমও এটি একটি ল্যাপারসনের কাছে চিড়িয়াখানার কী তা ব্যাখ্যা করতে ব্যর্থ। আমার কখন চিড়িয়াখিপার দরকার? এটিতে আমি কী লিখব? এটি কোন সমস্যার সমাধান করে? এটি কী-মূল্যের দোকান? একটি সার্চ ইঞ্জিন? একটি বিতরণ লক? আমি কেন জুলুকিপারকে উদাহরণস্বরূপ রেডিস বা একটি ফাইল বা জাইআরআই বা পোস্ট-নোটের তুলনায় বেছে নেব? আপনি চিড়িয়াখিপার সম্পর্কে স্পষ্টতই জানেন - তবে আপনি কি এটি প্রযুক্তিগতভাবে কম ব্যাখ্যা করতে পারবেন?
ড্যান পাসারো

1
চিড়িয়াখানার লেখক যেমন লিনিয়ার লিখেছেন, এটি নোডগুলি তৈরি করতে এবং কলব্যাকের প্রতিক্রিয়া নিতে আমাকে অ্যাসিঙ্ক্রোনাস এপিআই ব্যবহার করতে বাধা দেয় না? যদিও অভ্যন্তরীণভাবে এটি একযোগে লেখার অনুমতি না দেয় বা আমি কি কিছু হারিয়ে ফেলছি?
jdk2588

1
"প্রতিবার যখন কোনও ক্লায়েন্ট সমবেত হয়ে লিখেন, বেশিরভাগ নোড তথ্য অবিরত রাখে: এই নোডগুলিতে ক্লায়েন্টের জন্য সার্ভার অন্তর্ভুক্ত থাকে এবং স্পষ্টতই মাস্টার" => আপনি কি দয়া করে আমাকে কোনও ডকরে নির্দেশ করতে পারেন। বা এমন কিছু যেখানে এটি ব্যাখ্যা করা হয়েছে? আমি ভাবছি যে ক্লায়েন্টটি সংযুক্ত রয়েছে সেই সার্ভারটি বাদ দিয়ে কোনও রাষ্ট্রীয় পরিবর্তন সফলভাবে করা সম্ভব হয়েছে কিনা (এই ক্ষেত্রে ক্লায়েন্ট নিজের মুহূর্তের জন্য নিজের লেখা পড়তে না পারার আজব আচরণটি অনুভব করতে পারে)
জ্ঞানী

2
জিজ্ঞাসিত প্রশ্নের সম্পূর্ণ এবং সম্পূর্ণ বিরোধী। যদি এটি একটি ঘড়ি হয় তবে তিনি "টাইম কিপিং ডিভাইস" খুঁজছিলেন যা ম্যানস্প্রিং, হুইল ট্রেন, পলায়ন এবং দোলনের সময়কাল, জড়তার মুহূর্ত এবং কৃত্রিম নীলা স্ফটিকের প্রভাবের উপর ভিত্তি করে তাদের মিথস্ক্রিয়তার বিবরণ নয়।
রিক

10

চিড়িয়াখানা হ'ল অন্যতম সেরা ওপেন সোর্স সার্ভার এবং পরিষেবা যা বিতরণ প্রক্রিয়াগুলি নির্ভরযোগ্যভাবে সমন্বয় করতে সহায়তা করে। চিড়িয়াখানা একটি সিপি সিস্টেম (রেফার সিএপি উপপাদ্য) যা ধারাবাহিকতা এবং পার্টিশন সহনশীলতা সরবরাহ করে। সমস্ত নোড জুড়ে চিড়িয়াখানার রাজ্যের অনুলিপি এটি একটি শেষ পর্যন্ত সুসংগত বিতরণ পরিষেবা করে।

তদুপরি, যে কোনও নবনির্বাচিত নেতা অনুগামীদের অনেক প্রস্তাব অনুপস্থিত থাকলে অনুপস্থিত প্রস্তাব বা রাজ্যের স্ন্যাপশট সহ তার অনুসারীদের আপডেট করবেন।

চিড়িয়াখানা এমন একটি এপিআইও সরবরাহ করে যা ব্যবহার করা খুব সহজ। এই ব্লগ পোস্টটি, চিড়িয়াখানার জাভা এপিআই উদাহরণগুলির কয়েকটি উদাহরণ রয়েছে যদি আপনি উদাহরণগুলি সন্ধান করেন।

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


4
"চিড়িয়াখানার একটি সিপি সিস্টেম (রেফার সিএপি উপপাদ্য) যা ধারাবাহিকতা এবং পার্টিশন সহিষ্ণুতা সরবরাহ করে", আমি মনে করি যে চিড়িয়াখানার মাস্টার এবং অনুগামী রয়েছে, যখন মাস্টার ডাউন হয়, তবে অনুগামীদের একজনকে নেতা হিসাবে নির্বাচিত করা হবে, সুতরাং চিড়িয়াখানার এই বিভাগটি সরবরাহ করা উচিত এপি, তবে সি শেষ পর্যন্ত ধারাবাহিকভাবে হয়।
ইউফেং শেন

5
সিএপি উপপাদ্যের শর্তে, "সি" এর অর্থ লিনিয়ারাইজিবিলিটি। ZooKeeper আসলে "ক্রমানুসারে ধারাবাহিকতা" সরবরাহ করে এবং এর অর্থ ক্লায়েন্টদের কাছ থেকে প্রাপ্ত আপডেটগুলি ক্রমক্রমে পুনরুদ্ধার করা হবে .. এটি লিনিয়ারাইজিবিলিটির চেয়ে দুর্বল তবে এটি এখনও "দৃual় ধারাবাহিকতা" এর চেয়ে অনেক শক্তিশালী। চিড়িয়াখানাটি এ নয় এবং এটি কারণ যদি নেতা নির্বাচিত না হতে পারেন (কোনও কোরাম নেই) তবে চিড়িয়াখানার অনুরোধগুলি ব্যর্থ হবে। এটি কেন খুব বেশি পাওয়া যায় না।
বিনু জর্জ

7

আমি চিড়িয়াখিপারকে সাধারণভাবে বুঝতে পারি তবে "কোরাম" এবং "বিভক্ত মস্তিষ্ক" পদগুলিতে সমস্যা ছিল তাই আমি আমার অনুসন্ধানগুলি আপনার সাথে ভাগ করে নিতে পারি (আমি নিজেকে একজন সাধারণ মানুষও মনে করি)।

ধরা যাক আমাদের 5 টি সার্ভারের একটি চিড়িয়াখানা রয়েছে। সার্ভারগুলির মধ্যে একটি নেতা হয়ে যাবে এবং অন্যরা অনুসরণকারী হবে।

  • এই 5 সার্ভার একটি কোরাম গঠন করে। কোরামের সরল অর্থ "এই সার্ভারগুলি ভোট দিতে পারে যে কে হওয়া উচিত" "

  • সুতরাং ভোট সংখ্যাগরিষ্ঠের ভিত্তিতে। সংখ্যাগরিষ্ঠতার সহজ অর্থ "অর্ধেকেরও বেশি" সুতরাং সার্ভারের সংখ্যার অর্ধেকেরও বেশি একটি নির্দিষ্ট সার্ভারকে নেতা হওয়ার জন্য সম্মত হতে হবে।

  • সুতরাং এই খারাপ জিনিস যা ঘটতে পারে "বিভক্ত মস্তিষ্ক" বলে। একটি বিভক্ত মস্তিষ্কটি কেবল এটিই, যতদূর আমি বুঝতে পেরেছি: 5 টি সার্ভারের ক্লাস্টারটি দুটি ভাগে বিভক্ত হয়ে যায়, বা এটি "সার্ভার দলগুলি" বলে, সম্ভবত 2 এর একটি অংশ এবং 3 টি সার্ভারের অন্য অংশ। এটি সত্যই খারাপ পরিস্থিতি যেমন উভয় "সার্ভার দল" অবশ্যই একটি নির্দিষ্ট ক্রম সম্পাদন করবে আপনি কীভাবে সিদ্ধান্ত নেবেন যে কোন দলকে অগ্রাধিকার দেওয়া উচিত? তারা ক্লায়েন্টদের কাছ থেকে বিভিন্ন তথ্য পেয়ে থাকতে পারে। সুতরাং "সার্ভার টিম" কী এখনও প্রাসঙ্গিক এবং কোনটি উপেক্ষা করা উচিত / তা জানা সত্যিই গুরুত্বপূর্ণ।

  • সংখ্যাগরিষ্ঠতা হ'ল কারণ আপনার একটি বিজোড় সংখ্যক সার্ভার ব্যবহার করা উচিত। যদি আপনার 4 টি সার্ভার এবং একটি বিভক্ত মস্তিষ্ক থাকে যেখানে 2 টি সার্ভার বিচ্ছিন্ন হয় তবে উভয় "সার্ভার দল" বলতে পারে "আরে, আমরা সিদ্ধান্ত নিতে চাই যে নেতা কে!" তবে কোন দুটি সার্ভার আপনার চয়ন করা উচিত তা কীভাবে সিদ্ধান্ত নেওয়া উচিত? ৫ টি সার্ভারের সাহায্যে এটি সহজ: ৩ টি সার্ভার সহ সার্ভার টিমের সংখ্যাগরিষ্ঠতা রয়েছে এবং নতুন নেতা নির্বাচন করার অনুমতি রয়েছে।

  • এমনকি যদি আপনার কাছে মাত্র 3 টি সার্ভার রয়েছে এবং তাদের মধ্যে একটি ব্যর্থ হয় অন্য 2 টি এখনও সংখ্যাগরিষ্ঠ গঠন করে এবং একমত হতে পারে যে তাদের মধ্যে একটি নতুন নেতা হয়ে উঠবে।

আমি বুঝতে পারছি আপনি একবার এটি সম্পর্কে কিছুক্ষণ চিন্তা করে এবং এটি এত জটিল নয় এমন পদগুলি বুঝতে পারে। আমি আশা করি এটি এই শর্তগুলি বুঝতে কারও সহায়তা করে।


1

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

অধিক তথ্য


2
চিড়িয়াখানার কেন্দ্রীভূত হওয়ার বিষয়টি আপনাকে কী বলে? চিড়িয়াখানা চালানো যেতে পারে এবং চালানো উচিত।
বেনিয়ামিন হামার নারগার্ড

1

আমি নিম্নলিখিত সংস্থানগুলি প্রস্তাব করব:

  1. কাগজ: https://pdos.csail.mit.edu/6.824/papers/zookeeper.pdf
  2. এমআইটি 8.৮২৪ দ্বারা প্রদত্ত বক্তৃতা :00 36:০০ থেকে: https://youtu.be/pbmyrNjzdDk?t=2198

আমি ভিডিওটি দেখার, কাগজটি পড়ার, এবং তারপরে ভিডিওটি আবার দেখার পরামর্শ দেব। আপনি যদি রাফটকে আগেই চেনেন তবে এটি বোঝা সহজ হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.