বড় একচেটিয়া অ্যাপ্লিকেশনে, ত্রুটি ট্র্যাকিং এবং পর্যবেক্ষণ প্রায়ই স্পষ্ট মালিকানার অভাবের কারণে অকার্যকর হয়ে পড়ে। এই নির্দেশিকাটি ডোমেন টীকাগুলির মাধ্যমে জবাবদিহিতা নির্ধারণের জন্য একটি কাঠামোগত পদ্ধতির প্রস্তাব করে সমস্যাটির সমাধান করে।
একাধিক দল নিয়ে বৃহৎ মনোলিথিকের জন্য কার্যকর মনিটরিং সেট আপ করা চ্যালেঞ্জিং হতে পারে। স্পষ্ট মালিকানা ছাড়া, ত্রুটি ট্র্যাকিং সাধারণ হয়ে ওঠে এবং প্রায়শই উপেক্ষা করা হয়। একটি সমাধান হ'ল অন-কল ইঞ্জিনিয়ারদের সনাক্ত করা যে কোন দলটি পর্যবেক্ষণ অ্যালার্মগুলিতে প্রতিক্রিয়া জানাবে। যাইহোক, একটি আরও দক্ষ পদ্ধতি হল প্রতিটি লগ এবং ডেটাডগ স্প্যানে ডোমেন এবং দলের তথ্য অন্তর্ভুক্ত করা।
আমাদের অ্যাপ্লিকেশনের বিভিন্ন অংশের জন্য কোন দল দায়ী তা ট্র্যাক রাখতে, আমরা ডোমেন অ্যানোটেশন নামে একটি সিস্টেম ব্যবহার করি। ডোমেন টীকাগুলি আপনার অ্যাপ্লিকেশনের কোডের প্রতিটি অংশকে লেবেল করে, স্পষ্টভাবে নির্দেশ করে যে কে কিসের জন্য দায়ী৷ এটি দায়িত্ব পরিচালনায় সুস্পষ্ট সংগঠন এবং জবাবদিহিতা প্রদান করে।
ডোমেন টীকাগুলি একটি মনোলিথিক অ্যাপ্লিকেশনের মধ্যে দলের দায়িত্বগুলি ট্র্যাক করার জন্য একটি পরিষ্কার এবং সংগঠিত পদ্ধতি প্রদান করে। ডোমেন টীকা দিয়ে আপনার কোডের অংশ ট্যাগ করে, আপনি করতে পারেন:
দক্ষ মনিটরিং এবং ট্রেসেবিলিটি নিশ্চিত করতে, প্রতিটি ওয়েব অনুরোধ যথাযথ ডোমেন তথ্যের সাথে ট্যাগ করা হয়। এটি বেশ কয়েকটি উপাদানের সহযোগিতার মাধ্যমে অর্জন করা হয়েছে: DomainProvider
, DomainSpanService
, DomainMdcProvider
, এবং DomainHandlerInterceptor
৷
নিম্নলিখিত ডায়াগ্রামে চিত্রিত প্রক্রিয়াটির একটি উচ্চ-স্তরের ওভারভিউ এখানে রয়েছে:
এই উপাদানগুলির বিশদ বাস্তবায়ন একটি শেয়ার্ড লাইব্রেরিতে এনক্যাপসুলেট করা হবে, বড় একচেটিয়া অ্যাপ্লিকেশনগুলিতে ট্যাগিং এবং ওয়েব অনুরোধগুলি পর্যবেক্ষণের জন্য একটি পুনঃব্যবহারযোগ্য সমাধান প্রদান করবে।
ডোমেন টীকা দিয়ে ক্লাস লেভেলে মালিকানা নির্ধারণ করা সহজ। প্রধান শ্রেণীতে শীর্ষ-স্তরের টীকা প্রয়োগ করে, মালিকানা সেই শ্রেণীর মধ্যে সমস্ত বিশদ সম্পদে প্রচার করে। প্রতিটি দল প্রতিটি একক পদ্ধতি চিহ্নিত করার প্রয়োজন ছাড়াই স্বচ্ছতা এবং জবাবদিহিতা নিশ্চিত করে উপযুক্ত ডোমেন টীকা দিয়ে তাদের মালিকানাধীন ক্লাসগুলিকে লেবেল করতে পারে।
সেক্ষেত্রে যখন একাধিক দল একটি ক্লাসে কোড রাখে এবং অবিলম্বে রিফ্যাক্টরিং উপযুক্ত নয়, আপনি পৃথক পদ্ধতিগুলিকে বিভিন্ন ডোমেন টীকা দিয়ে চিহ্নিত করতে পারেন, যা শ্রেণি-স্তরের টীকাগুলির চেয়ে অগ্রাধিকার নেয়। এটি সামগ্রিক কাঠামোকে জটিল না করে নমনীয়তা প্রদান করে বিভিন্ন দলকে নির্দিষ্ট পদ্ধতি বরাদ্দ করার অনুমতি দেয়।
যদিও ডোমেন টীকাগুলি অবিশ্বাস্যভাবে দরকারী, সেখানে বিরল ক্ষেত্রে সেগুলি ব্যবহার করা যাবে না৷ উদাহরণস্বরূপ, আমরা কোয়ার্টজ কাজের সৃষ্টিতে সমস্যার সম্মুখীন হয়েছি, যা কোয়ার্টজের AOP লজিক এবং ডোমেন টীকাগুলির জন্য ব্যবহৃত AOP লজিকের মধ্যে সংঘর্ষের কারণে ডোমেন টীকাগুলির সাথে নির্বিঘ্নে কাজ করে না।
চাকরি এবং প্রক্রিয়াগুলির জন্য যেগুলি সরাসরি টীকা করা যায় না, আমরা চাকরি বাস্তবায়নে সরাসরি DomainTagsService ব্যবহার করেছি। এই পদ্ধতিটি আমাদের কাজের নির্বাহের যুক্তির মধ্যে ম্যানুয়ালি ডোমেন ট্যাগ যুক্ত করার অনুমতি দিয়েছে।
আমরা কিভাবে একটি কোয়ার্টজ কাজের মধ্যে DomainTagsService সংহত করেছি তার একটি উদাহরণ এখানে দেওয়া হল:
final override fun execute(context: JobExecutionContext) { domainTagsService.invoke(domain) { withLoggedExecutionDetails(context, ::doExecute) } }
যদিও প্রতিটি দলের জন্য পৃথক পরিষেবাগুলি নজরদারি এবং মালিকানার ক্ষেত্রে উল্লেখযোগ্য সুবিধা প্রদান করে, এটি সম্ভাব্য অতিরিক্ত উন্নয়ন ব্যয় সহ মনোলিথকে বিভক্ত করার জন্য উচ্চ খরচ এবং প্রচেষ্টার সাথে আসে। যখন মনোলিথকে মডিউলে বিভক্ত করা হয় তখন গ্রেডলের সাথে বিল্ড টাইম উন্নত করার সম্ভাবনা বিবেচনা করে, একটি মনোরেপো বজায় রাখা অনেক ক্ষেত্রে সবচেয়ে কার্যকর সমাধান হতে পারে।
Datadog-এ প্রতিটি দলের ক্রিয়াকলাপ নিরীক্ষণ সহজ করতে, আপনি বিভিন্ন দলের স্প্যানের জন্য কৃত্রিম পরিষেবার নাম বরাদ্দ করতে পারেন। এই পদ্ধতি নিশ্চিত করে যে প্রতিটি দলের ডেটাডগের মনিটরিং সরঞ্জামগুলিতে নিজস্ব ডেডিকেটেড বিভাগ রয়েছে। কৃত্রিম পরিষেবার নামগুলি ব্যবহার করা বিভ্রান্তিকর হতে পারে যদি আপনার পরিচালনা করার জন্য অনেকগুলি পরিষেবা থাকে তবে এটি সীমিত সংখ্যক ব্যাকএন্ড পরিষেবাগুলির সাথে পরিচালনাযোগ্য হয়ে ওঠে৷ এই কৃত্রিম পরিষেবার নামের সাথে উপসর্গ যোগ করা আপনার ডেটাডগ সেটআপে সংগঠন এবং স্পষ্টতা বজায় রাখতে সাহায্য করে, এটি বিভিন্ন দল এবং তাদের দায়িত্বের মধ্যে পার্থক্য করা সহজ করে তোলে।
স্ক্রিনশটের পরিবর্তে ডায়াগ্রাম ব্যবহার করুন?? এখানে কর্মী/ওয়েবঅ্যাপ থাকার কোন মানে নেই
লগের জন্য কৃত্রিম পরিষেবার নাম ব্যবহার করা বিভ্রান্তি তৈরি করতে পারে কারণ একই লগ এন্ট্রি বিভিন্ন পরিষেবার অধীনে প্রদর্শিত হতে পারে।
উদাহরণস্বরূপ, একই প্রমাণীকরণ পরিষেবা ব্যবহার করে দুটি শেষ পয়েন্ট বিবেচনা করুন। যদি এই শেষ পয়েন্টগুলি বিভিন্ন ডোমেনের সাথে টীকা করা হয়, তাহলে প্রমাণীকরণ যুক্তি বিভিন্ন কৃত্রিম পরিষেবার অধীনে লগ তৈরি করবে। লগগুলি অন্বেষণ করার সময় এটি বিভ্রান্তির কারণ হতে পারে, কারণ সেগুলি একাধিক পরিষেবার নামে প্রদর্শিত হয়৷ এই সমস্যাটি এড়াতে, কৃত্রিম পরিষেবার নামগুলি শুধুমাত্র স্প্যানগুলিতে প্রয়োগ করা ভাল যা ট্রেসগুলিতে একত্রিত হয় যাতে কম বিভ্রান্তি হয়
এটা কোন অর্থে তোলে? আমি এটা মনে করি না
এখানে এই সমস্যার একটি চাক্ষুষ উপস্থাপনা:
কৃত্রিম পরিষেবাগুলি ব্যবহার করা আপনাকে শুধুমাত্র APM ট্রেসগুলির সাথে কাজ করতে সক্ষম করে না, তবে ডেটাডগ মেট্রিক্সে পরিষেবা দ্বারা ফিল্টার করতে সক্ষম করে, যা একটি বর্ধিত সময়ের জন্য সংরক্ষণ করা হয়, দীর্ঘ সময়ের জন্য পরিবর্তনগুলি ট্র্যাক করার অনুমতি দেয়৷
নীচে Datadog-এ একটি মনিটরের একটি স্ক্রিনশট রয়েছে যা ক্যোয়ারীতে কৃত্রিম পরিষেবার নাম konsus-assets
ব্যবহার করে:
নীচে Datadog-এ একটি ড্যাশবোর্ডের একটি স্ক্রিনশট রয়েছে যা ফিল্টারে কৃত্রিম পরিষেবার নাম konsus-assets
ব্যবহার করে:
আপনার মনিটরিং কৌশলে জাল পরিষেবাগুলি ব্যবহার করে, আপনি একটি একচেটিয়া অ্যাপ্লিকেশনের মধ্যে প্রতিটি দলের কার্যকলাপের দৃশ্যমানতা এবং জবাবদিহিতা বাড়াতে পারেন। এই পদ্ধতিটি দল-নির্দিষ্ট মনিটর এবং ড্যাশবোর্ড তৈরি এবং রক্ষণাবেক্ষণের প্রক্রিয়াকে সহজ করে, যা Datadog-এ আরও কার্যকর এবং সংগঠিত পর্যবেক্ষণের দিকে পরিচালিত করে।
ডোমেন টীকা Datadog-এ একচেটিয়া অ্যাপ্লিকেশনের নিরীক্ষণকে সরল করার জন্য একটি সরল পদ্ধতি প্রদান করে। এই কৌশলটি বাস্তবায়নের মাধ্যমে, আপনি লগ, স্প্যান এবং মেট্রিক্সের পরিচালনাযোগ্যতা বাড়াতে পারেন, আপনার মনিটরিং সেটআপকে নির্দিষ্ট দলের জন্য উপযোগী একটি টুলে রূপান্তর করতে পারেন। এটি দায়বদ্ধতা এবং সংস্থার উন্নতি করে এবং আপনার অ্যাপ্লিকেশন জুড়ে আরও কার্যকর এবং দক্ষ সমস্যা সমাধান এবং কর্মক্ষমতা বিশ্লেষণের সুবিধা দেয়।
DomainTagsService
এর মতো পরিষেবাগুলি ব্যবহার করা নিশ্চিত করে যে ডোমেন-নির্দিষ্ট পর্যবেক্ষণ এখনও বজায় রাখা যেতে পারে।ডোমেইন এবং দল সংজ্ঞায়িত করুন
যে lib সঙ্গে পরিবর্তন হবে!!!
আপনার অ্যাপ্লিকেশনে বিভিন্ন ডোমেন এবং টিমের প্রতিনিধিত্ব করে enums তৈরি করুন:
@Domain
হল একটি টীকা যা ক্লাস বা ফাংশনে প্রয়োগ করা যেতে পারে, একটি নির্দিষ্ট ডোমেন মান দিয়ে চিহ্নিত করে।DomainValue
হল একটি enum যা বিভিন্ন ডোমেনের প্রতিনিধিত্ব করে, প্রতিটি একটি দলের সাথে যুক্ত।Team
হল একটি এনাম যেটি বিভিন্ন টিমের প্রতিনিধিত্ব করে অ্যাপ্লিকেশনটিতে কাজ করে। @Retention(AnnotationRetention.RUNTIME) @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) annotation class Domain(val value: DomainValue) enum class DomainValue(val team: Team) { USER_MANAGEMENT(Team.TEAM_A), PAYMENT_PROCESSING(Team.TEAM_B), NOTIFICATIONS(Team.TEAM_C) } enum class Team { TEAM_A, TEAM_B, TEAM_C }
ক্লাস টীকা (এবং পদ্ধতি প্রয়োজন হলে)
@Domain(DomainValue.USER_MANAGEMENT) class UserService { @Domain(DomainValue.PAYMENT_PROCESSING) fun processPayment() { ... } }
অসমর্থিত কেস পরিচালনা করুন
যে ক্ষেত্রে সরাসরি টীকা করা যায় না, যুক্তি মোড়ানোর জন্য সরাসরি DomainTagsService
ব্যবহার করুন
fun executeNotSupportedByAnnotationsLogic() { domainTagsService.invoke(domain) { executeLogic() } }
ডাটাডগ দিয়ে মনিটর করুন
মনিটর, ড্যাশবোর্ড এবং APM ট্রেস ফিল্টারিংয়ের জন্য কৃত্রিম পরিষেবা ফিল্টার ব্যবহার করুন
এই পদক্ষেপগুলি অনুসরণ করে, আপনি আপনার মনোলিথিক অ্যাপ্লিকেশনে কার্যকরভাবে ডোমেন টীকা প্রয়োগ করতে পারেন, উন্নত পর্যবেক্ষণ, জবাবদিহিতা এবং সামগ্রিক দক্ষতা নিশ্চিত করতে পারেন।