Dependensi antara Komponen yang Dikelola oleh Penulis Yang Berbeda
Ada situasi di mana data dari satu penulis tergantung pada data yang dikelola oleh penulis lain. Dalam kasus ini, Anda harus mencadangkan atau memulihkan data dari kedua penulis.
VSS menangani masalah ini melalui gagasan dependensi komponen penulis eksplisit dan antarmuka IVssWMDependency .
Penulis menambahkan satu atau beberapa dependensi saat membuat Dokumen Metadata Penulis menggunakan metode IVssCreateWriterMetadata::AddComponentDependency . Penulis meneruskan metode nama dan jalur logis dari komponen dependen (yang dikelolanya), serta nama dan jalur logis dan ID kelas penulis (GUID yang mengidentifikasi kelas) komponen yang bergantung padanya.
Setelah ditetapkan, dependensi ini memberi tahu pemohon bahwa selama operasi pencadangan atau pemulihan baik komponen dependen maupun target dependensinya harus berpartisipasi.
Komponen tertentu dapat memiliki beberapa dependensi, yang mengharuskannya dan semua target dependennya berpartisipasi dalam pencadangan dan pemulihan bersama-sama.
Komponen dependen dan/atau target dependensinya dapat disertakan baik secara eksplisit atau implisit dalam operasi pencadangan atau pemulihan.
Mekanisme dependensi komponen penulis eksplisit tidak boleh digunakan untuk membuat dependensi antara dua komponen pada penulis yang sama. Aturan pemilihan dapat menyediakan fungsionalitas yang sama dengan lebih efisien tanpa risiko dependensi melingkar.
Sebagai contoh, IVssCreateWriterMetadata::AddComponentDependency dapat digunakan untuk menentukan dependensi penulis komponenData (dengan jalur logis "") penulis MyWriter pada komponen internetData (dengan jalur logis "Koneksi") dari penulis bernama InternetConnector dengan ID Kelas penulis X. (Meskipun dimungkinkan bagi beberapa penulis dengan ID kelas yang sama untuk berada di sistem secara bersamaan, kebingungan akan dihindari karena kombinasi jalur logis dan nama komponen unik pada sistem di bawah VSS.)
Penulis menambahkan beberapa dependensi ke komponen tertentu hanya dengan memanggil IVssCreateWriterMetadata::AddComponentDependency yang diulang dengan komponen yang berbeda dari penulis yang berbeda. Jumlah komponen lain yang bergantung pada komponen tertentu dapat ditemukan dengan memeriksa anggota cDependencies dari struktur VSS_COMPONENTINFO .
Penulis atau pemohon mengambil instans antarmuka IVssWMDependency dengan IVssWMComponent::GetDependency. IVssWMDependency mengembalikan nama komponen, jalur logis, dan ID kelas penulis yang mengelola komponen yang merupakan target dependensi.
Mekanisme dependensi tidak menentukan urutan preferensi tertentu antara komponen dependen dan target dependensinya. Seperti disebutkan di atas, semua dependensi menunjukkan bahwa setiap kali komponen tertentu dicadangkan atau dipulihkan, komponen atau komponen yang bergantung padanya juga harus dicadangkan atau dipulihkan. Implementasi dependensi yang tepat adalah atas kebijakan aplikasi cadangan.
Misalnya, dalam kasus di atas, writerData komponen (jalur logis "") tergantung pada komponen InternetConnector (jalur logis "Koneksi"). Pemohon bebas untuk menafsirkan ini dengan salah satu cara berikut:
- Jika komponen dependen, writerData, dipilih (secara implisit atau eksplisit) untuk pencadangan atau pemulihan, pemohon harus memilih (baik secara implisit maupun eksplisit) target dependensinya, internetData
- Jika target dependensinya, internetData, tidak dipilih untuk cadangan, maka komponen dependen, writerData, tidak boleh dipilih.
Namun, ketika mengembangkan dukungan untuk dependensi, pengembang pemohon harus menyadari bahwa tidak ada cara penulis dapat menentukan apakah salah satu komponennya adalah target dependensi.
Mendeklarasikan Dependensi Jarak Jauh
Aplikasi terdistribusi adalah aplikasi yang dapat dikonfigurasi untuk menggunakan satu atau beberapa komputer pada satu waktu. Biasanya aplikasi berjalan pada satu atau beberapa komputer server aplikasi dan berkomunikasi dengan (tetapi mungkin atau mungkin tidak benar-benar berjalan pada) satu atau beberapa komputer server database. Konfigurasi ini terkadang disebut sebagai penyebaran multi-sistem. Seringkali aplikasi yang sama juga dapat dikonfigurasi untuk berjalan pada satu komputer yang menjalankan server aplikasi dan server database. Konfigurasi semacam itu disebut penyebaran sistem tunggal. Dalam kedua konfigurasi, server aplikasi dan server database masing-masing memiliki penulis VSS independen mereka sendiri.
Dalam penyebaran multi-sistem, jika komponen yang dikelola oleh penulis aplikasi bergantung pada komponen jarak jauh yang dikelola oleh penulis server database, ini disebut dependensi jarak jauh. (Penyebaran sistem tunggal, sebaliknya, hanya memiliki dependensi lokal.)
Sebagai contoh penyebaran multi-sistem, pertimbangkan server aplikasi yang menggunakan server database SQL Server sebagai penyimpanan data. Data khusus aplikasi, yang mencakup bagian web, file konten web, dan metabase IIS, berada di satu atau beberapa komputer, yang disebut server web front-end. Penyimpanan data SQL aktual, yang mencakup database Konfigurasi dan beberapa database Konten, berada di satu atau beberapa komputer lain, yang disebut server database back-end. Masing-masing server web front-end berisi konten dan konfigurasi khusus aplikasi yang sama. Setiap server database back-end dapat menghosting salah satu database Konten atau database Konfigurasi. Perangkat lunak aplikasi hanya berjalan di server web front-end, bukan di server database. Dalam konfigurasi ini, penulis VSS aplikasi memiliki dependensi jarak jauh pada komponen yang dikelola oleh penulis SQL.
Penulis dapat mendeklarasikan dependensi jarak jauh dengan memanggil metode AddComponentDependency , menambahkan "\\RemoteComputerName\", di mana RemoteComputerName adalah nama komputer tempat komponen jarak jauh berada, ke jalur logis dalam parameter wszOnLogicalPath . Nilai RemoteComputerName dapat berupa alamat IP atau nama komputer yang dikembalikan oleh fungsi GetComputerNameEx .
Windows Server 2003: Penulis tidak dapat mendeklarasikan dependensi jarak jauh hingga Windows Server 2003 dengan Paket Layanan 1 (SP1).
Untuk mengidentifikasi dependensi, pemohon memanggil metode GetWriterId, GetLogicalPath, dan GetComponentName dari antarmuka IVssWMDependency . Pemohon harus memeriksa nama komponen yang dikembalikan GetComponentName dalam parameter pbstrComponentName . Jika nama komponen dimulai dengan "\\", pemohon harus mengasumsikan bahwa itu menentukan dependensi jarak jauh dan bahwa komponen pertama yang mengikuti "\\" adalah RemoteComputerName yang ditentukan ketika penulis yang disebut AddComponentDependency. Jika nama komponen tidak dimulai dengan "\\", pemohon harus mengasumsikan bahwa itu menentukan dependensi lokal.
Jika ada dependensi jarak jauh, pemohon harus mencadangkan komponen jarak jauh saat mencadangkan komponen lokal. Untuk mencadangkan komponen jarak jauh, pemohon harus memiliki agen di komputer jarak jauh dan harus memulai pencadangan pada komputer jarak jauh.
Menyusun Dependensi Jarak Jauh
Penting untuk dipahami bahwa dependensi bukanlah komponen dalam dan dari dirinya sendiri. Komponen diperlukan untuk menahan dependensi.
Contoh berikut menunjukkan dua cara untuk menyusun serangkaian dependensi.
Example 1:
Writer 1
Component A
File A
File B
Dependency (SQL/MSDE Writer, Component X, "\")
Dependency (SQL/MSDE Writer, Component Y, "\")
Example 2:
Writer 2
Component A
File A
File B
Component B
Dependency (SQL/MSDE Writer, Component X, "\")
Dependency (SQL/MSDE Writer, Component Y, "\")
Dalam contoh 1, dependensi dipegang oleh Komponen A. Karena hanya komponen yang dapat dipilih, bukan file individual, menyusun dependensi Komponen A dengan cara ini akan mengharuskan seluruh komponen, baik file maupun dependensi, harus selalu dicadangkan dan dipulihkan bersama-sama. Mereka tidak dapat dicadangkan atau dipulihkan satu per satu.
Dalam contoh 2, komponen terpisah (Komponen A dan B) menyimpan setiap dependensi. Dalam hal ini, kedua komponen dapat dipilih secara independen, dan oleh karena itu dicadangkan dan dipulihkan secara independen. Menyusun dependensi dengan cara ini memberikan aplikasi terdistribusi lebih banyak fleksibilitas dalam mengelola dependensi jarak jauhnya.
Mendukung Dependensi Jarak Jauh
Pemohon dapat memberikan dukungan penuh atau parsial untuk dependensi jarak jauh.
Untuk memberikan dukungan penuh, pemohon harus melakukan hal berikut pada waktu pencadangan dan pemulihan.
Pada waktu pencadangan, pemohon harus memulai pencadangan pada komputer front-end (lokal), menentukan dependensi yang ada, dan menampung pekerjaan cadangan tambahan untuk menangkap database back-end. Pemohon harus menunggu sampai setelah pekerjaan pencadangan back-end pada komputer jarak jauh selesai sebelum memanggil metode IVssBackupComponents::SetBackupSucceeded dan IVssBackupComponents::BackupComplete . Jika pemohon menunggu hingga pencadangan komponen back-end selesai sebelum memanggil BackupComplete, ini akan menghasilkan cadangan yang lebih mudah dipulihkan untuk penulis yang menerapkan penyempurnaan tambahan—seperti penguncian topologi, misalnya—selama pencadangan. Prosedur berikut menguraikan apa yang harus dilakukan pemohon:
- Di komputer lokal, pemohon memanggil IVssBackupComponents::InitializeForBackup, IVssBackupComponents::GatherWriterMetadata, IVssBackupComponents::P repareForBackup, dan IVssBackupComponents::D oSnapshotSet .
- Setelah salinan bayangan lokal selesai, tetapi sebelum pencadangan selesai, pemohon menampung pekerjaan pencadangan tambahan dengan mengirim permintaan ke agennya di komputer jarak jauh.
- Di komputer jarak jauh, agen pemohon melakukan urutan cadangan yang ditampung dengan memanggil InitializeForBackup, GatherWriterMetadata, PrepareForBackup, DoSnapshotSet, SetBackupSucceeded, dan BackupComplete.
- Ketika agen pemohon telah menyelesaikan pekerjaan yang ditampung di komputer jarak jauh, pemohon menyelesaikan urutan cadangan dengan memanggil SetBackupSucceeded dan BackupComplete.
Pada waktu pemulihan, pemohon harus memulai pemulihan yang melibatkan komputer front-end (lokal), pilih komponen dan dependensinya untuk dipulihkan, lalu kirim peristiwa PreRestore dengan memanggil metode IVssBackupComponents::P reRestore . Pemohon kemudian harus menampung pekerjaan pemulihan back-end di komputer jarak jauh dan memanggil metode IVssBackupComponents::P ostRestore ketika pemulihan back-end selesai. Persyaratan ini memberi penulis front-end kontrol lebih besar atas pengalaman pemulihan dan pengalaman pengguna administrator yang lebih baik secara keseluruhan. Karena cadangan di setiap sistem tidak terjadi pada titik waktu yang sama, penulis front-end perlu melakukan beberapa pembersihan data back-end. Dalam contoh aplikasi yang dibahas dalam "Mendeklarasikan Dependensi Jarak Jauh" sebelumnya, penulis harus memulai pemisahan atau pengindeksan ulang situs setelah pemulihan salah satu database back-end selesai. Untuk melakukan ini, penulis harus menerima peristiwa di server front-end. Prosedur berikut menguraikan apa yang harus dilakukan pemohon:
- Di komputer lokal, pemohon memanggil IVssBackupComponents::InitializeForRestore, GatherWriterMetadata, IVssBackupComponents::SetSelectedForRestore (atau IVssBackupComponentsEx::SetSelectedForRestoreEx), dan PreRestore.
- Setelah fase PreRestore selesai, tetapi sebelum fase PostRestore dimulai, pemohon menampung pekerjaan pemulihan tambahan dengan mengirim permintaan ke agennya di komputer jarak jauh.
- Di komputer jarak jauh, agen pemohon melakukan pekerjaan pemulihan yang ditampung dengan memanggil InitializeForRestore, GatherWriterMetadata, SetSelectedForRestore, PreRestore, SetFileRestoreStatus (atau SetSelectedForRestoreEx), dan PostRestore.
- Ketika agen pemohon telah menyelesaikan pekerjaan yang ditampung di komputer jarak jauh, pemohon menyelesaikan urutan pemulihan dengan memanggil IVssBackupComponents::SetFileRestoreStatus dan PostRestore.
Untuk memberikan dukungan parsial untuk dependensi jarak jauh, pemohon harus mengikuti dependensi jarak jauh dan menyertakannya sebagai bagian dari cadangan, tetapi pengurutan peristiwa pada sistem front-end dan back-end sebagaimana dirinci dalam dua prosedur sebelumnya tidak akan diperlukan. Untuk pemohon yang hanya menerapkan dukungan parsial, pemohon harus merujuk ke dokumentasi pencadangan/pemulihan aplikasi penulis untuk memahami skenario apa yang dapat didukung.