
Heç Kimin Danışmadığı Sinxronizasiya Növbəsi: Oflayn POS Əslində İki Kassa Aparatını Necə Uzlaşdırır?
Biz Pultrack-i qururuq — qeyri-sabit elektrik, zəif internet və tez-tez eyni rəfdə iki valyuta ilə işləyən kiçik pərakəndə satıcılar üçün kassa (POS) və inventar tətbiqi. Ona görə də "oflayn-əsaslı POS" haqqında mühəndislik yazıları dalğası yayılanda, biz onları arxitektura diaqramı kimi yox, mağaza sahibinin gözü ilə oxuyuruq: adi bir çərşənbə günü şəbəkə növbənin ortasında kəsiləndə və iki nəfər hələ də müştəri qəbul edərkən nə baş verir sualı kimi.
Oflayn-əsaslı müzakirədə əslində yeni olan nədir?
Oflayn-əsaslı kassa dizaynı haqqında son texniki yazılar bir məsələdə həmfikirdir: oflayn iş rejimi artıq ətrafında yamaq vurulan kənar hal kimi qəbul edilmir, bütün sistemin başlanğıc fərziyyəsinə çevrilib.[1] Tətbiqlər tanış bir stekə tərəf yaxınlaşır — cihazda yerli baza (IndexedDB və ya SQLite), gözləyən əməliyyatlar növbəsi, idempotent sinxronizasiya API-ləri və bağlantı bərpa olunanda müəyyən növ konflikt həlli.[1] Bir sıra satıcı səhifələri bunu texniki detal kimi yox, biznes vədi kimi təqdim edir: internet əməkdaşlıq etməsə də kassa işləməyə davam edir, deməli mağaza qazanmağa davam edir.[2] Bu çərçivə faydalıdır və əsasən dəqiqdir. Amma açıq mənbələrdə demək olar heç biri əsl vaxtı — iki oflayn cihaz yenidən qoşulduqdan sonrakı saniyə və dəqiqələrdə, hər ikisi eyni malı satdığını, eyni müştəriyə pulu qaytardığını, ya da eyni növbəni bağladığını iddia edəndə nə baş verdiyi — üzərində keçirmir. Məhz elə bu hissə kiçik mağazanın sonradan sistemə etimad edib-etməyəcəyini müəyyən edir.
Bir kassalı mağaza belə bu problemə nə üçün rast gəlir?
Uzlaşma konfliktlərinin yalnız "çoxfilial" və ya "korporativ" problem olduğunu düşünmək cəlbedicidir. Amma belə deyil. Bir bucaq mağazası bu problemə oflayn vəziyyətdə satışı qeyd etməyin birdən çox yolu olan kimi rast gəlir — kassadaki telefon və anbar yanındaki planşet, kassirin cihazı və sahibin cihazı, ya da elektrik kəsilməsindən sonra sinxronizasiya ortasında yenidən başladılan eyni cihaz. Bunların hər biri istehsal mühitindəki oflayn-əsaslı dizaynlarda istifadə olunan mənada ayrıca bir "qovşaq"dır və hər biri serverlə yenidən əlaqə qura bilənə qədər öz yerli yazılarını növbəyə qoyur.[1] Arxitektural nümunə bunu sinxronizasiya növbələri və idempotent əməliyyatlarla həll edir ki, bir əməliyyatın təkrar icrası ikiqat ödəniş və ya ikiqat anbar azalması yaratmasın.[1] Bu düzgün mühəndislik cavabıdır. Pərakəndə satış sualı isə fərqlidir: eyni fiziki növbə iki yerli baxımdan "doğru" hadisə versiyası yaradanda — məsələn, bir cihazda tətbiq olunmuş güzəşt və digərində eyni malın tam qiymətlə satışı qeyd olunanda — mağazanın gündəlik cəmi hansı versiyanı əks etdirir və mağaza sahibi bunu kassadaki pulu artıq uzlaşdırmadan əvvəl, yoxsa sonra öyrənir?
"Gəlirin fasiləsizliyi" nəyi kənarda qoyur?
Satıcılar getdikcə oflayn imkanı gəlirin fasiləsizliyi baxımından təsvir edir: şəbəkə işləmədiyi üçün kassa satışı dayandırmır.[3] Bu, xüsusilə bağlantı kəsilmələrinin nadir yox, adi hal olduğu bazarlar üçün ədalətli və vacib bir iddiadır. Amma kəsinti zamanı gəlirin fasiləsizliyi hekayənin yalnız yarısıdır. Digər yarısı isə kəsintidən sonrakı uzlaşma dəqiqliyidir — sonda əsas sistemə sinxronlaşan cəmlərin kassada, maldan-mala, valyutadan-valyutaya faktiki baş verənlərə uyğun olub-olmaması. İki valyutanı yanaşı işlədən mağaza üçün bu, daha az yox, daha çox əhəmiyyət kəsb edir. Bir mübadilə kursu ilə yerli valyutada qeyd olunan oflayn satış, kurs dəyişdikdən saatlarca sonra sinxronlaşanda, rəfdə göstərilən qiymətlə hesabatların indi göstərdiyi arasında kiçik amma real bir fərq yaradır. Nəzərdən keçirdiyimiz açıq oflayn-əsaslı yazıların heç biri xüsusilə çoxvalyutalı uzlaşma məsələsinə toxunmur — bu, ört-basdır edilməkdən çox, açıq şəkildə adlandırılmalı bir boşluqdur.
"Yerli-əsaslı" ilə "uzlaşma baxımından təhlükəsiz" eyni şeydir?
Avtomatik olaraq yox. Cari oflayn-əsaslı materiallardaki daha geniş arqument ondan ibarətdir ki, kiçik satıcılara "oflayn rejimli bulud POS" lazım deyil — onlara internetin bağımlılıq yox, sinxronizasiya kanalı kimi qəbul edildiyi ticarət infrastrukturu lazımdır.[4] Bu, əsaslı bir dizayn prinsipidir və bağlantı haqqında düşünməyin düzgün yoludur. Amma "yerli-əsaslı" anlayışı məlumatın harada saxlanıldığını və necə tutulduğunu təsvir edir; öz-özlüyündə iki yerli həqiqətin bir düzgün növbə cəminə birləşəcəyinə zəmanət vermir. Konflikt həlli məntiqi — sonuncu yazı qalib gəlir, əl ilə baxış növbələri, hadisə-mənbəli təkrar icra — real ödənişləri olan bir dizayn seçimidir və elə bu hissə mağaza sahibinin bağlanış vaxtı ekrandaki rəqəmə etibar edə bilib-bilməyəcəyini müəyyən edir. Praktikada "oflayn işləyə bilən"i "uzlaşma baxımından təhlükəsiz"dən ayıran bir neçə praktik nümunə:
- Hər oflayn əməliyyat növbəyə qoyulmadan əvvəl cihaz tərəfindən yaradılan sabit, unikal ID alır, beləliklə təkrar icra və ya təkrar sinxronizasiya heç vaxt ikiqat hesablamaya səbəb ola bilmir.
- Konfliktlər insana çatdırılır — sadə "bu iki qeyd bir-birinə uyğun gəlmir, birini seçin" xəbərdarlığı belə olsa — hansı cihazın axırıncı sinxronlaşdığına baxmayaraq susqun şəkildə həll edilmək yerinə.
- Valyuta və mübadilə kursu dəyərləri satış anına bağlanır, sinxronizasiya vaxtı yenidən hesablanmır, beləliklə gecikmiş sinxronizasiya növbənin bəyan olunmuş dəyərini gizlicə dəyişmir.
- Növbə cəmi yalnız son bilinən vəziyyətdən yox, tam hadisə jurnalından yenidən qurulur, beləliklə baxış hansı cihazın nəyi nə vaxt qeyd etdiyini dəqiq göstərə bilir.
Kiçik mağaza almazdan əvvəl bunu necə qiymətləndirməlidir?
Bu mövzuda nəşr olunanların çoxu müstəqil auditlərdən yox, satıcı bloqlarından, mühəndislik nümunə araşdırmalarından və məhsul marketinq səhifələrindən gəldiyi üçün, "oflayn-əsaslı" etiketinin özünü zəmanət yox, marketinq qısaltması kimi qəbul etmək dəyərlidir. Əsas arxitektura — yerli saxlama, sinxronizasiya növbələri, idempotent API-lər — həqiqətən müxtəlif məhsullar arasında bir-birinə yaxınlaşır.[1] Çox dəyişən və çox nadir hallarda açıq şəkildə sənədləşdirilən isə hər satıcının qarışıq ortanı — çoxcihazlı konfliktlər, sinxronizasiya gecikməsi zamanı valyuta sürüşməsi, mağaza sahibinin mübahisəli əməliyyatı sadəcə cəmə etibar etmək yerinə görüb düzəldə bilib-bilməməsi — necə idarə etdiyidir. Pultrack-də biz mühəndislik vaxtımızın ən çoxunu məhz bu hissəyə sərf edirik, çünki işlədikdə görünməz, işləmədikdə isə baha başa gəlir: hər oflayn satış öz vaxt möhürünü, cihaz mənşəyini və kilidlənmiş mübadilə kursunu daşıyır, ziddiyyətli qeydlər isə bir-birini səssizcə üstələmək yerinə baxış üçün üzə çıxır. Biz düşünürük ki, oflayn dayanıqlılıq haqqında danışmağın daha dürüst yolu bu deyil: yalnız "satış davam edir", həm də "sonradan düzgün sayır". Əgər oflayn-əsaslı POS variantlarını müqayisə edirsinizsə, satıcıdan soruşulmalı suallar iş vaxtı iddiaları haqqında olmamalıdır. Onlar əvəzinə, hər ikisi oflayn olan iki cihaz eyni vaxtda yenidən onlayn olanda rəqəmlərinizə nə baş verdiyi haqqında olmalıdır.