Pengantar
Saya bekerja di sebuah perusahaan di mana kita menjalankan banyak pekerjaan batch processing jutaan catatan data setiap hari dan saya sudah berpikir baru-baru ini tentang semua mesin yang duduk-duduk masing-masing dan setiap hari melakukan apa-apa selama beberapa jam. Bukankah lebih baik jika kita bisa menggunakan mesin-mesin untuk meningkatkan kekuatan pemrosesan sistem kita? Dalam Seri artikel ini saya akan melihat potensi manfaat mempekerjakan kantor grid menggunakan lingkungan virtualised.
Dalam Bagian 1 saya memberi gambaran dari sistem dan teknologi saya akan menggunakan juga dibahas beberapa kemungkinan alasan mengapa Anda ingin membuat grid kantor.
Job Control
Jika Anda akan menjalankan pekerjaan maka Anda akan memerlukan beberapa cara untuk mengatur mereka. sistem kontrol pekerjaan yang Anda (di server pekerjaan Anda) harus benar-benar dipikirkan dengan baik bahkan sebelum mencoba untuk menjalankan sebuah jaringan kantor. Jadi pertama, apa tugas untuk sistem kontrol pekerjaan:
- Bagikan pekerjaan atas permintaan dari pekerja
- Beritahu pekerja apa jenis pekerjaan untuk menjalankan
- Track pekerjaan
- Pastikan bahwa pekerjaan hanya berjalan sekali
- Menyediakan data pekerjaan untuk para pekerja, atau setidaknya memberitahu mereka di mana mendapatkannya
Sistem ini juga perlu diperluas, solusi yang bekerja untuk saat ini dalam satu kasus dapat diperpanjang untuk menjalankan beberapa jenis pekerjaan sebagai bisnis melihat berharga dalam larutan grid. Misalnya, pekerjaan bisa mendapatkan prioritas, lebih dari satu jenis pekerjaan mungkin ada (yaitu kode basis beberapa), akhirnya Anda bahkan dapat menjalankan mesin beberapa pekerja yang berbeda yang dioptimalkan untuk setiap jenis pekerjaan (walaupun yang bergerak menjauh dari 'pekerja generik 'ide). Selalu mencoba untuk berpikir tentang masa depan ketika sistem berkembang, visi jangka pendek dapat menyebabkan frustrasi jangka panjang dan waktu pengembangan meningkat.
Ayub Server
Kita akan membutuhkan tempat untuk mengendalikan pekerjaan kita dari, ini harus menjadi sistem hanya dalam grid Anda yang memiliki resource locator tetap, adalah bahwa alamat IP, nama host, URL (menggunakan DNS internal), dll Ini adalah karena pekerja perlu tahu di mana untuk mencari pekerjaan, pekerja harus mencari sistem kerja kontrol (bukan sistem kontrol pekerjaan menemukan pekerja).
Server pekerjaan itu sendiri tidak benar-benar memiliki tugas yang rumit (dalam bagaimanapun sistem dasar), perlu untuk menyimpan daftar pekerjaan, pekerjaan tangan keluar, menerima hasil, dan kemudian menyimpannya untuk pengambilan nanti. Bagaimana bagian-bagian ('tangan dari pekerjaan' seperti) yang ditetapkan bisa sangat dasar. Kemudian kita dapat memperluas sistem untuk menyertakan sebuah antarmuka administrasi untuk menambah, mengedit, menghapus, menunda pekerjaan tapi ini di luar latihan ini.
Tidak ada alasan apapun maka pekerjaan bahwa server Anda tidak bisa menjadi mesin virtual yang berjalan dalam server pemrosesan utama Anda asalkan tidak terlalu banyak menguras sumber daya dari itu. Server pekerjaan namun tidak ketersediaan kebutuhan yang tinggi, jika turun pada Jumat malam Anda akan kehilangan seluruh akhir pekan pengolahan, berpotensi biaya Anda beberapa minggu senilai waktu proses (jika dibandingkan dengan server utama pemrosesan Anda sendiri) . Anda mungkin ingin mempertimbangkan untuk menempatkan server pekerjaan Anda di lingkungan yang seimbang beban untuk ketersediaan tinggi.
Basic Setup
Konfigurasi dasar untuk server pekerjaan kami akan terdiri dari apa yang saya menelepon salah satu dari Limp server saya (yaitu Li Nux, ySql m, P HP). Kode berjalan pada pekerja Thea benar-benar akan bekerja apa pekerjaan dapat berjalan dengan berinteraksi dengan dengan database pekerjaan sistem kontrol. Kemudian kita bisa membuat web service dan benar-benar tangan keluar pekerjaan daripada memiliki pekerja melakukan kerja keras sendiri, tetapi untuk sekarang kita akan terus menggunakan prinsip KISS (Keep it Simple, Stupid!).
Jadi, mari membuat tiga mySQL tabel untuk menangani pekerjaan. Ini akan menjadi `pekerjaan`, `jobRecords`, dan `jobResults`.
Disini Saya menggunakan SQL Buddy alternatif yang sedikit besar untuk phpMyAdmin hanya karena lebih mudah untuk diinstal pada CentOS (untuk orang lain lihat: 10 alternatif Besar ke phpMyAdmin )
Tabel ini terdiri dari 5 bidang yang sederhana,
- id: Uniknya mengidentifikasi pekerjaan
- Nama: Bisa jadi referensi klien, atau jumlah pengenal lainnya
- Status: Anda perlu tahu di mana pekerjaan itu pada, misalnya
- 0: Belum dimulai
- 1: Dijemput
- 2: Selesai
- started_by: Siapa yang mulai melakukan pekerjaan? Hal ini tidak sepenuhnya dibutuhkan tetapi adalah baik untuk memiliki. Saya sarankan pelacakan pekerja dengan alamat IP pada jaringan Anda
- started_at: Kapan pekerja memulai pekerjaan? Dengan pelacakan pekerjaan yang belum selesai dalam waktu X jumlah waktu kita tahu kita perlu mengambil pekerjaan sekali lagi dan mulai memproses oleh pekerja lain. Pekerja bisa menghentikan pengolahan / offline untuk sejumlah alasan, listrik mati, kecelakaan, kehilangan jaringan, dll
Sangat mudah bagaimana tabel ini dapat diperpanjang dengan beberapa kolom tambahan untuk memungkinkan untuk statistik pelacakan, kolom waktu selesai untuk melihat berapa lama pekerjaan itu mengambil, sebuah counter untuk melihat berapa banyak pekerja mengambil pekerjaan itu (jelas ini perlu cenderung 1), prioritas pekerjaan, daftar bisa terus dan terus. Dalam skenario pekerjaan yang lebih kompleks akan mungkin untuk menentukan berapa banyak memori pekerja akan membutuhkan akses ke (dan karena itu hanya menggunakan pekerja sesuai), atau bahkan jenis pekerja akan diperlukan.
Mari menambahkan pekerjaan beberapa contoh:
Tabel berikutnya lagi adalah cukup sederhana untuk memahami, ini adalah catatan pekerjaan kita. Mereka terkait dengan tabel pekerjaan utama dengan sebuah kolom `jobs_id`. Yang membuat tabel ini sangat tergantung pada data yang Anda butuhkan untuk memasok para pekerja Anda, memungkinkan membuat contoh yang sangat sederhana di mana kita memiliki empat kolom:
- id: ID dari catatan
- Nama: Nama Orang
- Alamat: alamat Person
- jobs_id: ID pekerjaan yang catatan ini terkait dengan
Tabel ketiga dan terakhir terdiri dari tabel hasil, itu telah sama make up sebagaimana tabel catatan kami, dan dengan penambahan beberapa kolom bisa menjadi bagian dari tabel catatan:
- job_record_id: Link hasilnya ke meja kerja
- Hasil: Data hasil
... Dan itu semua Anda butuhkan untuk kontrol pekerjaan! (Meskipun pada tingkat yang sangat dasar) Dalam kasus saya, saya menunjuk ke meja tempat data saya untuk memproses berada, tapi ini bisa saja menjadi file, parameter untuk menjalankan kode simulasi, apa saja.
Memilih pekerjaan
Sebagaimana dinyatakan sebelumnya, para pekerja akan melakukan manajemen tugas kita untuk kita untuk saat ini, sehingga semua kita harus benar-benar lakukan adalah mencari pekerjaan yang memerlukan pemrosesan dan mendapatkan informasi. Bagaimana kita melakukan ini? Nah tugas kami memilih kriteria seleksi dan mencari pekerjaan, di SQL saya melakukan hal berikut:
- Mengambil pekerjaan yang tidak ditandai sebagai lengkap tapi dari pekerja kami dan ulang mereka (__ME__ gantikan dengan sebuah identifier, termudah akan alamat IP):
UPDATE `pekerjaan` SET `status` = 0 WHERE `status` = 1 DAN `started_by` = __ME__;
- Menggunakan tugas kita kriteria seleksi, pilih pekerjaan dan kepada sistem kontrol yang pekerja ini berurusan dengan itu:
UPDATE `pekerjaan` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `status` = 0 OR
(`Status` = 1 DAN `started_at`> DATE_SUB (NOW (), INTERVAL X JAM)) ORDER BY `id` ASC;
Dengan menyambar pekerjaan yang belum kembali hasil sebesar X waktu kami memastikan bahwa semua pekerjaan yang berjalan jika seorang pekerja menabrak atau pergi AWOL.
- Selanjutnya ambil rincian pekerjaan diikuti dengan catatan sendiri:
SELECT * FROM `pekerjaan` WHERE `started_by` = __ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `id` = __JOBID__;
Setelah menyelesaikan pekerjaan kami memasukkan kami hasil catatan dan menandai tugas sebagai selesai. Ingat sebagai pekerjaan dapat menangguhkan / resume kapan saja memungkinkan untuk beberapa kekokohan dalam naskah anda. Mungkin bahwa tugas menghentikan setengah jalan melalui memperbarui sistem kontrol pekerjaan, sehingga memeriksa jumlah record dalam pekerjaan dan jumlah hasil disimpan kembali ke sistem kontrol pekerjaan akan menjadi langkah yang bijak.
Selain itu, sementara ini menunjukkan bagaimana pekerjaan dapat dipilih dan dikelola dari frame-query SQL Anda benar-benar harus mencabut kontrol pekerjaan Anda sehingga jika Anda memutuskan untuk beralih menggunakan layanan web, yang didasarkan sistem file, XML , atau lainnya sejumlah sistem itu tidak akan mempengaruhi kode di atasnya.
Job Konfigurasi
Aspek berikutnya yang perlu dipertimbangkan adalah pekerjaan ukuran dan konfigurasi. Dengan bermain dengan konfigurasi pekerjaan kita bisa menyerang keseimbangan yang sangat baik antara kecepatan, proses replikasi, dan kehandalan. Ambil beberapa OFA skenario:
- Pekerjaan mengambil 1 setiap hari untuk menjalankan: Ini berarti bahwa para pekerja Anda butuh 15 hari untuk memproses setiap pekerjaan (ingat 10% dari kekuatan untuk 2/3rds dari waktu). Ini jelas bukan konfigurasi bijak, ukuran pekerjaan Anda terlalu besar! Itu akan mengambil setidaknya dua kali waktu untuk mendapatkan pekerjaan harus diproses pekerja awal pergi AWOL (waktu untuk mengambil bahwa hal itu tidak kembali hasil ditambah waktu pemrosesan kembali). Dalam ideal Anda akan memiliki minimal satu pekerjaan penuh mudah dibersihkan pada akhir setiap periode idle lama, bahwa cara Anda menjaga pekerjaan berdetak lebih dan pada kasus terburuk pekerjaan akan mengambil dua hari untuk memproses harus yang pertama hilang.
- Pekerjaan mengambil 1 menit untuk menjalankan: Ini berarti bahwa para pekerja Anda memakan waktu sekitar 15 menit untuk menjalankan setiap pekerjaan. Sementara ini awalnya mungkin tampak ideal, Anda mendapatkan pengolahan pekerjaan tambahan selama waktu makan siang, istirahat kopi, pertemuan, dll skenario ini membuat kerusakan pada area lain dari sistem anda dan memperkenalkan masalah sendiri. Sebagai contoh, pertama setup Anda / pengolahan rasio waktu akan pergi ke kanan bawah, sehingga kehilangan efisiensi sistem. jaringan Anda akan terus-menerus streaming informasi kerja dengan berbagai pekerja staf frustasi yang dong hari mereka untuk bekerja sehari. Anda juga akan menambah beban lebih pada server pemrosesan pekerjaan Anda karena harus mengeluarkan banyak dan banyak potongan-potongan kecil pekerjaan secara teratur. Terakhir, dalam situasi ini jika server pekerjaan Anda turun Anda akan membuat log kembali besar dari pekerjaan yang belum selesai sementara pekerjaan yang lebih besar bisa dari pengolahan lanjutan tidak menyadari bahwa server kerja adalah mengalami kesulitan.
Pada kenyataannya tidak akan ada konfigurasi satu ideal untuk pengaturan grid Anda, banyak tergantung pada sumber daya yang tersedia, jenis pekerjaan, persyaratan kerja waktu turnaround, kemampuan jaringan, dan sebagainya. Namun beberapa pedoman akan menjadi:
- Ukuran pekerjaan sehingga setiap pekerja bisa melalui setidaknya 3-4 pekerjaan dalam jangka waktu 15 jam (periode waktu terlama mungkin idle)
- Bermain dengan ukuran pekerjaan sehingga waktu setup menjadi cukup signifikan dibandingkan waktu pemrosesan (mengingat titik di atas).
- Jika pekerjaan tidak lengkap dalam dua kali lipat jumlah waktu (mungkin kurang) Anda harapkan untuk menyelesaikannya berasumsi bahwa AWOL yang hilang dan mulai memproses dengan pekerja lain. Ini berarti Anda mungkin harus menunggu hingga tiga kali panjang normal pekerjaan sampai selesai (mungkin lebih lama jika pekerjaan berikutnya gagal). Anda mungkin ingin mengurangi saat ini, tapi hati-hati tidak untuk mengurangi terlalu banyak karena Anda mungkin mulai menduplikasi tugas-tugas pengolahan secara teratur.
- Pekerjaan harus independen dari persyaratan luar sebanyak mungkin. Server pekerjaan, misalnya, hanya harus dihubungi pada awal dan akhir setiap pekerjaan.
- Jangan jenuh jaringan Anda, ini akan memiliki dua efek negatif, staf siang hari Anda akan menemukan menggunakan jaringan frustasi dan masalah mungkin dialami dengan koneksi waktu keluar masalah yang hanya akan bertambah buruk karena Anda skala grid Anda.
- Pastikan pekerjaan dapat berjalan pada pekerja Anda. Jika pekerjaan menjadi terlalu memori pekerjaan ruang intensif atau intensif disk akan mulai membatalkan dan satu-satunya adalah Anda akan melihat penurunan jumlah pekerjaan yang telah diproses tanpa alasan mengapa.
Menyerahkan Hasil Pekerjaan yang
Ketika menyerahkan hasil dari pekerjaan adalah penting untuk memeriksa bahwa hasil belum diserahkan oleh pekerja lain, terutama jika pekerja saat ini telah tidak aktif selama beberapa waktu.
Bila hasil disampaikan memastikan bahwa jumlah hasil pertandingan jumlah record dalam pekerjaan.
Sebagaimana dinyatakan sebelumnya, dan tidak bisa lebih ditekankan, membangun toleransi kesalahan ke dalam sistem pengambilan dan penyerahan hasil pekerjaan. Para pekerja dapat (dan kemungkinan besar akan) masuk ke mode Suspend di paling nyaman kali dan ini harus dipenuhi. Juga sekali lagi pergi pengiriman abstrak hasil Anda akan membantu memenuhi untuk perubahan masa depan untuk sistem kendali Anda pekerjaan lebih mudah untuk menangani.
Ringkasan
Dalam section ini kita telah melihat apa server kontrol pekerjaan perlu dilakukan dan bagaimana untuk mendapatkan sistem yang sangat dasar yang mengatur. Kita mendiskusikan bagaimana untuk mengambil pekerjaan dari sistem kontrol dan cara terbaik untuk mengkonfigurasi pekerjaan untuk mendapatkan yang paling kita sistem grid kantor Anda. Untuk menyelesaikan, satu atau dua paragraf di mengirimkan hasilnya kembali ke server kontrol kerja adalah disajikan.
- Sebuah server kontrol pekerjaan mengelola pekerjaan dan memastikan bahwa semua unit kerja selesai
- Dengan abstrak pekerjaan Anda pilih / penyampaian hasil yang kita dapat mengubah teknologi dari server kontrol tanpa masalah banyak
- Konfigurasi pekerjaan Anda untuk memastikan bahwa mereka dijalankan dengan cepat dan efisien tanpa memberi tekanan terlalu banyak pada infrastruktur jaringan Anda, dan tanpa duplikasi tugas pengolahan secara teratur.
- Pastikan bahwa Anda membangun toleransi kesalahan dan checking kesalahan ke dalam rutinitas Anda, pekerja dapat menunda dan melanjutkan dan yang paling nyaman kali. Ingatlah untuk memeriksa apakah hasil yang telah disampaikan oleh pekerja lain.
Lain kali
Di bagian 3 kita akan menciptakan mesin virtual pengolahan kami dan mengatur jendela kami mesin menjadi idle-time.