একযোগে মোকাবেলা করার জন্য কি পাইথনটির সাথে থাকা বা ত্যাগ করা উচিত?


31

আমি একটি 10K আছে এলওসি প্রকল্পে লিখিত জ্যাঙ্গো বেশ একটি চুক্তি সঙ্গে সেলারি ( RabbitMQ asynchronicity এবং ব্যাকগ্রাউন্ড কাজ যেখানে প্রয়োজনীয়), এবং উপসংহার সিস্টেমের অংশে পুনর্লিখিত হওয়া থেকে উপকার হবে এসেছি কিছু ভাল সম্পাতবিন্দু জন্য জ্যাঙ্গো ছাড়া অন্য । কারণগুলির মধ্যে রয়েছে:

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

টুইটারযুক্ত বা টর্নেডোর মতো কিছু ব্যবহারের যেমন- এরলং বা ক্লোজারের সাথে তুলনা করার কী কী উপকারিতা এবং বিধানগুলি রয়েছে ? আমি ব্যবহারিক সুবিধা এবং ক্ষতির বিষয়ে আগ্রহী।

আপনি কীভাবে এই সিদ্ধান্তে পৌঁছলেন যে সিস্টেমের কিছু অংশ অন্য ভাষায় আরও ভাল ভাড়া পাবে? আপনি কর্মক্ষমতা সমস্যা ভোগ করছেন? এই সমস্যাগুলি কতটা গুরুতর? এটি যদি দ্রুততর হতে পারে তবে এটি কি দ্রুততর হওয়া জরুরী?

উদাহরণ 1: একটি এইচটিটিপি অনুরোধের বাইরে কাজ করা জাঙ্গো:

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

উদাহরণ 2: জ্যাঙ্গো সিগন্যাল ব্যবহার করে "বার্তা পাঠানো":

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

আমি মনে করি আপনি কেন এই সিদ্ধান্তে এসেছেন সে সম্পর্কে আপনি যদি আরও ব্যাখ্যা করেন তবে আরও ভাল উত্তর হবে
উইনস্টন ইওয়ার্ট

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

বাঁকানো সমবর্তী বিপরীত ! এটি ইভেন্টে চালিত একটি একক থ্রেডেড সার্ভার, আপনার যদি সত্যিকারের সম্মতিতে প্রয়োজন হয় তবে এটি আপনাকে কোথাও পাবেন না।

উত্তর:


35

উদ্বোধন চিন্তা

আপনি কীভাবে এই সিদ্ধান্তে পৌঁছলেন যে সিস্টেমের কিছু অংশ অন্য ভাষায় আরও ভাল ভাড়া পাবে? আপনি কর্মক্ষমতা সমস্যা ভোগ করছেন? এই সমস্যাগুলি কতটা গুরুতর? এটি যদি দ্রুততর হতে পারে তবে এটি কি দ্রুততর হওয়া জরুরী?

একক থ্রেড অ্যাসিনক্রোনি

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

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

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


উদাহরণ

ওয়েব সার্ভারের ক্ষেত্রে ভান করে প্রতিটি অনুরোধকে তার নিজস্ব থ্রেড দেওয়া হয়। বলুন প্রতিটি থ্রেডের জন্য 1MB মেমরির প্রয়োজন, এবং ওয়েব সার্ভারে 2 গিগাবাইট র‌্যাম রয়েছে। আর কোনও প্রক্রিয়া করার পর্যাপ্ত মেমরির আগে এই ওয়েব সার্ভারটি যে কোনও সময়ে (প্রায়) 2000 টি অনুরোধের প্রক্রিয়া করতে সক্ষম হবে।

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


মাল্টি-থ্রেড কনকুরিঞ্জি

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

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

তবে সিপিইউ নিবিড় কাজের জন্য মাল্টি-থ্রেড কোড অনেক বেশি পারফরম্যান্ট । কোনও থ্রেডের "ফলন" করার সুযোগ না থাকলে-যেমন একটি নেটওয়ার্ক কল যেমন সাধারণত ব্লক হয়ে যায় - একটি একক থ্রেড মডেলটির কোনও সামঞ্জস্য নেই।

উভয় সহাবস্থান করতে পারেন

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


তলদেশের সরুরেখা

বিবেচনা করার মতো আরও অনেক বিষয় রয়েছে তবে আমি দুটি সম্পর্কে এইভাবে ভাবতে চাই:

  • আপনার প্রোগ্রামটি যদি I / O সীমাবদ্ধ থাকে তবে একক থ্রেড অ্যাসিনক্রোনাই সম্ভবত বেশ ভালভাবে কাজ করবে।
  • যদি আপনার প্রোগ্রামটি সিপিইউ বাউন্ড হয় তবে একটি মাল্টি-থ্রেড সিস্টেম সম্ভবত সেরা হবে।

আপনার বিশেষ ক্ষেত্রে, আপনাকে নির্ধারণ করতে হবে যে কী ধরণের অ্যাসিনক্রোনাস কাজ সমাপ্ত হচ্ছে এবং কতক্ষণ এই কাজগুলি দেখা দেয়।

  • তারা প্রতিটি অনুরোধে ঘটে? যদি তাই হয়, অনুরোধের সংখ্যা বাড়ার সাথে সাথে স্মৃতি সম্ভবত একটি সমস্যা হয়ে উঠবে।
  • এই কাজগুলি আদেশ করা হয়? যদি তা হয় তবে একাধিক থ্রেড ব্যবহার করে আপনাকে সিঙ্ক্রোনাইজেশন বিবেচনা করতে হবে।
  • এই কাজগুলি কি সিপিইউ নিবিড়? যদি তা হয় তবে একটি একক থ্রেড কি বোঝাটি ধরে রাখতে সক্ষম?

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

অন্যান্য বিবেচ্য বিষয়

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

এই দুটি সিস্টেমের মধ্যে যোগাযোগের সাথে জড়িত সমস্যাগুলি সম্পর্কে কীভাবে? এটি কি সমান্তরালভাবে দুটি পৃথক ব্যবস্থা বজায় রাখা জটিল হবে? কীভাবে এরং সিস্টেম জাজানো থেকে কাজগুলি গ্রহণ করবে? এরং কীভাবে এই ফলাফলগুলিকে আবার জ্যাঙ্গোতে যোগাযোগ করবে? পারফরম্যান্স কি যথেষ্ট সমস্যা যে যুক্ত জটিলতা এটি উপযুক্ত?


সর্বশেষ ভাবনা

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

অবশ্যই, সমস্যাটিতে আরও হার্ডওয়্যার নিক্ষেপ করার পরামর্শ সর্বদা রয়েছে। সম্পূর্ণ নতুন সাবসিস্টেমের বিকাশ ও রক্ষণাবেক্ষণ ব্যয়ের চেয়ে নতুন সার্ভার সরবরাহের ব্যয় কি কম?

আমি এই সময়ে অনেক বেশি প্রশ্ন জিজ্ঞাসা করেছি, কিন্তু এটি আমার উদ্দেশ্য ছিল। উত্তর বিশ্লেষণ এবং আরও বিশদ ছাড়াই সহজ হতে পারে না। সমস্যাগুলি বিশ্লেষণ করতে সক্ষম হওয়াগুলি জিজ্ঞাসা করা প্রশ্নগুলি জেনে নেমে আসে, যদিও ... তাই আশা করি আমি এই ফ্রন্টটিতে সহায়তা করেছি।

আমার অন্ত্র অনুভূতি বলে যে অন্য ভাষায় পুনর্লিখন অপ্রয়োজনীয়। জটিলতা এবং ব্যয় সম্ভবত খুব দুর্দান্ত হবে।


সম্পাদন করা

ফলো-আপ সাড়া

আপনার ফলোআপ কিছু আকর্ষণীয় ব্যবহারের কেস উপস্থাপন করে।


1. জ্যাঙ্গো এইচটিটিপি অনুরোধের বাইরে কাজ করছে

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

এই ক্ষেত্রে, আমি দুটি তদন্ত দেখতে পাচ্ছি যা আপনি তদন্ত করতে পারেন:

  1. আপনার ডাটাবেসটি সংযোগ পুলিংয়ের সাথে একসাথে একাধিক প্রশ্ন পরিচালনা করতে সক্ষম কিনা তা নিশ্চিত করুন। (উদাহরণস্বরূপ, ওরাকল, আপনার সেই অনুযায়ী জ্যাঙ্গো কনফিগার করা প্রয়োজন 'OPTIONS': {'threaded':True})) ডাটাবেস স্তর বা জ্যাঙ্গো স্তরে অনুরূপ কনফিগারেশন অপশন থাকতে পারে যা আপনি নিজের ডেটাবেসের জন্য টুইঙ্ক করতে পারেন। আপনি যে ভাষায় আপনার ডাটাবেস প্রশ্নগুলি লিখেছেন তা বিবেচনাধীন, আপনি এলইডি আলোকিত করার আগে আপনাকে এই ডেটা ফিরে আসার জন্য অপেক্ষা করতে হবে। কোয়েরিং কোডটির পারফরম্যান্স যদিও কিছুটা পার্থক্য করতে পারে এবং জ্যাঙ্গো ওআরএম দ্রুত বজ্রপাত হয় না ( তবে , সাধারণত যথেষ্ট দ্রুত)।
  2. সেটআপ / টিয়ারডাউন সময়টি ন্যূনতম করুন। অবিচ্ছিন্নভাবে চলমান প্রক্রিয়া করুন এবং এতে বার্তা প্রেরণ করুন। (আমি ভুল হলে আমাকে সংশোধন করুন, তবে এটিই আপনার মূল প্রশ্নটি ফোকাস করছে)) পাইথন / জাঙ্গোতে এই প্রক্রিয়াটি লেখা আছে বা অন্য কোনও ভাষা / কাঠামো উপরে লেখা হয়েছে কিনা। আমি এত ঘন ঘন ম্যানেজমেন্ট কমান্ড ব্যবহার করার ধারণা পছন্দ করি না। কোডের একটি ছোট টুকরোটি অবিচ্ছিন্নভাবে চালানো কি সম্ভব, যা এনএফসি পাঠকদের বার্তাগুলির কাতারে পাঠানো বার্তা দেয়, যা সেলারি পরে জাজানোতে পড়ে এবং ফরোয়ার্ড করে? একটি ছোট প্রোগ্রামের সেটআপ এবং টিয়ারডাউন, যদিও এটি পাইথনে লেখা আছে (তবে জ্যাঙ্গো নয়!), জ্যাঙ্গো প্রোগ্রাম শুরু করার এবং বন্ধ করার চেয়ে ভাল হওয়া উচিত (এর সমস্ত সাবসিস্টেম সহ)।

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


২. জ্যাঙ্গো সিগন্যালের সাথে "বার্তা পাঠানো"

আপনার দ্বিতীয় ব্যবহারের ক্ষেত্রেটিও মোটামুটি আকর্ষণীয়; আমি এর উত্তর আমার কাছে আছে কিনা তা নিশ্চিত নই। আপনি যদি মডেল উদাহরণগুলি মুছতে থাকেন এবং সেগুলি পরে চালনা করতে চান JSON.dumpsতবে সেগুলি সিরিয়ালাইজ করা এবং তারপরে deserialize করা সম্ভব হতে পারে JSON.loads। পরবর্তীতে অবজেক্ট গ্রাফটি পুরোপুরি পুনরায় তৈরি করা অসম্ভব হয়ে উঠবে (সম্পর্কিত মডেলগুলি অনুসন্ধান করা), কারণ সম্পর্কিত ক্ষেত্রগুলি ডাটাবেস থেকে অলসভাবে লোড করা হয়, এবং সেই লিঙ্কটি আর উপস্থিত থাকবে না।

অন্য বিকল্পটি হ'ল কোনওভাবে মুছে ফেলার জন্য কোনও চিহ্ন চিহ্নিত করা এবং কেবল অনুরোধ / প্রতিক্রিয়া চক্রের শেষে এটি মুছুন (সমস্ত সংকেত পরিবেশন করার পরে)। এটি নির্ভর করার পরিবর্তে এটি প্রয়োগ করতে কাস্টম সংকেতের প্রয়োজন হতে পারে post_delete


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

@ জারোদ, আমি ব্যক্তিগতভাবে এরলংকে জানি না তাই আপনি এই বিষয়ে যা বলছেন তা আমি মেনে নেব। অন্যথায়, আমি উল্লিখিত প্রায় সমস্ত কিছুই প্রাসঙ্গিক। ব্যয়, জটিলতা এবং বর্তমান সরঞ্জামগুলি সঠিকভাবে ব্যবহৃত হচ্ছে কিনা তা।
জোশ স্মিটন


এটি সত্যই আমি পড়তে পছন্দ করি ep +1, ভাল কাজ!
লরেন্ট বোর্গোল্ট-রায়

এছাড়াও আপনার কাছে জ্যাঙ্গো টেমপ্লেট থাকলে সেগুলি এরলিডটলের সাথে ইরং
জ্যাচারি কে

8

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

আমি এটি সম্পর্কে একটি ব্লগ পোস্ট লিখেছিলাম, পাইথন / টুইস্টেড ভিএস এরলং / ওটিপি

TLDR; এরলং জিতেছে।


4

সঙ্গে প্রাকটিক্যাল সমস্যার পাক (যা আমি ভালোবাসি এবং পাঁচ বছর ব্যবহার করেছেন):

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

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

আপনি উদাহরণস্বরূপ ক্লায়েন্টদের ছড়িয়ে দেওয়ার জন্য কিছু ব্যবস্থা নিয়ে জ্যাঙ্গোর একাধিক ঘটনা চালানোর বিষয়টি বিবেচনা করেছেন?


1
পাইথন ডকুমেন্টেশন সাধারণভাবে কিছু পেতে পছন্দ করে: / (এটি যে খারাপ তা নয় , তবে জনপ্রিয় ভাষার কাছে এটি আরও ভাল হওয়ার প্রত্যাশা করবে এমন ভাষার জন্য)।
রুক

3
পাইথন ডকুমেন্টেশন এবং বিশেষত জ্যাঙ্গো ডকুমেন্টেশনটি যে কোনও ভাষার হাতের নিচে নেওয়ার জন্য সেরা কয়েকটি ডক্স হিসাবে খুঁজে পেয়েছি। অনেক তৃতীয় পক্ষের গ্রন্থাগার যদিও কিছু করা পছন্দ করে দেয়।
জোশ স্মিটন

1

আপনি অন্য ভাষায় স্যুইচিংয়ের কথা বিবেচনা করার আগে আমি নিম্নলিখিতটি প্রস্তাব করব।

  1. পৃষ্ঠার ত্রুটিগুলি, প্রসঙ্গের স্যুইচগুলি এবং সিস্টেম কল ওয়েটের মতো সিস্টেম ইভেন্টগুলি রেকর্ডিংয়ের জন্য এলটিটিঙ্গ ব্যবহার করুন ।
  2. রূপান্তর করুন এটি সি লাইব্রেরি ব্যবহার করতে খুব বেশি সময় নিচ্ছে এবং আপনার পছন্দ মতো কোনও ডিজাইনের প্যাটার্ন ব্যবহার করুন (মাল্টি-থ্রেডিং, সিগন্যাল ইভেন্ট ভিত্তিক, অ্যাসিঙ্কটি কল করুন বা ইউনিক্স ট্র্যাডিশনাল select) যা সেখানে / আইয়ের জন্য ভাল good

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

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