Catatan dari penerjemah: Rust adalah bahasa pemrograman yang relatif muda, dan contoh-contoh praktis selalu menarik pada tahap pengembangan ini. Diketahui bahwa Intel, Dropbox, Amazon, Facebook, Google dan lainnya menggunakan Rust dalam proyek mereka. Tentang penggunaan Rust dalam proyek dari Microsoft sudah diketahui, tetapi tidak ada detail, dan ini mungkin merupakan publikasi resmi pertama tentang penggunaan Rust di Microsoft. (perincian teknis untuk produk itu sendiri disediakan "sebagaimana adanya", tentukan perincian di situs web perusahaan)Azure IoT Edge adalah proyek perangkat lunak lintas-platform open-source yang dibuat oleh tim pengembangan Azure IoT di Microsoft. Azure IoT Edge โadalah layanan Internet of Things yang berbasis pada Internet of Things Center. Layanan ini ditujukan untuk pelanggan yang perlu menganalisis data bukan di cloud, tetapi di perangkat tepi. Sebagai hasil dari memindahkan sebagian beban kerja ke area perbatasan, perangkat menghabiskan lebih sedikit waktu untuk mengirim pesan ke cloud dan merespons lebih cepat terhadap berbagai peristiwa. โ
[diambil dari dokumentasi resmi berbahasa Rusia (1) - kira-kira. penerjemah]Posting ini menjelaskan beberapa alasan mengapa kami memilih Rust sebagai bahasa pemrograman untuk mengimplementasikan komponen Daemon Keamanan dalam produk.
Daemon Keamanan memuat runtime Azure IoT Edge. Ini bertindak sebagai mediator komunikasi antara runtime Azure IoT Edge dan banyak layanan host seperti runtime kontainer dan perangkat perangkat keras kriptografis, Security Security Modules (HSM) dan Trusted Platform Modules (TPM).
Pemilihan tumpukan teknis untuk Security Daemon
Ketika kami mulai mengerjakan Daemon Keamanan (selanjutnya disebut sebagai
edgelet ), kami mengidentifikasi tujuan desain utama berikut:
- edgelet harus merupakan komponen asli yang tidak memerlukan runtime, seperti .NET CLR.
- karena edgelet akan berfungsi sebagai saluran untuk mengakses peralatan HSM / TPM pada perangkat, itu harus aman.
- edgelet akan berinteraksi dengan peralatan HSM / TPM melalui antarmuka biner dari aplikasi C (ABI), jadi memuat objek umum / DLL dan memanggil fungsi C harus sederhana.
Menurut poin-poin ini, kami harus memilih salah satu dari bahasa pemrograman berikut: C atau C ++, atau Rust, yang dikompilasi ke dalam kode asli. Ketidaksediaan untuk menanggung biaya overhead dari pengumpul sampah berarti bahwa Go tidak cocok untuk kita. Persyaratan keamanan daemon berarti bahwa kami ingin menghindari kesalahan memori dan konkurensi. Ternyata, mengingat keterbatasan ini, Rust sangat cocok untuk kita. Dalam publikasi sebelumnya (2) di blog ini
[yang berarti blog
"Microsoft Security Response Center" - komentar terjemahan] , keuntungan memilih Rust sebagai bahasa pemrograman dipertimbangkan.
Apa yang kita sukai?
Sebelum kami merilis Azure IoT Edge ke publik, kami menyewa penyedia keamanan eksternal untuk menguji perangkat lunak penetrasi. Fakta bahwa mereka tidak menemukan masalah dengan keamanan basis kode di Rust bagi kami konfirmasi kebenaran pilihan kami. Sejak awal, kami memutuskan bahwa kompiler akan memperlakukan semua peringatan sebagai kesalahan, termasuk kesalahan yang diverifikasi oleh Clippy. Sistem integrasi berkelanjutan kami menolak kumpulan permintaan yang tidak lulus rustfmt, yang memastikan pemformatan kode yang konsisten di seluruh basis kode.
Proses memperbarui Rust and Cargo compiler
[sistem manajemen paket dan rakitan - kira-kira. translator] bekerja dengan lancar di Azure IoT Edge. Mengupgrade ke versi baru kompiler hampir selalu merupakan tindakan yang tidak menyakitkan.
Penerimaan Karat
Langkah selanjutnya adalah belajar bahasa. Dibandingkan dengan bahasa pemrograman populer lainnya, Rust memiliki ambang masuk yang cukup tinggi, dan kami khawatir apa dampak studi ini pada timeline proyek. Tim kami telah mengalami pengembang di C, C ++, C # dan Java, dan untungnya bagi kami, ada juga beberapa pengembang yang sangat bersemangat tentang Rust!
Kami datang dengan lokakarya Rust di mana kami melakukan tim pada bagian-bagian bahasa yang, dalam pengalaman kami, cukup sulit untuk dipahami. Konsumsi waktu ini terbukti sangat berguna. Kami menemukan bahwa belajar bahasa ternyata tidak menjadi masalah besar seperti yang kami bayangkan.
Selama 4-6 minggu, hampir setiap anggota tim memberikan kontribusi non-sepele terhadap kode sumber di Rust.
Kesulitan
Terlepas dari kenyataan bahwa pengalaman pertama kami meluncurkan produksi dengan produk berbasis Rust di Microsoft sepenuhnya berhasil, kami akan mencatat beberapa poin sulit:
- Ekosistem Rust masih relatif baru dibandingkan dengan beberapa bahasa lain yang lebih mapan. Ini berarti bahwa kita sering harus membuat bagian dari infrastruktur yang kalau tidak kita mungkin tidak perlu membuat.
- Pesan-pesan kesalahan kompiler parsing kadang-kadang ternyata terlalu rumit, terutama ketika bekerja dengan kode yang banyak digunakan kombinator dari Tokio (3) [kerangka kerja asinkron untuk Rust] Futures atau std :: iter :: Iterator.
- Tim yang digunakan untuk mendukung sepenuhnya alat penyunting dan debugging C # dan kode Java tidak menemukan dukungan yang sama di Rust. Ekstensi VS Code Rust RLS dalam praktiknya tidak stabil.
- Tantangan dalam Analisis Rantai Masa Depan Tokio
- Terkadang tidak mudah untuk memilah jenis rumit yang tak terhindarkan muncul dalam rantai kombinator Tokio Future.
Apa selanjutnya
Akan adil untuk dicatat di sini bahwa Azure IoT sepenuhnya terintegrasi dengan bahasa pemrograman Rust. Sejak kami merilis Azure IoT Edge, penggunaan Rust hanya meningkat. Banyak proyek layanan cloud yang saat ini sedang dikerjakan secara aktif ditulis dalam Rust. Trinitas yang ditawarkan Rust (keamanan memori, keamanan perlombaan data, dan kinerja) sangat cocok untuk Azure IoT. Kami berharap bahwa kami akan memiliki sesuatu yang lain untuk dikatakan tentang ini di masa depan!
Raj Wengalil, Manajer Umum, SWE, Platform IoTReferensi
(1)
docs.microsoft.com/en-us/azure/iot-edge(2)
msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programming(3)
tokio.rsDari penerjemah: terima kasih atas bantuan dalam menerjemahkan
Legatus88 ,
Funkill , grup telegram berbahasa Rusia Rust (@rustlang_ru), KDPV
dari sini .