Pengenalan
Saya bekerja di sebuah perusahaan di mana kita menjalankan banyak pekerjaan batch pengolahan jutaan catatan data setiap hari dan saya sudah berpikir baru tentang semua mesin yang duduk di sekitar masing-masing dan setiap hari melakukan apa-apa selama beberapa jam. Bukankah itu baik jika kita bisa menggunakan mesin-mesin untuk meningkatkan kekuatan pemrosesan sistem kami? Dalam set artikel saya akan melihat potensi manfaat menggunakan kantor jaringan menggunakan lingkungan virtualised.
Pada Bagian 1 saya berikan gambaran dari sistem dan teknologi saya akan menggunakan serta membahas beberapa kemungkinan alasan mengapa Anda ingin membuat jaringan kantor.
Kontrol Ayub
Jika Anda akan menjalankan pekerjaan maka Anda akan memerlukan beberapa cara untuk mengelolanya. Kontrol pekerjaan Anda sistem (pada 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
- Melacak pekerjaan
- Pastikan bahwa pekerjaan hanya berjalan sekali
- Menyediakan data pekerjaan untuk pekerja, atau setidaknya memberitahu mereka di mana untuk mendapatkannya
Sistem ini juga harus diperluas, solusi yang bekerja untuk saat ini dalam kasus tunggal dapat diperpanjang untuk menjalankan beberapa jenis pekerjaan sebagai bisnis melihat nilai dalam larutan grid. Misalnya, pekerjaan dapat memperoleh prioritas, lebih dari satu jenis pekerjaan mungkin ada (yaitu beberapa basis kode), akhirnya Anda bahkan dapat menjalankan mesin beberapa pekerja yang berbeda yang dioptimalkan untuk setiap jenis pekerjaan (walaupun itu tidak bergerak jauh dari pekerja generik 'ide). Selalu mencoba untuk berpikir tentang masa depan ketika mengembangkan sistem, visi jangka pendek dapat menyebabkan frustrasi jangka panjang dan waktu pengembangan meningkat.
Ayub Server
Kita akan perlu tempat untuk mengendalikan pekerjaan kita dari, ini harus menjadi sistem hanya dalam grid Anda yang memiliki sumber daya locator tetap, bahwa alamat IP, nama host, URL (menggunakan DNS internal), dll Hal ini karena pekerja perlu tahu di mana untuk mencari pekerjaan, pekerja perlu menemukan sistem kontrol pekerjaan (bukan sistem kontrol pekerjaan menemukan kaum pekerja).
Server pekerjaan itu sendiri tidak benar-benar memiliki tugas yang rumit (dalam sistem dasar Anyhow), perlu untuk menyimpan daftar pekerjaan, tangan keluar pekerjaan, menerima hasil, dan kemudian menyimpannya untuk nanti pengambilan. Bagaimana bagian-bagian ini ('menyerahkan pekerjaan' seperti) didefinisikan bisa sangat dasar. Kemudian kita dapat memperpanjang sistem untuk mencakup antarmuka administrasi untuk menambah, mengedit, menghapus, menangguhkan pekerjaan tapi ini adalah di luar latihan ini.
Tidak ada alasan apapun maka pekerjaan Anda bahwa server tidak dapat mesin virtual yang berjalan dalam server pengolahan utama Anda asalkan tidak terlalu banyak menguras sumber daya dari itu. Namun pekerjaan server tidak perlu ketersediaan tinggi, jika turun pada Jumat malam Anda akan kehilangan seluruh akhir pekan pengolahan, berpotensi biaya Anda beberapa minggu senilai waktu pemrosesan (jika dibandingkan dengan server pengolahan utama Anda sendiri) . Anda mungkin ingin mempertimbangkan untuk meletakkan server yang pekerjaan Anda pada lingkungan seimbang beban untuk ketersediaan tinggi.
Dasar Pengaturan
Konfigurasi dasar untuk server pekerjaan kita akan terdiri dari apa yang saya memanggil salah satu server lemas saya (yang adalah Li nux, m ySql, P HP). Kode berjalan pada pekerja Thea benar-benar akan bekerja apa pekerjaan dapat berjalan dengan berinteraksi dengan dengan database sistem kontrol pekerjaan. Kemudian kita bisa membuat layanan web 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 kita membuat tiga mySQL tabel untuk menangani pekerjaan. Ini akan `pekerjaan`, `jobRecords`, dan `jobResults`.
Di sini aku menggunakan SQL Buddy alternatif kecil yang hebat 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 di, misalnya
- 0: Belum dimulai
- 1: Dipetik up
- 2: Selesai
- started_by: Siapa yang mulai melakukan pekerjaan? Hal ini tidak sepenuhnya diperlukan, tetapi adalah baik untuk memiliki. Saya sarankan pekerja pelacakan melalui alamat IP pada jaringan Anda
- started_at: Kapan pekerja memulai pekerjaan? Dengan pelacakan pekerjaan yang belum diselesaikan dalam jumlah X waktu kita tahu bahwa kita perlu untuk mengambil pekerjaan itu sekali lagi dan mulai memproses oleh pekerja lain. Pekerja dapat menghentikan pengolahan / offline untuk sejumlah alasan, kegagalan daya, kecelakaan, kehilangan jaringan, dll
Sangat mudah bagaimana tabel ini dapat diperpanjang dengan bidang tambahan beberapa untuk memungkinkan pelacakan statistik, waktu selesai kolom untuk melihat berapa lama pekerjaan mengambil, counter untuk melihat berapa banyak pekerja yang mengambil pekerjaan itu (jelas ini perlu cenderung 1), prioritas pekerjaan, daftar dapat terus dan terus. Dalam skenario pekerjaan yang lebih kompleks akan mungkin untuk menentukan berapa banyak memori pekerja akan membutuhkan akses ke (dan karenanya hanya menggunakan pekerja yang sesuai), atau bahkan apa tipe pekerja akan diperlukan.
Mari menambahkan beberapa contoh pekerjaan:
Tabel berikutnya lagi adalah cukup sederhana untuk memahami, ini adalah catatan pekerjaan kita. Mereka terkait dengan tabel pekerjaan utama dengan kolom `jobs_id`. Make up tabel ini sangat tergantung pada data yang Anda butuhkan untuk memasok ke pekerja Anda, memungkinkan membuat contoh yang sangat sederhana di mana kita memiliki empat kolom:
- id: ID catatan
- Nama: Nama Orang yang
- Alamat: alamat Orang yang
- jobs_id: ID catatan ini pekerjaan yang terkait dengan
Tabel ketiga dan terakhir terdiri dari tabel hasil, telah banyak yang sama membuat catatan kami sebagai meja, dan dengan penambahan beberapa kolom bisa menjadi bagian dari tabel catatan:
- job_record_id: Link hasilnya ke meja kerja
- Hasilnya: Data Hasil
... Dan itu semua Anda butuhkan untuk kontrol pekerjaan! (Walaupun pada tingkat yang sangat dasar) Dalam kasus saya, saya menunjuk ke meja lain di mana data saya untuk memproses berada, tapi ini bisa saja dengan mudah menjadi sebuah file, parameter untuk menjalankan kode simulasi, Anda nama itu.
Memilih pekerjaan
Seperti yang dinyatakan sebelumnya, para pekerja akan melakukan manajemen tugas kita untuk kita untuk saat ini, sehingga semua kita harus benar-benar lakukan adalah menemukan pekerjaan yang membutuhkan pengolahan dan mendapatkan informasi. Bagaimana kita melakukan ini? Nah tugas kita memilih kriteria seleksi dan mencari pekerjaan, di SQL saya melakukan hal berikut:
- Mengambil pekerjaan yang tidak ditandai sebagai lengkap tetapi dari pekerja kami dan ulang mereka (gantikan __ME__ dengan identifier, termudah akan alamat IP):
UPDATE `pekerjaan` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ME__;
- Menggunakan pekerjaan kita kriteria seleksi, pilih pekerjaan dan memberitahu sistem kontrol yang pekerja ini berurusan dengan itu:
UPDATE `pekerjaan` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW () WHERE `status` = 0 ATAU
(`Status` = 1 AND `started_at`> DATE_SUB (NOW (), INTERVAL X JAM)) ORDER BY `id` ASC;
Dengan meraih pekerjaan yang belum kembali hasil dalam jumlah X waktu kami memastikan bahwa semua pekerjaan yang dijalankan dalam hal seorang pekerja menabrak atau pergi AWOL.
- Selanjutnya ambil rincian pekerjaan diikuti oleh catatan sendiri:
SELECT * FROM `pekerjaan` WHERE `started_by` LIMIT 1 = __ME__;
SELECT * FROM `job_records` WHERE `id` = __JOBID__;
Setelah menyelesaikan pekerjaan kita menyisipkan catatan hasil kami dan menandai pekerjaan sebagai lengkap. Ingat sebagai pekerjaan dapat suspend / resume setiap saat memungkinkan untuk beberapa kekokohan di script Anda. Mungkin bahwa tugas menunda setengah jalan melalui memperbarui sistem kontrol pekerjaan, sehingga memeriksa jumlah record dalam pekerjaan dan jumlah hasil disimpan kembali ke sistem kontrol pekerjaan akan menjadi perpindahan yang bijaksana.
Selain itu, sementara ini menunjukkan bagaimana pekerjaan dapat dipilih dan dikelola dari sebuah frame SQL-query Anda benar-benar harus abstrak kontrol pekerjaan Anda sehingga jika Anda memutuskan untuk beralih menggunakan layanan web, sistem file berbasis XML , atau lainnya jumlah sistem itu tidak akan mempengaruhi kode di atasnya.
Ayub Konfigurasi
Aspek berikutnya yang perlu dipertimbangkan adalah pekerjaan ukuran dan konfigurasi. Dengan bermain dengan konfigurasi pekerjaan yang kami bisa menyerang keseimbangan yang sangat baik antara kecepatan, proses replikasi, dan kehandalan. Ambil beberapa skenario yang OFA:
- Jobs mengambil 1 setiap hari untuk menjalankan: Ini berarti bahwa para pekerja Anda perlu 15 hari untuk memproses setiap pekerjaan (ingat 10% dari kekuatan untuk 2/3rds dari waktu). Ini jelas bukan konfigurasi yang bijaksana, ukuran pekerjaan Anda terlalu besar! Ini akan mengambil setidaknya dua kali waktu untuk mendapatkan pekerjaan harus diproses pekerja awal pergi AWOL (waktu untuk mengambil yang tidak kembali hasil daur ulang ditambah waktu). Dalam ideal Anda akan memiliki minimal satu pekerjaan penuh mudah dibersihkan pada akhir setiap periode lama menganggur, bahwa cara Anda menjaga pekerjaan berdetak lebih dan pada kasus terburuk pekerjaan akan mengambil dua hari untuk proses harus pertama hilang.
- Jobs 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 pekerjaan pengolahan tambahan selama waktu makan siang, rehat kopi, pertemuan, dll skenario ini menempatkan tekanan pada daerah lain dari sistem anda dan memperkenalkan masalah sendiri. Misalnya, pertama setup / proses rasio waktu Anda akan pergi kanan bawah, oleh karena itu kehilangan efisiensi sistem. Jaringan anda akan terus mengalir informasi pekerjaan untuk staf berbagai pekerja frustasi yang dong hari mereka untuk bekerja sehari. Anda juga akan menempatkan beban lebih pada server pengolahan pekerjaan Anda karena memiliki untuk hidangan keluar banyak dan banyak potongan-potongan kecil bekerja secara teratur. Terakhir, dalam situasi ini jika server pekerjaan Anda turun Anda akan membuat login kembali besar pekerjaan yang belum selesai sementara pekerjaan yang lebih besar bisa dari pengolahan terus tak sadar bahwa server mengalami kesulitan pekerjaan.
Pada kenyataannya tidak akan ada konfigurasi yang ideal satu untuk konfigurasi jaringan Anda, banyak tergantung pada sumber daya yang tersedia, jenis pekerjaan, persyaratan pekerjaan perputaran waktu, kemampuan jaringan, dan sebagainya. Namun beberapa pedoman akan:
- Ukuran pekerjaan sehingga setiap pekerja bisa mendapatkan pekerjaan melalui setidaknya 3-4 dalam periode 15 jam (periode waktu terlama kemungkinan idle)
- Bermain dengan ukuran pekerjaan sehingga waktu setup menjadi cukup signifikan dibandingkan dengan waktu proses (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 waktu ini, tapi hati-hati untuk tidak mengurangi terlalu banyak karena Anda dapat mulai duplikasi tugas pengolahan secara teratur.
- Pekerjaan harus independen dari persyaratan luar sebanyak mungkin. Server pekerjaan, misalnya, hanya harus dihubungi pada awal dan akhir setiap pekerjaan.
- Tidak 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 sebagai Anda skala grid Anda.
- Pastikan pekerjaan dapat berjalan pada pekerja Anda. Jika pekerjaan menjadi terlalu memori pekerjaan ruang intensif atau disk yang intensif akan mulai membatalkan dan satu-satunya hal yang akan Anda perhatikan adalah penurunan jumlah pekerjaan yang diproses dengan tidak ada alasan sebenarnya mengapa.
Menyerahkan Hasil Pekerjaan
Ketika mengirimkan hasil pekerjaan penting untuk memeriksa bahwa hasilnya belum diserahkan oleh pekerja yang lain, terutama jika pekerja saat ini telah terbengkalai selama beberapa waktu.
Ketika hasilnya diserahkan memastikan bahwa jumlah hasil sesuai dengan jumlah record dalam pekerjaan.
Seperti yang dinyatakan sebelumnya, dan tidak bisa terlalu ditekankan, membangun toleransi kesalahan dalam pengambilan dan penyerahan hasil pekerjaan. Para pekerja dapat (dan kemungkinan besar akan) masuk ke mode Suspend pada yang paling nyaman kali dan ini harus dipenuhi. Juga sekali lagi pergi penyerahan abstrak hasil Anda akan membantu memenuhi untuk perubahan masa depan untuk sistem kontrol pekerjaan Anda jauh 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 mengatur. Kami membahas bagaimana untuk mengambil pekerjaan dari sistem kontrol dan bagaimana cara terbaik untuk mengkonfigurasi pekerjaan untuk mendapatkan yang paling kami sistem grid kantor Anda. Untuk menyelesaikan, satu atau dua paragraf tentang cara mengirimkan hasilnya kembali ke server kontrol pekerjaan disajikan.
- Sebuah server kontrol pekerjaan mengelola pekerjaan dan memastikan bahwa semua unit kerja selesai
- Dengan abstrak pekerjaan Anda pilih / hasil penyerahan kita dapat mengubah teknologi dari server kontrol tanpa banyak masalah
- Konfigurasi pekerjaan Anda untuk memastikan bahwa mereka berjalan cepat dan efisien tanpa menempatkan terlalu banyak tekanan pada infrastruktur jaringan Anda, dan tanpa duplikasi tugas-tugas pengolahan secara teratur.
- Pastikan bahwa Anda membangun toleransi kesalahan dan kesalahan checking menjadi rutinitas Anda, pekerja dapat menunda dan melanjutkan dan yang paling nyaman kali. Ingatlah untuk memeriksa apakah hasil telah diserahkan oleh pekerja lain.
Berikutnya waktu
Di bagian 3 kita akan menciptakan mesin pengolahan virtual kami dan mengatur kita untuk menjadi mesin jendela idle-waktu pekerja.