ווי צו מאַכן באַקאַפּס, גענומען אין חשבון אַז מיר האָבן אַפּטאַמייז די לעצט אַפּעריישאַנז, אַ ריזיק דאַטאַבייס פון טעראַביטעס און דאַטן וואָס זענען דערהייַנטיקט, זאָגן, פֿאַר די לעצטע דריי טעג, און דעמאָלט קיין פּראָוסידזשערז פּאַסירן?
מיר קענען מאַכן אונדזער אייגענע לייזונג און שרייַבן אויף די באַש: קלייַבן די באַקאַפּ קאפיעס אין אַזאַ און אַזאַ אַ וועג. אפֿשר עס איז ניט דאַרפֿן צו קראַטש עפּעס, און די וועלאָסיפּעד איז ינווענטאַד לאַנג צוריק?
זאל ס אָנהייבן מיט די בעסטער פּראַקטיסיז. מייַן חברים שטענדיק רעקאָמענדירן, אין ענטפער צו פֿראגן וועגן באַקאַפּס, צו דערמאָנען זיי וועגן די Yandex.Cloud דינסט, ווו דעם פּראָבלעם איז שוין סאַלווד. אַזוי נוצן עס אויב מעגלעך.
עס איז קיין גאַנץ לייזונג פֿאַר באַקאַפּס, אַ הונדערט פּראָצענט געבויט אין קליקכאָוסע. עס זענען עטלעכע בלאַנקס וואָס קענען זיין געוויינט. צו באַקומען אַ גאַנץ לייזונג, איר וועט האָבן צו טינקער אַ ביסל מאַניואַלי אָדער מאַכן ראַפּערז אין די פאָרעם פון סקריפּס.
איך וועל אָנהייבן מיט די סימפּלאַסט סאַלושאַנז און ענדיקן מיט די מערסט סאַפיסטאַקייטיד, דיפּענדינג אויף די באַנד פון דאַטן און די גרייס פון דעם קנויל. די גרעסערע די קנויל, די מער קאָמפּליצירט די לייזונג ווערט.
מאַכן אַ דאַמפּ ניצן די קליקכאָוסע קליענט - קלייַבן * פון טיש צו טעקע. דורך פעליקייַט איר וועט באַקומען אַ טעקע אין טאַבסעפּאַראַטעד פֿאָרמאַט. אויב איר ווילן צו זיין מער עפעקטיוו, איר קענען טאָן דאָס אין געבוירן פֿאָרמאַט.
אויב די סומע פון דאַטן איז גרעסער, די באַקאַפּ וועט נעמען מער צייט און אַ פּלאַץ פון פּלאַץ. דאָס איז גערופן אַ לאַדזשיקאַל באַקאַפּ; עס איז נישט טייד צו די קליקכאָוסע דאַטן פֿאָרמאַט. אויב דאָס איז, ווי אַ לעצטע ריזאָרט איר קענען נעמען אַ באַקאַפּ און צופֿעליקער עס צו MySQL פֿאַר אָפּזוך.
פֿאַר מער אַוואַנסירטע קאַסעס, ClickHouse האט אַ געבויט-אין פיייקייט צו שאַפֿן אַ מאָמענטבילד פון פּאַרטישאַנז אין די היגע טעקע סיסטעם. דעם שטריך איז בנימצא ווי אַ בקשה טוישן טיש פרירן צעטיילונג. אָדער פשוט טוישן טיש פרירן - דאָס איז אַ מאָמענטבילד פון די גאנצע טיש.
דער מאָמענטבילד וועט זיין באשאפן קאַנסיסטאַנטלי פֿאַר איין טיש אויף איין שאַרד, דאָס איז, עס איז אוממעגלעך צו שאַפֿן אַ קאָנסיסטענט מאָמענטבילד פון די גאנצע קנויל אין דעם וועג. אבער פֿאַר רובֿ טאַסקס עס איז ניט אַזאַ נויט, און עס איז גענוג צו ויספירן אַ בקשה אויף יעדער שאַרד און באַקומען אַ קאָנסיסטענט מאָמענטבילד. עס איז באשאפן אין די פאָרעם פון כאַרדלינקס און דעריבער טוט נישט נעמען נאָך פּלאַץ. דערנאָך, איר נאָכמאַכן דעם מאָמענטבילד צו די באַקאַפּ סערווער אָדער צו די סטאָרידזש וואָס איר נוצן פֿאַר באַקאַפּס.
ריסטאָרינג אַזאַ אַ באַקאַפּ איז גאַנץ גרינג. ערשטער, מאַכן טישן ניצן יגזיסטינג טיש זוך. דערנאָך, נאָכמאַכן די געראטעוועט סנאַפּשאַץ פון די פּאַרטישאַנז צו Directory-דעטאַטשעד פֿאַר די טישן און לויפן די אָנפֿרעג צוטשעפּען צעטיילונג. דעם לייזונג איז גאַנץ פּאַסיק פֿאַר די מערסט ערנסט וואַליומז פון דאַטן.
מאל איר דאַרפֿן עפּעס אפילו קילער - אין קאַסעס ווו איר האָבן טענס אָדער אפילו הונדערטער פון טעראַביטעס אויף יעדער סערווער און הונדערטער פון סערווערס. עס איז אַ לייזונג דאָ וואָס איך פּיקט זיך פון מיין חברים פון Yandex.Metrica. איך וואָלט נישט רעקאָמענדירן עס צו אַלעמען - לייענען עס און באַשליסן פֿאַר זיך צי עס איז פּאַסיק אָדער נישט.
ערשטער איר דאַרפֿן צו שאַפֿן עטלעכע סערווערס מיט גרויס דיסק שעלוועס. דערנאָך, אויף די סערווערס, כאַפּן עטלעכע קליקקכאַוס סערווערס און קאַנפיגיער זיי אַזוי אַז זיי אַרבעטן ווי אן אנדער רעפּליקע פֿאַר די זעלבע שאַרדז. און דעמאָלט נוצן אַ טעקע סיסטעם אָדער עטלעכע געצייַג אויף די סערווערס וואָס אַלאַוז איר צו שאַפֿן סנאַפּשאַץ. דאָ זענען צוויי אָפּציעס. דער ערשטער אָפּציע איז LVM סנאַפּשאַץ, די רגע אָפּציע איז ZFS אויף לינוקס.
נאָך דעם, יעדער טאָג איר דאַרפֿן צו מאַכן אַ מאָמענטבילד, עס וועט ליגן און נעמען עטלעכע פּלאַץ. געוויינטלעך, אויב די דאַטן ענדערונגען, די פּלאַץ פון פּלאַץ וועט פאַרגרעסערן מיט צייט. דעם מאָמענטבילד קענען זיין גענומען אויס אין קיין צייַט און די דאַטן געזונט, אַזאַ אַ מאָדנע לייזונג. פּלוס, מיר אויך דאַרפֿן צו באַגרענעצן די רעפּלאַקאַז אין די קאַנפיגיעריישאַן אַזוי אַז זיי טאָן ניט פּרובירן צו ווערן פירער.
וועט עס זיין מעגלעך צו אָרגאַניזירן אַ קאַנטראָולד אָפּשטיי פון רעפּלאַקאַז אין די שאַפץ?
דעם יאָר איר זענט פּלאַנירונג צו מאַכן שאַפץ אין ClickHouse. וועט עס זיין מעגלעך צו אָרגאַניזירן אַ קאַנטראָולד אָפּשטיי פון רעפּלאַקאַז אין זיי? מיר וואָלט ווי צו נוצן עס צו באַשיצן זיך פון נעגאַטיוו סינעריאָוז מיט אַלטערס און אנדערע ענדערונגען.
איז עס מעגלעך צו מאַכן אַ צוריקצאָל פֿאַר אַלטערס? פֿאַר בייַשפּיל, אין אַ יגזיסטינג שטיל, נעמען און זאָגן אַז ביז דעם מאָמענט איר צולייגן די ענדערונגען, און פון דעם מאָמענט איר האַלטן אַפּלייינג די ענדערונגען?
אויב אַ באַפֿעל געקומען צו אונדזער קנויל און צעבראכן עס, מיר האָבן אַ קאַנדישאַנאַל רעפּליקע מיט אַ שעה אָפּשטיי, ווו מיר קענען זאָגן אַז לאָזן אונדז נוצן עס אין דעם מאָמענט, אָבער מיר וועלן נישט צולייגן ענדערונגען אין די לעצטע צען מינוט?
איצט די צווייטע קשיא איז צי Btrfs קענען זיין געוויינט. צו אָנהייבן מיט, אויב איר האָבן LVM, LVM סנאַפּשאַץ זענען גענוג, און די טעקע סיסטעם קענען זיין עקסט 4, עס טוט נישט ענין. מיט Btrts, אַלץ דעפּענדס אויף דיין דערפאַרונג אין ניצן עס. דאָס איז אַ דערוואַקסן טעקע סיסטעם, אָבער עס זענען נאָך עטלעכע סאַספּישאַנז וועגן ווי אַלץ וועט אַרבעטן אין פיר אין אַ באַזונדער סצענאַר. איך וואָלט נישט רעקאָמענדירן ניצן דעם אויב איר האָבן Btrfs אין פּראָדוקציע.
וואָס זענען די בעסטער פּראַקטיסיז אין דאַטן ריכאַרדינג?
די אַרויסגעבן פון רעשאַרדינג איז קאָמפּלעקס און מאַלטיפאַסאַטיד. דאָ זענען עטלעכע מעגלעך ענטפֿערס. איר קענען גיין פֿון איין זייַט און זאָגן דעם - ClickHouse טוט נישט האָבן אַ געבויט-אין רעשאַרדינג שטריך. אבער איך האב מורא אז דער ענטפער וועט נישט פאסירן פאר קיינעם. דעריבער, איר קענען גיין פון די אנדערע זייַט און זאָגן אַז קליקכאָוסע האט פילע וועגן צו ריסטאַרט דאַטן.
אויב דער קנויל לויפט אויס פון פּלאַץ אָדער עס קען נישט שעפּן די מאַסע, איר לייגן נייַ סערווערס. אָבער די סערווערס זענען ליידיק דורך פעליקייַט, עס איז קיין דאַטן אויף זיי, עס איז קיין מאַסע. איר דאַרפֿן צו ריעריינדזש די דאַטן אַזוי אַז עס ווערט יוואַנלי פאַרשפּרייטן איבער די נייַ, גרעסערע קנויל.
דער ערשטער וועג דאָס קענען זיין געטאן איז צו נאָכמאַכן טייל פון די פּאַרטישאַנז צו נייַע סערווערס ניצן אַ בקשה טוישן טיש ברענגען צעטיילונג. פֿאַר בייַשפּיל, איר האָבן פּאַרטישאַנז פּער חודש, און איר נעמען די ערשטער חודש פון 2017 און נאָכמאַכן עס צו אַ נייַע סערווער, און נאָכמאַכן די דריט חודש צו עטלעכע אנדערע נייַע סערווערס. און איר טאָן דאָס ביז עס ווערט מער אָדער ווייניקער אפילו.
אַריבערפירן קענען זיין דורכגעקאָכט בלויז פֿאַר די פּאַרטישאַנז וואָס טאָן ניט טוישן בעשאַס רעקאָרדינג. פֿאַר פריש פּאַרטישאַנז, רעקאָרדינג וועט האָבן צו זיין פאַרקריפּלט, ווייַל זייער אַריבערפירן איז נישט אַטאָמישע. אַנדערש, איר וועט סוף אַרויף מיט דופּליקאַטן אָדער גאַפּס אין די דאַטן. אָבער, דעם אופֿן איז פּראַקטיש און אַרבעט גאַנץ יפעקטיוולי. פאַרטיק קאַמפּרעסט פּאַרטישאַנז זענען טראַנסמיטטעד איבער די נעץ, דאָס איז, די דאַטן זענען נישט קאַמפּרעסט אָדער שייַעך-ענקאָוד.
דער אופֿן האט איין שטערונג, און עס דעפּענדס אויף די שאַרדינג סכעמע, צי איר פּלעדזשד צו דעם שאַרדינג סכעמע, וואָס שאַרדינג שליסל איר האָבן. אין דיין ביישפּיל פֿאַר דעם פאַל מיט מעטריקס, די שאַרדינג שליסל איז די האַש פון דעם דרך. ווען איר אויסקלייַבן אַ דיסטריביוטיד טיש, עס גייט צו אַלע שאַרדז אין דעם קנויל אין אַמאָל און נעמט דאַטן פון דאָרט.
דעם מיטל אַז עס אַקשלי טוט נישט ענין צו איר וואָס דאַטן ענדיקט זיך אויף וואָס שאַרד. די הויפּט זאַך איז אַז דאַטן אויף איין וועג ענדס אויף איין שערד, אָבער וואָס איינער איז נישט וויכטיק. אין דעם פאַל, די טראַנספערינג פון פאַרטיק פּאַרטישאַנז איז גאנץ, ווייַל מיט סעלעקטעד קוויריז איר וועט אויך באַקומען גאַנץ דאַטן - צי איידער ריסטאַרטינג אָדער נאָך, די סכעמע טוט נישט טאַקע ענין.
אבער עס זענען קאַסעס וואָס זענען מער קאָמפּליצירט. אויב איר פאַרלאָזנ זיך אַ ספּעציעל שאַרדינג סכעמע אין די אַפּלאַקיישאַן לאָגיק מדרגה, אַז דער קליענט איז ליגן אויף אַזאַ און אַזאַ אַ שאַרד, און די בקשה קענען זיין געשיקט גלייַך דאָרט און נישט צו די דיסטריביוטיד טיש. אָדער איר נוצן אַ פערלי פריש ווערסיע פון ClickHouse און האָבן ענייבאַלד די באַשטעטיקן אַפּטאַמייז האָפּקען אַניוזד שאַרדז. אין דעם פאַל, בעשאַס די אויסקלייַבן אָנפֿרעג, דער אויסדרוק אין די ווו אָפּטיילונג וועט זיין אַנאַלייזד און עס וועט זיין קאַלקיאַלייטיד וואָס שאַרדז דאַרפֿן צו זיין געוויינט לויט די שאַרדינג סכעמע. דאָס אַרבעט צוגעשטעלט אַז די דאַטן זענען פּאַרטישאַנד פּונקט לויט דעם שאַרדינג סכעמע. אויב איר ריעריינדזשד זיי מאַניואַלי, די קאָרעספּאָנדענץ קען טוישן.
אַזוי דאָס איז דער אופֿן נומער איין. און איך ווארט אויף דיין ענטפער, צי דער אופֿן איז פּאַסיק, אָדער לאָמיר פאָרזעצן.
וולאדימיר קאָלאָבאַעוו, פירן סיסטעם אַדמיניסטראַטאָר אין אַוויטאָ: אַלעקסיי, דער אופֿן וואָס איר האָט דערמאנט טוט נישט אַרבעטן זייער גוט ווען איר דאַרפֿן צו פאַרשפּרייטן די מאַסע, אַרייַנגערעכנט לייענען. מיר קענען נעמען אַ צעטיילונג וואָס איז כוידעשלעך און קענען נעמען די פריערדיקע חודש צו אן אנדער נאָדע, אָבער ווען אַ בקשה קומט פֿאַר די דאַטן, מיר וועלן בלויז לאָדן עס. אָבער מיר וואָלט ווי צו מאַסע די גאנצע קנויל, ווייַל אַנדערש, פֿאַר עטלעכע מאָל די גאנצע לייענען מאַסע וועט זיין פּראַסעסט דורך צוויי שאַרדז.
אַלעקסיי מילאָווידאָוו: דער ענטפער דאָ איז מאָדנע - יאָ, עס איז שלעכט, אָבער עס קען אַרבעטן. איך וועט דערקלערן פּונקט ווי. עס איז ווערט צו קוקן אין די מאַסע סצענאַר וואָס קומט הינטער דיין דאַטן. אויב דאָס איז מאָניטאָרינג דאַטן, מיר קענען כּמעט זיכער זאָגן אַז די וואַסט מערהייַט פון ריקוועס זענען פֿאַר פריש דאַטן.
איר האָט אינסטאַלירן נייַע סערווערס, מייגרייטיד אַלט פּאַרטישאַנז, אָבער אויך פארענדערט ווי פריש דאַטן זענען רעקאָרדעד. און פריש דאַטן וועט זיין פאַרשפּרייטן איבער די קנויל. אזוי, נאָך בלויז פינף מינוט, ריקוועס פֿאַר די לעצטע פינף מינוט וועט יוואַנלי מאַסע די קנויל; נאָך אַ טאָג, ריקוועס פֿאַר 24 שעה וועט יוואַנלי מאַסע די קנויל. און ריקוועס פֿאַר די פריערדיקע חודש, ליידער, וועט נאָר גיין צו טייל פון די קנויל סערווערס.
אָבער אָפט איר וועט נישט האָבן ריקוועס ספּאַסיפיקלי פֿאַר פעברואר 2019. רובֿ מסתּמא, אויב ריקוועס גיין אין 2019, זיי וועלן זיין פֿאַר די גאנצע 2019 - פֿאַר אַ גרויס צייט, און נישט פֿאַר עטלעכע קליין קייט. און אַזאַ ריקוועס וועט אויך קענען צו מאַסע די קנויל יוואַנלי. אבער אין אַלגעמיין, דיין באַמערקונג איז לעגאַמרע ריכטיק אַז דאָס איז אַן אַד-האָק לייזונג וואָס טוט נישט פאַרשפּרייטן די דאַטן גאָר יוואַנלי.
איך האָבן אַ ביסל מער פונקטן צו ענטפֿערן די קשיא. איינער פון זיי איז וועגן ווי צו טכילעס פּלאַן אַ שאַרדינג סכעמע אַזוי אַז שייַעך-שאַרדינג וואָלט פאַרשאַפן ווייניקער ווייטיק. דאָס איז ניט שטענדיק מעגלעך.
פֿאַר בייַשפּיל, איר האָבן מאָניטאָרינג דאַטן. מאָניטאָרינג דאַטן איז גראָוינג פֿאַר דריי סיבות. דער ערשטער איז די אַקיומיאַליישאַן פון היסטארישע דאַטן. די רגע איז פאַרקער וווּקס. און די דריט איז אַ פאַרגרעסערן אין די נומער פון זאכן וואָס זענען אונטערטעניק צו מאָניטאָרינג. עס זענען נייַע מיקראָ באַדינונגס און מעטריקס וואָס דאַרפֿן צו זיין געראטעוועט.
עס איז מעגלעך אַז פון די, די גרעסטע פאַרגרעסערן איז פארבונדן מיט די דריט סיבה - די פאַרגרעסערן אין די נוצן פון מאָניטאָרינג. און אין דעם פאַל, עס איז ווערט צו קוקן אין די נאַטור פון די מאַסע, וואָס זענען די הויפּט סעלעקציע קוויריז. יקערדיק סעלעקציע קוויריז וועט רובֿ מסתּמא זיין באזירט אויף עטלעכע סאַבסעט פון מעטריקס.
פֿאַר בייַשפּיל, קפּו באַניץ אויף עטלעכע סערווערס דורך עטלעכע סערוויס. עס טורנס אויס אַז עס איז אַ זיכער סובסעט פון שליסלען דורך וואָס איר באַקומען די דאַטן. און די בעטן זיך פֿאַר די דאַטן איז רובֿ מסתּמא גאַנץ פּשוט און איז געענדיקט אין טענס פון מיליסעקאַנדז. געניצט פֿאַר מאָניטאָרינג באַדינונגס און דאַשבאָרדז. איך האף איך פארשטיי דאס ריכטיג.
וולאדימיר קאָלאָבאַעוו: דער פאַקט איז אַז מיר זייער אָפט אַפּעלירן צו היסטארישע דאַטן, ווייַל מיר פאַרגלייַכן די קראַנט סיטואַציע מיט די היסטאָריש אין פאַקטיש צייט. און עס איז וויכטיק פֿאַר אונדז צו האָבן שנעל אַקסעס צו אַ גרויס סומע פון דאַטן, און ClickHouse טוט אַ ויסגעצייכנט אַרבעט מיט דעם.
איר זענט לעגאַמרע רעכט, מיר דערפאַרונג רובֿ פון די לייענען ריקוועס אין די לעצטע טאָג, ווי קיין מאָניטאָרינג סיסטעם. אָבער אין דער זעלביקער צייט, די מאַסע אויף היסטארישע דאַטן איז אויך גאַנץ גרויס. עס איז בייסיקלי פון אַ אַלערטינג סיסטעם וואָס גייט אַרום יעדער דרייסיק סעקונדעס און זאגט צו קליקכאָוסע: "גיב מיר די דאַטן פֿאַר די לעצטע זעקס וואָכן. איצט בויען מיר אַ מין פון מאָווינג דורכשניטלעך פון זיי, און לאָזן אונדז פאַרגלייַכן די קראַנט ווערט מיט די היסטארישע.
איך וואָלט ווי צו זאָגן אַז פֿאַר אַזאַ זייער פריש ריקוועס מיר האָבן נאָך אַ קליין טיש אין וואָס מיר קראָם בלויז צוויי טעג פון דאַטן, און די הויפּט ריקוועס פליען אין עס. מיר שיקן בלויז גרויס היסטארישע פֿראגן צו די גרויס שערד טיש.
אַלעקסיי מילאָווידאָוו: צום באַדויערן, עס טורנס אויס צו זיין שוואַך אָנווענדלעך פֿאַר דיין סצענאַר, אָבער איך וועל זאָגן איר אַ באַשרייַבונג פון צוויי שלעכט און קאָמפּלעקס שאַרדינג סקימז וואָס טאָן ניט דאַרפֿן צו זיין געוויינט, אָבער וואָס זענען געניצט אין די דינסט פון מיין פרענדז.
עס איז אַ הויפּט קנויל מיט Yandex.Metrica events. געשעענישן זענען בלאַט קוקן, קליקס און קאַנווערזשאַנז. רובֿ ריקוועס גיין צו אַ ספּעציפיש וועבזייטל. איר עפֿענען די Yandex.Metrica סערוויס, איר האָט אַ וועבזייטל - avito.ru, גיין צו די באַריכט און אַ בקשה פֿאַר דיין וועבזייטל איז געמאכט.
צוריק אין 2017, איר האָט אַ פּילאָט זאַך גערופֿן רעשאַרדינג. עס איז אפילו אַן אָפּציע אין ClickHouse. לויט ווי איך פארשטיי איז עס נישט געווען. קענען איר זאָגן מיר וואָס דאָס געטראפן? עס מיינט צו זיין זייער באַטייַטיק.
דער גאנצער פּראָבלעם איז אַז אויב עס איז נייטיק צו ריסטאַרט דאַטן אין פּלאַץ, זייער קאָמפּלעקס סינגקראַנאַזיישאַן איז פארלאנגט צו טאָן דאָס אַטאָמישע. ווען מיר האָבן אנגעהויבן צו קוקן ווי די סינגקראַנאַזיישאַן אַרבעט, עס איז געווארן קלאָר אַז עס זענען פונדאַמענטאַל פּראָבלעמס. און די פונדאַמענטאַל פּראָבלעמס זענען נישט בלויז טעאָרעטיש, אָבער תיכף אנגעהויבן צו ווייַזן זיך אין פיר אין די פאָרעם פון עפּעס וואָס קענען זיין דערקלערט זייער פּשוט - גאָרנישט אַרבעט.
איז עס מעגלעך צו צונויפגיסן אַלע דאַטן צוזאַמען איידער איר מאַך עס צו פּאַמעלעך דיסקס?
קשיא וועגן TTL מיט די מאַך צו פּאַמעלעך דיסק אָפּציע אין דעם קאָנטעקסט פון מערדזשיז. איז עס אַ וועג, אנדערע ווי דורך Cron, צו צונויפגיסן אַלע די פּאַרץ אין איין איידער איר מאַך זיי צו פּאַמעלעך דיסקס?
דער ענטפער צו די קשיא איז אַז עס איז מעגלעך צו יז אויטאָמאַטיש קליי אַלע די ברעקלעך אין איין איידער טראַנספערינג זיי - ניט. איך מיין אז דאס איז נישט נויטיק. איר טאָן ניט האָבן צו צונויפגיסן אַלע די פּאַרץ אין איין, אָבער נאָר ציילן אויף די פאַקט אַז זיי וועט זיין טראַנספערד צו פּאַמעלעך דיסקס אויטאָמאַטיש.
די רגע קריטעריאָן איז גרייס. עס איז וועגן מאָווינג גרויס ברעקלעך. איר קענען סטרויערן די שוועל לויט די פריי פּלאַץ אויף די שנעל דיסק, און די דאַטן וועט זיין טראַנספערד אויטאָמאַטיש.
ווי צו מייגרייט צו נייַע ווערסיעס פון ClickHouse אויב עס איז קיין וועג צו קאָנטראָלירן קאַמפּאַטאַבילאַטי אין שטייַגן?
דעם טעמע איז דיסקאַסט קעסיידער אין ClickHouse טעלעגראַם שמועסן גענומען אין חשבון פאַרשידענע ווערסיעס, און נאָך. ווי זיכער איז עס צו אַפּגרייד פֿון ווערסיע 19.11 צו 19.16 און, למשל, פֿון 19.16 צו 20.3. וואָס איז דער בעסטער וועג צו מייגרייט צו נייַע ווערסיעס אָן שטייַגן צו קאָנטראָלירן קאַמפּאַטאַבילאַטי אין די זאַמדקאַסטן?
צווייטנס, אויב עס איז קיין וועג צו קאָנטראָלירן קאַמפּאַטאַבילאַטי אין די זאַמדקאַסטן, און איר ווילן צו דערהייַנטיקן גלייך אין פּראָדוקציע, די רעקאָמענדאַציע איז אַז איר טאָן ניט דאַרפֿן צו טאָן דאָס. ערשטער שאַפֿן אַ זאַמדקאַסטן און פּרובירן. אויב עס איז קיין פּראָבע סוויווע, איר רובֿ מסתּמא טאָן ניט האָבן אַ זייער גרויס פירמע, וואָס מיטל איר קענען נאָכמאַכן עטלעכע פון די דאַטן צו דיין לאַפּטאַפּ און מאַכן זיכער אַז אַלץ אַרבעט ריכטיק אויף עס. איר קענען אפילו כאַפּן עטלעכע רעפּלאַקאַז לאָוקאַלי אויף דיין מאַשין. אָדער איר קענען קלייַבן אַ נייַע ווערסיע ערגעץ נירביי און צופֿעליקער עטלעכע פון די דאַטן דאָרט - דאָס איז, שאַפֿן אַן ימפּראַווייזד פּרובירן סוויווע.
אן אנדער הערשן איז נישט צו דערהייַנטיקן פֿאַר אַ וואָך נאָך די מעלדונג פון די ווערסיע רעכט צו קאַטשינג באַגז אין פּראָדוקציע און סאַבסאַקוואַנט שנעל פיקסיז. לאָמיר רעכענען די נומערינג פון ClickHouse ווערסיעס אַזוי נישט צו צעמישט.
עס איז ווערסיע 20.3.4. די נומער 20 ינדיקייץ די יאָר פון פּראָדוצירן - 2020. פון די פונט פון מיינונג פון וואָס איז ין, דאָס טוט נישט ענין, אַזוי מיר וועלן נישט באַצאָלן ופמערקזאַמקייַט צו עס. ווייַטער - 20.3. מיר פאַרגרעסערן די רגע נומער - אין דעם פאַל 3 - יעדער מאָל מיר מעלדונג אַ מעלדונג מיט עטלעכע נייַע פאַנגקשאַנאַליטי. אויב מיר ווילן צו לייגן עטלעכע שטריך צו ClickHouse, מיר מוזן פאַרגרעסערן דעם נומער. דאָס איז, אין ווערסיע 20.4 קליקכאָוסע וועט אַרבעטן אפילו בעסער. די דריט ציפֿער איז 20.3.4. דאָ 4 איז די נומער פון לאַטע ריליסיז אין וואָס מיר האָבן נישט צוגעלייגט נייַ פֿעיִקייטן, אָבער פאַרפעסטיקט עטלעכע באַגז. און 4 מיטל מיר האבן עס פיר מאל.
קיריל שוואַקאָוו: איך וואָלט ווי צו לייגן אַ ביסל וועגן פּרובירן ינווייראַנמאַנץ. אַלעמען איז זייער דערשראָקן פון פּרובירן ינווייראַנמאַנץ און פֿאַר עטלעכע סיבה זיי גלויבן אַז אויב איר האָבן אַ זייער גרויס קליקכאָוסע קנויל, די פּראָבע סוויווע זאָל זיין ניט ווייניקער אָדער בייַ מינדסטער צען מאל קלענערער. ס'איז בכלל נישט אזוי.
איך קענען זאָגן איר פון מיין אייגן בייַשפּיל. איך האָבן אַ פּרויעקט, און עס איז קליקכאָוסע. אונדזער פּראָבע סוויווע איז נאָר פֿאַר אים - דאָס איז אַ קליין ווירטואַל מאַשין אין העצנער פֿאַר צוואַנציק עוראָס, ווו לעגאַמרע אַלץ איז דיפּלויד. צו טאָן דאָס, מיר האָבן פול אָטאַמיישאַן אין Ansible, און דעריבער, אין פּרינציפּ, עס איז קיין חילוק ווו צו גיין - צו ייַזנוואַרג סערווערס אָדער נאָר צעוויקלען אין ווירטואַל מאשינען.
וואס קען מען טון? עס וואָלט זיין פייַן צו צושטעלן אַ ביישפּיל אין די ClickHouse דאַקיומענטיישאַן וועגן ווי צו צעוויקלען אַ קליין קנויל אין דיין אייגענע היים - אין דאָקער, אין LXC, טאָמער שאַפֿן אַן Ansible פּלייַבאָאָק, ווייַל פאַרשידענע מענטשן האָבן פאַרשידענע דיפּלוימאַנץ. דעם וועט פאַרפּאָשעטערן אַ פּלאַץ. ווען איר נעמען און צעוויקלען אַ קנויל אין פינף מינוט, עס איז פיל גרינגער צו פּרובירן צו געפֿינען עפּעס. דאָס איז פיל מער באַקוועם, ווייַל ראָולינג אין אַ פּראָדוקציע ווערסיע וואָס איר האָט נישט טעסטעד איז אַ וועג צו ינ ערגעצ ניט. מאל עס אַרבעט און מאל עס טוט נישט. און דעריבער, כאָופּינג פֿאַר הצלחה איז שלעכט.
מאַקסים קאָטיאַקאָוו, עלטער באַקענד ינזשעניר אַוויטאָ: איך וועט לייגן אַ ביסל וועגן פּרובירן ינווייראַנמאַנץ פון אַ סעריע פון פּראָבלעמען פייסט דורך גרויס קאָמפּאַניעס. מיר האָבן אַ פול-פלעדזשד קליקכאָוסע אַקסעפּטאַנס קנויל; אין טערמינען פון דאַטן סקימז און סעטטינגס, עס איז אַ פּינטלעך קאָפּיע פון וואָס איז אין פּראָדוקציע. דעם קנויל איז דיפּלויד אין פערלי פּלאַננעד קאַנטיינערז מיט אַ מינימום פון רעסורסן. מיר שרייַבן אַ זיכער פּראָצענט פון די פּראָדוקציע דאַטן דאָרט, צומ גליק עס איז מעגלעך צו רעפּלאַקייט די טייַך אין קאַפקאַ. אַלץ דאָרט איז סינגקראַנייזד און סקיילד - סיי אין טערמינען פון קאַפּאַציטעט און לויפן, און, אין טעאָריע, אַלע אנדערע זאכן זענען גלייַך, עס זאָל ביכייוו ווי פּראָדוקציע אין טערמינען פון מעטריקס. אַלץ פּאַטענטשאַלי יקספּלאָוסיוו איז ערשטער ראָולד אַנטו דעם שטיין און לינקס דאָרט פֿאַר עטלעכע טעג ביז גרייט. אָבער געוויינטלעך, דעם לייזונג איז טייַער, שווער און האט ניט-נול שטיצן קאָס.
אַלעקסיי מילאָווידאָוו: איך וועט זאָגן איר ווי די פּראָבע סוויווע פון אונדזער פרענדז פון Yandex.Metrica איז ווי. איין קנויל האט 600-מאָדנע סערווערס, אנדערן האט 360, און עס איז אַ דריט און עטלעכע קלאַסטערז. די פּראָבע סוויווע פֿאַר איינער פון זיי איז פשוט צוויי שאַרדז מיט צוויי רעפּלאַקאַז אין יעדער. פארוואס צוויי שטערנס? אַזוי אַז איר זענט נישט אַליין. און עס זאָל זיין רעפּלאַקאַז אויך. נאָר אַ זיכער מינימום סומע וואָס איר קענען פאַרגינענ זיך.
דער פּראָבע סוויווע אַלאַוז איר צו קאָנטראָלירן אויב דיין פֿראגן אַרבעט און אויב עפּעס הויפּט איז צעבראכן. אבער אָפט פּראָבלעמס אויפשטיין פון אַ גאָר אַנדערש נאַטור, ווען אַלץ אַרבעט, אָבער עס זענען עטלעכע קליין ענדערונגען אין די מאַסע.
לאמיר דיר געבן א ביישפיל. מיר באַשלאָסן צו ינסטאַלירן אַ נייַע ווערסיע פון ClickHouse. עס איז געווען אַרייַנגעשיקט אויף אַ פּראָבע סוויווע, אָטאַמייטיד טעסץ האָבן שוין געענדיקט אין Yandex.Metrica זיך, וואָס פאַרגלייַכן דאַטן אויף די אַלט ווערסיע און די נייַע, פליסנדיק די גאנצע רערנ - ליניע. און פון קורס, גרין טעסץ פון אונדזער סי. אַנדערש מיר וואָלט נישט אפילו האָבן פארגעלייגט דעם ווערסיע.
אלעס איז גוט. מיר אָנהייבן צו מאַך אין פּראָדוקציע. איך באַקומען אַ אָנזאָג אַז די מאַסע אויף די גראַפס איז געוואקסן עטלעכע מאָל. מיר ראָולינג צוריק די ווערסיע. איך קוק אויף די גראַפיק און זען: די מאַסע אַקשלי געוואקסן עטלעכע מאָל בעשאַס די ראָולאַוט, און דיקריסט צוריק ווען זיי ראָולד אויס. דערנאָך מיר סטאַרטעד ראָולינג צוריק די ווערסיע. און די מאַסע איז געוואקסן אין די זעלבע וועג, און איז צוריק אין די זעלבע וועג. אַזוי די מסקנא איז דאָס: די מאַסע איז געוואקסן רעכט צו דער אויסלייג, גאָרנישט חידוש.
דערנאָך עס איז געווען שווער צו איבערצייגן חברים צו ינסטאַלירן די נייַע ווערסיע. איך זאג: "עס איז אָוקיי, ראָולד אויס. האַלטן דיין פינגער קראָסט, אַלץ וועט אַרבעטן. איצט די מאַסע אויף די גראַפס איז געוואקסן, אָבער אַלץ איז גוט. הענג זיך דארט אריין." אין אַלגעמיין, מיר האבן דאָס, און דאָס איז עס - די ווערסיע איז רעלעאַסעד פֿאַר פּראָדוקציע. אבער כּמעט מיט יעדער אויסלייג, ענלעך פּראָבלעמס אויפשטיין.
אויב איר דאַרפֿן צו וואָג אַ קליקכאָוסע קנויל דורך די נומער פון פּשוט ריקוועס, איך רעקאָמענדירן די סימפּלאַסט זאַך - פאַרגרעסערן די נומער פון רעפּלאַקאַז און שיקן ריקוועס צו אַ טראַפ רעפּליקע. אויב איין רעפּליקע האלט פינף הונדערט ריקוועס פּער סעקונדע, וואָס איז גאָר רעאַליסטיש, דעמאָלט דריי רעפּליקע וועט האַנדלען מיט אַ און אַ האַלב טויזנט.
מאל, פון קורס, איר קענען קאַנפיגיער ClickHouse פֿאַר די מאַקסימום נומער פון פונט רידינגז. וואָס איז דארף פֿאַר דעם? דער ערשטער איז צו רעדוצירן די גראַנולאַריטי פון די אינדעקס. אין דעם פאַל, עס זאָל נישט זיין רידוסט צו איין, אָבער אויף דער באזע אַז די נומער פון איינסן אין די אינדעקס וועט זיין עטלעכע מיליאָן אָדער טענס פון מיליאַנז פּער סערווער. אויב די טיש האט דערט מיליאָן ראָוז, די גראַנולאַריטי קענען זיין באַשטימט צו 64.
וואָס קענען איך טוויק אין ClickHouse אַזוי אַז מער דאַטן זענען אין די קאַש?
זאל ס ימאַדזשאַן אַ סיטואַציע - די סערווערס האָבן 256 גיגאבייט פון באַראַן, אין די טעגלעך רוטין קליקכאָוסע נעמט וועגן 60-80 גיגאבייט, אין שפּיץ - אַרויף צו 130. וואָס קענען זיין ענייבאַלד און טוויקט אַזוי אַז מער דאַטן זענען אין די קאַש און, אַקאָרדינגלי, עס זענען ווייניקערע טריפּס צו די דיסק?
טיפּיקאַללי, די בלאַט קאַש פון די אָפּערייטינג סיסטעם טוט אַ גוט אַרבעט. אויב איר נאָר עפֿענען די שפּיץ, קוק דאָרט קאַשט אָדער פריי - עס אויך זאגט ווי פיל איז קאַשט - דעמאָלט איר וועט באַמערקן אַז אַלע די פריי זכּרון איז געניצט פֿאַר די קאַש. און ווען לייענען די דאַטן, עס וועט זיין לייענען נישט פֿון די דיסק, אָבער פֿון די באַראַן. אין דער זעלביקער צייט, איך קענען זאָגן אַז די קאַש איז יפעקטיוולי געניצט ווייַל עס איז די קאַמפּרעסט דאַטן וואָס איז קאַשט.
אָבער, אויב איר ווילן צו פאַרגיכערן עטלעכע פּשוט פֿראגן אפילו מער, עס איז מעגלעך צו געבן אַ קאַש אין די דעקאָמפּרעססעד דאַטן ין ClickHouse. עס איז גערופן ונקאָמפּרעססעד קאַש. אין די קאַנפיגיעריישאַן טעקע config.xml, שטעלן די ונקאָמפּרעססעד קאַש גרייס צו די ווערט איר דאַרפֿן - איך רעקאָמענדירן ניט מער ווי האַלב פון די פריי באַראַן, ווייַל די מנוחה וועט גיין אונטער די בלאַט קאַש.
אין אַדישאַן, עס זענען צוויי סעטטינגס פֿאַר בעטן מדרגה. ערשטער באַשטעטיקן - נוצן ונקאָמפּרעססעד קאַש - כולל זייַן נוצן. עס איז רעקאַמענדיד צו געבן עס פֿאַר אַלע ריקוועס, אַחוץ שווער אָנעס, וואָס קענען לייענען אַלע די דאַטן און ויסמעקן די קאַש. און די רגע באַשטעטיקן איז עפּעס ווי די מאַקסימום נומער פון שורות צו נוצן די קאַש. עס אויטאָמאַטיש לימאַץ גרויס קוויריז אַזוי אַז זיי בייפּאַס די קאַש.
ווי קען איך קאַנפיגיער סטאָרידזש_קאָנפיגוראַטיאָן פֿאַר סטאָרידזש אין באַראַן?
אין די נייַע ClickHouse דאַקיומענטיישאַן איך לייענען דעם אָפּטיילונג שייַכות מיט דאַטן סטאָרידזש. די באַשרייַבונג כּולל אַ ביישפּיל מיט שנעל SSD.
דעם באַשטעטיקן אַפעקץ די סטאָרידזש פון דאַטן טשאַנגקס, און זייער פֿאָרמאַט טוט נישט טוישן אין קיין וועג.
זאל ס נעמען אַ נעענטער קוק.
איר קענען קאַנפיגיער דאַטן סטאָרידזש אין באַראַן. אַלע וואָס איז קאַנפיגיערד פֿאַר די דיסק איז זייַן דרך. איר מאַכן אַ tmpfs צעטיילונג וואָס איז מאָונטעד צו עטלעכע דרך אין דער טעקע סיסטעם. איר ספּעציפיצירן דעם דרך ווי דער דרך פֿאַר סטאָרינג דאַטן פֿאַר די האָטטעסט צעטיילונג, שטיק פון דאַטן אָנהייבן צו אָנקומען און זיין געשריבן דאָרט, אַלץ איז גוט.
אָבער איך טאָן נישט רעקאָמענדירן צו טאָן דאָס ווייַל פון נידעריק רילייאַבילאַטי, כאָטש אויב איר האָבן לפּחות דריי רעפּלאַקאַז אין פאַרשידענע דאַטן סענטערס, דאָס איז מעגלעך. אויב עפּעס כאַפּאַנז, די דאַטן וועט זיין געזונט. זאל ס ימאַדזשאַן אַז די סערווער איז פּלוצלינג אויסגעדרייט אַוועק און פארקערט אויף. די צעטיילונג איז געווען מאָונטעד ווידער, אָבער דאָרט איז גאָרנישט. ווען דער קליקכאָוסע סערווער סטאַרץ, עס זעט אַז עס טוט נישט האָבן די ברעקלעך, כאָטש, לויט ZooKeeper מעטאַדאַטאַ, זיי זאָל זיין דאָרט. ער קוקט אין וואָס רעפּלאַקאַז האָבן זיי, ריקוועס זיי און דאַונלאָודז זיי. דעם וועג די דאַטן וועט זיין געזונט.
אין דעם זינען, סטאָרינג דאַטן אין באַראַן איז נישט פאַנדאַמענטאַלי אַנדערש פון סטאָרינג עס אויף דיסק, ווייַל ווען דאַטן זענען געשריבן צו דיסק, עס אויך ערשטער ענדס אין די בלאַט קאַש און איז פיזיקלי געשריבן שפּעטער. דעם דעפּענדס אויף די טעקע סיסטעם מאַונטינג אָפּציע. אָבער נאָר אין פאַל, איך וועט זאָגן אַז קליקכאָוסע טוט נישט פסינק ווען ינסערטינג.
אין דעם פאַל, די דאַטן אין די באַראַן זענען סטאָרד אין פּונקט די זעלבע פֿאָרמאַט ווי אויף די דיסק. די סעלעקט אָנפֿרעג אין די זעלבע וועג סאַלעקץ די ברעקלעך וואָס דאַרפֿן צו זיין לייענען, סאַלעקץ די נייטיק דאַטן ריינדזשאַז אין די ברעקלעך, און לייענט זיי. און פריער אַרבעט פּונקט די זעלבע, ראַגאַרדלאַס פון צי די דאַטן זענען געווען אין באַראַן אָדער אויף דיסק.
צו וואָס נומער פון יינציק וואַלועס איז נידעריק קאַרדינאַליטי עפעקטיוו?
נידעריק קאַרדינאַליטי איז קלעווערלי דיזיינד. עס קאַמפּיילז דאַטן דיקשאַנעריז, אָבער זיי זענען היגע. ערשטער, עס זענען פאַרשידענע דיקשאַנעריז פֿאַר יעדער שטיק, און צווייטנס, אפילו אין איין שטיק זיי קענען זיין אַנדערש פֿאַר יעדער קייט. ווען די נומער פון יינציק וואַלועס ריטשאַז אַ שוועל נומער - איין מיליאָן, איך טראַכטן - די ווערטערבוך איז פשוט שעלווד און אַ נייַע איז באשאפן.
וואָס זענען די בעסטער פּראַקטיסיז פֿאַר פול-טעקסט זוכן אין אַ טיש מיט פינף ביליאָן ראָוז?
עס זענען פאַרשידענע ענטפֿערס. דער ערשטער איז צו זאָגן אַז ClickHouse איז נישט אַ פול-טעקסט זוכן מאָטאָר. עס זענען ספּעציעל סיסטעמען פֿאַר דעם, למשל, עלאַסטיקסאַרטש и ספינקס. אָבער, איך ינקריסינגלי זען מענטשן זאָגן זיי זענען סוויטשינג פון Elasticsearch צו ClickHouse.
פארוואס טוט דאָס פּאַסירן? זיי דערקלערן דעם דורך די פאַקט אַז Elasticsearch סיסיז צו קאָפּע מיט די מאַסע אין עטלעכע וואַליומז, סטאַרטינג מיט די קאַנסטראַקשאַן פון ינדעקסיז. ינדעקסיז ווערן צו קאַמבערסאַם, און אויב איר נאָר אַריבערפירן די דאַטן צו ClickHouse, עס טורנס אויס אַז זיי זענען סטאָרד עטלעכע מאָל מער יפישאַנטלי אין טערמינען פון באַנד. אין דער זעלביקער צייַט, זוכן פֿראגן זענען אָפט נישט אַזוי אַז עס איז נייטיק צו געפֿינען עטלעכע פראַזע אין די גאנצע באַנד פון דאַטן, גענומען אין חשבון מאָרפאָלאָגי, אָבער גאָר אַנדערש אָנעס. פֿאַר בייַשפּיל, געפֿינען עטלעכע סאַבסיקוואַנס פון ביטעס אין די לאָגס אין די לעצטע ביסל שעה.
אין דעם פאַל, איר מאַכן אַן אינדעקס אין ClickHouse, דער ערשטער פעלד פון וואָס וועט זיין די דאַטע און צייט. און דער גרעסטער דאַטן אָפּשניט וועט זיין באזירט אויף די דאַטע קייט. אין די אויסגעקליבן דאַטע קייט, ווי אַ הערשן, עס איז שוין מעגלעך צו דורכפירן אַ פול-טעקסט זוכן, אפילו ניצן די ברוט קראַפט אופֿן ניצן ווי. דער ווי אָפּעראַטאָר אין ClickHouse איז די מערסט עפעקטיוו ווי אָפּעראַטאָר איר קענען געפֿינען. אויב איר געפֿינען עפּעס בעסער, זאָגן מיר.
אָבער נאָך, ווי אַ פול יבערקוקן. און פול יבערקוקן קענען זיין פּאַמעלעך ניט בלויז אויף די קפּו, אָבער אויך אויף די דיסק. אויב פּלוצלינג איר האָבן איין טעראַביטע פון דאַטן פּער טאָג, און איר זוכן פֿאַר אַ וואָרט בעשאַס דעם טאָג, איר וועט האָבן צו יבערקוקן די טעראַביטע. און עס איז מיסטאָמע אויף רעגולער שווער דרייווז, און אין די סוף זיי וועלן זיין לאָודיד אין אַזאַ אַ וועג אַז איר וועט נישט קענען צו אַקסעס דעם סערווער דורך SSH.
אין דעם פאַל, איך בין גרייט צו פאָרשלאָגן נאָך אַ קליין טריק. עס איז יקספּערמענאַל - עס קען אַרבעטן, עס קען נישט. ClickHouse האט פול-טעקסט ינדעקסיז אין די פאָרעם פון טריגראַם בלום פילטערס. אונדזער קאָלעגעס אין Arenadata האָבן שוין געפרוווט די ינדעקסיז, און זיי אָפט אַרבעט פּונקט ווי בדעה.
אין סדר צו נוצן זיי ריכטיק, איר זאָל האָבן אַ גוטן פארשטאנד פון פּונקט ווי זיי אַרבעט: וואָס איז אַ טריגראַם בלום פילטער און ווי צו קלייַבן די גרייס. איך קען זאָגן אַז זיי וועלן העלפֿן פֿאַר פֿראגן אויף עטלעכע זעלטן פראַסעס, סובסטרינגס וואָס זענען ראַרעלי געפֿונען אין די דאַטן. אין דעם פאַל, סובריינדזשיז וועט זיין אויסגעקליבן דורך ינדעקסיז און ווייניקער דאַטן וועט זיין לייענען.
פארוואס איז עס וויכטיק? ווייַל עטלעכע אַנאַליטיקס קוויריז וועט זיין דורכגעקאָכט מאַניואַלי גלייַך פֿון די קליקכאָוסע קליענט. און אַלץ וועט זיין געזונט. אבער אויב איר האָבן אַוואַנסירטע אַנאַליס אין דיין פירמע, זיי וועלן שרייַבן אַ שריפט, און עס קען זיין אַ טעות אין די שריפט. און דעם טעות וועט פאַרשאַפן די בקשה צו זיין עקסאַקיוטאַד אין אַ ינפאַנאַט שלייף. דאָס איז וואָס מיר דאַרפֿן צו באַשיצן זיך פון.
איז עס מעגלעך צו געבן די רעזולטאַטן פון איין אָנפֿרעג צו צען קלייאַנץ?
מיר האָבן עטלעכע ניצערס וואָס ווי צו קומען מיט זייער גרויס ריקוועס אין דער זעלביקער צייט. די בקשה איז גרויס און, אין פּרינציפּ, געשווינד עקסאַקיוטאַד, אָבער רעכט צו דעם פאַקט אַז עס זענען פילע אַזאַ ריקוועס אין דער זעלביקער צייט, עס ווערט זייער ווייטיקדיק. איז עס מעגלעך צו ויספירן די זעלבע בקשה, וואָס איז אנגעקומען צען מאל אין אַ רודערן, אַמאָל, און געבן די רעזולטאַט צו צען קלייאַנץ?
די פּראָבלעם איז אַז מיר טאָן ניט האָבן די רעזולטאַטן פון די קאַש אָדער קאַש פון ינטערמידייט דאַטן. עס איז אַ בלאַט קאַש פון די אָפּערייטינג סיסטעם, וואָס וועט פאַרמייַדן איר צו לייענען דאַטן פון די דיסק ווידער, אָבער, ליידער, די דאַטן וועט נאָך זיין דיקאַמפּרעסט, דעסעריאַליזעד און ריפּראָסעסט.
איך וואָלט ווי צו ויסמיידן דעם, אָדער דורך קאַטשינג ינטערמידייט דאַטן, אָדער דורך ויסשטעלן ענלעך פֿראגן אין עטלעכע ריי און לייגן אַ רעזולטאטן קאַש. מיר דערווייַל האָבן איין ציען בעטן אין אַנטוויקלונג וואָס מוסיף אַ בעטן קאַש, אָבער בלויז פֿאַר סאַבקוועריז אין די אין און פאַרבינדן סעקשאַנז - דאָס איז, די לייזונג איז דערענדיקט.
עס איז ווערט צו פֿאַרשטיין ווי דעדופּליקאַטיאָן אַרבעט. וואָס איך וועט זאָגן איר איצט איז נישט באַטייַטיק צו די קשיא, אָבער נאָר אין פאַל עס איז ווערט רימעמבערינג.
ווען ינסערטינג אין אַ רעפּליקייטיד טיש, עס איז דעדופּליקאַטיאָן פון די גאנצע ינסערטאַד בלאַקס. אויב איר ריינסערט די זעלבע בלאָק מיט די זעלבע נומער פון די זעלבע ראָוז אין דער זעלביקער סדר, די דאַטן זענען דעדופּליקייטיד. איר וועט באַקומען "Ok" אין ענטפער צו אַרייַנלייגן, אָבער אין פאַקט, איין פּאַקאַט פון דאַטן וועט זיין געשריבן, און עס וועט נישט זיין דופּליקייטיד.
דאָס איז נייטיק פֿאַר זיכערקייט. אויב איר באַקומען "Ok" בעשאַס ינסערשאַן, דיין דאַטן זענען ינסערטאַד. אויב איר באַקומען אַ טעות פֿון ClickHouse, עס מיטל אַז זיי זענען נישט ינסערטאַד און איר דאַרפֿן צו איבערחזרן די ינסערשאַן. אָבער אויב די קשר איז צעבראכן בעשאַס ינסערשאַן, איר טאָן ניט וויסן צי די דאַטן זענען ינסערטאַד אָדער נישט. דער בלויז אָפּציע איז צו איבערחזרן די ינסערשאַן ווידער. אויב די דאַטן זענען אַקשלי ינסערטאַד און איר ריינסערט עס, עס איז בלאָק דעדופּליקאַטיאָן. דאָס איז נייטיק צו ויסמיידן דופּליקאַטן.
און עס איז אויך וויכטיק ווי עס אַרבעט פֿאַר מאַטיריאַלייזד קוקן. אויב די דאַטן זענען דעדופּליקייטיד ווען ינסערטאַד אין די הויפּט טיש, עס וועט אויך נישט גיין אין די מאַטיריאַלייזד מיינונג.
איצט וועגן די קשיא. דיין סיטואַציע איז מער קאָמפּליצירט ווייַל איר רעקאָרדירן דופּליקאַטן פון יחיד שורות. אַז איז, עס איז נישט די גאנצע פּאַק וואָס איז דופּליקייטיד, אָבער ספּעציפיש שורות, און זיי ייַנבראָך אין דער הינטערגרונט. טאקע, די דאַטן וועט ייַנבראָך אין די הויפּט טיש, אָבער די אַנקאַלאַפּסט דאַטן וועט גיין צו די מאַטיריאַלייזד מיינונג, און בעשאַס מערדזשעס וועט גאָרנישט פּאַסירן מיט די מאַטיריאַלייזד קוקן. ווייַל אַ מאַטיריאַלייזד מיינונג איז גאָרנישט מער ווי אַ אַרייַנלייגן צינגל. בעשאַס אנדערע אַפּעריישאַנז, גאָרנישט נאָך כאַפּאַנז צו עס.
און איך קען נישט מאַכן איר צופרידן דאָ. איר נאָר דאַרפֿן צו קוקן פֿאַר אַ ספּעציפיש לייזונג פֿאַר דעם פאַל. פֿאַר בייַשפּיל, איז עס מעגלעך צו ריפּליי עס אין אַ מאַטיריאַלייזד מיינונג, און די דעדופּליקאַטיאָן אופֿן קען אַרבעטן די זעלבע וועג. אבער ליידער, ניט שטענדיק. אויב עס איז אַגגרעגייטינג, עס וועט נישט אַרבעטן.
ClickHouse האט אַ פּלאַץ פון לאָגס. ווי קען איך זען אַלץ וואָס כאַפּאַנז צו די סערווער אין אַ בליק?
ClickHouse האט אַ זייער גרויס נומער פון פאַרשידענע לאָגס, און די נומער איז ינקריסינג. אין נייַע ווערסיעס, עטלעכע פון זיי זענען אפילו ענייבאַלד דורך פעליקייַט; אין עלטערע ווערסיעס זיי מוזן זיין ענייבאַלד ווען אַפּדייטינג. אָבער, עס זענען מער און מער פון זיי. לעסאָף, איך וואָלט ווי צו זען וואָס איז געשעעניש מיט מיין סערווער איצט, אפֿשר אויף אַ מין פון קיצער דאַשבאָרד.
צי איר האָבן אַ קליקכאָוסע מאַנשאַפֿט, אָדער די טימז פון דיין פרענדז, וואָס שטיצן עטלעכע פאַנגקשאַנאַליטי פון פאַרטיק דאַשבאָרדז וואָס וואָלט ווייַזן די לאָגס ווי אַ פאַרטיק פּראָדוקט? לעסאָף, נאָר קוקן אין לאָגס אין ClickHouse איז גרויס. אבער עס וואָלט זיין זייער קיל אויב עס איז שוין צוגעגרייט אין די פאָרעם פון אַ דאַשבאָרד. איך וואָלט באַקומען אַ בריק פון עס.
ווי צו השפּעה מערדזשיז אַזוי אַז דער סערווער קען נישט קראַך אין OOM?
איך האָבן אַ טיש, עס איז בלויז איין צעטיילונג אין די טיש, עס איז ריפּלייסינגמערגעטרעע. איך האב געשריבן דאַטן אין עס פֿאַר פיר יאר. איך דארף צו מאַכן אַ יבערבייַטן אין עס און ויסמעקן עטלעכע דאַטן.
איך האָב דאָס געטאָן, און בעשאַס די פּראַסעסינג פון דעם בעטן, אַלע די זכּרון אויף אַלע די סערווערס אין דעם קנויל איז קאַנסומד, און אַלע די סערווערס אין דעם קנויל זענען אריין אין OOM. דערנאָך האָבן זיי אַלע זיך אויפגעשטעלט צוזאַמען, אָנגעהויבן צונויפגיסן דעם זעלבן אפעראציע, דעם דאטה בלאָק, און ווידער געפאלן אין OOM. דערנאך האבן זײ זיך װידער אויפגעהויבן און װידער געפאלן. און די זאך האט נישט אויפגעהערט.
דאן האט זיך ארויסגעשטעלט אז דאס איז למעשה א זשוק וואס די בחורים האבן פארריכט. דאָס איז זייער קיל, דאַנקען דיר זייער פיל. אבער א רעשט איז געבליבן. און איצט, ווען איך טראַכטן וועגן מאַכן אַ סאָרט פון צונויפגיסן אין די טיש, איך האָבן אַ קשיא - פארוואס קען איך נישט עפעס השפּעה אויף די מערדזשיז? פֿאַר בייַשפּיל, באַגרענעצן זיי דורך די סומע פון באַראַן פארלאנגט, אָדער, אין פּרינציפּ, דורך די סומע וואָס וועט פּראָצעס דעם באַזונדער טיש.
איך האָבן אַ טיש גערופן "מעטריקס", ביטע פּראָצעס עס פֿאַר מיר אין צוויי פֿעדעם. עס איז ניט דאַרפֿן צו שאַפֿן צען אָדער פינף מערדזשיז אין פּאַראַלעל, טאָן עס אין צוויי. איך טראַכטן אַז איך האָבן גענוג זכּרון פֿאַר צוויי, אָבער עס קען נישט זיין גענוג צו פּראָצעס צען. פארוואס בלייבט מורא? ווייל דער טיש וואקסט, און אמאל וועל איך זיך טרעפן מיט א מצב וואס אין פרינציפן איז שוין נישט צוליב א זשוק, נאר ווייל די דאטא וועלן זיך טוישן אין אזא גרויסער כמות אז איך וועל פשוט נישט האבן גענוג זיקאָרן אויף די סערווער. און דער סערווער וועט קראַך אין OOM ווען מערדזשינג. דערצו, איך קענען באָטל מאַכן די מיוטיישאַן, אָבער מערדזשי איז ניט מער דאָרט.
איר וויסן, ווען מערדזשינג, דער סערווער וועט נישט פאַלן אין OOM, ווייַל ווען מערדזשינג, די סומע פון באַראַן איז געניצט בלויז פֿאַר איין קליין קייט פון דאַטן. אַזוי אַלץ וועט זיין גוט ראַגאַרדלאַס פון די סומע פון דאַטן.
וולאדימיר קאָלאָבאַעוו: פייַן. דאָ דער מאָמענט איז אַזאַ אַז נאָך די זשוק איז פאַרפעסטיקט, איך דאַונלאָודיד אַ נייַע ווערסיע פֿאַר זיך, און אויף אן אנדער טיש, אַ קלענערער, ווו עס זענען פילע פּאַרטישאַנז, איך דורכגעקאָכט אַ ענלעך אָפּעראַציע. און בעשאַס די צונויפגיסן, וועגן 100 גיגאבייט פון באַראַן איז פארברענט אויף די סערווער. איך האָבן 150 פאַרנומען, 100 געגעסן, און אַ 50 גיגאבייט פֿענצטער לינקס, אַזוי איך בין נישט געפאלן אין OOM.
וואָס איצט פּראַטעקץ מיר פון פאַלינג אין OOM אויב עס אַקשלי קאַנסומז 100 גיגאבייט פון באַראַן? וואָס צו טאָן אויב פּלוצלינג די באַראַן אויף די מערדזשז לויפט אויס?
אַלעקסיי מילאָווידאָוו: עס איז אַזאַ אַ פּראָבלעם אַז די קאַנסאַמשאַן פון באַראַן ספּאַסיפיקלי פֿאַר מערדזשינג איז נישט לימיטעד. און די צווייטע פּראָבלעם איז אַז אויב אַ סאָרט פון צונויפגיסן איז אַסיינד, עס מוזן זיין עקסאַקיוטאַד ווייַל עס איז רעקאָרדעד אין די רעפּלאַקיישאַן קלאָץ. די רעפּלאַקיישאַן קלאָץ איז די אַקשאַנז וואָס זענען דארף צו ברענגען די רעפּליקע אין אַ קאָנסיסטענט שטאַט. אויב איר טאָן ניט מאַכן מאַנואַל מאַניפּיאַליישאַנז וואָס וועט צוריקקריגן דעם רעפּלאַקיישאַן קלאָץ, די צונויפגיסן וועט זיין דורכגעקאָכט אויף איין אָדער אנדערן וועג.
פון קורס, עס וואָלט נישט זיין יבעריק צו האָבן אַ באַראַן באַגרענעצונג וואָס "נאָר אין פאַל" פּראַטעקץ קעגן OOM. עס וועט נישט העלפן די צונויפגיסן צו פאַרענדיקן, עס וועט אָנהייבן ווידער, דערגרייכן עטלעכע שוועל, וואַרפן אַ ויסנעם, און דעמאָלט אָנהייבן ווידער - גאָרנישט גוט וועט קומען פון דעם. אבער אין פּרינציפּ, עס וואָלט זיין נוציק צו באַקענען דעם ריסטריקשאַן.
ווי וועט די Golang שאָפער פֿאַר ClickHouse זיין דעוועלאָפּעד?
דער גאָלאַנג דרייווער, וואָס איז געווען געשריבן דורך קיריל שוואַקאָוו, איז איצט אַפישאַלי געשטיצט דורך די קליקכאָוסע מאַנשאַפֿט. ער אין די קליקכאָוסע ריפּאַזאַטאָרי, ער איז איצט גרויס און פאַקטיש.
א קליין צעטל. עס איז אַ ווונדערלעך און באַליבט ריפּאַזאַטאָרי פון נאָרמאַל פארמען פון ינפאַנאַט סדר - דאָס איז ווערטיקאַ. זיי אויך האָבן זייער אייגן באַאַמטער פּיטהאָן שאָפער, וואָס איז געשטיצט דורך די ווערטיקאַ דעוועלאָפּערס. און עטלעכע מאָל עס געטראפן אַז די סטאָרידזש ווערסיעס און די שאָפער ווערסיעס האָבן דיפערד גאַנץ דראַמאַטיקלי, און דער שאָפער אין עטלעכע פונט פארשטאפט ארבעטן. און די צווייטע נקודה. שטיצן פֿאַר דעם באַאַמטער שאָפער, עס מיינט צו מיר, איז דורכגעקאָכט דורך די "אָפּל" סיסטעם - איר שרייַבן זיי אַן אַרויסגעבן, און עס כאַנגז אויף אייביק.
איך האב צוויי פראגעס. איצט קיריל ס Golang שאָפער איז כּמעט די פעליקייַט וועג צו יבערגעבן פֿון Golang מיט ClickHouse. סייַדן עמעצער נאָך קאַמיוניקייץ דורך די הטטפּ צובינד ווייַל ער לייקס עס אַזוי. ווי וועט די אַנטוויקלונג פון דעם שאָפער פאָרזעצן? וועט עס זיין סינגקראַנייזד מיט קיין ברייקינג ענדערונגען אין די ריפּאַזאַטאָרי זיך? און וואָס איז דער פּראָצעדור צו באַטראַכטן אַן אַרויסגעבן?
קיריל שוואַקאָוו: דער ערשטער איז ווי אַלץ איז אָרגאַניזירט ביוראַקראַטיש. די פונט איז נישט דיסקאַסט, אַזוי איך האָבן גאָרנישט צו ענטפֿערן.
צו ענטפֿערן די קשיא וועגן דעם אַרויסגעבן, מיר דאַרפֿן אַ ביסל געשיכטע פון די שאָפער. איך געארבעט פֿאַר אַ פירמע וואָס האט אַ פּלאַץ פון דאַטן. עס איז געווען אַ גאַנצע ספּיננער מיט אַ ריזיק נומער פון געשעענישן וואָס דארף צו זיין סטאָרד ערגעץ. און אין עטלעכע פונט ClickHouse ארויס. מיר אָנגעפילט עס מיט דאַטן, און אין ערשטער אַלץ איז געווען גוט, אָבער דעמאָלט ClickHouse קראַשט. אין דעם מאָמענט מיר באַשלאָסן אַז מיר טאָן ניט דאַרפֿן עס.
א יאָר שפּעטער, מיר האָבן זיך אומגעקערט צו דער געדאַנק פון ניצן ClickHouse, און מיר דאַרפֿן צו שרייַבן דאַטן דאָרט עפעס. דער ינטראַדאַקטערי אָנזאָג איז געווען דאָס: די ייַזנוואַרג איז זייער שוואַך, עס זענען ווייניק רעסורסן. אבע ר מי ר האב ן שטענדי ק געארבע ט אזו י או ן דעריבע ר האב ן מי ר געזוכ ט צ ו דע ם געבוירענער־פראטאקאל .
זינט מיר האָבן געארבעט אין Go, עס איז געווען קלאָר אַז מיר דאַרפֿן אַ Go שאָפער. איך האָב עס כּמעט פול מאָל - דאָס איז געווען מיין אַרבעט אַרבעט. מיר האָבן עס געבראַכט צו אַ געוויסער פונט, און אין פּרינציפּ האָט קיינער נישט אָנגענומען אַז ווער עס יז אַנדערש ווי אונדז וועט נוצן עס. דערנאָך CloudFlare געקומען מיט פּונקט דער זעלביקער פּראָבלעם, און פֿאַר עטלעכע מאָל מיר געארבעט מיט זיי זייער סמודלי, ווייַל זיי האָבן די זעלבע טאַסקס. דערצו, מיר האבן דאָס ביידע אין ClickHouse זיך און אין די שאָפער.
אין עטלעכע פונט, איך פשוט פארשטאפט טאן עס, ווייַל מיין טעטיקייט אין טערמינען פון קליקכאָוסע און אַרבעט געביטן אַ ביסל. דעריבער ישוז זענען נישט פארמאכט. פּיריאַדיקלי, מענטשן וואס דאַרפֿן עפּעס זיך יבערגעבן צו די ריפּאַזאַטאָרי. דערנאָך איך קוק אין די ציען בעטן און מאל איך אפילו רעדאַגירן עפּעס זיך, אָבער דאָס כאַפּאַנז ראַרעלי.
איך וויל זיך אומקערן צום דרייווער. מיט עטלעכע יאָר צוריק, ווען די גאנצע זאַך אנגעהויבן, ClickHouse איז אויך אַנדערש און מיט פאַרשידענע קייפּאַבילאַטיז. איצט מיר האָבן אַ פארשטאנד פון ווי צו רימייק די שאָפער אַזוי אַז עס אַרבעט געזונט. אויב דאָס כאַפּאַנז, ווערסיע 2 וועט זיין ינקאַמפּאַטאַבאַל אין קיין פאַל רעכט צו דער אַקיומיאַלייטיד קראַטשיז.
איך טאָן ניט וויסן ווי צו אָרגאַניזירן דעם ענין. איך האָב אַלײן נישט קײן סך צײַט. אויב עטלעכע מענטשן ענדיקן דעם שאָפער, איך קענען העלפן זיי און זאָגן זיי וואָס צו טאָן. אָבער די אַקטיוו אָנטייל פון יאַנדעקס אין דער אַנטוויקלונג פון די פּרויעקט איז נאָך נישט דיסקאַסט.
איז עס אַ וועג צו קאַנפיגיער דעטאַילס אין די ClickHouse קאַנפיגיעריישאַן, אָבער נישט ווייַזן זיי אין פאַל פון ערראָרס?
דער ווייַטער קשיא איז וועגן ערראָרס שייַכות צו דעם ווערטערבוך, ניימלי פרטים. מיר האָבן ספּעציפיצירט די קשר דעטאַילס אין די קליקכאָוסע קאַנפיגיעריישאַן פֿאַר דעם ווערטערבוך, און אויב עס איז אַ טעות, מיר באַקומען די דעטאַילס און פּאַראָל אין ענטפער.
מיר סאַלווד דעם טעות דורך אַדינג דעטאַילס צו די ODBC דרייווער קאַנפיגיעריישאַן. איז עס קיין וועג צו קאַנפיגיער די דעטאַילס אין די ClickHouse קאַנפיגיעריישאַן, אָבער נישט ווייַזן די דעטאַילס אין פאַל פון ערראָרס?
די פאַקטיש לייזונג דאָ איז צו ספּעציפיצירן די קראַדענטשאַלז אין odbc.ini, און אין ClickHouse זיך ספּעציפיצירן בלויז די ODBC דאַטאַ מקור נאָמען. דאָס וועט נישט פּאַסירן פֿאַר אנדערע ווערטערבוך קוואלן - ניט פֿאַר די ווערטערבוך מיט MySQL, אדער פֿאַר די אנדערע, איר זאָל נישט זען די פּאַראָל ווען איר באַקומען אַ טעות אָנזאָג. פֿאַר ODBC, איך וועט אויך קוקן - אויב עס יגזיסץ, איר נאָר דאַרפֿן צו באַזייַטיקן עס.
באָנוס: באַקגראַונדז פֿאַר פארגרעסער פון גאַדערינגז
דורך געבן אַ קליק אויף די בילד, באָנוס באַקגראַונדז פון די גאַדערינגז וועט עפענען פֿאַר די מערסט פּערסיסטענט לייענער. מיר שטעלן אויס די פייער צוזאַמען מיט די אַוויטאָ טעכנאָלאָגיע מאַסקאַץ, מיר באַראַטנ זיך מיט קאָלעגעס פון די סיסטעם אַדמיניסטראַטאָר ס צימער אָדער די אַלט-שולע קאָמפּיוטער קלוב, און מיר פירן טעגלעך מיטינגז אונטער די בריק קעגן די באַקדראַפּ פון גראַפיטי.