برنامه نویسی

Native GLIBC به جای Linuxbrew از 2.21

Summarize this content to 400 words in Persian Lang
TL; DR: کامپایل پسوندهای PostgreSQL در نسخه های YugabyteDB 2.21 و بالاتر بسیار ساده تر است، زیرا از کتابخانه های سیستم عامل بومی استفاده می شود.

YugabyteDB در ابتدا از Linuxbrew برای ایجاد یک محیط ساخت سازگار و قابل حمل در توزیع های مختلف لینوکس استفاده کرد. Linuxbrew امکان بسته‌بندی وابستگی‌هایی مانند GCC و Glibc را فراهم کرد و از ساخت‌های کنترل‌شده در سراسر سیستم‌ها، از جمله موارد غیر مبتنی بر Glibc اطمینان حاصل کرد. این رویکرد مدیریت وابستگی و آزمایش را با اجازه دادن به کنترل کامل بر روی محیط ساخت ساده کرد.

با این حال، چندین چالش با Linuxbrew به وجود آمد، مانند سربار عملکرد (متکی به کتابخانه های قدیمی)، مشکلات سازگاری (به ویژه هنگام کامپایل پسوندهای PostgreSQL برای اجرا در yugabyteDB)، و پیچیدگی تعمیر و نگهداری.

YugabyteDB از Linuxbrew فقط برای ساخت های x86_64 استفاده می کرد، اما aarch64 از کتابخانه های سیستم عامل اصلی استفاده می کرد. با شروع نسخه 2.21، YugabyteDB برای همه بیلدها به کتابخانه های بومی منتقل شد.

در اینجا سیستم عامل های پشتیبانی شده وجود دارد:

سیستم عامل های پشتیبانی شده توسط YugabyteDB و YugabyteDB Anywhere.

docs.yugabyte.com

در اینجا نحوه مشاهده تفاوت با دویدن آمده است dd روی دو تصویر x86_64.

نسخه 2.19 از لینوکسبرو استفاده می کند:

-bash-4.2# docker run –rm -it yugabytedb/yugabyte:2.19.3.0-b140 \
ldd /home/yugabyte/bin/yb-tserver

linux-vdso.so.1 (0x00007ffcbfb98000)
librt.so.1 => /home/yugabyte/linuxbrew/lib/librt.so.1 (0x00007f5c9d7a5000)
libresolv.so.2 => /home/yugabyte/linuxbrew/lib/libresolv.so.2 (0x00007f5c9d58d000)
libm.so.6 => /home/yugabyte/linuxbrew/lib/libm.so.6 (0x00007f5c9d288000)
libc.so.6 => /home/yugabyte/linuxbrew/lib/libc.so.6 (0x00007f5c9c8e7000)
/home/yugabyte/lib/ld.so => /lib64/ld-linux-x86-64.so.2 (0x00007f5cb9a47000)
libpthread.so.0 => /home/yugabyte/linuxbrew/lib/libpthread.so.0 (0x00007f5c9c6c8000)
libdl.so.2 => /home/yugabyte/linuxbrew/lib/libdl.so.2 (0x00007f5c9c4c3000)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نسخه 2.23 از کتابخانه های بومی (AlmaLinux 8 مورد استفاده برای این تصویر) استفاده می کند:

-bash-4.2# docker run –rm -it yugabytedb/yugabyte:2.23.0.0-b710 \
ldd /home/yugabyte/bin/yb-tserver

linux-vdso.so.1 (0x00007ffcea370000)
librt.so.1 => /lib64/librt.so.1 (0x00007f4a4f00d000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f4a4edf5000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4a4ea73000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4a4e69d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4a54f53000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4a4e47d000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4a4e279000)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تصویر کمی کوچکتر است (اگر اندازه تصویر مهم است می توانید فایل های اجرایی را حذف کنید، اما پس از آن همه نمادهای اشکال زدایی برای عیب یابی خطاها را نخواهید داشت):

-bash-4.2# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
yugabytedb/yugabyte 2.23.0.0-b710 254a05710594 4 weeks ago 2.1GB
yugabytedb/yugabyte 2.19.3.0-b140 9474f15f0653 11 months ago 2.28GB

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

YugabyteDB از کتابخانه های بومی GLIBC استفاده می کند، بنابراین Yugabyte تلفیقی هایی را که به آن وابسته است اعتبار سنجی می کند. بیشتر آنها از “libicu” استفاده می کنند، اما در اینجا تلفیقی ارائه شده توسط GLIBC آمده است:

yugabyte=# select collname from pg_collation
where collprovider = ‘c’;

collname
————
C
POSIX
ucs_basic
en_US.utf8
en_US

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جرمی اشنایدر یک ابزار عالی برای تأیید این موضوع ساخته است:

روش شناسی

کتابخانه گنو سی

این تجزیه و تحلیل دو جنبه دارد: مقایسه نتایج مرتب‌سازی واقعی در محلی en_US، و مقایسه بخش LC_COLLATE فایل‌های داده محلی سیستم عامل.
مقایسه نتایج مرتب‌سازی واقعی باید هرگونه تغییر در مرتب‌سازی پیش‌فرض را که در داده‌های دسته‌بندی سیستم‌عامل تعریف نشده است، دریافت کند. یک اسکریپت ساده perl برای تولید یک فایل متنی حاوی 91 رشته مختلف برای هر کاراکتر یونیکد قانونی استفاده می شود. ابزار “مرتب سازی” یونیکس این فایل را با محلی که برای دسته بندی روی en_US پیکربندی شده است پردازش می کند. این فرآیند در هر نسخه از 10 سال گذشته تکرار می‌شود و سپس از ابزار یونیکس “diff” برای مقایسه فایل‌های خروجی مرتب‌شده و شمارش تعداد کاراکترها پس از مرتب‌سازی استفاده می‌شود. نتایج نشان می‌دهد که چند نقطه کد منفرد در داده‌های مرتب شده در نسخه‌های مختلف سیستم‌عامل موقعیت‌های خود را تغییر داده‌اند…

TL; DR: کامپایل پسوندهای PostgreSQL در نسخه های YugabyteDB 2.21 و بالاتر بسیار ساده تر است، زیرا از کتابخانه های سیستم عامل بومی استفاده می شود.


YugabyteDB در ابتدا از Linuxbrew برای ایجاد یک محیط ساخت سازگار و قابل حمل در توزیع های مختلف لینوکس استفاده کرد. Linuxbrew امکان بسته‌بندی وابستگی‌هایی مانند GCC و Glibc را فراهم کرد و از ساخت‌های کنترل‌شده در سراسر سیستم‌ها، از جمله موارد غیر مبتنی بر Glibc اطمینان حاصل کرد. این رویکرد مدیریت وابستگی و آزمایش را با اجازه دادن به کنترل کامل بر روی محیط ساخت ساده کرد.

با این حال، چندین چالش با Linuxbrew به وجود آمد، مانند سربار عملکرد (متکی به کتابخانه های قدیمی)، مشکلات سازگاری (به ویژه هنگام کامپایل پسوندهای PostgreSQL برای اجرا در yugabyteDB)، و پیچیدگی تعمیر و نگهداری.

YugabyteDB از Linuxbrew فقط برای ساخت های x86_64 استفاده می کرد، اما aarch64 از کتابخانه های سیستم عامل اصلی استفاده می کرد. با شروع نسخه 2.21، YugabyteDB برای همه بیلدها به کتابخانه های بومی منتقل شد.

در اینجا سیستم عامل های پشتیبانی شده وجود دارد:

https%3A%2F%2Fdocs.yugabyte.com%2Fimages%2Fyugabytedb logo

سیستم عامل های پشتیبانی شده توسط YugabyteDB و YugabyteDB Anywhere.

فاویکون
docs.yugabyte.com


در اینجا نحوه مشاهده تفاوت با دویدن آمده است dd روی دو تصویر x86_64.

نسخه 2.19 از لینوکسبرو استفاده می کند:



-bash-4.2# docker run --rm -it yugabytedb/yugabyte:2.19.3.0-b140 \
           ldd /home/yugabyte/bin/yb-tserver

        linux-vdso.so.1 (0x00007ffcbfb98000)
        librt.so.1 => /home/yugabyte/linuxbrew/lib/librt.so.1 (0x00007f5c9d7a5000)
        libresolv.so.2 => /home/yugabyte/linuxbrew/lib/libresolv.so.2 (0x00007f5c9d58d000)
        libm.so.6 => /home/yugabyte/linuxbrew/lib/libm.so.6 (0x00007f5c9d288000)
        libc.so.6 => /home/yugabyte/linuxbrew/lib/libc.so.6 (0x00007f5c9c8e7000)
        /home/yugabyte/lib/ld.so => /lib64/ld-linux-x86-64.so.2 (0x00007f5cb9a47000)
        libpthread.so.0 => /home/yugabyte/linuxbrew/lib/libpthread.so.0 (0x00007f5c9c6c8000)
        libdl.so.2 => /home/yugabyte/linuxbrew/lib/libdl.so.2 (0x00007f5c9c4c3000)



وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نسخه 2.23 از کتابخانه های بومی (AlmaLinux 8 مورد استفاده برای این تصویر) استفاده می کند:



-bash-4.2# docker run --rm -it yugabytedb/yugabyte:2.23.0.0-b710 \
           ldd /home/yugabyte/bin/yb-tserver

        linux-vdso.so.1 (0x00007ffcea370000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f4a4f00d000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f4a4edf5000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f4a4ea73000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f4a4e69d000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f4a54f53000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4a4e47d000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f4a4e279000)


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تصویر کمی کوچکتر است (اگر اندازه تصویر مهم است می توانید فایل های اجرایی را حذف کنید، اما پس از آن همه نمادهای اشکال زدایی برای عیب یابی خطاها را نخواهید داشت):



-bash-4.2# docker image ls
REPOSITORY            TAG             IMAGE ID       CREATED         SIZE
yugabytedb/yugabyte   2.23.0.0-b710   254a05710594   4 weeks ago     2.1GB
yugabytedb/yugabyte   2.19.3.0-b140   9474f15f0653   11 months ago   2.28GB


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


YugabyteDB از کتابخانه های بومی GLIBC استفاده می کند، بنابراین Yugabyte تلفیقی هایی را که به آن وابسته است اعتبار سنجی می کند. بیشتر آنها از “libicu” استفاده می کنند، اما در اینجا تلفیقی ارائه شده توسط GLIBC آمده است:



yugabyte=# select collname from pg_collation 
           where collprovider = 'c';

  collname
------------
 C
 POSIX
 ucs_basic
 en_US.utf8
 en_US


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جرمی اشنایدر یک ابزار عالی برای تأیید این موضوع ساخته است:

روش شناسی

کتابخانه گنو سی

این تجزیه و تحلیل دو جنبه دارد: مقایسه نتایج مرتب‌سازی واقعی در محلی en_US، و مقایسه بخش LC_COLLATE فایل‌های داده محلی سیستم عامل.

مقایسه نتایج مرتب‌سازی واقعی باید هرگونه تغییر در مرتب‌سازی پیش‌فرض را که در داده‌های دسته‌بندی سیستم‌عامل تعریف نشده است، دریافت کند. یک اسکریپت ساده perl برای تولید یک فایل متنی حاوی 91 رشته مختلف برای هر کاراکتر یونیکد قانونی استفاده می شود. ابزار “مرتب سازی” یونیکس این فایل را با محلی که برای دسته بندی روی en_US پیکربندی شده است پردازش می کند. این فرآیند در هر نسخه از 10 سال گذشته تکرار می‌شود و سپس از ابزار یونیکس “diff” برای مقایسه فایل‌های خروجی مرتب‌شده و شمارش تعداد کاراکترها پس از مرتب‌سازی استفاده می‌شود. نتایج نشان می‌دهد که چند نقطه کد منفرد در داده‌های مرتب شده در نسخه‌های مختلف سیستم‌عامل موقعیت‌های خود را تغییر داده‌اند…

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا