APIها پر سروصدا هستند آنها حجم شگفتانگیزی از داده تولید میکنند. چیزی که از نحوهٔ تولید این دادهها مهمتر است، نحوهٔ ذخیرهسازی و اشتراکگذاری دادهها است. APIها با تبادل داده زنده و مرده میشوند، و به همین دلیل، ساختار و قالب داده اغلب مهمترین بخش هر سیستم API است.
در ادامه، ما به قالبی به نام پروتکل بافرها (Protobufs) میپردازیم، یک قالب متنباز برای سریالسازی داده که در ابتدا توسط گوگل توسعه داده شد. ما بررسی میکنیم که چرا یک توسعهدهنده ممکن است از آنها استفاده کند و یک مورد استفادهٔ خاص را بررسی میکنیم که در آن پروتوبافها کاملاً منطقی هستند میکروسرویسهای داخلی.
پروتوبافها چیستند؟
پروتوبافها یک راهحل برای سریالسازی دادههای ساختیافته هستند. آنها مستقل از زبان و پلتفرماند و از طیف گستردهای از محیطها پشتیبانی میکنند. کاربران میتوانند تعریف کنند دادهشان چگونه باید ساختیافته باشد و سپس بر اساس این تعریف، دادهٔ ساختیافته تولید کنند.
برای انجام این کار، پروتوبافها از دو عنصر استفاده میکنند. نخست زبان تعریف، که کدی است که توسط تولیدکنندهٔ پروتو برای اتصال به داده، کتابخانهها و سیستمهایی که کد را تولید میکنند به کار میرود. دوم خود قالب است که از زبان تعریف برای ایجاد خروجی داده استفاده میکند.
مزایای پروتوبافها
پروتوبافها مزایای قابل توجهی برای پذیرندگان ارائه میدهند. پیش از هر چیز، قالب آنها بسیار فشرده است، و فرآیند ایجاد آن نیز سریع است. این موضوع به پردازش سریع با حجم فایل مینیمال منجر میشود، نوعی «بهترین هر دو دنیا» که اغلب با سایر قالبها در تضاد است. این موضوع، همراه با پشتیبانی گستردهٔ زبانی، بدین معناست که میتوانید بهسرعت یک فایل کوچک ایجاد کنید و آن را با زبانها و محیطهای مختلف به اشتراک بگذارید.
یک مزیت بزرگ پروتوباف این است که خروجی میتواند در زبانهای مختلف خوانده شود، بدون توجه به اینکه کجا تولید شده است. از آنجا که قالب داده ساختیافته است و در یک تعریف .proto ذخیره میشود، میتوانید بهصورت نظری داده را از جاوا استخراج کرده و به روبی منتقل کنید، یا از C# دریافت کرده و آن را به دارت بفرستید. این پشتیبانی گسترده و قابلیت گسترش، امکان پشتیبانی وسیعی را فراهم میکند که زبان را از مسیر تکرار حذف میکند.
این تعاریف همچنین تعاریف زنده هستند زیرا قالب ساختیافته است، تا زمانی که تعریف را مطابق با بهترین شیوهها ساختار دهید، میتوانید بهسادگی تعریف را بهروزرسانی کرده و سازگاری روبهعقب و روبهجلو را حفظ کنید. این یک مزیت عظیم است، زیرا اجازهٔ تکرار سریع بدون ایجاد تغییرات شکننده را میدهد. این موضوع یک دستاورد مهم است، زیرا پروتوبافها ممکن است در جایی استفاده شوند که تغییرات نیازمند نسخهگذاری جدید میتواند یک مانع بزرگ باشد (برای مثال، در دستگاههای IoT بسته).
معایب پروتوبافها
پروتوبافها برای موارد استفادهٔ مختلف عالی هستند اما برای همهچیز کامل نیستند. چند سناریوی خاص وجود دارد که در آنها پروتوبافها یک راهحل بد محسوب میشوند.
اول، پروتوبافها فشردهسازیشده نیستند. در حالی که فایل خروجی برای چیزی که ارائه میدهد بسیار کوچک است، بسیاری از موقعیتها وجود دارد که ممکن است به اندازهٔ کافی کوچک نباشد و فشردهسازی اضافی ضروری شود. در چنین سناریویی، راهحل فشردهسازی اضافی میتواند بسیاری از مزایای پذیرش پروتوبافها را از بین ببرد.
پروتوبافها همچنین خودتوصیفگر نیستند. برخی قالبهای داده، داده را طوری توصیف میکنند که بتوانید دقیقاً بفهمید هر عنصر داده در متن خودش چه معنایی دارد. پروتوبافها این ویژگی را ارائه نمیدهند، به این معنا که هر دو طرف معادله باید برای تفسیر به فایل .proto وابسته باشند. برای پردازش زمینهای در مقیاس بزرگ، این موضوع میتواند پیچیدگی و بار پردازشی بیشتری ایجاد کند.
مستندات پروتوباف یک مورد استفادهٔ خاص برای کاربردهای علمی و مهندسی را ذکر میکند که در زیر آمده است:
پیامهای پروتکل بافر از نظر اندازه و سرعت برای بسیاری از استفادههای علمی و مهندسی که شامل آرایههای چندبعدی بزرگ از اعداد اعشاری هستند، حداکثر کارایی را ندارند. برای این کاربردها، قالبهایی مانند FITS سربار کمتری دارند.
پروتکل بافرها در زبانهای غیر شیگرای محبوب در محاسبات علمی، مانند Fortran و IDL، بهخوبی پشتیبانی نمیشوند.
در نهایت، این واقعیت وجود دارد که پروتوبافها از گوگل میآیند. برای برخی افراد، استفاده از یک قالب گوگل، چه متنباز باشد یا نباشد، چه مجوز داشته باشد یا نه، ممکن است مسائل خاصی ایجاد کند. بنابراین، هنگام بررسی پشتیبانی بلندمدت محصولی رایگان و متنباز توسط یک شرکت سودمحور، باید این موضوع را در نظر گرفت.
مزیت پروتوبافها برای میکروسرویسهای داخلی
پروتوبافها برای میکروسرویسهای داخلی بسیار منطقی هستند. یک وضعیت بسیار عجیب زمانی رخ میدهد که میکروسرویسهای داخلی را با هر راهحل فنی مقایسه میکنید. ناگهان، تمایل به سازگاری خارجی و ملاحظات دیگر بهطور قابل توجهی ضعیف میشود، و استدلال اصلی به موضوع قابلیت تبادل تبدیل میشود.
ساختهشده برای داخل
هنگام ساخت برای میکروسرویسهای خارجی، فرض میکنید که فردی خارج از سازمان از کد، سیستمها و روشهای یکپارچهسازی شما استفاده خواهد کرد. بنابراین، شروع میکنید که تصمیمات خود را بر اساس این امکان اتخاذ کنید. اما در میکروسرویسهای داخلی، شما برای یک مخاطب واحد توسعه میدهید — توسعهدهندهٔ داخلی.
در چنین مورد استفادهای، قالب استاندارد تبادل و داده مهمترین عامل میشود، و این چیزی است که پروتوبافها بهوفور ارائه میدهند. پروتوبافها برای سریالسازی دادهٔ سریع و کارآمد در یک قالب قابل فهم و قابل تبادل در مجموعهای از زبانها طراحی شدهاند. با فرض اینکه داخلی این زبانها را پشتیبانی کنید، پروتوبافها به راهحلی برای ادغام این سیستمهای پراکنده در یک مجموعهٔ منسجم تبدیل میشود.
عملکرد و استانداردسازی
یک مزیت مهم که باید در نظر گرفته شود، تعادل استانداردسازی در برابر عملکرد است. سیستمهای استانداردشده یکنواخت و قابل حملتر هستند، اما آنها تقاضای همان عملکرد استاندارد را در همهجا دارند. اگر این عملکرد در بهترین حالت متوسط باشد یا فقط برای یک سناریوی خاص مناسب باشد، سایر سرویسها در محیطهای خاص خود آسیب میبینند. با تمرکز فقط بر عملکرد، میتوانید از هر زبان خاصی که میخواهید استفاده کنید، اما مزایای استانداردسازی را از دست میدهید.
ترجیح میدهید از قدرت پردازشی نسبتاً سریع پایتون برای یک تابع داخلی استفاده کنید؟
ترجیح میدهید از تواناییهای بالاتر C# برای یک عملکرد کاری پیچیدهتر استفاده کنید؟
میتوانید هر دو را با پروتوباف استفاده کنید، و تا زمانی که تعریف مشترکی داشته باشید، حتی نمیدانید که آنها از راهحلهای متفاوت استفاده میکنند.
بهبود کشف
این مورد همچنین مزیت بهبود کشف را معرفی میکند. نیمی از کشف این است که اطمینان حاصل کنید دید واقعی نسبت به اینکه سرویسها چه میکنند و چگونه این کار را انجام میدهند دارید. از آنجا که پروتوبافها نیازمند یک تعریف و یک قالب مورد توافق هستند، میتوانید از این سیستم برای تعریف عملکردهای اصلی هر مؤلفه و کاتالوگ کردن آن بر اساس کاری که انجام میدهد، نه جایی که قرار دارد، استفاده کنید.
این مزیت مهم است: این شبیه پذیرش یک قالب استاندارد برای آدرسدهی خانهها است. وقتی بدانید چگونه یک آدرس را قالببندی کنید، دقیقاً میتوانید مشخص کنید چیزی کجاست، و بر اساس آن اطلاعات، میتوانید بفهمید که مکان مورد نظر خانه، آپارتمان یا صندوق پستی است. پروتوبافها به شما ایده میدهند که هر سرویس چه چیزی خروجی میدهد، و از این طریق میتوانید درکی از نحوهٔ استفادهٔ کل اکوسیستم از آن داده ایجاد کنید.
نتیجهگیری
واقعیت ساده این است که استفاده از پروتوبافها هرگز آسانتر از امروز نبوده است. این زبان تعریف رابطِ انتخابی برای بسیاری از راهحلهاست، و با تمام مزایای ذکر شده، این چندان عجیب نیست. پروتوبافها بسیار کارآمد هستند و در بیشتر محیطها مزایای قابل توجهی را باز میکنند. با فرض اینکه در یکی از معدود محیطهایی که نمیتوانند از پذیرش آن سود ببرند کار نمیکنید، پروتوبافها میتوانند راهحل شما برای قابلیت حمل داده در میکروسرویسهای داخلی باشند.
