লোকেরা ডিবিএল-এর পরিবর্তে আরএসপি এপিআই করে কেন?


32

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

আমার প্রশ্ন ... এটি কেন হয়?

এটি যদি তৃতীয় পক্ষের কাছে প্রকাশ করা হত তবে আমি বুঝতে পারি। সম্পূর্ণ ডিবি-এর চেয়ে সীমাবদ্ধ REST এপিআই প্রকাশ করা ভাল। তবে এই দু'টি প্রতিষ্ঠানেই এমনটি হয়নি।

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

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


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

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

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

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

1
@gbjbaanb: আমার বক্তব্যটি হ'ল ওয়েব সার্ভারটি বাকি সার্ভারের মাধ্যমে ডেটা অ্যাক্সেস করতে পারে, সুতরাং যদি ওয়েবসারভারটি হ্যাক হয়ে যায় তবে আক্রমণকারীও বাকি সার্ভারটি হ্যাক না করে বিশ্রামের মাধ্যমে ডেটা অ্যাক্সেস করতে পারে।
জ্যাকবিবি

উত্তর:


28

যদি আপনি কোনও ক্লায়েন্টকে সরাসরি ডাটাবেস অ্যাক্সেস করার অনুমতি দেন - যা তারা করবে এমনকি একটি ডাটাবেস বিমূর্ত স্তর সহ, তারপর:

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

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


24

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

যে কারণে আপনি পরস্পরবিরোধী উত্তর পাচ্ছেন তা হ'ল আপনার আর্কিটেকচারে 'ক্লায়েন্ট' কী তা নিয়ে বিভ্রান্তি।

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

তবে কিছু অন্যান্য আর্কিটেকচার রয়েছে যেখানে একটি REST এপিআই বোঝায়:

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

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

  • আপনার যদি জাভাস্ক্রিপ্ট কোড থাকে যা সরাসরি সার্ভার থেকে ডেটা আনে, তবে আপনার কোনও ক্ষেত্রে REST এপিআই এর মতো কিছু দরকার।


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

@ স্যাটিচ: আপনি যা জিজ্ঞাসা করছেন তা ঠিক বুঝতে পারছি না, আপনি আরও নির্দিষ্ট করে বলতে পারেন? আপনি কি একটি বিশ্রাম স্তর সহ বা ছাড়াই একক পয়েন্ট অফ ব্যর্থতা সম্পর্কে জিজ্ঞাসা করছেন?
জ্যাকবিবি

যদি আপনার একাধিক অ্যাপ এর সাথে যোগাযোগ করে থাকে তবে অতিরিক্ত স্তরটির একটি ব্যবহার থাকতে পারে
ইওয়ান

@ ইভান: হ্যাঁ, আমি প্রথম বুলেট পয়েন্টে এটিই বলেছি।
জ্যাকবিবি

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

12

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

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

প্ল্যাটফর্মের স্বাধীনতা এবং রক্ষণাবেক্ষণ

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

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

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

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

পারফরম্যান্স এবং স্কেলাবিলিটি

কিছু লোক বিশ্বাস করতে পারেন যে ওয়েব সার্ভিসের মাধ্যমে প্রথমে প্রবেশের পরিবর্তে সরাসরি ডাটাবেসের সাথে কথা বলা দ্রুত হয়। আপনার যদি একটি মাত্র অ্যাপ্লিকেশন থাকে তবে তা অবশ্যই সত্য। তবে বৃহত্তর সিস্টেমে আমি সংবেদন সহ একমত নই। অবশেষে, কিছু স্তরে, এটি ডাটাবেসের সামনে কিছু ধরণের ক্যাশে রাখা খুব উপকারী হতে চলেছে। হতে পারে আপনি হাইবারনেট ব্যবহার করছেন, এবং এল 2 ক্যাশে হিসাবে ইনফিনিস্প্যান গ্রিডটি ইনস্টল করতে চান। আপনার অ্যাপ্লিকেশনগুলি থেকে পৃথকভাবে আপনার ওয়েব পরিষেবা হোস্ট করার জন্য যদি 4 টি মৌমাছির সার্ভারের একটি ক্লাস্টার পেয়ে থাকে তবে আপনি সিঙ্ক্রোনাস প্রতিলিপি চালু করে এম্বেড টোপোলজি রাখতে পারবেন। যদি আপনি এটি 30 টি অ্যাপ্লিকেশন সার্ভারের একটি ক্লাস্টারে রাখার চেষ্টা করেন, তবে সেই সেটআপে অনুলিপিটি চালু করার ওভারহেড খুব বেশি হবে, তাই আপনি ' l হয় হয় একটি বিতরণ মোডে বা একরকম ডেডিকেটেড টপোলজিতে ইনফিনিস্প্যান চালাতে হবে, এবং হঠাৎ হাইবারনেটকে ক্যাশে থেকে পড়ার জন্য নেটওয়ার্কের বাইরে চলে যেতে হবে। প্লাস, ইনফিনিস্প্যান কেবল জাভাতে কাজ করে। আপনার যদি অন্য ভাষা থাকে তবে আপনার অন্যান্য ক্যাচিং সমাধানের প্রয়োজন। ডাটাবেসে পৌঁছানোর আগে আপনার অ্যাপ্লিকেশন থেকে আপনার ওয়েব পরিষেবাতে যাওয়ার নেটওয়ার্কের ওভারহেড দ্রুত আরও বেশি জটিল ক্যাচিং সমাধানগুলি ব্যবহার করার প্রয়োজন হয় যা সাধারণত তাদের নিজস্ব ওভারহেড নিয়ে আসে off

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

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

TLDR; আপনার ডেটা অ্যাক্সেস টিউন করা, স্কেল করা এবং ক্যাশে করা আরও সহজ যখন কোনও একক ডেডিকেটেড ওয়েব পরিষেবায় এটি ঘটে যা বিভিন্ন ভাষা এবং প্রযুক্তি ব্যবহার করে বিভিন্ন অ্যাপ্লিকেশন জুড়ে ঘটে থাকে তার থেকে

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

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

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

সূত্র: http://alistair.cockburn.us/Hexagonal+architecture https://github.com/brettwooldridge/HikariCP/wiki/About- পুল- সাইজিং


খুব ভাল উত্তর, পড়া মূল্য। এই দুর্দান্ত উত্তরটি লেখার জন্য সময় দেওয়ার জন্য ধন্যবাদ!
ডোমিনিক

6

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

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

আরও বিমূর্ত পদে, আপনি নিজেরাই এই প্রশ্নের উত্তর দিচ্ছেন:

সুতরাং এটি ইন্ডায়ারেশনের একটি অতিরিক্ত স্তর যা ডায়াগনস্টিক প্রক্রিয়াটি ধীর করে দেয়

... যেহেতু এই বিখ্যাত অ্যাফোরিজমটি রয়েছে যেটিতে বলা হয়েছে: "কম্পিউটার বিজ্ঞানের সমস্ত সমস্যা ইন্ডিয়ারেশনের অন্য স্তরের দ্বারা সমাধান করা যেতে পারে"। :)


6

আপনি কেবল একই সংস্থার মধ্যে রয়েছেন বলে এর অর্থ এই নয় যে আপনার কাছে সমস্ত কিছু প্রকাশ করা উচিত। স্পষ্ট চুক্তি সহ একটি সংস্থার টিমের মধ্যে সীমিত গ্রাহক / সরবরাহকারী সম্পর্ককে সংজ্ঞায়নের একটি উপায় হ'ল REST এপিআই। অ্যামাজন এই সংস্থার এক প্রবর্তক হয়েছে ।

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


3

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


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

@ নিউবার্ট আরএসইএস-এর মতো সরাসরি ইন্টারনেটের মাধ্যমে কাজ করে?
রব

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

@neubert: যে ক্ষেত্রে, বাকি এপিআই হয় একটি DBAL, তাই না?
রিমকো গ্রিলিচ

2
@ রেমকো গ্রিলিচ - অবশ্যই, তবে আপনার ডিবিএল হিসাবে আরএসটি এপিআই ব্যবহার করা এমন একটি মাঝারি স্তর যুক্ত হতে পারে যা অপ্রয়োজনীয় এবং সমস্যাগুলি নির্ণয়ের ক্ষেত্রে বাধা সৃষ্টি করে। আমার অর্থ, আপনি যদি ডিবিএল এর পর্যাপ্ত বিস্তৃত সংজ্ঞাটি ব্যবহার করতে চান তবে আপনি গুগল এসআরপি'কে ডিবিএল হিসাবে বিবেচনা করতে পারবেন। গুগলের সার্ভার থেকে
পৃষ্ঠাযুক্ত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.