এটি একটি খুব উন্মুক্ত প্রশ্ন তবে আমি ব্যাখ্যা করার চেষ্টা করব কেন বিতরণ সিস্টেমগুলি বিকাশের জন্য এলিক্সির / এরলং কেন সেখানে সেরা প্ল্যাটফর্ম হতে পারে (নির্বিশেষে আপনি যদি মাইক্রো সার্ভিসেস নিয়ে কাজ করছেন)।
প্রথমে কিছু পটভূমি দিয়ে শুরু করা যাক। এরলং ভিএম এবং এর স্ট্যান্ডার্ড লাইব্রেরি বিতরণ সিস্টেম তৈরির জন্য সামনে নকশা করা হয়েছিল এবং এটি সত্যই প্রদর্শিত হয়। যতদূর আমি জানি, এটি একমাত্র রানটাইম এবং ভিএম এই উত্পাদনের ক্ষেত্রে প্রযোজনায় ব্যাপকভাবে ব্যবহৃত হয় ব্যবহারের ক্ষেত্রে up
অ্যাপ্লিকেশন
উদাহরণস্বরূপ, আপনি ইতিমধ্যে "অ্যাপ্লিকেশনগুলিতে" ইঙ্গিত দিয়েছেন। এরলং / এলিক্সিতে, কোডগুলি অ্যাপ্লিকেশনগুলির মধ্যে প্যাকেজ করা থাকে যা:
- ইউনিট হিসাবে শুরু এবং বন্ধ করা হয়। আপনার সিস্টেমটি শুরু করা এবং এটি বন্ধ করা এটিতে সমস্ত অ্যাপ্লিকেশন শুরু করার বিষয়
- একটি ইউনিফাইড ডিরেক্টরি কাঠামো এবং কনফিগারেশন এপিআই সরবরাহ করুন (যা এক্সএমএল নয়!)। যদি আপনি ইতিমধ্যে একটি ওটিপি অ্যাপ্লিকেশনটির সাথে কাজ করে এবং এটি কনফিগার করেছেন তবে আপনি অন্য যে কোনও একটির সাথে কীভাবে কাজ করবেন তা জানেন
- আপনার অ্যাপ্লিকেশন তত্ত্বাবধানের গাছগুলিতে, সমস্ত প্রক্রিয়া সহ (প্রক্রিয়া অনুসারে আমি "ভিএম প্রসেস" বোঝায় যা গণনার হালকা ওজনযুক্ত থ্রেড) এবং তাদের অবস্থা
এই নকশার প্রভাব বিশাল। এর অর্থ এই যে এলিক্সির বিকাশকারীরা, অ্যাপ্লিকেশনগুলি লেখার সময় আরও স্পষ্ট পদ্ধতিতে থাকে:
- কিভাবে তাদের কোড শুরু এবং বন্ধ করা হয়
- কী কী প্রক্রিয়াগুলি একটি আবেদনের অংশ তৈরি করে এবং তাই অ্যাপ্লিকেশনের অবস্থা
- ক্র্যাশগুলির ক্ষেত্রে বা কিছু ভুল হয়ে গেলে সেই প্রক্রিয়াগুলি কীভাবে প্রতিক্রিয়া জানাবে এবং প্রভাবিত করবে
শুধু তাই নয়, এই বিমূর্তনের চারপাশে সরঞ্জামদান দুর্দান্ত। আপনি Elixir ইনস্টল করা থাকে, খুলুন "iex" এবং টাইপ: :observer.start()
। আপনার লাইভ সিস্টেম সম্পর্কে তথ্য এবং গ্রাফ প্রদর্শন করার পাশাপাশি, আপনি এলোমেলো প্রক্রিয়াগুলি মেরে ফেলতে পারেন, তাদের মেমরির ব্যবহার, রাষ্ট্র এবং আরও অনেক কিছু দেখতে পারেন। এখানে ফিনিক্স অ্যাপ্লিকেশনটিতে এটি চালনার উদাহরণ রয়েছে:
এখানে পার্থক্যটি হ'ল অ্যাপ্লিকেশন এবং প্রক্রিয়াগুলি আপনাকে উত্পাদনের কোড সম্পর্কে যুক্তিযুক্ত বিমূর্ততা দেয় । অনেকগুলি ভাষা রানটাইম সিস্টেমে কোনও প্রতিচ্ছবি না করে বেশিরভাগ কোড সংস্থার জন্য প্যাকেজ, বস্তু এবং মডিউল সরবরাহ করে। যদি আপনার কাছে কোনও শ্রেণি বৈশিষ্ট্য বা একটি সিঙ্গলটন অবজেক্ট থাকে: আপনি যে সত্তাগুলি এটি পরিচালনা করতে পারেন সে সম্পর্কে আপনি কীভাবে যুক্তি করতে পারেন? আপনার যদি মেমরি ফুটো বা একটি বাধা থাকে তবে আপনি কীভাবে সত্তাকে দায়বদ্ধ হিসাবে আবিষ্কার করতে পারেন?
যদি আপনি কাউকে বিতরণ করা সিস্টেম চালাওয়ার বিষয়ে জিজ্ঞাসা করেন, তবে তারা যে ধরণের অন্তর্দৃষ্টি চান, এবং এরলং / এলিক্সিরের সাথে আপনার এটি বিল্ডিং ব্লক হিসাবে রয়েছে।
যোগাযোগ
এই সমস্ত সত্যিই সত্যিই শুরু। বিতরণ সিস্টেম তৈরি করার সময়, আপনাকে একটি যোগাযোগ প্রোটোকল এবং ডেটা সিরিয়ালাইজার নির্বাচন করতে হবে। প্রচুর লোকেরা এইচটিটিপি এবং জেএসওনকে বেছে নেয় যা আপনি যখন এটি সম্পর্কে ভাবেন তখন সত্যিকার অর্থে আরপিসি কলগুলি সম্পাদন করার জন্য খুব ভার্জোজ এবং ব্যয়বহুল সমন্বয়।
এরলং / এলিক্সিরের সাহায্যে আপনার কাছে ইতিমধ্যে একটি যোগাযোগ প্রোটোকল এবং বাক্সের বাইরে সিরিয়ালাইজেশন প্রক্রিয়া রয়েছে। আপনি যদি দুটি মেশিন একে অপরের সাথে যোগাযোগ করতে চান তবে আপনাকে কেবল তাদের নাম দেওয়া দরকার, তাদের একই গোপনীয়তা রয়েছে তা নিশ্চিত করে আপনার কাজ শেষ হয়েছে।
জেমি এরলং ফ্যাক্টরি ২০১৫ এ এই বিষয়ে কথা বলেছিল এবং তারা কীভাবে একটি গেম প্ল্যাটফর্ম তৈরি করতে এই সুবিধা অর্জন করতে সক্ষম হয়েছিল: https://www.youtube.com/watch?v=_i6n-eWiVn4
আপনি যদি এইচটিটিপি এবং জেএসএন ব্যবহার করতে চান তবে তাও ঠিক আছে এবং ফিনিক্সের মতো প্লাগ এবং ফ্রেমওয়ার্কগুলির মতো লাইব্রেরি আপনাকে এখানেও উত্পাদনশীল গ্যারান্টি দেবে।
Microservices
এখনও পর্যন্ত আমি মাইক্রোসার্চেস সম্পর্কে কথা বলিনি। কারণ এ পর্যন্ত, তারা আসলেই কিছু যায় আসে না। আপনি ইতিমধ্যে বিচ্ছিন্ন অতি ক্ষুদ্র প্রক্রিয়াগুলির চারপাশে আপনার সিস্টেম এবং নোডগুলি ডিজাইন করছেন। আপনি চাইলে তাদের ন্যানোসরভাইসগুলি কল করুন!
শুধু তাই নয়, এগুলিকে অ্যাপ্লিকেশনগুলিতেও প্যাকেজ করা হয়, কোনটি তাদের সত্তা হিসাবে গোষ্ঠীভুক্ত করে যা ইউনিট হিসাবে শুরু এবং বন্ধ করা যায়। আপনার যদি এ, বি এবং সি অ্যাপ্লিকেশন রয়েছে এবং তারপরে আপনি এগুলিকে [এ, বি] + [সি] বা [এ] + [বি] + [সি] হিসাবে স্থাপন করতে চান, তবে আপনাকে এটি করতে খুব কম সমস্যা হবে তাদের সহজাত নকশা। অথবা, আরও ভাল, যদি আপনি আপনার সিস্টেমের সম্মুখভাগে মাইক্রোসার্ভিসেস মোতায়েনের জটিলতা এড়াতে চান তবে আপনি কেবল একই নোডে তাদের পুরোপুরি মোতায়েন করতে পারেন।
এবং, দিনের শেষে, আপনি যদি এরলং বিতরণকারী প্রোটোকলটি ব্যবহার করে এই সমস্ত কিছু চালিয়ে যাচ্ছেন তবে আপনি এগুলি বিভিন্ন নোডে চালাতে পারেন এবং আপনি যতক্ষণ না তাদের {:node@network, :name}
পরিবর্তে উল্লেখ করেন ততক্ষণ তারা অন্যগুলিতে পৌঁছাতে সক্ষম হবেন :name
।
আমি আরও যেতে পারে তবে আমি আশা করি যে এই মুহুর্তে আমি আপনাকে বোঝাতে পেরেছি। :)