বিশাল ডিরেক্টরিটির দ্রুত আরএসআইএনসি যা পরিবর্তন করা হয়নি


13

ব্যাকআপ সার্ভারগুলিতে আমরা rsync ব্যবহার করি।

দুর্ভাগ্যক্রমে কিছু সার্ভারের নেটওয়ার্কটি ধীর।

আরএসসিএনসি সনাক্ত করতে পাঁচ মিনিট সময় লাগে, বিশাল ডিরেক্টরিতে কিছুই পরিবর্তন হয়নি। এই বিশাল ডিরেক্টরি গাছগুলিতে প্রচুর ছোট ফাইল থাকে (প্রায় ৮০ কে ফাইল)।

আমি অনুমান করি যে আরএসসিএনএইচ ক্লায়েন্টগুলি 80k ফাইলের প্রত্যেকটির জন্য ডেটা প্রেরণ করে।

নেটওয়ার্কটি ধীর গতির হওয়ায় আমি প্রতিটি ফাইল সম্পর্কে 80k বার তথ্য প্রেরণ করা এড়াতে চাই।

একটি উপ ডিরেক্টরি গাছের হ্যাশ-যোগ করতে আরএসসিএনকে বলার কোনও উপায় আছে কি?

এইভাবে আরএসসিএনএইচ ক্লায়েন্ট একটি বিশাল ডিরেক্টরি গাছের জন্য কয়েক বাইট পাঠাত send

হালনাগাদ

এখন অবধি আমার কৌশলটি ব্যবহার করা rsync। তবে এখানে যদি অন্য কোনও সরঞ্জাম আরও ভাল ফিট হয় তবে আমি স্যুইচ করতে সক্ষম। উভয়ই (সার্ভার এবং ক্লায়েন্ট) আমার নিয়ন্ত্রণে।

Update2

একটি ডিরেক্টরি ট্রিতে 80k ফাইল রয়েছে । প্রতিটি একক ডিরেক্টরিতে 2k এর বেশি ফাইল বা উপ-ডিরেক্টরি থাকে না

Update3

নেটওয়ার্কের মন্থরতার বিষয়ে বিশদ:

time ssh einswp 'cd attachments/200 && ls -lLR' >/tmp/list
real    0m2.645s

Tmp / list ফাইলের আকার: 2MByte

time scp einswp:/tmp/list tmp/
real    0m2.821s

উপসংহার: scp এর একই গতি রয়েছে (অবাক হওয়ার কিছু নেই)

time scp einswp:tmp/100MB tmp/
real    1m24.049s

গতি: 1.2 এমবি / এস


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

উত্তর:


36

কিছু সম্পর্কযুক্ত পয়েন্ট:

80 কে অনেকগুলি ফাইল।

এক ডিরেক্টরিতে ৮০,০০০ ফাইল? কোনও অপারেটিং সিস্টেম বা অ্যাপ্লিকেশন ডিফল্টরূপে পরিস্থিতি খুব ভালভাবে পরিচালনা করে না। আপনি কেবল আরএসসিএনসি-র সাথে এই সমস্যাটি লক্ষ্য করবেন।

আপনার আরএসসিএন সংস্করণ পরীক্ষা করুন

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

এমনকি পুরানো আরএসসিএনসি বৃহত্তর ডিরেক্টরিগুলি উচ্চ বিলম্বিত লিঙ্কগুলির চেয়ে বেশ ভালভাবে পরিচালনা করে ... তবে ৮০ কে ফাইল বড় নয় ... এটি বিশাল!

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

নিশ্চিত করুন - চেকসাম ব্যবহার হচ্ছে না

--checksum(বা -c) প্রতিটি ফাইলের প্রতিটি ব্লক পড়া প্রয়োজন। আপনি সম্ভবত পরিবর্তনের সময়গুলি পড়ার ডিফল্ট আচরণের সাথে পেতে পারেন (ইনোডে সঞ্চিত)।

কাজটি ছোট ছোট ব্যাচে বিভক্ত করুন।

জিগ্যাসেন্সির মতো কিছু প্রকল্প রয়েছে যা "ডিরেক্টরি ট্রি পুনর্বার জন্য পার্ল ব্যবহার করে কাজের চাপ কেটে ফেলবে, আরএসসিএনসি দিয়ে স্থানান্তর করতে ফাইলগুলির ছোট ছোট তালিকা তৈরি করবে"।

অতিরিক্ত ডিরেক্টরি স্ক্যানটি প্রচুর পরিমাণে ওভারহেড হতে চলেছে, তবে এটি সম্ভবত নেট জয় হবে।

ওএস ডিফল্ট এই পরিস্থিতির জন্য তৈরি হয় না।

আপনি যদি সমস্ত ডিফল্ট সাথে লিনাক্স / ফ্রিবিএসডি / ইত্যাদি ব্যবহার করে থাকেন তবে আপনার সমস্ত অ্যাপ্লিকেশনগুলির জন্য পারফরম্যান্স ভয়ানক হবে। ডিফল্টগুলি ছোট ডিরেক্টরিগুলি ধরে নিয়ে যায় তাই বেশি আকারের ক্যাশে র‌্যাম নষ্ট না করে।

বড় ডিরেক্টরিগুলি আরও ভালভাবে পরিচালনা করতে আপনার ফাইল সিস্টেমটি টিউন করুন: বড় ফোল্ডারের মাপগুলি আইওর কার্যকারিতাটি কমিয়ে দেয়?

"নামি ক্যাশে" দেখুন

বিএসডি-এর মতো অপারেটিং সিস্টেমে একটি ক্যাশে রয়েছে যা আইনডের নাম সন্ধান করতে ত্বরান্বিত করে ("নামি" ক্যাশে ") each প্রতিটি ডিরেক্টরিতে একটি নামি ক্যাশে রয়েছে it এটি যদি খুব ছোট হয় তবে এটি অপটিমাইজেশনের চেয়ে আরও একটি বাধা। যেহেতু আরএসইএনসি প্রতিটি ফাইলে একটি লিস্ট্যাট () করছে, তাই 80k ফাইলের প্রতিটিটির জন্য ইনোড অ্যাক্সেস করা হচ্ছে That এটি আপনার ক্যাশে ফুঁকছে। আপনার সিস্টেমে ফাইল ডিরেক্টরি সম্পাদনা টিউন করবেন কীভাবে গবেষণা করুন।

একটি ভিন্ন ফাইল সিস্টেম বিবেচনা করুন

এক্সএফএস বৃহত্তর ডিরেক্টরি পরিচালনা করার জন্য ডিজাইন করা হয়েছিল। একক ডিরেক্টরিতে ফাইল সিস্টেম প্রচুর পরিমাণে ফাইল দেখুন

5 মিনিটই আপনি করতে পারেন সেরা।

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

হতে পারে আপনার প্রত্যাশা খুব বেশি। কোনও পরিবর্তিত ফাইল ছাড়াই আরএসসিএনসি করতে কয়টি ডিস্ক ব্লক পড়তে হবে তা বিবেচনা করুন: প্রতিটি সার্ভারকে ডিরেক্টরিটি পড়তে হবে এবং প্রতি ফাইলটিতে একটি ইনোড পড়তে হবে। আসুন ধরে নেওয়া যাক কিছুই ক্যাশেড নেই কারণ, ভাল, 80 কে ফাইল সম্ভবত আপনার ক্যাশে ফুটিয়ে তুলেছে। ধরা যাক যে গণিতটি সহজ রাখতে 80k ব্লক blocks এটি প্রায় 40M ডেটা, যা কয়েক সেকেন্ডে পাঠযোগ্য হবে। তবে প্রতিটি ব্লকের মধ্যে যদি ডিস্কের সন্ধানের প্রয়োজন হয় তবে এটি আরও বেশি সময় নিতে পারে।

সুতরাং আপনার প্রায় 80,000 ডিস্ক ব্লক পড়তে হবে। আপনার হার্ড ড্রাইভ এটি কত দ্রুত করতে পারে? এটি এলোমেলো I / O, লম্বা লিনিয়ার পড়া নয়, বিবেচনা করে 5 মিনিট বেশ চমৎকার হতে পারে। এটি 1 / (80000/600), বা প্রতি 7.5 মিমিতে একটি ডিস্ক পড়ে। এটি কি আপনার হার্ড ড্রাইভের জন্য দ্রুত বা ধীর? এটা মডেল উপর নির্ভর করে।

অনুরূপ কিছু বিরুদ্ধে মাপদণ্ড

এটি সম্পর্কে ভাবার আর একটি উপায়। যদি কোনও ফাইল পরিবর্তিত ls -Llrহয় না, একই পরিমাণে ডিস্কের ক্রিয়াকলাপ করে তবে কোনও ফাইল ডেটা কখনই পড়ে না (কেবলমাত্র মেটাডেটা)। ls -Llrদৌড়াতে সময় লাগে আপনার উপরের সীমা।

  • আরএসআইএনসি (কোনও ফাইল পরিবর্তিত নয়) এর চেয়ে উল্লেখযোগ্যভাবে ধীর ls -Llr? তারপরে আপনি rsync এর জন্য যে বিকল্পগুলি ব্যবহার করছেন তা উন্নত করা যেতে পারে। সম্ভবত -cসক্ষম বা কিছু অন্য পতাকা যা কেবল ডিরেক্টরি এবং মেটাডেটা (ইনোড ডেটা) এর চেয়ে বেশি পড়বে।

  • আরএসআইএনসি (কোনও ফাইল পরিবর্তন না করে) প্রায় তত দ্রুত ls -Llr? তারপরে আপনি যতটা পারেন তত ভাল আরএসএনসি টিউন করেছেন। আপনাকে ওএস টিউন করতে হবে, র‌্যাম যুক্ত করতে হবে, দ্রুত ড্রাইভ পেতে হবে, ফাইল সিস্টেম পরিবর্তন করতে হবে ইত্যাদি

আপনার দেবগণের সাথে কথা বলুন

80k ফাইলগুলি কেবল খারাপ ডিজাইন। খুব কম ফাইল সিস্টেম এবং সিস্টেম সরঞ্জামগুলি এ জাতীয় বৃহত ডিরেক্টরিগুলি খুব ভালভাবে পরিচালনা করে। ফাইলের নামগুলি যদি abcdefg.txt হয় তবে এটিকে abdc / abcdefg.txt এ সংরক্ষণ করুন (পুনরাবৃত্তিটি দ্রষ্টব্য)। এটি ডিরেক্টরিগুলি ছোটগুলিতে বিভক্ত করে, তবে কোডে বিশাল পরিবর্তন প্রয়োজন হয় না।

এছাড়াও .... একটি ডাটাবেস ব্যবহার বিবেচনা করুন। আপনার যদি কোনও ডিরেক্টরিতে 80k ফাইল থাকে তবে সম্ভবত আপনার বিকাশকারীরা সত্যিকার অর্থে যা চান তা একটি ডাটাবেস is মারিয়ানাডিবি বা মাইএসকিউএল বা পোস্টগ্রিসকিউএল প্রচুর পরিমাণে ডেটা সঞ্চয় করার জন্য একটি আরও ভাল বিকল্প হবে।

আরে, 5 মিনিট কি সমস্যা?

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

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

আপডেট: কিছু আলোচনার পরে আমরা নির্ধারণ করেছি যে বাধাটি নেটওয়ার্ক। আমি ছাড়ার আগে আমি 2 টি জিনিস সুপারিশ করতে যাচ্ছি :-)।

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

80 কে অনেকগুলি ফাইল: একটি ডিরেক্টরি ট্রিতে 80k ফাইল রয়েছে । প্রতিটি একক ডিরেক্টরিতে 2k এর বেশি ফাইল / উপ-ডিরেক্টরি থাকে না।
গেটলি

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

ডিরেক্টরি প্রতি 2k ফাইল অনেক ভাল। আপডেটের জন্য আপনাকে ধন্যবাদ. নেটওয়ার্কটি ধীর ছিল বলে আপনি উল্লেখ করেননি। এটি কি কম ব্যান্ডউইথ, উচ্চ বিলম্বিত বা উভয়ই? আরএসসিএনসি সাধারণত উচ্চ বিলম্বিত লিঙ্কগুলিতে ভাল সম্পাদন করে (এটি মার্কিন যুক্তরাষ্ট্রে কম্পিউটারের সাথে কথা বলার সময় অস্ট্রেলিয়া থেকে তাঁর পিএইচডি নিয়ে কাজ করে কেউ তৈরি করেছিলেন)। ফলাফলটি প্রেরণ করতে কত সময় লাগে তা ssh এবং সময়ের মধ্যে "ls -lLR" করার চেষ্টা করুন। "টাইম এসএসএস রিমোটহোস্ট 'সিডি / ডেস্ট &&Ls -lLR'> / টিএমপি / তালিকা"। স্থানীয় হোস্টে / tmp / তালিকা তৈরি হয়েছে তা নিশ্চিত করুন।
টমঅনটাইম

হ্যাঁ নেটওয়ার্ক ধীর। এটি একটি কৃপণ।
গেটলি

কত ধীর? যদি আপনি একটি 100 এম ফাইল অনুলিপি করতে "scp" ব্যবহার করেন তবে এটি কতক্ষণ সময় নেয়? এছাড়াও, "টাইম এসএস রিমোটহস্ট 'সিডি / ডেস্ট && ls -lLR'> / টিএমপি / তালিকা" এর আউটপুট কী?
টমঅনটাইম

2

না, আরএসসিএনসি দিয়ে এটি সম্ভব নয় এবং এটি অন্য কোনও ক্ষেত্রে যথেষ্ট অক্ষম হবে:

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


1
AFAIK আরএসএনসিএমটাইম এবং আকার পরীক্ষা করে। উভয় মিল থাকলে, ফাইলটি আবার স্থানান্তরিত হবে না (কমপক্ষে ডিফল্ট সেটিংসে)। টিপলসের হ্যাশ (ফাইলের নাম, আকার, এমটাইম) প্রেরণ করা যথেষ্ট। সামগ্রীটি চেকসাম করার দরকার নেই।
গেটলি

হ্যাঁ, আপনি সঠিক, তবে যাইহোক, এটি rsyncকরবেন না।
সোভেন

2

প্রচুর সংখ্যক ফাইলের সিঙ্ক্রোনাইজেশনের জন্য (যেখানে সামান্য পরিবর্তন হয়েছে), noatimeউত্স এবং গন্তব্য পার্টিশনে সেট করাও মূল্যবান । এটি প্রতিটি অপরিবর্তিত ফাইলের জন্য ডিস্কে লেখার অ্যাক্সেসের সময় সাশ্রয় করে।


হ্যাঁ, নোয়াটাইম বিকল্পটি বোঝায়। আমরা বেশ কয়েক বছর ধরে এটি ব্যবহার করি। আমার ধারণা, আরএসসিএনসি এর বিকল্প দরকার।
guettli

2

আপনি lsyncd ব্যবহার করে দেখতে পারেন, যা কেবল ফাইল সিস্টেমের মধ্যে পরিবর্তনগুলি সনাক্ত করা হলে এবং কেবল পরিবর্তিত সাব-ডাইরেক্টরিগুলিতেই সিএসএনসিডি হবে। আমি এটি একটি শালীন সার্ভারে প্রায় দুই মিলিয়ন ফাইল সহ ডিরেক্টরিতে ব্যবহার করছি been


1

তালিকা / চেকসাম প্রক্রিয়াটি গতি বাড়ানোর জন্য সার্ভারের শেষে ডিমন মোডে rsync ব্যবহার করুন:

নোট করুন এটি এনক্রিপ্ট করা হয়নি, তবে তালিকার পারফরম্যান্সের উন্নতি হারানো ছাড়াই শিরোনামে সক্ষম হতে পারে।

এছাড়াও ssh এর চেয়ে rsync কমপ্রেশন করার কারণে পারফরম্যান্সটি উন্নত করা উচিত।

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