মাইক্রোসার্ভেসি এবং ভাগ করা লাইব্রেরি


9

আমরা স্বতন্ত্র মাইক্রোসার্ভিসেস (একটি রেবিটমিকিউ বাসের মাধ্যমে সংযুক্ত) এর উপর ভিত্তি করে একটি সিস্টেম ডিজাইন করছি। কোডটি (কমপক্ষে প্রথম উপাদানগুলির জন্য) পাইথনে লেখা হবে (পাইথন 2 এবং পাইথন 3)) ইতিমধ্যে আমাদের কাছে কিছু ব্যবসায়িক যুক্তি বাস্তবায়িত করে একটি মনোলিথ অ্যাপ্লিকেশন রয়েছে, যা আমরা মাইক্রোসার্চেস হিসাবে রিফ্যাক্টর করতে চাই এবং প্রসারিত করতে চাই। একটি প্রশ্ন যা আমাকে চিন্তিত করে তা হ'ল:

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

মাইক্রোসার্ভেসিসগুলি নিজেরাই পৃথক প্রকল্প (গিট সংগ্রহস্থল) হিসাবে বিকাশ করতে চলেছে। সাধারণ গ্রন্থাগারগুলিকে একটি স্ব-অন্তর্ভুক্ত প্রকল্প হিসাবেও বিকাশ করা যেতে পারে। আমি কীভাবে এই গ্রন্থাগারগুলিকে মাইক্রোসার্ভেসিসের মধ্যে ভাগ করব?

আমি বেশ কয়েকটি পন্থা দেখতে পাচ্ছি:

  • প্রতিটি মাইক্রোসার্ভেসের জন্য প্রয়োজনীয় লাইব্রেরির সংস্করণটি অনুলিপি করুন এবং প্রয়োজন অনুসারে আপডেট করুন
  • একটি সাধারণ অভ্যন্তরীণ পিপিআইতে সাধারণ লাইব্রেরি প্রকাশ করুন এবং মাইক্রো সার্ভিসের প্রয়োজনীয়তার উপর নির্ভরশীলতা হিসাবে সেই পাঠাগারগুলি তালিকাভুক্ত করুন
  • গিট সাবমডিউল হিসাবে গ্রন্থাগার সংগ্রহস্থল অন্তর্ভুক্ত করুন

কীভাবে এগিয়ে যেতে হবে তার সিদ্ধান্ত নেওয়ার আগে প্রস্তাবিত পদ্ধতির, সেরা অনুশীলনগুলি, অতীতের অভিজ্ঞতাগুলি সম্পর্কে আমি আরও কিছুটা পড়তে চাই। আপনার কোন পরামর্শ বা লিঙ্ক আছে?


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

@ ক্যাপিটেনম্যান: অবশ্যই, তবে আসুন আমরা বলি যে আপনার এই সাধারণ ফাংশন রয়েছে: fib(n)(ফিবোনাচি সিরিজের বাস্তবায়ন)। আপনি প্রতিটি মাইক্রো সার্ভিসে সেই প্রয়োগটি পুনরাবৃত্তি করতে চান না। এটি কোনও utilsলাইব্রেরির অন্তর্ভুক্ত (বৈশিষ্ট্য এবং বাগফিক্সগুলির জন্য সংস্করণযুক্ত)। এটি কোনও বিতরণ করা মনোলিথ নয়, এটি সাধারণ কার্যকারিতার মাত্র একটি স্তর। আমার প্রশ্ন হল বাস্তবায়ন স্তরে এই স্তরটি কীভাবে পরিচালনা করতে হয়?
ব্লুফাস্ট

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

1
@ jeckyll2hide আমরা সি ++ ব্যবহার করছি, তবে এটির জন্য আমাদের পরিকাঠামোগুলি আপনার দ্বিতীয় বুলেট পয়েন্টের সমান: সমান পৃথক রেপো, প্রত্যেকে তাদের নির্ভরতা ঘোষণা করে, স্ট্যান্ডার্ড বিল্ড সিস্টেম যা জানে যে সময়ে কীভাবে সেই নির্ভরতাগুলি খুঁজে পাওয়া যায় ইত্যাদি।
Ixrec

1
আমি একটি ডামির মতো অনুভব করছি, আপনি মাইক্রোসার্ভিসেসগুলি নির্দিষ্ট করে গ্রন্থাগারগুলি ভাগ করে নেওয়ার বিষয়ে সত্যই নয়, এটি আপনার দলের লাইব্রেরিগুলি কীভাবে দলের সাথে ভাগ করবেন সে সম্পর্কে জিজ্ঞাসা করছেন। আমি একটি উত্তর পোস্ট করার জন্য যথেষ্ট জানি।
ক্যাপ্টেন ম্যান

উত্তর:


5

আপনার দ্বিতীয় বিকল্পটি অবশ্যই যাওয়ার উপায়। সাধারণ লাইব্রেরিগুলি ভাঙ্গুন এবং সেগুলি আপনার স্থানীয় পাইপি সার্ভারে ইনস্টল করুন।

বিকল্প 1 ভয়াবহ কারণ গ্রন্থাগারগুলির উন্নতি অন্যদের মধ্যে যারা এটি ব্যবহার করতে পারে তাদের কাছে প্রচার করা কঠিন হবে।

বিকল্প 3 বিকল্প 1 এর সমান।

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

আপনার নিজস্ব পিপিআই সার্ভার সেট আপ করা খুব সহজ। আমি এই গাইড পছন্দ


1
আমি সম্মত হই যে বিকল্প 2টি সর্বোত্তম, তবে বিকল্পটি 3
সাবমোডিয়ুলগুলির

@ 8 বিট্রি: হ্যাঁ, বিকল্প 3 অপশন 2 এর মতো, তবে গিট সার্ভার ("কেন্দ্রীয়" দূরবর্তী) প্যাকেজ বিতরণ প্রক্রিয়া হতে পারে। একদিকে এটি গিটার ব্যবহার করছে না এমন কিছু করার জন্য যা নির্ভর করে না (নির্ভরতা ব্যবস্থাপনার জন্য), অন্যদিকে এটি উপাদানগুলির সংখ্যা হ্রাস করে (বেসরকারী পিপিআইয়ের প্রয়োজন নেই)
ব্লুফাস্ট

2

পাইথন লোক নয় তবে পাইপি সার্ভার সেরা বিকল্প হিসাবে মনে হচ্ছে। একটি দ্রুত গুগলিং এমন চেহারা দেয় যা এটি দলের জাভা জারগুলির জন্য একটি নেক্সাস রেপো সমান।

সত্যিই যতক্ষণ এটি কোনও প্রকার কেন্দ্রীয় ভান্ডার (অফিস / টিমের কাছে) স্থাপন করা হচ্ছে যে আপনার পছন্দের নির্ভরতা পরিচালনার সরঞ্জামটি কাজ করতে পারে (থেকে পড়ুন এবং মোতায়েন করুন) তবে এটি একটি ভাল বিকল্প।

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

অপশন 3 সম্ভবত কার্যকরভাবে কাজ করবে তবে স্থানীয় পিপিআইয়ের সাথে এর কোনও আসল সুবিধা নেই (সম্ভবত সেটআপ করা সহজতর ছাড়াও তবে সত্যিকারের নির্ভরতা পরিচালন ব্যবস্থার সুবিধাগুলি আরও অনেক ভাল)।


1

সবার আগে মোনোরিকোসেসে কোনও একরঙা বিভক্ত করা সর্বদা শক্ত হতে চলেছে। দেখুন বিকেন্দ্রীকৃত ডেটা পরিচালন - microservices মধ্যে ডাটাবেস encapsulating কেন একটি ধারণা জন্য।

এটি বলেছিল, এটি তুলনামূলক বুদ্ধিমানভাবে কীভাবে করা যায় তার জন্য বেশ কয়েকটি রেসিপি রয়েছে। এর মধ্যে একটি হ'ল http://12factor.net/ । সেই ব্যক্তিটি বলবেন যে আপনার প্রতিটি লাইব্রেরি এবং অ্যাপ্লিকেশনটি স্বাধীনভাবে বজায় রাখা উচিত, তারপরে স্পষ্টভাবে নির্ভরতাগুলি পরিচালনা করুন। আপনি যদি সেই পথে যান তবে আমি দৃ to়ভাবে সুপারিশ করতে যাচ্ছি যে আপনার কাছে একটি সরল কমান্ড রয়েছে যা বর্তমান যা কিছু আছে তার সমস্ত নির্ভরতা আপডেট করে এবং আপনি প্রতিটি মাইক্রো-পরিষেবাতে নিয়মিত এটি চালান। আপনার উত্পাদনের লাইব্রেরিগুলির সংস্করণগুলি লকড করার ক্ষেত্রে একটি বুদ্ধিমানের মুক্তির প্রক্রিয়াটি হওয়া গুরুত্বপূর্ণ important তবে আপনি সত্যই, সত্যই , সত্যিকার অর্থে এমন একটি অবস্থানে থাকতে চান না যেখানে নির্ভরতাগুলি বাসি হয়ে যায় এবং আপনি জানেন না যে সেখানে কী রয়েছে।

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


0

পাইথন প্যাকেজ নির্ভরতা ফাইল থেকে সরাসরি লাইব্রেরিগুলিতে থাকা ব্যক্তিগত গিটহাবের রেপোতে নির্দেশ করে আপনি সার্ভারলেস হতে সক্ষম হবেন। পাইপেনভ এবং কবি উভয়ই এটিকে সমর্থন করেন, আমি বিশ্বাস করি।

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