یک برنامه کریستال را با Docker و Opentelemetry اجرا کنید
این ادامه پست قبلی این مجموعه در مورد سرور Battlesnake است.
این یکی در مورد اینکه فرآیند استقرار چگونه به نظر می رسد و برخی از داده های Opentelemetry جمع آوری شده از آن صحبت خواهد کرد.
پلتفرم برنامه Digitalocean با Dockerfile
من مدتی است که مشتری/کاربر Digitalocean هستم، بنابراین پلتفرم App PaaS آنها را امتحان کردم. آنها از بیلدپک استفاده می کنند یا الف را تشخیص می دهند Dockerfile
که برنامه شما را می سازد و اجرا می کند، و من با دومی رفتم (مطمئن نیستم که آیا بیلدپک کریستال به نحوی پشتیبانی می شود).
مقاله مایکل نیکیتوچکین به من 95 درصد از آنچه را که برای ایجاد یک استقرار کانتینر کارآمد با یک تصویر ردپای کوچک (آلپاین) نیاز داشتم، به من آموخت.
# Build image
FROM crystallang/crystal:1.7.2-alpine as builder
WORKDIR /opt
# Cache dependencies
COPY ./shard.yml ./shard.lock /opt/
RUN shards install -v
# Build a binary
COPY . /opt/
RUN crystal build --static --release ./src/app.cr
# ===============
# Result image with one layer
FROM alpine:latest
WORKDIR /
COPY --from=builder /opt/app .
ENTRYPOINT ["./app", "-p", "8080"]
این برنامه با هر commit به مستقر می شود main
و لایه های کش خوب هستند. زمانی که یک تصویر داکر نیاز به ساخت دارد (با وابستگیهای کش) و زمانی که استقرار توسط یک بهروزرسانی پیکربندی (یعنی بهروزرسانی متغیر ENV) راهاندازی میشود، به طور متوسط 2 دقیقه و 40 ثانیه طول میکشد.
بازتلمتری
برای اینکه بفهمم چه خبر است، ردیابی Opentelemetry را با Honeycomb.io اضافه کردم. چند آمار جالب از چند روز رتبه بندی در تابلوهای امتیازات:
می توانید بگویید که تابلوهای امتیازات در ساعات خاصی اجرا می شوند و سرور تقریباً نیمی از زمان را بدون فعالیت زیاد در آنجا می نشیند. آمار مورد علاقه من وجود دارد P99
در ~ 3.1 میلی ثانیه با تمام آن منطق در حال اجرا (از پست قبلی).
بسیاری از پاسخها در میکروثانیه پاسخ میدهند، همانطور که در گزارشهای زمان اجرا (در زیر) و P50
آمار در مورد لانه زنبوری (در بالا):
در کل خیلی شیرین ⚡️
اطلاعات بیشتر در مورد سایر آموخته های این پروژه به زودی ارائه می شود.
زندگی ناب.