একই রিসোর্স (অ্যাকাউন্ট, অর্ডার, ইনভেন্টরি, ব্যাচ জব ইত্যাদি) একাধিক প্রসেস বা একাধিক সার্ভার একসাথে স্পর্শ করলে প্রতিযোগিতা (contention) তৈরি হয়। ভাষার অন্তর্নির্মিত মিউটেক্স বা সেমাফোর শুধুমাত্র একটি প্রসেসের মধ্যেই কার্যকর — প্রসেস একাধিক হলে বা একাধিক সার্ভারে বিভক্ত থাকলে প্রসেস সীমানা অতিক্রমকারী পারস্পরিক বর্জন (mutual exclusion) পদ্ধতি আলাদাভাবে প্রয়োজন হয়।
Ticketing ঠিক এই সমস্যা, অর্থাৎ প্রসেস ও সার্ভার সীমানা অতিক্রমকারী ডিস্ট্রিবিউটেড পারস্পরিক বর্জন-এর জন্য একটি লক সার্ভার ও ক্লায়েন্ট সংগ্রহ। ক্লায়েন্ট TCP-এর মাধ্যমে লক সার্ভারে সংযুক্ত হয়ে নামযুক্ত কী (key) অর্জন (acquire) করে, এবং ক্রিটিক্যাল সেকশন পার হওয়ার পর রিলিজ (release) করে।
Ticketing JSON নয়, বরং স্থির-প্রস্থের বাইনারি ফিল্ড দিয়ে গঠিত ফ্রেম প্রোটোকল ব্যবহার করে। op ১ বাইট ডিসপ্যাচের পর op-ভিত্তিক নির্দিষ্ট বাইট দৈর্ঘ্য অনুযায়ী পড়া হয়, শুধু শেষের key নিউলাইন (\n) পর্যন্ত পড়া হয়। পার্সিং বলতে মূলত অফসেট পড়াই বোঝায়, প্রতিটি রিকোয়েস্টে JSON পার্স করার তুলনায় ওভারহেড কম।
লক অর্জনের প্রতিটি ক্ষেত্রে সার্ভার সাথে সাথে একঘেয়ে (monotonic) বর্ধনশীল u64 ফেন্সিং টোকেন প্রদান করে। সুরক্ষিত রিসোর্স এই টোকেনের একঘেয়েতা যাচাই করলে, lease মেয়াদোত্তীর্ণ হওয়ার পর দেরিতে জেগে ওঠা ক্লায়েন্ট আরও নিচু টোকেন দিয়ে অ্যাক্সেস করার চেষ্টা করলে তা প্রত্যাখ্যান করা যায়। ফলে লক সার্ভার নিজেই প্রতি মুহূর্তে সম্পূর্ণ সামঞ্জস্যপূর্ণ না হলেও নিরাপত্তা বজায় রাখা সম্ভব — এটি বিশেষত ফেইলওভারের সময়ে গুরুত্বপূর্ণ।
সার্ভার মাত্র ১টি দিয়েও কাজ করে (সিঙ্গেল মোড), তবে নিরবচ্ছিন্ন পরিচালনা প্রয়োজন হলে ন্যূনতম ২টি সার্ভার দিয়ে ক্লাস্টার গঠন করুন। ক্লাস্টার ঐক্যমত্য (কোরাম) নয়, বরং অগ্রাধিকার-ভিত্তিক পদ্ধতিতে একটি অ্যাক্টিভ নির্বাচন করে এবং বাকিগুলো রিয়েল-টাইম রেপ্লিকেশন গ্রহণকারী স্ট্যান্ডবাই হয়। অ্যাক্টিভ মারা গেলে (পুনরায় চালু হওয়াসহ) বা গ্রেসফুলভাবে বন্ধ হলে স্ট্যান্ডবাই দায়িত্ব নেয়। বিস্তারিত কার্যপ্রণালীর জন্য কার্যপ্রণালী পৃষ্ঠা দেখুন।
একই বাইনারি প্রোটোকলের উপর ৮টি ভাষার অফিশিয়াল ক্লায়েন্ট সরবরাহ করা হয়: Rust, Java/Kotlin, JavaScript/TypeScript, Python, C#, Go, Ruby, C/C++। প্রতিটি ভাষার জন্য সেই ইকোসিস্টেমের স্বাভাবিক পদ্ধতিতে API উন্মোচন করা হয় — যেমন async/await ধাঁচের ভাষায় অ্যাসিঙ্ক্রোনাসভাবে, আর Go/Ruby/C-তে ব্লকিং + ব্যাকগ্রাউন্ড থ্রেড দিয়ে। প্রোটোকল সব ভাষায় বাইট পর্যায়ে অভিন্ন। ভাষাভিত্তিক ইনস্টল পদ্ধতি ও উদাহরণের জন্য লাইব্রেরি পৃষ্ঠা দেখুন।