কেন একটি ধারকটিতে কেবল একটি প্রক্রিয়া চালানোর পরামর্শ দেওয়া হচ্ছে?


79

অনেকগুলি ব্লগ পোস্ট এবং সাধারণ মতামত, এমন একটি কথা আছে যা "ধারক প্রতি এক প্রক্রিয়া" যায় goes

কেন এই বিধি বিদ্যমান? কেন একক পাত্রে এনটিপি, এনজিনেক্স, উউজি এবং আরও অনেকগুলি প্রক্রিয়া চালাবেন না যাতে সমস্ত প্রক্রিয়াটি কাজ করা দরকার?

এই বিধি উল্লেখ ব্লগ পোস্ট:


তবে - এমন একটি এন্টারপ্রাইজ সার্ভারের রোলআউট এবং পরিচালনা করতে যা এখনও ডকার থাকতে পারে না তার জন্য কয়েক ডজন প্রক্রিয়া সহ খুব "ফ্যাট" ধারক রাখলে কি ঠিক হবে?
পিটার

@ জে.ডো সম্ভবত এটি ঠিক হবে না। কনটেইনারগুলি ভিএমএসের চেয়ে পৃথক, এমনকি একটি ছোট অ্যাপ্লিকেশনের জন্যও একাধিক ছোট সমস্যা রয়েছে - একটি এন্টারপ্রাইজ রোলআউটের জন্য এটি একটি দুই বছরের প্রকল্প হবে এটি সমস্তই প্রথম পাত্রে একটি পাত্রে চালিত করার জন্য।
ইভজেনি

উত্তর:


65

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

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

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


1
তবুও, থ্রেডের বিরুদ্ধে নিম্ন স্তরের যুক্তিটি এখানে উপযুক্ত বলে মনে হচ্ছে ... web.stanford.edu/~ouster/cgi-bin/papers/threads.pdf
jeffmcneill

দুর্দান্ত, বিস্তৃত উত্তর!
রব ওয়েলস

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

27

কিছু দিন আগে একটি "দুটি প্রক্রিয়া" ধারককে হত্যা করার পরে, আমার জন্য কিছু ব্যথা পয়েন্ট রয়েছে যার ফলে দুটি পাইপ শুরু হয়েছিল যে অজগর স্ক্রিপ্টের পরিবর্তে দুটি ধারক আমার ব্যবহার করেছে:

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

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
ক্লিন্টএম

একমত। কিছু দুর্দান্ত পয়েন্ট সহ আরও কিছু উত্তর রয়েছে, তবে মূল বিষয়টি ডকারের পিআইডি 1 পরিচালনা করার বিষয়ে
ব্রেট ওয়াগনার

13

অপারেটিং-সিস্টেম-স্তরের ভার্চুয়ালাইজেশনের লক্ষ্য এবং নকশা থেকে প্রস্তাবটি আসে

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

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

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

আমি ভাবতে পারি ভারী টুইটগুলি / ক্ষতিগুলি এর অস্তিত্বহীন তালিকাটি এখানে:

  • লগগুলি পরিচালনা করছে

    হয় একটি মাউন্ট ভলিউম সঙ্গে বা stdout এ আন্তঃবিস্তৃত এই কিছু পরিচালনা এনেছে। যদি মাউন্ট করা ভলিউম ব্যবহার করা হয় তবে আপনার ধারকটির নিজস্ব "স্থান" হোস্টে থাকা উচিত বা দুটি একই ধারক একই সংস্থানটির জন্য লড়াই করবে। স্টাডাউটে যখন docker logsএটির সুবিধা গ্রহণ করার জন্য ইন্টারলিভিংয়ের সূত্রগুলি সহজে সনাক্ত না করা যায় তবে বিশ্লেষণের জন্য এটি একটি দুঃস্বপ্ন হয়ে উঠতে পারে।

  • জম্বি প্রক্রিয়াগুলি থেকে সাবধান থাকুন

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

  • উদ্বেগ বিচ্ছেদ

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

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


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

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

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

1
আকর্ষণীয় ... মনে হচ্ছে এ সম্পর্কে আমাদের মতামত রয়েছে (অভিন্ন)। সম্ভবত আপনার এই ক্ষেত্রে এটি উপেক্ষা করা উচিত, কারণ এটি এমন কারও কাছ থেকে এসেছিলেন যা সমালোচক ব্যাজটি অর্জন করতে চেয়েছিল ... এবং এই ব্যাজটি পেতে আপনার উত্তরটিকে অপব্যবহার করার সিদ্ধান্ত নিয়েছে ...
পিয়ের.ভ্রিয়েন্স

1
আমি উপসংহারে "হুড়োহুড়ি করি না" ... আমি আপনাকে এড়াতে পরামর্শ দিই। আপনার উত্তরটির বেনাম নামহীন ব্যক্তি কে সে সম্পর্কে আমি নিজের চোখে যা দেখেছি সে সম্পর্কে "আপনি" আমার মন পরিবর্তন করতে পারবেন না। যাই হোক, সময় উপর সরানো ...
Pierre.Vriens

6

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

উভয় প্রক্রিয়া একটি একক, মডুলার ফাংশনকে সমর্থন না করে এমন একক ক্ষেত্রে একটি কনটেইনার একাধিক প্রক্রিয়া চালানো বোধগম্য হয় cases


2

যে প্রক্রিয়াটি আমি এখানে পরিষেবা হিসাবে ডাকব, 1 ধারক ~ 1 পরিষেবা , আমার পরিষেবাগুলির কোনওটি যদি ব্যর্থ হয় তবে আমি কেবলমাত্র সেই সম্পর্কিত কন্টেইনারটি স্পিন করব এবং সেকেন্ডের সাথে সবকিছু শেষ হয়ে যাবে। সুতরাং, পরিষেবার মধ্যে কোনও নির্ভরতা থাকবে না। আপনার কনটেইনার আকারটি 200 এমবি এবং সর্বোচ্চ 500 এমবি (উইন্ডোজ নেটিভ পাত্রে ব্যতীত 2 জিবি এর চেয়ে বেশি) রাখা ভাল অনুশীলন, অন্যথায়, এটি ভার্চুয়াল মেশিনের মতো হবে, ঠিক তেমন নয়, তবে পারফরম্যান্সই যথেষ্ট। এছাড়াও, স্কেলিং হিসাবে কয়েকটি পরামিতি বিবেচনা করুন, আমি কীভাবে আমার পরিষেবাগুলিকে স্থিতিস্থাপকতা, স্বয়ংক্রিয়ভাবে স্থাপন করা ইত্যাদি করতে পারি could

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

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