ساخت میکروسرویس در 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 مانند یک DVR برای برنامه های وب است که به معنای واقعی کلمه هر چیزی را که در برنامه Rust شما اتفاق می افتد ضبط می کند. به جای حدس زدن چرایی مشکلات، می توانید در مورد وضعیتی که برنامه شما در هنگام بروز مشکل در آن قرار داشت، جمع آوری کرده و گزارش دهید. LogRocket همچنین بر عملکرد برنامه شما نظارت می کند، معیارهایی مانند بار CPU مشتری، استفاده از حافظه مشتری و موارد دیگر را گزارش می دهد.
نحوه اشکال زدایی برنامه های Rust خود را مدرن کنید – نظارت را به صورت رایگان شروع کنید.