অনুভূমিকভাবে স্কেলযোগ্য সফ্টওয়্যার লোড ব্যালান্সারদের এসএসএলকে ভারসাম্যহীন করার কোনও উদাহরণ কেন নেই?


9

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

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

সময়ের সীমাবদ্ধতার কারণে, আমি ভারসাম্য বর্ধিত http এবং এসএসএল ট্র্যাফিক লোড করার পক্ষে সবচেয়ে সহজতম কাজটি করতে চাই।

স্টিকি লোড ব্যালান্সিং অ্যালগরিদমে 2 টি বিকল্প রয়েছে বলে মনে হচ্ছে:

  • আইপি ভিত্তিক
  • কুকি ভিত্তিক

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

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

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

আমি দেখেছি বেশিরভাগ সুস্পষ্ট উদাহরণগুলির মধ্যে ব্রাউজার ক্লায়েন্ট এবং লোড ব্যালান্সারের মধ্যে এসএসএল ডিকোডার (সাধারণত হার্ডওয়্যার, অ্যাপাচি_মড_এসএসএল বা এনজিনেক্স) বসে থাকে। উদাহরণগুলিতে সাধারণত এ জাতীয় কিছু রয়েছে বলে মনে হয় ( http://haproxy.1wt.eu/download/1.3/doc/architecture.txt থেকে পরিবর্তিত ):

      192.168.1.1 192.168.1.11-192.168.1.14
 ------- + + ----------- + + ----- + + ----- + + ----- + +
        | | | | |       
     + - + - + + - + + + + + + + + + + + + + + + +    
     | এলবি 1 | | ক | | খ | | সি | | ডি |    
     + ----- + + --- + + --- + + --- + + --- + +    
     অ্যাপাচি 4 সস্তা ওয়েব সার্ভার
     mod_ssl
     HAProxy 

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

আমি হ্যাপ্রোক্সি দেখেছি, এবং এটিতে একটি 'মোড টিসিপি' বিকল্প রয়েছে বলে মনে হচ্ছে এটি এমন কিছু করার অনুমতি দেবে যা আপনাকে একাধিক এসএসএল ডিকোডার রাখার অনুমতি দেয়:

              HAProxy
                 |
            -------------
            | |
এসএসএল-ডিকোডার -১ এসএসএল-ডিকোডার 2
            | |
        -------------------
        | | |  
      ওয়েব 1 ওয়েব 2 ওয়েব 3

তবে, এই জাতীয় সেটআপে, আপনি ক্লায়েন্ট আইপি হারাবেন বলে মনে হচ্ছে কারণ হ্যাপ্রোক্সি এসএসএল ডিকোড করছে না: https://cloud-support.engineyard.com/discussion/problems/335-haproxy-not-passing-x- ফরওয়ার্ড -for

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

প্রশ্নাবলী:

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

ধরে নিলাম যে আমি যা বলেছি সবই সত্য, এগুলি আমার বিকল্প হিসাবে উপস্থিত হবে:

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

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

উত্তর:


8

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


8

ওয়ম্বেলে ভাগ করা সেশন স্টোরটি সম্পর্কে চারপাশে জিনিসগুলি আরও সহজ করে তোলা ঠিক। তার উত্তর ছাড়াও, আমি প্রশ্নের লোড ব্যালেন্সিং অংশগুলিতে কিছুটা প্রসারিত করতে পারি:

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

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

ধরে নিলাম যে আমি যা বলেছি সবই সত্য, এগুলি আমার বিকল্প হিসাবে উপস্থিত হবে:

আপনার যদি প্রয়োজন হয় তবে অনুভূমিকভাবে এসএসএল ডিক্রিপশনকে স্কেল করার বিকল্প রয়েছে।

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

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

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

Internet --> DNS round robin to multiple SSL accelerators --> plain HTTP to a single HTTP load balancer --> plain HTTP to multiple application servers

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


ডিএনএস রাউন্ড রবিনের জন্য +1। উদাহরণস্বরূপ এটি এডাব্লুএস ইলাস্টিক লোড ব্যালেন্সিং ব্যবহার করে।
অ্যালেক্স

3

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


1

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

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

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


1

কিছু এলোমেলো চিন্তা;)

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

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

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

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

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

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

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


0

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

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