একটি বড় সাইটে ব্যাকগ্রাউন্ড টাস্ক পরিবেশন করা


49

আমরা স্ট্যাকওভারফ্লোতে একটি আকর্ষণীয় সমস্যা নিয়ে কাজ করছি।

আমাদের সামান্য "শীঘ্রই করা দরকার" কাজগুলির পুরো গোছা পেয়েছি। একটি উদাহরণ হ'ল "সম্পর্কিত প্রশ্নসমূহ" তালিকাগুলি আপডেট করা। আমরা অতীতে যা করেছি তা হ'ল কিছু ব্যবহারকারীদের পৃষ্ঠার ভারে সেই কাজগুলিকে পিগি-ব্যাক করা।

এটি কখনও আদর্শ ছিল না, তবে এটি সত্যই লক্ষণীয় ছিল না। এখন যখন এসও 1,000,000 প্রশ্ন চিহ্নটি পেরিয়ে গেছে, তখন যারা দুর্ভাগা তারা তা অনুভব করতে শুরু করেছে।

প্রাকৃতিক সমাধান হ'ল এই কাজগুলিকে ব্যাকগ্রাউন্ডে ঠেলে দেওয়া। আমি বিবেচনা করছি এটি করার দুটি বিস্তৃত উপায় আছে।

1. আইআইএসে একটি কাস্টম থ্রেড-পুল / ওয়ার্ক-সারি হিসাবে

মূলত, আমরা কয়েকটি স্পিন আপ করি (নন- থ্রেডপুল , যাতে আইআইএসের সাথে হস্তক্ষেপ না করা যায়) এবং সেগুলিকে এমন কিছু সংকলন সরবরাহ করা হয় যাতে আমরা ফানকসকে সরিয়ে দিই

এখানে বড় প্রো সরলতা। আমাদের কোনও কিছু মার্শালিংয়ের বিষয়ে চিন্তা করার দরকার নেই, বা কোনও বাহ্যিক পরিষেবা চালু এবং প্রতিক্রিয়া রয়েছে কিনা তাও আমাদের নিশ্চিত করতে হবে না।

আমরা আমাদের প্রচলিত কোডটিতেও অ্যাক্সেস পাই।

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

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

আইআইএস প্রসেস থ্রেড-পুলিং / ওয়ার্ক-কাতারে আমি অন্য কোনও আপত্তি মিস করছি?

এখানে সত্যই সম্বোধন করা হয়নি বলে স্ট্যাকওভারফ্লোতে সরানো হয়েছে।

2. একটি পরিষেবা হিসাবে

হয় কিছু তৃতীয় পক্ষের সমাধান, বা একটি কাস্টম এক।

মূলত, আমরা কিছু পরিষেবার প্রসেসের সীমানা জুড়ে একটি কাজ মার্শাল করব এবং এটি সম্পর্কে ভুলে যাব। সম্ভবত আমরা কিছু কোড লিঙ্ক করছি, বা কাঁচা এসকিউএল + একটি সংযোগ স্ট্রিং মধ্যে সীমাবদ্ধ।

প্রো এটি হ'ল এটি করার "সঠিক উপায়"।

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

পরিষেবা পদ্ধতির সাথে অন্য কোনও সুবিধা বা সমস্যা আছে কি?

সংক্ষেপে, কি অনুপযুক্ত এবং দুর্গম সমস্যা রয়েছে যা # 1 অকার্যকর করতে পারে এবং যদি তাই হয় তবে কোনও ভাল তৃতীয় পক্ষের পরিষেবাগুলি আমাদের # 2 এপ্রোচ করা উচিত?


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

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

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

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

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

উত্তর:


17

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

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

  1. আপনি আপনার সেবার উপর একটি ওয়েব ইউআই বিকাশ করতে পারেন (যেহেতু এটি ওয়েব অ্যাপ হিসাবে চলছে)। রানটাইমের সময় কী ঘটছে তা দেখতে এটি অত্যন্ত কার্যকর।
  2. আপনার ওয়েব অ্যাপ্লিকেশনগুলির জন্য আপনার স্থাপনার মডেল আপনার পরিষেবা অ্যাপ্লিকেশনটির জন্য কাজ করবে।
  3. আইআইএস অ্যাপ্লিকেশন ব্যর্থতা পরিচালনা করার জন্য কয়েকটি ঝরঝরে বৈশিষ্ট্য সরবরাহ করে (কোনও উইন্ডোজ পরিষেবাতে কিছুটা ক্ষেত্রে একই)।
  4. ওয়েব বিকাশকারীরা ওয়েব অ্যাপ্লিকেশনগুলি (প্রাকৃতিকভাবে) বিকাশের সাথে খুব পরিচিত, একটি উইন্ডোজ পরিষেবা বিকাশের সময় সর্বাধিক অনুশীলন সম্পর্কে বেশি কিছু জানেন না।
  5. এটি অন্যান্য অ্যাপ্লিকেশনগুলিকে গ্রাস করার জন্য একটি এপিআই প্রকাশের জন্য বিভিন্ন বিকল্প সরবরাহ করে।

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

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

এটি করা মার্শালিং দিকটিতে ফিরে আসে। ডাব্লুসিএফ, এনএসওয়্যারবাস / রাবিট এমকিউ / অ্যাক্টিভ কিউ ইত্যাদি, ভ্যানিলা এমএসএমকিউ, আরএসটিফুল এপিআই (ভাবেন এমভিসি) সমস্ত বিকল্প all যদি আপনি উইন্ডোজ ওয়ার্কফ্লো 4.0.০ ব্যবহার করে থাকেন তবে আপনি কোনও হোস্ট এন্ডপয়েন্টটি প্রকাশ করতে পারেন যা আপনার ওয়েব অ্যাপ্লিকেশন গ্রাস করতে পারে।

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

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


পরিষেবা হিসাবে আলাদা ওয়েবসাইট ব্যবহারের প্রাথমিক ধারণাটি একটি আগ্রহজনক যা আমি বিবেচনা করি নি ...
কেভিন মন্ট্রোজ

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

ওয়েবসাইটটি উইন্ডোজ পরিষেবাতে একটি বার্তা প্রেরণ করে। উইন্ডোজ পরিষেবা এনএসওয়্যারবাস ম্যাসেজ হ্যান্ডলার বার্তাটি তুলে ধরে বার্তাটি প্রেরণ করে। সংক্ষেপে, এটি যে প্রক্রিয়াটি আপনি বর্ণনা করছেন তার সমান।
রোহল্যান্ড

22

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

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

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

নির্লজ্জ পদোন্নতি, তবে এটি আমার প্রকল্প এবং আমি কেবল সংক্ষেপে বিস্তারিতভাবে সমাধান করেছি যে প্রকল্পটি আমি কেন তৈরি করেছি: http://github.com/managedfusion/fluentcassandra/


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

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

10

ক্রোন + ওয়েব অ্যাপ্লিকেশন

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

এখানে কিভাবে এটা কাজ করে:

  1. নির্ধারিত ব্যাকগ্রাউন্ড কার্যগুলি পরিচালনা করতে আপনার ওয়েব অ্যাপ্লিকেশনটিতে একটি নিয়ামক / ক্রিয়া তৈরি করুন। কনভেনশন দ্বারা, আমি সাধারণত আমার কল http://mydomain.com/system/cron
  2. সুরক্ষার জন্য, এই ক্রিয়াকলাপটি কেবলমাত্র স্থানীয় নেটওয়ার্কে প্রমাণীকৃত আইপি ঠিকানাগুলিতে লক করা উচিত।
  3. একটি পৃথক মেশিনে, উইজেটটি ইনস্টল করুন এবং ধাপ 1 থেকে উইজেটটি আনার জন্য একটি নির্ধারিত টাস্ক সেটআপ করুন আপনি টাস্কটি যতবার চান ততবার চালাতে পারবেন (আমি সাধারণত 30 সেকেন্ডের জন্য বেছে নিই)। ওয়াগেটে উপযুক্ত কুকি যুক্তিটি পাস করতে ভুলবেন না যাতে এটি আপনার ওয়েব অ্যাপ্লিকেশনটিতে প্রমাণীকরণ করে।
  4. অপ্রয়োজনীয়তার জন্য, আপনি দ্বিতীয় মেশিনে একটি দ্বিতীয় নির্ধারিত উইজেটও ইনস্টল করতে পারেন।

হুররে! এখন আপনার কাছে এমন একটি রুট রয়েছে যা প্রতি 30 সেকেন্ডে কল হবে। এবং যদি অনুরোধটি প্রক্রিয়া করতে 5 মিনিট সময় নেয়, কেউই পাত্তা দেবে না, কারণ এটি কোনও ব্যবহারকারীর পৃষ্ঠা অনুরোধের অংশ নয়।

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

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

সুবিধা - অসুবিধা

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

দ্রষ্টব্য: যদি কোনও প্রশ্ন বা উদ্বেগ থাকে তবে দয়া করে একটি মন্তব্য যুক্ত করুন । আমি বিস্তৃত খুশি।


7

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

আমার একটি তফসিলযুক্ত কাজও ছিল যা এএসপি.এনইটি অ্যাপ্লিকেশনটিতে একটি URL হিট করে - এটি একটি শালীন সমাধান তবে এটি আপনার পূর্ববর্তী 1 টি ওয়েব সার্ভারের স্কেলটি ছাড়িয়ে যেতে শুরু করে।

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

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

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


6

আমি এটি সঠিক উপায়ে করব এবং একটি উইন্ডোজ পরিষেবা চলমান যা একটি "সারি" পর্যবেক্ষণ করে। আমি "সারি" বলি কারণ প্রোগ্রামিং ডাব্লু / এমএসএমকিউ আপনার চোখের বলগুলিতে হট পোকারদের ধরে রাখার অনুরূপ।

আমি বিলম্বের সরলতার সাথে প্রেমে পড়েছি: জেলগুলিতে জব রয়েছে, এবং অনুরূপ কিছু সহজেই নেট থেকে করা যেতে পারে।

মূলত আপনি যেকোন ধরণের SomethingOperation(একটি Perform()পদ্ধতি রয়েছে এমন কিছু ) যুক্ত করুন। তারপরে কেবল প্রাসঙ্গিক প্যারামিটারগুলি সিরিয়াল করুন, এটিকে একটি অগ্রাধিকার দিন, কোনও ধরণের ডিফল্ট পুনরায় চেষ্টা করুন এবং এটি একটি ডেটাবেজে স্টাফ করুন।

আপনার পরিষেবা কেবল এটি নিরীক্ষণ করবে এবং সারিতে কাজ করবে।


প্রাসঙ্গিক প্যারামিটারগুলি সিরিয়াল করা সত্যই "ন্যায়সঙ্গত" নয়, এটি প্রায় "সমস্ত"। পৃথক প্রক্রিয়া পদ্ধতির সম্পর্কে এটি আমার এক বড় রিজার্ভেশন ...
কেভিন মন্ট্রোস

হ্যাঁ এটি একই সমাধান হিসাবে আমি ব্যবহার করেছি, তবে আমি বাইনারি হিসাবে পুরো বস্তুটি ডাটাবেসে সিরিয়াল করেছিলাম এবং তারপরে কার্যকর করতে তাদের টানতে পারি। আমি ক্যাসান্দ্রাকে আমার অবিরাম সঞ্চয়স্থান হিসাবে এবং টাস্ক শিডিয়ুলার হিসাবে আমার সিআরএন সিডিউলার হিসাবে কমান্ডলাইন অ্যাপ্লিকেশনটি চালিত করব এবং কার্যগুলি সম্পাদন করবে used
নিক বেরার্ডি

আমরা বার্তায় কেবলমাত্র একটি সাধারণ টুকরা অন্তর্ভুক্ত করে এবং পুরো অবজেক্টটি ফেলে দিয়ে শুরু করেছিলাম। এটি এখনও দুর্দান্ত কাজ করেছে। আমি বিচ্ছেদ বিবেচনা করব কারণ এটির অন্যান্য সুবিধাও রয়েছে।
নাথান পামার

@ কেভিন - যদি আমাদের প্রচুর সিরিয়ালাইজেশন ইতিহাসের কিছু লোক থাকে ....
মার্ক গ্র্যাভেল

4

কোনও সার্ভিস বাস / বার্তা সারি / পরিষেবা পদ্ধতির সাথে আমরা বেশ খুশি হয়েছি। মূল স্থাপত্যটি এটি।

ওয়েবসাইট কাতারে বার্তা প্রেরণ করে

bus.Send(new ProjectApproved()); // returns immediately

উইন্ডোজ পরিষেবা নিজের সময়ে বার্তা গ্রহণ করে এবং প্রক্রিয়া করে

public class DoesSomethingAwesome : ConsumerOf<ProjectApproved>
{
   public void Consume(ProjectApproved Message)
   {
      // Do something "offline"
   }
}

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

আপনি যদি বার্তার মধ্যে আপনার সমস্ত ডেটা সংরক্ষণ করতে না পারেন তবে আপনি সর্বদা এটি সঞ্চয় করতে পারেন এবং পরে এটি পুনরুদ্ধার করতে পারেন। : আমি যেমন একটি নথি স্টোরেজ প্রক্রিয়া ব্যবহার করার সুপারিশ RavenDB বা MongoDB যেখানে এটি খুব সোজা এগিয়ে এর পরিবর্তন ছাড়া আপনার ক্লাস সঞ্চয় করতে।

ওয়েবসাইট কাতারে বার্তা প্রেরণ করে

// Save your object
store.Save(completeProject);

// Send a message indicating its ready to be processed
bus.Send(new ProjectApproved() { ProjectId = completeProject.Id });

উইন্ডোজ পরিষেবা নিজের সময়ে বার্তা গ্রহণ করে এবং প্রক্রিয়া করে

public class DoesSomethingAwesome : ConsumerOf<ProjectApproved>
{
   public void Consume(ProjectApproved Message)
   {
      // Retrieve your object back
      var completeProject = store.Get(Message.ProjectId);
   }
}

জিনিসগুলি সহজ করতে আমরা ব্যবহার করি: রাইনো ইএসবি এবং টপসেল্ফ । কনফিগারেশনটি অত্যন্ত সহজ এবং বিদ্যমান অ্যাপ্লিকেশনটির জন্য এটি স্থাপন করা খুব অল্প সময়ের জন্য প্রমাণিত হয়েছে।


যাই হোক, CQRS সঙ্গে একটি সেবা বাস ব্যবহার সবসময় আপনার কর্মক্ষমতা প্রসারণ উন্নত করতে একটি ভাল উপায়
thinkbeforecoding

3

আমি আগ্রহী যে কেন দুটিয়ের সংমিশ্রণ একটি কার্যকর বিকল্প নয় able এই মুহুর্তে আপনি পৃষ্ঠা ভিউগুলিতে কিছুটা ট্রিগার করছেন, পৃষ্ঠাটি আসার জন্য 10 সেকেন্ড অপেক্ষা করে কিছু দুর্ভাগ্য সপ আটকে আছে। কমপক্ষে এটি আপনার বর্তমান পদ্ধতি সম্পর্কে আমার বোঝার।

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

আমি দেখতে পাই না যে নিয়মিত বিরতিতে ব্যাকগ্রাউন্ড কাজ চালানো কোনও দর্শনার্থীর নকল করতে পারে না। এখন আমি উইন্ডোজ প্রোগ্রামার নই, তবে লিনাক্স বিশ্বে আমি একটি ক্রোন জব স্থাপন করতাম যা নিয়মিত বিরতিতে চলতে থাকে এবং এতে কোডের 2 লাইন থাকে।

#!/bin/bash
wget -O /dev/null http://stackoverflow.com/specially_crafted_url

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

হালনাগাদ

আমি মনে করি আপনি নিজেরাই ওয়েব সার্ভারগুলিতে চাকরী দৌড়াতে লোড ব্যালেন্সিং ইস্যুটি পেতে পারেন। জব রানার চাকরীর সারি থেকে একটি ইউআরএল টেনে নিয়ে এনে চালায়:

wget -O /dev/null http://localhost/specially_crafted_url

কাজের প্রকৃতি / বার্তাগুলির সারিগুলির কারণে, চাকরিগুলি দৌড়বিদদের মধ্যে সমানভাবে বিতরণ করা হবে যার অর্থ বিশেষত_কৃত_আরলটি আপনার ওয়েব সার্ভারের মধ্যে বিতরণ করা হবে।


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

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

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

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

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

2

আমি মনে করি খাঁটি পরিষেবা পদ্ধতির সাথে মতামতটি হল যে আপনার পরিষেবাটিতে কোড ছড়িয়ে ছিটিয়ে আছে এবং মূল অ্যাপ্লিকেশন থেকে দূরে।

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

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

এমনকি সহজ, কেবল একটি কনসোল অ্যাপ্লিকেশন কল করুন এবং এটিকে "পরিষেবা" রুপান্তর করতে টাস্ক শিডিয়ুলার বা ভিজ্যুয়াল ক্রোন ব্যবহার করুন।


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

1

আমি টপশেল্ফ পছন্দ করেছি। সরলতা বজায় রাখে, তবুও এটি একটি উইন্ডোজ পরিষেবা হিসাবে চলমান যথাযথ উপায়ে করুন। মূলত একটি কনসোল অ্যাপ তৈরি করুন, প্রায় 15-20 লাইন কোড যুক্ত করুন, তারপরে এটি কোনও পরিষেবা হিসাবে ইনস্টল হয়।

http://code.google.com/p/topshelf/


1

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


1

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

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

আমার মতে, আইআইএস-এর একটি সমাধান হ'ল পিগব্যাকিং থেকে কাজটিকে এলোমেলো পৃষ্ঠাগুলিতে দেখানো থেকে "পরবর্তী পদক্ষেপ"।


1

রেসকিউ সুন্দর। বা Kthxbye এমনকি যদি আপনার ফলাফলটি শেষ হয়ে যাওয়ার পরে অবহিত করা দরকার।

উভয়ই রেডিস / রুবি ভিত্তিক

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

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

Resque

রূপে


আমি অবশ্যই Kthxbye চেষ্টা করতে পারি যদি কেবলমাত্র মহান নামের কারণে!
নাথান পামার

বেশ দুর্দান্ত। এরপরে ওরিয়াল হবে? গ্রন্থাগার। সম্ভবত কোনও প্রকারের পরিসংখ্যান পর্যবেক্ষণের জন্য ...;)
লুকাশ

0

আমি একটি এমএসএমকিউ ক্যু শুনেই একটি ডব্লিউএএস হোস্টেড ডাব্লুসিএফ পরিষেবা ব্যবহার করব use

প্রো এর

  • ওয়েব অ্যাপ্লিকেশন থেকে একমুখী বার্তাগুলি ফায়ার করুন এবং ভুলে যান

  • এমএসএমকিউ / ডাব্লুসিএফ থ্রোটল্টিং এবং আবার চেষ্টা করুন

  • গ্যারান্টিযুক্ত ডেলিভারি; ডি

  • ডেড লেটার ম্যানেজমেন্ট

  • বিতরণ প্রক্রিয়াজাতকরণ

  • ডাব্লুএস / এমএসএমকিউ অ্যাক্টিভেশন

কন এর

  • এমএসএমকিউ (এটি এখনও মারা যায় নি ...)

ডাব্লুসিএফের এমএসএমকিউ বৈশিষ্ট্যগুলি এমএসএমকিউ ব্যবহার করে খুব সুন্দর করে তোলে। হ্যাঁ আপনি কনফিগারেশনে রক্তপাত করবেন তবে ত্যাগগুলি ছাড়িয়ে যাবে।


0

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


0

আপনি আরএক্স এবং নীচের মতো কিছু ব্যবহার করে একটি পটভূমি থ্রেড (বা অনেকগুলি পটভূমি থ্রেড) এড়িয়ে যেতে পারেন:

var scheduler = new EventLoopScheduler( SchedulerThreadName );
_workToDo = new Subject<Action>();
var queueSubscription = _workToDo.ObserveOn( scheduler ).Subscribe( work => work() );
_cleanup = new CompositeDisposable( queueSubscription, scheduler );

ব্যবহার করা:

var work = () => { ... };
_workToDo.OnNext( work ); // Can also put on error / on complete in here

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

ইভেন্টলুপসচিডুলার (যা একটি একক থ্রেড চালায়) ব্যবহারের জায়গায় আপনি কাস্টম শিডিয়ুলার লিখে থ্রেড পুল ইত্যাদির আকার নিয়ন্ত্রণ করতে পারেন।


0

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

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

এবং একই সিস্টেমটি ইউনিক্সে, সামান্য পরিবর্তনগুলি সহ কাজ করে।


0

আমার নিজের কাছে আপনার নিজের কাছে উত্তর নেই, তবে সমস্যাটি একটি ঘণ্টা বাজায় - আমি মনে করি কিছু এলোমেলো ছেলেরা একবার পডকাস্টে এটি নিয়ে আলোচনা করেছিল

স্পলস্কি: আমি আপনার ব্লগে জিজ্ঞাসা করা একটি প্রশ্নের মধ্যে লক্ষ্য করেছি যে সাধারণভাবে রক্ষণাবেক্ষণের পুনরাবৃত্তির কাজগুলি কীভাবে পরিচালনা করবেন?

আতউড: হ্যাঁ

স্পলস্কি: এটি কি নিখুঁত বৈশিষ্ট্য? প্রতিটি ওয়েবসাইটের কিছু কাজ রয়েছে যা আপনি ওয়েব পৃষ্ঠা লোড হওয়ার সময় কার্যকর করতে চান না, তবে আপনি কিছু সাজানোর পুনরাবৃত্তি দিয়ে সম্পাদন করতে চান।

আটউড: হ্যাঁ, ব্যাকগ্রাউন্ডে কাজগুলি সাজানো।

স্পলস্কি: হ্যাঁ, তাহলে আপনি কী বুঝতে পেরেছিলেন?

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


1
হ্যাঁ, এটি স্ট্যাকওভারফ্লো হয়ে যাওয়ার চেয়ে অনেক ছোট সাইটের জন্য কাজ করে। দুর্ভাগ্যক্রমে (বা সৌভাগ্যক্রমে, আপনি এটি কীভাবে দেখেন তার উপর নির্ভর করে) স্কেল এখানে একটি বড় সমস্যা।
কেভিন মন্ট্রোজ

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

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

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

0

কার্য ক্যু জাভা এপিআই ওভারভিউ view


অ্যাপ ইঞ্জিনের পটভূমি প্রক্রিয়াকরণে টাস্ক কনসেপ্টস , একটি টাস্কটি কাজের একটি ছোট ইউনিটের সম্পূর্ণ বিবরণ। এই বিবরণ দুটি অংশ নিয়ে গঠিত:

  • একটি ডেটা পেলোড যা কার্যকে পরামিতি দেয়।
  • কোড যা কার্য কার্যকর করে।

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


আমি GAE টাস্কের সারিটি এপিআই ব্যবহার করার পরামর্শ দিচ্ছি না, তবে তাদের মডেলটি অনুসরণ করছি। তারা এটির জন্য কিছুক্ষণ চিন্তা করেছিল এবং এর একটি বাস্তবায়ন লিখেছিল।
antony.trupe

0

দুজনেই কর

প্রশ্নপথে একটি alচ্ছিক পরামিতি যুক্ত করুন যা ব্যবহারকারীদের অনুরোধগুলিতে আপনি বর্তমানে পিগব্যাক করছেন সেই কাজটি করে:

একটি বড় সাইটে ব্যাকগ্রাউন্ড টাস্ক পরিবেশন করা

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

বর্তমানে কোন পৃষ্ঠাগুলি দেখা হয়েছে তা নির্ধারণ করতে এই তথ্য ব্যবহার করুন।

ওয়েবক্লিয়েন্ট অবজেক্টের সাথে লোকালহোস্টে ইউআরএলের "এক্সট্রাস্টাফ" সংস্করণটি কল করতে পার্সড লগ থেকে পৃষ্ঠা url ব্যবহার করুন।

প্রতিটি লগ পিরিয়ড শেষে ফাইলগুলিতে স্যুইচ করতে বা প্রতিটি লগ পিরিয়ড প্রক্রিয়া পুনরায় চালু করতে কিছু কোড যুক্ত করুন।

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