داده، SQL، قراردادها و ماشین حالت · فصل ۵ — JSON Schema، OpenAPI، AsyncAPI، Protobuf و gRPC · 72

Protobuf Compatibility و Message Versioning

داده را ذخیره یا query می‌کند اما constraint، consistency، compatibility و recovery را به یک contract مهندسی تبدیل نمی‌کند. موضوع جاری: «Protobuf Compatibility و Message Versioning». می‌تواند «Protobuf Compatibility و Message Versioning» را برای یک domain محدود مدل کند و constraint، compatibility یا recovery evidence لازم را مشخص کند.

Protobuf Compatibility and Message Versioning — en-US

خلاصهٔ درس

داده را ذخیره یا query می‌کند اما constraint، consistency، compatibility و recovery را به یک contract مهندسی تبدیل نمی‌کند. موضوع جاری: «Protobuf Compatibility و Message Versioning».

می‌تواند «Protobuf Compatibility و Message Versioning» را برای یک domain محدود مدل کند و constraint، compatibility یا recovery evidence لازم را مشخص کند.

خروجی این درس

می‌تواند «Protobuf Compatibility و Message Versioning» را برای یک domain محدود مدل کند و constraint، compatibility یا recovery evidence لازم را مشخص کند.

پیش‌نیازها

_Locale: fa-IR · Lesson: DAT-015 · Public order: 72_

خروجی و artifact کاری

این درس برای ساختن رکورد تغییر و سازگاری Protobuf نسخه ۱ است: یک artifact تصمیم که مشاهده، فرض، محدودیت و evidence موردنیاز را از هم جدا می‌کند. هدف حفظ یک مدل قابل‌انتقال است، نه حفظ‌کردن نام ابزارها.

می‌تواند «Protobuf Compatibility و Message Versioning» را برای یک domain محدود مدل کند و constraint، compatibility یا recovery evidence لازم را مشخص کند.

مدل مرزی

ممکن است فایل .proto compile شود، اما تغییر آن reader قدیمی، reader جدید، message ذخیره‌شده یا client نوع ProtoJSON را خراب کند. در Protobuf شماره field هویت wire است. پس compatibility به test جهت‌دار قدیم/جدید، reserveکردن identifier حذف‌شده و قضاوت جدا برای binary و JSON نیاز دارد.

در هر بخش سه برچسب نگه دارید: «مشاهده‌شده»، «استنباط محدود» و «نیازمند بررسی». اگر evidence در دسترس نیست، نتیجه را unknown ثبت کنید؛ نام ابزار یا pass شدن یک happy path جای evidence را نمی‌گیرد.

1. شماره field هویت است

نام field ممکن است بدون تغییر binary identity عوض شود، اما تغییر یا reuse شماره تفسیر byteها را تغییر می‌دهد. number را asset پایدار contract بدانید.

2. حذف را reserve کنید

پس از حذف field، شماره و در صورت ارتباط نام آن را reserve کنید تا author آینده identity موجود در داده قدیمی را تصادفی reuse نکند.

3. Compatibility جهت‌دار است

old writer→new reader و new writer→old reader را جدا test کنید. unknown field و default behavior ممکن است یک جهت را قابل قبول و جهت دیگر را data-loss کند.

4. تغییر type هم wire و هم value analysis می‌خواهد

برخی typeها encoding مشترک دارند، اما برای همه valueها safe نیستند. golden message مرزی به‌ویژه برای narrowing و signedness لازم است.

5. ProtoJSON مرز دیگری است

نام field و ruleهای JSON ریسک‌هایی می‌سازند که در binary wire test دیده نمی‌شوند. اگر JSON persist یا exchange می‌شود، مستقل classify شود.

روش پنج‌مرحله‌ای

  1. شماره، type، cardinality، عضویت oneof و JSON name همه fieldهای موجود را inventory کنید.
  2. diff پیشنهادی را بنویسید و addition، deletion، rename، number change و type change را جدا classify کنید.
  3. testهای old-writer/new-reader و new-writer/old-reader را با messageهای representative و boundary اجرا کنید.
  4. number و name حذف‌شده را reserve و mutation reuse را اجرا کنید که باید در review رد شود.
  5. اگر JSON persist/exchange می‌شود، judgment ProtoJSON را جدا انجام و data-loss و limit باقی‌مانده را ثبت کنید.

مثال حل‌شده

در v1 پیام OrderCreated دارای order_id = 1، customer_email = 2 و total_cents = 3 است. v2 field اختیاری currency = 4 را اضافه و email را حذف می‌کند. candidate امن، number 2 و name آن را reserve می‌کند. test binary در هر دو جهت اجرا می‌شود؛ reader قدیمی field 4 را نمی‌شناسد و رکورد loss معنایی را ثبت می‌کند. mutation شماره 2 را برای customer_phone reuse می‌کند و با وجود compileشدن رد می‌شود. ProtoJSON جدا review می‌شود.

ماتریس تصمیم و evidence

موضوعمرز/مالکevidenceتصمیم یا محدودیت
order_id1/string1/stringidentity حفظ شدaccept
customer_email2/stringحذف و reservebyte قدیمی مبهم نمی‌شودaccept با retention note
currencyغایب4/string اختیاریreader قدیمی ignore می‌کندجهت‌دار compatible با ثبت loss
mutation customer_phoneغایب2/stringreuse شماره حذف‌شدهreject
rename در ProtoJSONcustomerEmailbuyerEmailkey ذخیره‌شده تغییر می‌کندmigration جدا

خطاهای محتمل و روش اصلاح

  • اثبات compatibility فقط با compileشدن schema
  • reuse شماره field حذف‌شده پس از گذشت زمان
  • تعمیم binary compatibility به ProtoJSON
  • تلقی تغییر field number به‌عنوان rename بی‌خطر

برای هر مورد، ادعا را محدود کنید، یک counterexample بسازید و بنویسید کدام مشاهده می‌تواند آن را تأیید یا رد کند.

تمرین انتقال

سناریو را طوری تغییر دهید که یکی از فرض‌های مثال دیگر برقرار نباشد. بدون کپی‌کردن تصمیم قبلی، رکورد تغییر و سازگاری Protobuf نسخه ۱ را دوباره بسازید؛ سپس تفاوت decision rule و تفاوت دادهٔ ورودی را توضیح دهید.

این درس چه چیزی را ثابت نمی‌کند

این درس certification، تضمین production یا پوشش همه implementationها را ادعا نمی‌کند. نتیجه فقط در مرز سناریو، sourceهای تاریخ‌دار و observationهای ثبت‌شده معتبر است.

خودسنجی

  • [ ] آیا مسئولیت‌ها را از نام framework یا tool جدا کرده‌ام؟
  • [ ] آیا دست‌کم یک failure probe و نتیجه موردانتظار آن را نوشته‌ام؟
  • [ ] آیا fact، inference و design choice از هم مشخص‌اند؟
  • [ ] آیا non-claim و evidence گمشده را ثبت کرده‌ام؟
  • [ ] آیا transfer را روی context تغییرکرده و بدون پاسخ آماده انجام داده‌ام؟

منابع و مرز تازگی

sourceها در 2026-09-19 طبق Bible منجمدشده مرور شده‌اند. تاریخ review_due یک trigger برای بازبینی نسخه‌ای است؛ هیچ بسته‌ای نباید درجا و بدون نسخه جدید تغییر کند.

  • PROTO3-GUIDE — Official field-number, deletion/reservation and message-update compatibility guidance. (https://protobuf.dev/programming-guides/proto3/; review: 2026-10-17)
  • PROTOJSON — Official ProtoJSON format and compatibility considerations. (https://protobuf.dev/programming-guides/json/; review: 2026-10-17)

ارزیابی

پاسخ‌نامه‌ی این درس در بسته‌ی آموزش وجود ندارد؛ خودت جواب بده و صادقانه علامت بزن. «نیاز به مرور» درس را به صف تکرار می‌فرستد.

DAT-015-S1 retrieval

lesson ✗AI ✗notes ✗

DAT-015-S2 application

lesson ✗AI ✗notes ✗

DAT-015-S3 diagnosis

lesson ✗AI ✗notes ✗

DAT-015-S4 decision

lesson ✗AI ✗notes ✗

DAT-015-S5 transfer

lesson ✗AI ✗notes ✗
ملاک‌های ارزیابی (rubric)
DimensionCriticalSufficient evidence
contract/protocol correctnessyesExplanation preserves version/dialect, compatibility/reliability and evidence semantics.
evidence qualityyesPositive, negative and change/repair observations are traceable and separated from inference.
scope disciplineyesAdjacent outcomes and unsupported tool/runtime generalizations are deferred.
transfer independenceyesChanged-context task is solved without decisive scaffold.

A submission passes only when every critical dimension is sufficient and the learner states missing evidence honestly. AI suggestions are not observed evidence; the learner remains accountable for the final bounded judgment.

منابع و تازگی

· TOOL_VOLATILE
Official field-number, deletion/reservation and message-update compatibility guidance.
· TOOL_VOLATILE
Official ProtoJSON format and compatibility considerations.

مطالعهٔ موارد (case studies)

فایل‌های آزمایشگاه

با fixture امن محلی، رکورد تغییر و سازگاری Protobuf نسخه ۱ را بسازید. ابتدا prediction را بنویسید؛ سپس baseline و failure probeهای اعلام‌شده را ثبت کنید و observation مثبت و منفی را نگه دارید. transfer را بدون کپی تصمیم مثال انجام دهید.

starter عمداً classification یا risk decision نهایی را انتخاب نمی‌کند. evaluate_record.py و evidence template را تکمیل کنید. اجرای python3 ../run_checks.py فقط environment و شکل fileها را بررسی می‌کند و تصمیم محتوایی شما را grade نمی‌کند.

مرز ایمنی: No production system/data, no external account/service dependency, and all failure probes must be bounded and deterministic.

رسانه و اسلایدهای درس

MAKNOW_DAT-015_DECISION_EVIDENCE_TABLE_v1.0.0.svg
DECISION EVIDENCE TABLE v1.0.0.svg
MAKNOW_DAT-015_FAILURE_REPAIR_v1.0.0.svg
FAILURE REPAIR v1.0.0.svg
MAKNOW_DAT-015_PRIMARY_MODEL_v1.0.0.svg
PRIMARY MODEL v1.0.0.svg
MAKNOW_DAT-015_WORKED_EXAMPLE_v1.0.0.svg
WORKED EXAMPLE v1.0.0.svg

فایل‌های آموزشی (دانلود)

XLSXProtobuf Compatibility Change Record v1 v1.0.0.xlsxفایل‌های آموزشی (دانلود)
DOCXProtobuf Compatibility Change Record v1 WORKSHEET v1.0.0.docxفایل‌های آموزشی (دانلود)
PDFProtobuf Compatibility Change Record v1 WORKSHEET v1.0.0.pdfفایل‌های آموزشی (دانلود)