پروتو بافر گوگل چیست؟ این سوالی است که شاید هر برنامه نویسی از خود بپرسد. پروتو بافر یک زبان مشترک بین دو نرم افزار است. اگر قبل از مطالعه این محتوا، مقاله HTTP/2 چگونه کار میکند را مطالعه نکرده اید حتما آن را بررسی بفرمایید.
چرا دو نرم افزار با هم حرف می زنند؟
درسته نرم افزار ها هم با هم حرف میزنند. در دنیای امروز مشاهده می شود که اکثر وب سایت ها با هم تعامل دارند. مثلا:
- پست های اینستاگرام روی فیسبوک هم ارسال می شود.
- سیستم ورود و خروج خیلی از وبسایت ها با گوگل، تویتر و… انجام می شود.
- و…
کاربردهای بی شماری میتوان برای این موضوع مطرحح نمود.
دو نرم افزار به چه شکل با هم ارتباط برقرار می کنند؟
از طریق تکنولوژی هایی مثل:
- پروتو بافر گوگل (protobuf)
- rest-api
- graphql
- xml
- و…
اما چرا گوگل خودش یک زبان مخصوص ایجاد کرده است؟
گوگل بی دلیل هزینه نمیکند. پروتو بافر گوگل (protobuf) درواقع زبان مشترکی بین نرم افزار هایی است که نوشته است و احتمالا از تکنولوژی های بسیاری استفاده نموده است.
از آنجا که سرعت برای گوگل بسیار مهم است خوانایی روش های مرسوم مثل xml، rest و یا graphql برای سریعتر شدن سیستم هایش گران تمام میشدند.
بین سرور های گوگل هیچ انسانی وجود ندارد پس چرا از زبان های خوانا برای انسان استفاده شود؟
پروتو بافر گوگل چگونه کار میکند
در این روش فایلی با پسوند proto وجود دارد که سینتکس آن به شکل زیر است.
نسخه proto:
پروتو بافر گوگل در ۳ نسخه ارائه گردیده است که در محتوای فعلی از نسخه ۳ استفاده شده است.
در ابتدای فایل پروتو نسخه آن را معرفی می کنیم که با سینتکس زیر مشخص می گردد.
syntax = \"proto3\";
این فایل از قسمت های زیر تشکیل شده است.
انواع (types):
اعداد صحیح:
از int32 و int64 برای اعداد صحیح استفاده می شود.
اعداد اعشاری:
از float32 یا float64 برای اعداد صحیح استفاده می شود.
رشته:
میتوانید از string استفاده نمایید و طول متغیر بسته به اندازی رشته تغییر خواهد کرد. از طرفی کدینگ فایل هم میتواند از موارد زیر باشد.
- UTF-8
- 7-ASCII
آرایهها:
آرایهها در پروتوباف از نوع تکراری (repeated) شناخته می شوند، برای مثال لیستی از آدرس ها ، نمرات دانشجویان و….
ساختار (enum):
enum EyeColour { UNKNOWN_EYE_COLOUR = 0; EYE_GREEN = 1; EYE_BROWN = 2; EYE_BLUE = 3; EYE_GRAY = 4; }
متغیر های تو در تو:
در کد زیر متغیر تاریخ تولد بصورت یک شی جدا تعریف و در شی Person استفاده گردیده است.
syntax = \"proto3\"; message Person { // Person\'s birthday Date birthday = 9; } message Date { // Year of date. Must be from 1 to 9999, or 0 if specifying a date without // a year. int32 year = 1; // Month of year. Must be from 1 to 12. int32 month = 2; // Day of month. Must be from 1 to 31 and valid for the year and month, or 0 // if specifying a year/month where the day is not significant. int32 day = 3; }
برچسبها (TAGS):
در پروتوباف اسم فیلدها به هنگام کامپایل مهم نیستند چون متغیر ها را با یک مقدار عددی خاص به نام TAG ایندکس می کنند. از این رو اگر به انتهای خط های کد تصویر بالا دقت کنید اعداد ۱، ۲، ۳، ۴، ۵، ۶ را می بینید.
خاص بودن این اعداد بسایر مهم است. چون بعد از کامپایل به این طریق شناخته می شوند. اما از نام بیشتر برای خوانایی کد پروتو استفاده میگردد.
برای تگ گذاری میتوانید از اعداد ۱ تا ۵۳۶،۸۷۰،۹۱۱ استفاده کنید.
همچنین استفاده از تگهای ۱۹۰۰۰ تا ۱۹۹۹۹ ممنوع می باشد چرا که برای استفاده های خاص گوگل رزرو گردیده اند.
شایان توجه است که تگهای ۱ تا ۱۵ فقط یک بایت از فضای حافظه را اشغال میکنند و تگهای ۱۶ تا ۲۰۴۷ دو بایت از فضای حافظه را درگیر میکنند.
پس بهتر است برای متغیر هایی که بسیار پر کاربرد هستند و بیشتر لازم است در حافظه باشند از تگ های ۱ تا ۱۵ استفاده نمایید. تا در مصرف حافظه صرفه جویی شود و کدنویسی شما بهینه تر گردد.
کامنت:
امکان کامنت گذاری در فایل پروتوباف وجود دارد تا نیازی به نوشتن داکیومنت مازاد نباشید، شما تنها فایلهای پروتو در اختیار سایر برنامه نویسان قرار دهید.
کامنت تک خطی:
// The syntax for this file is proto3
کامنت چند خطی:
/* Person is used to identify users * across our system */
سریال سازی (Serialization)
یک شی داده ، ترکیبی از کد و داده های قابل نمایش در یک محدوده از فضای ذخیره سازی است.
سریال سازی فرآیند تبدیل یک شی داده به یک سری بایت است که وضعیت شی را به شکلی تبدیل می کند که به راحتی قابل ذخیره سازی یا قابل انتقال باشد. در این فرم سریالی، داده ها را می توان به فروشگاه داده دیگری (مانند یک پلت فرم محاسباتی درون حافظه)، برنامه کاربردی یا مقصد دیگری تحویل داد.
در شکل زیر دو نرم افزار داریم که داده هایی را بین هم ارسال می کنند. این نرم افزار ها می توانند با تکنولوژی یا زبان خاصی طراحی شوند. آنها داده های خود را بایت شده دریافت و ارسال می نمایند.
زبان هایی که از پروتوباف پشتیبانی می کنند
از این آدرس میتوانید تکنولوژی های ارائه شده را مشاهده نمایید. اما زمانی که این مقاله تهیه گردیده است مورد زیر موجود هستند.
- c++
- پایتون
- جاوا
- GO
- Objective-C
- C#
- JavaScript
- Ruby
- PHP
- Dart
از پروتوباف کجا استفاده کنیم
جای این شیوه ارتباطی بین دو نرم افزار است که از این پروتکل پشتیبانی می کنند. از این رو می توان پروتو بافر گوگل را برای زبان هایی که در ادامه بیان می کنیم استفاده نمایید.
در واقع بین دو نرم افزار برای عملیات سریال سازی استفاده می گردد.
این پروتکل مناسب بین سرور و مرورگر نیست پس در این حالت از آن استفاده نفرمایید.
هرچیزی را بهر کاری ساختند.
مزایای پروتوباف
- سرعت بیشتر
- امنیت بیشتر
- کدگزاری (encrypt/decrypt) اطلاعات
- ساختار نزدیک به زبان و تکنولوژی مورد استفاده
معایب پروتوباف
دلیل عدم شهرت این تکنولوژی (با توجه به مزایای زیاد آن) یک دلیل عمده دارد و آن پیچیدگی استفاده از آن است.
اما از آنجا که گوگل پروتوباف را برای سیستم های متنوعی طراحی کرده است و ماژول های آن درحال توسعه برای اکثر تکنولوژی ها است این عیب درحال کم رنگ شدن است.
کامپایل یا شیوه سریالیزه کردن
قبل از استفاده از کد در تکنولوژی مورد نظر می توانید با کامپایلر مرتبط خروجی هایی برای زبان های ارائه شده تهیه نمایید.