برنامه نویسی

ساخت میکروسرویس در Rust با اسپین

نوشته شده توسط Oduah Chigozie✏️

Rust یک رویکرد قدرتمند و کارآمد برای توسعه برنامه ها ارائه می دهد. و با Spin، ساخت میکروسرویس های قدرتمند برای برنامه های کاربردی توزیع شده بسیار آسان تر شده است. مزایای عملکرد Rust با سهولت استفاده و مقیاس پذیری Spin، آنها را به انتخابی ارزشمند برای توسعه دهندگانی تبدیل می کند که به دنبال ساخت سیستم های قابل اعتماد و مقیاس پذیر هستند.

این مقاله به شما یک نمای کلی از چارچوب Spin ارائه می‌کند و شما را در ساخت یک میکروسرویس ساده راهنمایی می‌کند.

بپر جلو:

مروری بر اسپین

Spin یک چارچوب متن باز برای توسعه، اجرا و استقرار میکروسرویس ها و برنامه های کاربردی وب است. می توانید هر برنامه میکروسرویس را در Spin با هر زبان سازگار با wasi مانند Go، Rust، Java و JavaScript توسعه دهید.

Spin برنامه‌های میکروسرویس شما را به اجزای WebAssembly برای پلتفرم‌های ابری بدون سرور، مانند AWS lambda، یک سرور خود میزبان در سیستم شما، یا پلت‌فرم‌های ابری WebAssembly، مانند Fermyon Cloud، تبدیل می‌کند. وقتی صحبت از ساخت و اجرای میکروسرویس ها می شود، WebAssembly امنیت، قابلیت حمل و سرعت را فراهم می کند.

میکروسرویس چیست؟

میکروسرویس ها اجزای نرم افزاری مستقلی هستند که عملکرد خاصی را در یک برنامه کاربردی توزیع شده بزرگتر انجام می دهند. آنها به گونه ای طراحی شده اند که در یک سیستم توزیع شده با هم کار کنند و هر سرویس مسئول یک وظیفه واحد است و در عین حال با سرویس های دیگر برای انجام عملیات پیچیده ارتباط برقرار می کند.

میکروسرویس ها به گونه ای ساخته شده اند که کوچک، سبک، مدولار و به طور مستقل قابل استقرار باشند. می توانید آنها را در کانتینرهایی مانند Docker مستقر کنید و با استفاده از ابزارهای هماهنگ سازی کانتینر مانند Kubernetes آنها را مدیریت کنید. همچنین می توانید آنها را با استفاده از پلتفرم های محاسباتی بدون سرور، مانند توابع Google Cloud و AWS lambda پیاده سازی کنید.

در حال نصب Spin

اکنون که با Spin و میکروسرویس ها آشنا شدید، زمان نصب آن فرا رسیده است spin باینری وارد سیستم شما شود. این بخش شما را با نصب فایل باینری راهنمایی می کند.

فایل باینری به شما امکان می دهد یک پروژه را راه اندازی کنید و یک سرور محلی میزبانی کنید و بر روی تمام سیستم عامل های اصلی از جمله ویندوز، لینوکس و MacOS اجرا می شود. شما همچنین این گزینه را دارید که باینری را از کد منبع آن بسازید یا با آن در سیستم خود نصب کنید cargo.

نصب روی ویندوز

برای نصب فایل باینری در ویندوز، نسخه باینری ویندوز را دانلود کنید، فایل را از حالت فشرده خارج کنید و آن را قرار دهید spin.exe فایل در مسیر سیستم شما

برای تأیید نصب، این را در خط فرمان خود اجرا کنید:

>spin --help
وارد حالت تمام صفحه شوید

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

اگر خطایی دریافت کردید، سعی کنید خط فرمان را دوباره باز کنید یا سیستم خود را راه اندازی مجدد کنید. اگر خطایی دریافت نکردید، به شما تبریک می گویم! شما به تازگی باینری را روی سیستم خود نصب کرده اید و می توانید شروع به تنظیم پوشه پروژه کنید.

نصب روی MacOS (سیلیکون اینتل و اپل)

برای نصب spin باینری در MacOS، فایل را با این دستور دانلود کنید:

curl -fsSL https://developer.fermyon.com/downloads/install.sh | bash
وارد حالت تمام صفحه شوید

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

دستور بالا فایل باینری سازگار را برای سیستم شما دانلود می کند. برای دسترسی آسان به باینری از هر دایرکتوری در سیستم خود، آن را حرکت دهید spin فایل به /usr/local/bin پوشه با این دستور:

sudo mv spin /usr/local/bin/
وارد حالت تمام صفحه شوید

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

این /usr/local/bin پوشه یک مسیر سیستمی است که فایل های اجرایی را در خود جای می دهد که می توانید از تمام دایرکتوری های سیستم خود به آنها دسترسی داشته باشید.

نصب روی لینوکس

برای نصب باینری فایل را با این دستور دانلود کنید:

curl -fsSL https://developer.fermyon.com/downloads/install.sh | bash
وارد حالت تمام صفحه شوید

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

سپس، حرکت دهید spin فایل به /usr/local/bin پوشه با این دستور:

sudo mv spin /usr/local/bin/
وارد حالت تمام صفحه شوید

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

برای تایید نصب، این دستور را اجرا کنید:

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

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

ساخت از مبدا

برای ساخت باینری از منبع، مراحل زیر را دنبال کنید:

کلون کردن مخزن Spin:

git clone https://github.com/fermyon/spin
وارد حالت تمام صفحه شوید

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

ساخت پروژه:

cd spin && make build
وارد حالت تمام صفحه شوید

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

باینری ساخته شده را تأیید کنید:

./target/release/spin --help
وارد حالت تمام صفحه شوید

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

نصب با cargo

برای نصب باینری با cargo، این مراحل را دنبال کنید:

کلون کردن مخزن Spin:

git clone https://github.com/fermyon/spin -b v0.9.0
وارد حالت تمام صفحه شوید

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

باز کن spin فهرست راهنما:

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

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

را نصب کنید wasm32-wasi هدف برای Rust:

rustup target add wasm32-wasi
وارد حالت تمام صفحه شوید

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

پروژه را کامپایل و در سیستم خود نصب کنید:

cargo install --locked --path .
وارد حالت تمام صفحه شوید

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

تأیید نصب موفق:

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

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

راه اندازی پوشه پروژه

با spin بر روی سیستم شما نصب شده است، اجازه دهید یک پوشه پروژه برای ساخت یک میکروسرویس راه اندازی کنیم. در پایان این بخش، یک پوشه پروژه اولیه برای ساخت میکروسرویس خود خواهید داشت.

Spin قالب هایی را برای ساخت انواع مختلف برنامه ارائه می دهد. برای بررسی قالب های نصب شده روی سیستم خود، این دستور را اجرا کنید:

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

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

اگر هیچ قالبی روی سیستم شما نصب نشده است، این دستور را اجرا کنید:

spin templates install --git https://github.com/fermyon/spin --update
وارد حالت تمام صفحه شوید

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

دستور بالا تمام قالب های موجود را در مخزن Spin GitHub نصب می کند. پس از نصب قالب ها، می توانید دوباره لیست را بررسی کنید تا قالب های نصب شده را مشاهده کنید.

پس از نصب قالب ها، این دستور را برای شروع راه اندازی پروژه اجرا کنید:

$ spin new
Pick a template to start your application with:
> http-c (HTTP request handler using C and the Zig toolchain)
  http-empty (HTTP application with no components)
  http-go (HTTP request handler using (Tiny)Go)
  http-grain (HTTP request handler using Grain)
  http-php (HTTP request handler using PHP)
  http-rust (HTTP request handler using Rust)
  http-swift (HTTP request handler using SwiftWasm)
  http-zig (HTTP request handler using Zig)
  redirect (Redirects a HTTP route)
  redis-go (Redis message handler using (Tiny)Go)
  redis-rust (Redis message handler using Rust)
  static-fileserver (Serves static files from an asset directory)
وارد حالت تمام صفحه شوید

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

این فرمان از شما می‌خواهد قالبی را که می‌خواهید استفاده کنید، نامی برای پروژه، توضیحی درباره پروژه، مسیر HTTP و پایه HTTP را انتخاب کنید. برای الگو، انتخاب کنید http-rust. برای نام پروژه هر نامی که می خواهید بنویسید. برای توضیحات، مسیر HTTP و پایه HTTP، می توانید ضربه بزنید Enter برای استفاده از پیش فرض های خود

اجرای پروژه

پس از راه اندازی پروژه، ممکن است بخواهید نحوه اجرای برنامه را ببینید. این بخش نحوه ساخت، اجرا و آزمایش پروژه را به شما نشان می دهد. در پایان بخش، پروژه را روی سیستم خود اجرا خواهید کرد.

پس از ساخت پروژه، Spin یک جزء WebAssembly از کد منبع تولید می کند. برای ساخت اپلیکیشن، باید آن را نصب کنید wasm32-wasi هدف. می توانید نصب کنید wasm32-wasi هدف گذاری کنید و پروژه را با این دو دستور در یک جزء WebAssembly کامپایل کنید:

rustup target add wasm32-wasi    # Install the WebAssembly target
spin build                       # Build the project
وارد حالت تمام صفحه شوید

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

پس از انجام دستورات، مؤلفه WebAssembly ایجاد شده در قسمت قرار می گیرد target/wasm32-wasi/release پوشه spin به شما امکان می دهد با این دستور کامپوننت WebAssembly را روی سیستم خود میزبانی کنید:

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

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

این برنامه میکروسرویس را در http://localhost:3000/ میزبانی می کند. پس از اجرای پروژه، می توانید آن را با curl دستور:

$ curl -i localhost:3000
HTTP/1.1 200 OK
foo: bar
content-length: 14
date: Wed, 01 Mar 2023 11:11:57 GMT

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

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

اکنون که پروژه را در عمل دیدید، خوب است بدانید که چگونه کار می کند. در بخش‌های بعدی، اجزای کلیدی آن را بررسی خواهیم کرد spin.toml، و lib.rs فایل های موجود در پروژه شما

Spin.toml: فایل مانیفست

spin.toml یک فایل مانیفست است. این شامل تنظیمات پروژه شما است. به پروژه نگاه کنید spin.toml فایل:

spin_version = "1"
authors = ["Username <youremail@example.com>"]
description = ""
name = "project-name"
trigger = { type = "http", base = "https://dev.to/" }
version = "0.1.0"

[[component]]
id = "project-name"
source = "target/wasm32-wasi/release/spin_test.wasm"
allowed_http_hosts = []
[component.trigger]
route = "/..."
[component.build]
command = "cargo build --target wasm32-wasi --release"
وارد حالت تمام صفحه شوید

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

با دیدن فایل، چند نکته کلیدی را متوجه خواهید شد:

  • این trigger متغیر در خط 5 که ماهیت میکروسرویس را پیکربندی می کند. این میکروسرویس یک رابط HTTP برای برنامه های کاربردی خارجی برای تعامل با میکروسرویس فراهم می کند
  • این source متغیر در خط 10، که به جایی که کامپایلر کامپایل WebAssembly کامپایل شده را قرار می دهد اشاره می کند.
  • این route متغیر در خط سیزدهم، که مسیری که میکروسرویس قرار دارد را پیکربندی می کند. /… یک wildcard است، میکروسرویس را از هر مسیری قابل دسترسی می کند

Lib.rs: کتابخانه اصلی میکروسرویس شما

lib.rs کتابخانه اصلی میکروسرویس شما است. کامپایلر این فایل را در کامپوننت WebAssembly کامپایل می کند. به پروژه نگاه کنید lib.rs:

use anyhow::Result;
use spin_sdk::{
    http::{Request, Response},
    http_component,
};

/// A simple Spin HTTP component.
#[http_component]
fn handle_spin_test(req: Request) -> Result<Response> {
    println!("{:?}", req.headers());
    Ok(http::Response::builder()
        .status(200)
        .header("foo", "bar")
        .body(Some("Hello, Fermyon".into()))?)
}
وارد حالت تمام صفحه شوید

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

در این فایل به این اجزای کلیدی توجه خواهید کرد: خط 8:

#[http_component]
وارد حالت تمام صفحه شوید

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

این http_component ماکرو به این معنی است که handle_spin_test تابع یک جزء HTTP است. خط 9 – 15:

fn handle_spin_test(req: Request) -> Result<Response> {
    println!("{:?}", req.headers());
    Ok(
        http::Response::builder()
            .status(200)
            .header("foo", "bar")
            .body(Some("Hello, Fermyon".into()))?
    )
}
وارد حالت تمام صفحه شوید

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

چرخش اجرا می شود handle_spin_test هر زمان که درخواست HTTP را به میکروسرویس ارسال می کنید، این کار را انجام دهید. میکروسرویس نتیجه را برمی گرداند handle_spin_test در پایان درخواست

ساخت یک میکروسرویس کاربردی

پروژه اولیه تنها به اصول اولیه یک میکروسرویس Spin رسیدگی می کند. در این بخش، ما یک میکروسرویس کاربردی تر خواهیم ساخت. میکروسرویسی که تا پایان این مقاله خواهید ساخت، یک تولید کننده حقایق گربه است. میکروسرویس از cat fact ninja API برای تولید حقایق تصادفی گربه استفاده می کند. برای شروع، یک پروژه را مقداردهی اولیه کنید و این کد را در خود بنویسید lib.rs:

use anyhow::Result;
use spin_sdk::{
    http::{Request, Response},
    http_component,
};

#[http_component]
fn cat_facts(_req: Request) -> Result<Response> {
    // fetch fact from the API
    let mut res = spin_sdk::http::send(
        http::Request::builder()
            .method("GET")
            .uri("https://catfact.ninja/fact")
            .body(None)?,
    )?;
    // Add "Server" key into the header
    res.headers_mut()
        .insert(http::header::SERVER, "spin/0.1.0".try_into()?);
    // Send response to the client
    Ok(res)
}
وارد حالت تمام صفحه شوید

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

این spin کتابخانه روش هایی را برای ارسال درخواست های HTTP فراهم می کند. در این میکروسرویس، ما از این روش برای واکشی حقایق گربه از API cat fact ninja استفاده می‌کنیم. این روش پاسخی را تولید می کند که cat_facts تابع می تواند به عنوان شی پاسخ میکروسرویس برگردد. برای تکمیل پروژه، اضافه کنید catfact.ninja به allowed_http_hosts متغیر در خط یازدهم از spin.toml فایل:

allowed_http_hosts = ["catfact.ninja"]
وارد حالت تمام صفحه شوید

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

اگر این کار را انجام ندهید، دریافت خواهید کرد HttpError::DestinationNotAllowed خطا هنگام اجرای پروژه

نتیجه

میکروسرویس ها پایه و اساس برنامه های کاربردی توزیع شده هستند. آنها قطعات مستقلی هستند که با یکدیگر تعامل دارند تا یک برنامه توزیع شده بزرگتر را تشکیل دهند. این مقاله شما را در ساخت میکروسرویس ها راهنمایی می کند. با استفاده از دانش این مقاله، می‌توانید میکروسرویس‌های پیچیده‌تری بسازید، مانند سرویس‌هایی که تعاملات پایگاه داده یا احراز هویت را انجام می‌دهند. برای کسب اطلاعات بیشتر در مورد چارچوب Spin، حتماً مستندات Spin را بررسی کنید. با تشکر برای خواندن!


LogRocket: دید کامل در صفحات وب برای برنامه های Rust

اشکال زدایی برنامه های Rust می تواند دشوار باشد، به خصوص زمانی که کاربران مشکلاتی را تجربه می کنند که بازتولید آن دشوار است. اگر به نظارت و ردیابی عملکرد برنامه‌های Rust، نمایش خودکار خطاها و پیگیری درخواست‌های شبکه و زمان بارگذاری کند علاقه دارید، LogRocket را امتحان کنید.

بنر آزمایشی رایگان داشبورد LogRocket

LogRocket مانند یک DVR برای برنامه های وب است که به معنای واقعی کلمه هر چیزی را که در برنامه Rust شما اتفاق می افتد ضبط می کند. به جای حدس زدن چرایی مشکلات، می توانید در مورد وضعیتی که برنامه شما در هنگام بروز مشکل در آن قرار داشت، جمع آوری کرده و گزارش دهید. LogRocket همچنین بر عملکرد برنامه شما نظارت می کند، معیارهایی مانند بار CPU مشتری، استفاده از حافظه مشتری و موارد دیگر را گزارش می دهد.

نحوه اشکال زدایی برنامه های Rust خود را مدرن کنید – نظارت را به صورت رایگان شروع کنید.

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

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

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

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