সতর্কতা: বড় পোস্ট, কিছু মতামত, অস্পষ্টতা 'আপনার পক্ষে সবচেয়ে ভাল কাজ করে' তা উপসংহারে
সাধারণত, এটি আপনার ডাটাবেসের আশেপাশে 'ষড়ভুজ আর্কিটেকচার' প্রয়োগের মাধ্যম হিসাবে করা হয়। আপনার কাছে ওয়েব অ্যাপ্লিকেশন, মোবাইল অ্যাপ্লিকেশন, ডেস্কটপ অ্যাপ্লিকেশন, বাল্ক আমদানিকারক এবং ব্যাকগ্রাউন্ড প্রসেসিং সমস্ত আপনার ডাটাবেসটিকে অভিন্ন উপায়ে গ্রহণ করতে পারে। অবশ্যই আপনার ডাটাবেস অ্যাক্সেসের জন্য একটি সমৃদ্ধ গ্রন্থাগার লিখে এবং আপনার সমস্ত প্রক্রিয়া সেই লাইব্রেরিটি ব্যবহার করে আপনি কিছুটা একই জিনিসটি সম্পাদন করতে পেরেছিলেন। এবং প্রকৃতপক্ষে, আপনি যদি খুব সাধারণ সিস্টেমের সাথে একটি ছোট্ট দোকানে থাকেন তবে এটি সম্ভবত সম্ভবত আরও ভাল রাস্তা; এটি একটি সহজ পদ্ধতির এবং যদি আপনার আরও জটিল ব্যবস্থার উন্নত দক্ষতার প্রয়োজন না হয় তবে কেন জটিলতার জন্য অর্থ প্রদান করবেন? তবে, যদি আপনি এমন একটি বৃহত, পরিশীলিত সিস্টেমের সাথে কাজ করছেন যা আপনার ডাটাবেসের সাথে স্কেল করার জন্য সকলের প্রয়োজন হয়, '
প্ল্যাটফর্মের স্বাধীনতা এবং রক্ষণাবেক্ষণ
আপনার যদি একটি ডাটাবেস থাকে এবং সেই ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য আপনি পাইথন লাইব্রেরি লিখেন এবং প্রত্যেকে ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করতে সেই লাইব্রেরিতে টানেন, এটি দুর্দান্ত। তবে আসুন হঠাৎ করে বলি আপনার একটি মোবাইল অ্যাপ্লিকেশন লিখতে হবে এবং সেই মোবাইল অ্যাপ্লিকেশনটির এখন ডাটাবেসের সাথেও কথা বলা দরকার। এবং আপনার আইওএস ইঞ্জিনিয়াররা পাইথন ব্যবহার করেন না এবং আপনার অ্যান্ড্রয়েড ইঞ্জিনিয়াররা পাইথন ব্যবহার করেন না। আইওএস ছেলেরা অ্যাপলের ভাষা ব্যবহার করতে চায় এবং অ্যান্ড্রয়েড ইঞ্জিনিয়াররা জাভা ব্যবহার করতে চায়। তারপরে আপনি 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- পুল- সাইজিং