Menentukan arsitektur layanan

Arsitektur layanan mengacu pada cara layanan disusun dan cara layanan berkomunikasi dengan komponen lain dalam sistem.

Membuat paket layanan

Paket layanan mengelompokkan unit layanan terkait yang dapat di-deploy bersama. Satu-satunya properti yang diperlukan untuk paket layanan adalah nama. Bersama dengan nama paket, nama ini membentuk nama yang sepenuhnya memenuhi syarat untuk paket layanan.

Paket layanan ditentukan dengan file Vehicle Services Interface Definition Language (VSIDL) (file dengan ekstensi .vsidl).

Contoh berikut menunjukkan dua paket layanan: paket layanan TirePressureMonitoring dan paket layanan BodyControl:

package: "com.android.sdv.sample.vsidl"

service_bundle {
  name: "TirePressureMonitoring"
}

service_bundle {
  name: "BodyControl"
}

Dengan:

  • service_bundle mengidentifikasi struktur sebagai paket layanan.
  • name adalah nama paket layanan.

Pola pesan: Pub/Sub dan RPC

Framework SDV menggunakan dua pola pesan utama: Publish-Subscribe (Pub/Sub) dan remote procedure call (RPC).

Di Pub/Sub, sistem bereaksi terhadap perubahan status kendaraan dengan melakukan streaming data ke komponen yang tertarik. Data diatur ke dalam topik. Penerbit mengirim pesan di topik. Penayang mengirim pesan tentang topik tanpa perlu mengetahui pelanggan mana (atau berapa banyak pelanggan) yang mendengarkan. Pelanggan menerima pesan di topik tanpa mengetahui penayang mana yang mengirim pesan tersebut.

Sebaliknya, RPC dirancang untuk tindakan dan hasil. Digunakan saat pemanggil memulai permintaan karena mereka peduli dengan hasil atau konfirmasi tindakan tersebut. Pemanggil memanggil metode tertentu di saluran.

Meskipun pola ini melayani kebutuhan operasional yang berbeda, keduanya memiliki properti struktural yang sama: keduanya mengandalkan jalur komunikasi bernama—topik untuk Pub/Sub dan saluran untuk RPC—untuk memisahkan identitas pengirim dari penerima.

Mendeklarasikan penerbit dan pelanggan

Publish-subscribe adalah pola pengiriman pesan di mana pengirim pesan, yang disebut penayang, tidak mengirim pesan secara langsung ke penerima tertentu, yang disebut pelanggan. Sebagai gantinya, penayang mengategorikan pesan ke dalam topik dan pelanggan berlangganan satu atau beberapa topik komunikasi serta hanya menerima pesan yang dipublikasikan ke topik tersebut. Untuk mengetahui informasi lebih lanjut tentang publish-subscribe, lihat Pola publish-subscribe.

Menambahkan penerbit ke paket layanan

Contoh berikut menunjukkan penayang yang ditambahkan ke paket layanan TirePressureMonitoring:

package: "com.android.sdv.sample.vsidl"

service_bundle {
  name: "TirePressureMonitoring"

  publisher {
    message: "TirePressure"
    topic: "front-left"
    capacity: 10
  }

}

service_bundle {
  name: "BodyControl"

  ...
}

Dengan:

  • publisher Pesan layanan memublikasikan pesan ke antrean pesan.
  • message Struktur data atau jenis pesan yang ditentukan dalam protobuf (file dengan ekstensi .protobuf).
  • topic ID unik untuk topik publikasi. Harus dalam huruf kecil dengan kasus tanda hubung.
  • capacity Jumlah pesan yang dapat ditampung oleh antrean publikasi. Harus berupa bilangan genap yang lebih besar dari atau sama dengan 2.

Menambahkan langganan ke paket layanan

Contoh berikut menunjukkan penayang yang ditambahkan ke paket layanan BodyControl:

package: "com.android.sdv.sample.vsidl"

service_bundle {
  name: "TirePressureMonitoring"

  publisher {
    message: "TirePressure"
    topic: "front-left"
    capacity: 10
  }
}

service_bundle {
  name: "BodyControl"

  subscriber {
    message: "com.android.sdv.sample.vsidl.TirePressure"
    topic: "front-left"
  }
}

Dengan:

  • Paket Layanan subscriber berlangganan topik.
  • message Struktur data atau jenis pesan yang ditentukan dalam protobuf (file dengan ekstensi .protobuf).
  • topic ID unik untuk topik publikasi. Harus cocok dengan topik penayang dan menggunakan huruf kecil dengan kasus tanda hubung.

Menentukan klien dan server RPC

Remote procedure call (RPC) memberikan independensi lokasi panggilan fungsi. Dalam pola ini, saluran berfungsi sebagai titik pertemuan bernama tempat klien dan penyedia bertemu. Dengan menargetkan channel, bukan instance layanan tertentu, framework memisahkan maksud perintah dari lokasi fisik penerapan.

Contoh berikut menetapkan paket layanan ClimateControl sebagai server dan paket layanan BodyControl sebagai klien:

package: "com.sdv.cc"

service_bundle {
  name: "ClimateControl"

  server {
    service: "SetTemperature"
    channel: "climate-control"
  }
}

service_bundle {
  name: "BodyControl"

  client {
    service: "SetTemperature"
    channel: "climate-control"
  }
}

Dengan:

  • server menunjukkan bahwa paket layanan adalah server yang menyediakan beberapa layanan RPC (diidentifikasi oleh service sebagai SetTemperature).
  • client menunjukkan bahwa paket layanan adalah klien yang memanggil layanan SetTemperature.
  • channel adalah nama saluran RPC. Nama ini harus dalam huruf kecil dengan kasus tanda hubung dan unik per layanan.

Contoh ini memungkinkan paket layanan BodyControl melakukan panggilan prosedur jarak jauh ke paket layanan ClimateControl untuk menyetel suhu.

Langkah berikutnya

Setelah menentukan arsitektur, buat kode middleware.