ট্রানজিটিভ নির্ভরতা দ্বন্দ্বগুলির কাছে আপনি কীভাবে পৌঁছবেন যেগুলি কেবল রান-টাইমে পরিচিত? [বন্ধ]


9

বড় সফ্টওয়্যার প্রকল্পগুলিতে রান-টাইমে সংঘটিত নির্ভরতা সম্পর্কিত সমস্যার জন্য আপনি সাধারণত কীভাবে যোগাযোগ করেন?

গত তিন সপ্তাহ ধরে, আমি সফ্টওয়্যারটির অন্য উপাদানটির মধ্যে একটি বৃহত টুকরা সফ্টওয়্যারটির একটি উপাদান শুরু করার চেষ্টা করছি, তবে এটি কেবলমাত্র রান-টাইমে পরিচিত ট্রানজিটিভ নির্ভরতা সম্পর্কিত সমস্যার কারণে মাঝেমধ্যে মারা যায়।

ট্রানজিটিভ নির্ভরতা ইস্যু দ্বারা, আমি বোঝাতে চাইছি প্রদত্ত প্রকল্পের নির্ভরতাগুলির নির্দিষ্ট নির্ভরতাগুলি রান-টাইমে অন্যান্য নির্ভরতাগুলির সাথে সংঘর্ষিত হয়, যার ফলে অস্থিরতা বা তাত্ক্ষণিক ব্যর্থতা ঘটে।

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

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

সমাধানগুলি আমি কেবল এক ঘন্টা বা দু' ঘন্টা ধরে কাজ করে এসেছি এবং তারপরে উজানের উপাদানগুলির পরিবর্তনের কারণে তারা কাজ করা বন্ধ করে দেয়। প্রবাহের উপাদানটির উদাহরণ হ'ল একটি শিল্পকর্ম যা আমি যে প্রকল্পে কাজ করছি তার উপর নির্ভর করে যা সিআই পাইপলাইনে পূর্বের পর্যায়ে নির্মিত হয়েছিল।


অন্যের অনুরোধে , আমি কী পরিমাণ প্রযুক্তি ব্যবহার করা হচ্ছে, খুব বেশি তথ্য সরবরাহ করার জন্য প্রশ্নটি বন্ধ করার ঝুঁকিতে বা শরীর দীর্ঘায়িত হওয়ার ঝুঁকিতে তথ্য অন্তর্ভুক্ত করতে যাচ্ছি:

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

সাধারণভাবে, আমি কোনও প্রদত্ত প্রকল্পের নির্ভরতার সমস্ত সম্ভাব্য সংমিশ্রণগুলি গণনা না করে নির্ভরতা বিরোধগুলি সমাধানের উপায়গুলি সনাক্ত করার জন্য একটি ভাষা-অজ্ঞাত পদ্ধতির সন্ধান করছি

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


আপনি কি আইআই ডি কনটেইনারটি আইএফওআইএমপিএল ব্যবহারের জন্য এটি সঠিকভাবে সেটআপ না করার মতো কথা বলছেন?
অ্যান্ডি

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

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

1
। নেট ওয়ার্ল্ডে আমি এই সমস্যার সমাধান করছি কেবলমাত্র আমার মূল অ্যাপ্লিকেশন প্রকল্পে প্যাকেজ ইনস্টল করা। কোনও অ্যাপ্লিকেশন কোড আসলে প্লাগইন লাইব্রেরিগুলি সরাসরি ব্যবহার করে না। নেট সংকলকটি নিশ্চিত করে যে বিল্ড করার সময় ডিএলএল সঠিক জায়গায় রয়েছে এবং সুতরাং মোতায়েনের ব্যবস্থা করে।
অ্যান্ডি

2
"আমি কিভাবে নির্ভরতা পরিচালিত হয় উপর কোন নিয়ন্ত্রণ আছে, এবং যে কোনো কোড পরিবর্তন করতে পারবেন না" - আসলে করতে আপনি পরিবর্তন? আপনি যদি কিছু পরিবর্তন করতে না পারেন তবে প্রশ্নটি অর্থহীন বলে মনে হয়।
ডক ব্রাউন

উত্তর:


6

অ্যাপ্লিকেশনটিতে প্রতিটি মডিউলকে তার নিজস্ব পরিবেশনের পরিবেশ দেওয়ার জন্য কাস্টম ক্লাসলোডার ব্যবহার করে আপনার সমস্যার সমাধান করা সম্ভব।

মূলত, আপনি একটি মূল পরিবেশকে সংজ্ঞায়িত করতে পারেন যা অ্যাপ্লিকেশনটির একটি ছোট কার্নেল সমন্বিত রয়েছে, সর্বজনীনভাবে যে সমস্ত নির্ভরতাগুলির সাথে একমত হয় এবং মডিউলগুলির একে অপরের সাথে যোগাযোগের জন্য প্রয়োজনীয় সমস্ত ইন্টারফেসও রয়েছে। তারপরে, আপনার লোড করা প্রতিটি মডিউল তার নিজস্ব ক্লাসলোডার পায় যা রানটাইম পরিবেশ থেকে (1) ক্লাসগুলি, (2) অ্যাপ্লিকেশন কোর থেকে ক্লাস এবং (3) ক্লাসগুলি সেই মডিউল এবং এর সরাসরি নির্ভরতা থেকে অ্যাক্সেস করতে পারে। সমস্ত আন্তঃ-মডিউল যোগাযোগ কোরতে সংজ্ঞায়িত ইন্টারফেসের মধ্য দিয়ে যায় যাতে কোনও মডিউল সরাসরি অন্যের উপর নির্ভর করে না।

এই কৌশলটি অ্যাপ্লিকেশন সার্ভারগুলিতে অ্যাপ্লিকেশন সার্ভারগুলিতে নির্ভরতা থাকতে পারে যা অন্যথায় সংঘর্ষ হয়, যাতে আপনি কৌশলটির কার্যকরী বাস্তবায়ন দেখতে পাবেন, উদাহরণস্বরূপ, টমকটে (এবং আপনি যদি ভাগ্যবান হন তবে আপনি টমকেটের ব্যবহার করতে সক্ষম হতে পারেন) সামান্য পরিবর্তন সহ বাস্তবায়ন)।


1
নির্ভরতা ইস্যু সমাধানের জন্য আমাকে প্রকল্পটি পুনরায় স্থপতি করার অনুমতি নেই। যদিও কোনও মাইক্রোকার্নেলের মতো আর্কিটেকচারে স্যুইচ করা এক ধরণের দুর্দান্ত।
টাইলার

2
@ টাইলার: তবুও আমি মনে করি এটি প্রশ্নের জেনেরিক অংশটির একটি ভাল, জেনেরিক উত্তর।
ডক ব্রাউন

1
ওসির মতো কিছুটা লাগছে।
স্পেসট্রকার ২

4

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

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

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

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

উদাহরণস্বরূপ, যদি আপনার সিস্টেমটি কোনও ওয়েব শপ হয় এবং আপনার "নিউজলেটার সাবস্ক্রিপশন" এর সাবমডিউলটি কয়েক ঘন্টা লোড করা যায় না, এটি এমন এক জিনিস যা সহজেই সহ্য করা যায় যেন পুরো দোকানটি আর কাজ করে না।

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


2

আমাকে এখানে শুধু জোরে চিন্তা করে বিবেচনা করুন। প্রয়োজনীয়তা / সময়ের সীমাবদ্ধতার উপর নির্ভর করে আমি এটি বিবেচনা করতে পারি:

1) ইন্টারফেস এবং তাদের বাস্তবায়নগুলির একটি তালিকা তৈরি করুন (যদি প্রতিফলন ব্যবহার করে থাকে তবে উপলব্ধ থাকে)

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

আপনি কীভাবে জড়িত থাকতে চান তার উপর নির্ভর করে, আমার ধারণা, তবে শেষ পর্যন্ত আপনি কী প্রয়োজন তার একটি সম্পূর্ণ তালিকা পেতে চান - এই সমাধানটি শেষ পর্যন্ত সেই তালিকাটি তৈরি করে।

তবে, যুক্তিযুক্তভাবে এটি অনেক কাজ এবং নির্ভরযোগ্য নয় - আপনার যদি কোনও নীল চাঁদে একবার নির্দিষ্ট নির্ভরতার প্রয়োজন হয় এমন কোনও বেজাদার অবস্থা হয় তবে?

আপনি যখন "উজানের উপাদানগুলিতে পরিবর্তন" বলবেন তখন আপনার অর্থ কী?


দুঃখিত, আমি খুব বেশি পটভূমি তথ্য সরবরাহ করতে চাইনি - যখন আমি অপারেটিং পরিবেশের বর্ণনা করি তখন প্রশ্নগুলি সাধারণত নিম্নমুখী হয় এবং মৃত্যুর শিকার হয়। আমি সংজ্ঞা বিভাগের সাথে মূল প্রশ্নটি আপডেট করব।
টাইলার

2

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

আমি অনুমান করছি যখন আপনি আপনার সহকর্মীদের জিজ্ঞাসা করবেন 'আমি কীভাবে এটি কাজ করব?', তারা বলে 'স্পষ্টতই আপনার এই 35 টি মডিউল এবং সংস্করণের তালিকা দরকার , আপনি কীভাবে তা জানতে পারবেন না?'

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

স্পষ্টতই আপনি এটি করতে পারবেন না, সুতরাং আপনার সেরা বিকল্পটি সম্ভবত এখানে পাওয়া যাবে


আমি যা বলতে পারি তা থেকেই এটি ঘটছে happening এখন পর্যন্ত আমি 30 টি নির্ভরতা জাগ্রত করছি, এবং সংঘর্ষগুলি দূর করার জন্য স্কোপগুলি ঘুরিয়ে দিচ্ছি, তবে, এখানে পিয়ার পর্যালোচনাটি প্রয়োজনীয় needed
টাইলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.