Pengantar
Saya bekerja di sebuah syarikat di mana kita menjalankan banyak kerja batch processing berjuta-juta nota data setiap hari dan saya sudah berfikir 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 boleh menggunakan mesin-mesin untuk meningkatkan kekuatan pemprosesan sistem kita? Dalam Seri artikel ini saya akan melihat potensi manfaat menggaji pejabat grid menggunakan persekitaran virtualised.
Dalam Bahagian 1 saya memberi gambaran dari sistem dan teknologi saya akan menggunakan juga dibahas beberapa kemungkinan alasan mengapa anda ingin membuat grid pejabat.
Job Control
Jika anda akan menjalankan kerja maka anda akan memerlukan beberapa cara untuk menetapkan mereka. sistem kawalan pekerjaan yang anda (di server pekerjaan anda) harus benar-benar difikirkan dengan baik bahkan sebelum cuba untuk menjalankan sebuah rangkaian pejabat. Jadi pertama, apa tugas untuk sistem kawalan pekerjaan:
- Berkongsi pekerjaan atas permintaan dari pekerja
- Beritahu pekerja apa jenis pekerjaan untuk menjalankan
- Track pekerjaan
- Pastikan bahawa pekerjaan hanya berjalan sekali
- Menyediakan data pekerjaan untuk para pekerja, atau sekurang-kurangnya memberitahu mereka di mana mendapatkannya
Sistem ini juga perlu diperluas, penyelesaian yang bekerja untuk saat ini dalam satu kes boleh diperbaharui untuk menjalankan beberapa jenis pekerjaan sebagai perniagaan melihat berharga dalam larutan grid. Contohnya, pekerjaan boleh mendapatkan keutamaan, lebih daripada satu jenis pekerjaan mungkin ada (iaitu kod pangkalan beberapa), akhirnya anda bahkan dapat menjalankan mesin beberapa pekerja yang berbeza yang dioptimalkan untuk setiap jenis pekerjaan (walaupun yang bergerak menjauh dari 'pekerja generik 'idea). Selalu cuba untuk berfikir tentang masa depan ketika sistem berkembang, visi jangka pendek boleh menyebabkan kekecewaan jangka panjang dan masa pembangunan meningkat.
Ayub Server
Kita akan memerlukan tempat untuk mengendalikan kerja kita dari, ini harus menjadi sistem hanya dalam grid anda yang mengandungi resource locator tetap, adalah bahawa alamat IP, nama host, URL (menggunakan DNS dalaman), dll Ini adalah kerana pekerja perlu tahu di mana untuk mencari pekerjaan, pekerja perlu mencari sistem kerja kawalan (bukan sistem kawalan pekerjaan mencari pekerja).
Server pekerjaan itu sendiri tidak benar-benar memiliki tugas yang rumit (dalam bagaimanapun sistem asas), perlu untuk menyimpan senarai pekerjaan, pekerjaan tangan keluar, menerima keputusan, dan kemudian menyimpannya untuk turun nanti. Bagaimana bahagian-bahagian ('tangan dari pekerjaan' seperti) yang ditetapkan boleh sangat asas. Kemudian kita dapat memperluaskan sistem untuk menyertakan sebuah antara muka pentadbiran untuk menambah, mengedit, memadam, menunda pekerjaan tapi ini di luar latihan ini.
Tidak ada alasan apapun maka pekerjaan bahawa pelayan anda tidak boleh menjadi mesin virtual yang berjalan dalam pelayan pemprosesan utama anda asalkan tidak terlalu banyak menguras sumber daya dari itu. Server pekerjaan tetapi tidak mengetahui sama ada keperluan yang tinggi, jika turun pada Jumaat malam anda akan kehilangan semua akhir pekan pemprosesan, berpotensi bayaran anda beberapa minggu bernilai masa proses (jika dibandingkan dengan pelayan utama pemprosesan anda sendiri) . Anda mungkin ingin mempertimbangkan untuk menempatkan pelayan pekerjaan anda di persekitaran yang seimbang beban untuk ketersediaan tinggi.
Basic Setup
Tatarajah asas untuk pelayan pekerjaan kami akan terdiri dari apa yang saya menelefon salah satu daripada Limp server saya (iaitu Li Nux, ySql m, L HP). Kod berjalan pada pekerja Thea benar-benar akan bekerja apa kerja boleh berjalan dengan berinteraksi dengan dengan database pekerjaan sistem kawalan. Kemudian kita boleh 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 jadual untuk menangani pekerjaan. Ini akan menjadi `pekerjaan`, `jobRecords`, dan `jobResults`.
Disini Saya menggunakan SQL Buddy alternatif yang sedikit besar untuk phpMyAdmin hanya kerana lebih mudah untuk dipasang pada CentOS (untuk orang lain lihat: 10 alternatif Besar ke phpMyAdmin )
Jadual ini terdiri daripada 5 bidang yang sederhana,
- id: Uniknya mengenalpasti pekerjaan
- Nama: Boleh jadi rujukan pelanggan, atau jumlah pengenal lain
- Status: anda perlu tahu di mana pekerjaan itu pada, misalnya
- 0: Belum bermula
- 1: Dijemput
- 2: Selesai
- started_by: Siapa yang mula melakukan kerja? Hal ini tidak sepenuhnya diperlukan tetapi adalah baik untuk memiliki. Saya cadangkan pelacakan pekerja dengan alamat IP pada rangkaian anda
- started_at: Bila pekerja memulakan kerja? Dengan pengesanan pekerjaan yang belum selesai dalam waktu X jumlah masa kita tahu kita perlu mengambil pekerjaan sekali lagi dan mula memproses oleh pekerja-pekerja lain. Pekerja boleh menghentikan pemprosesan / offline untuk sejumlah alasan, listrik mati, kemalangan, kehilangan rangkaian, dll
Sangat mudah bagaimana jadual ini boleh diperbaharui dengan beberapa medan tambahan untuk membolehkan anda statistik pelacakan, medan waktu selesai untuk melihat berapa lama pekerjaan itu mengambil, sebuah counter untuk melihat berapa ramai pekerja mengambil pekerjaan itu (jelas ini perlu cenderung 1), keutamaan kerja, senarai boleh terus dan terus. Dalam senario pekerjaan yang lebih kompleks akan mungkin untuk menentukan berapa banyak memori pekerja akan memerlukan akses kepada (dan kerana itu hanya menggunakan pekerja sesuai), atau bahkan jenis pekerja akan diperlukan.
Mari menambah pekerjaan beberapa contoh:
Jadual berikutnya lagi adalah cukup sederhana untuk memahami, ini adalah catatan pekerjaan kita. Mereka berkaitan dengan jadual kerja utama dengan sebuah medan `jobs_id`. Yang membuat jadual ini sangat bergantung pada data yang anda perlukan untuk membekalkan para pekerja anda, membolehkan membuat contoh yang sangat sederhana di mana kita mempunyai empat medan:
- id: ID dari nota
- Nama: Nama Orang
- Alamat: alamat Person
- jobs_id: MY pekerjaan yang catatan ini berkaitan dengan
Jadual ketiga dan terakhir terdiri daripada jadual keputusan, itu telah sama make up sebagaimana jadual catatan kami, dan dengan penambahan beberapa medan boleh menjadi sebahagian daripada jadual nota:
- job_record_id: Link hasilnya ke meja kerja
- Keputusan: Data keputusan
... Dan itu semua anda perlukan untuk kawalan kerja! (Walaupun pada tahap yang sangat asas) Dalam kes saya, saya menunjuk ke meja tempat data saya untuk memproses berada, tapi ini bisa saja menjadi jumlah gambar, parameter untuk menjalankan kod simulasi, apa saja.
Memilih pekerjaan
Sebagaimana dinyatakan sebelum ini, para pekerja akan melakukan pengurusan tugas kita untuk kita untuk saat ini, sehingga semua kita harus benar-benar lakukan adalah mencari pekerjaan yang memerlukan pemprosesan dan mendapatkan maklumat. Bagaimana kita melakukan ini? Nah tugas kami memilih kriteria seleksi dan mencari pekerjaan, di SQL saya melakukan hal berikut:
- Mengambil pekerjaan yang tidak ditandakan sebagai lengkap tapi dari pekerja kami dan semula 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 kawalan 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 sebanyak X waktu kami memastikan bahawa semua kerja yang berjalan jika seorang pekerja menabrak atau pergi AWOL.
- Selanjutnya turun butiran pekerjaan diikuti dengan nota sendiri:
SELECT * FROM `pekerjaan` WHERE `started_by` = __ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `id` = __JOBID__;
Setelah menyelesaikan pekerjaan kami memasukkan kami hasil nota dan menandakan tugas sebagai selesai. Ingat sebagai kerja boleh menangguhkan / resume pada bila-bila saja membolehkan untuk beberapa kekokohan dalam naskah anda. Mungkin bahawa tugas menghentikan setengah jalan melalui mengemas kini sistem kawalan kerja, sehingga memeriksa jumlah record dalam pekerjaan dan jumlah hasil disimpan kembali kepada sistem kawalan kerja akan menjadi langkah yang bijak.
Selain itu, sementara ini menunjukkan bagaimana kerja boleh dipilih dan ditapis daripada frame-query SQL anda benar-benar harus mencabut kawalan kerja anda sehingga jika anda memutuskan untuk beralih menggunakan perkhidmatan web, yang didasarkan sistem fail, XML , atau yang lain sejumlah sistem itu tidak akan menjejaskan kod di atasnya.
Job Tatarajah
Aspek seterusnya yang perlu dipertimbangkan adalah pekerjaan saiz dan konfigurasi. Dengan bermain dengan tatarajah pekerjaan kita boleh menyerang keseimbangan yang sangat baik antara kelajuan, proses replikasi, dan kehandalan. Ambil beberapa ofa senario:
- Pekerjaan mengambil 1 setiap hari untuk menjalankan: Ini bermakna bahawa para pekerja anda butuh 15 hari untuk memproses setiap pekerjaan (ingat 10% dari kekuatan untuk 2/3rds dari masa). Ini jelas bukan tatarajah bijak, saiz pekerjaan anda terlalu besar! Itu akan mengambil sekurang-kurangnya dua kali masa untuk mendapatkan pekerjaan harus diproses pekerja awal pergi AWOL (masa untuk mengambil bahawa hal itu tidak kembali hasil ditambah masa pemprosesan semula). Dalam ideal anda akan memiliki minimal satu pekerjaan penuh lebih mudah dibersihkan pada akhir setiap tempoh idle lama, bahawa cara anda menjaga pekerjaan berdetak lebih dan pada kes terburuk pekerjaan akan mengambil dua hari untuk memproses harus yang pertama hilang.
- Pekerjaan mengambil 1 minit untuk menjalankan: Ini bermakna bahawa para pekerja anda memakan masa kira-kira 15 minit untuk menjalankan setiap pekerjaan. Sementara ini pada asalnya mungkin kelihatan ideal, anda mendapatkan pemprosesan pekerjaan tambahan selama waktu makan siang, istirahat kopi, pertemuan, dll senario ini membuat kerosakan pada kawasan lain dari sistem anda dan memperkenalkan masalah sendiri. Sebagai contoh, pertama setup anda / pemprosesan nisbah masa akan pergi ke kanan bawah, sehingga kehilangan kecekapan sistem. rangkaian anda akan terus-menerus streaming maklumat kerja dengan pelbagai pekerja kakitangan frustasi yang dong hari mereka untuk bekerja sehari. Anda juga akan menambah beban lebih pada server pemprosesan pekerjaan anda karena harus mengeluarkan banyak dan banyak potongan-potongan kecil pekerjaan secara teratur. Terkini, dalam situasi ini jika pelayan pekerjaan anda turun anda akan membuat log kembali besar dari pekerjaan yang belum selesai sementara pekerjaan yang lebih besar bisa dari pemprosesan lanjutan tidak menyedari bahawa pelayan kerja adalah mengalami kesulitan.
Pada kenyataannya tidak akan ada konfigurasi satu ideal untuk tatacara grid anda, banyak bergantung pada sumber daya yang tersedia, jenis pekerjaan, keperluan kerja masa turnaround, kemampuan rangkaian, dan sebagainya. Namun beberapa pedoman akan menjadi:
- Saiz pekerjaan sehingga setiap pekerja bisa melalui sekurang-kurangnya 3-4 pekerjaan dalam jangka masa 15 jam (tempoh masa yang paling lama mungkin idle)
- Bermain dengan saiz pekerjaan sehingga waktu setup menjadi cukup signifikan dibandingkan masa pemprosesan (mengingati titik di atas).
- Jika pekerjaan tidak lengkap dalam dua kali ganda jumlah masa (mungkin kurang) anda harapkan untuk menyelesaikannya berasumsi bahawa AWOL yang hilang dan mula memproses dengan pekerja-pekerja lain. Ini bermakna anda mungkin perlu menunggu sehingga tiga kali panjang muzik pekerjaan sampai selesai (mungkin lebih lama jika pekerjaan seterusnya gagal). Anda mungkin mahu mengurangkan saat ini, tapi hati-hati tidak untuk mengurangkan terlalu banyak kerana anda mungkin mula menduplikasi tugas-tugas pemprosesan secara teratur.
- Pekerjaan harus bebas daripada keperluan luar sebanyak mungkin. Server pekerjaan, misalnya, hanya perlu dihubungi pada awal dan akhir setiap pekerjaan.
- Jangan jenuh rangkaian anda, ini akan mempunyai dua kesan negatif, kakitangan siang hari anda akan menemui menggunakan rangkaian frustasi dan masalah mungkin dialami dengan sambungan masa keluar masalah yang hanya akan bertambah buruk kerana anda skala grid anda.
- Pastikan kerja boleh berjalan pada pekerja anda. Jika pekerjaan menjadi terlalu memori pekerjaan ruangan intensif atau intensif disk akan mula membatalkan dan satu-satunya adalah anda akan melihat penurunan jumlah pekerjaan yang telah diproses tanpa alasan mengapa.
Menyerahkan Keputusan Pekerjaan yang
Ketika menyerahkan hasil dari pekerjaan adalah penting untuk menyemak bahawa hasil belum diserahkan oleh pekerja-pekerja lain, terutama jika pekerja saat ini telah tidak aktif selama beberapa waktu.
Bila keputusan disampaikan memastikan bahawa jumlah hasil pertandingan jumlah record dalam pekerjaan.
Sebagaimana dinyatakan sebelum ini, dan tidak boleh lebih ditekankan, membina toleransi kesalahan ke dalam sistem turun dan penyerahan hasil pekerjaan. Para pekerja boleh (dan kemungkinan besar akan) masuk ke mod Suspend di paling nyaman kali dan ini harus dipenuhi. Juga sekali lagi pergi penghantaran abstrak keputusan anda akan membantu memenuhi untuk perubahan masa depan untuk sistem kawalan anda pekerjaan lebih mudah untuk menangani.
Review
Dalam section ini kita telah melihat apa pelayan kawalan kerja perlu dilakukan dan bagaimana untuk mendapatkan sistem yang sangat asas yang mengatur. Kita telah membincangkan bagaimana untuk mengambil pekerjaan dari sistem kawalan dan cara terbaik untuk menyediakan pekerjaan untuk mendapatkan yang paling kita sistem grid pejabat anda. Untuk menyelesaikan, satu atau dua perenggan di menghantar hasilnya kembali ke pelayan kawalan kerja adalah disajikan.
- Sebuah pelayan kawalan kerja menguruskan pekerjaan dan memastikan bahawa semua unit kerja selesai
- Dengan abstrak pekerjaan anda pilih / penyampaian hasil yang kita dapat mengubah teknologi dari pelayan kawalan tanpa masalah banyak
- Tatarajah pekerjaan anda untuk memastikan bahawa mereka dijalankan dengan cepat dan cekap tanpa memberi tekanan terlalu banyak pada infrastruktur rangkaian anda, dan tanpa duplikasi tugas pemprosesan secara teratur.
- Pastikan bahawa anda membina toleransi kesalahan dan checking kesalahan ke dalam rutin anda, pekerja boleh menunda dan melanjutkan dan yang paling nyaman kali. Ingat untuk memeriksa sama ada keputusan yang telah disampaikan oleh pekerja-pekerja lain.
Lain kali
Di bahagian 3 kita akan mencipta mesin virtual pemprosesan kami dan menetapkan tetingkap kami mesin menjadi idle-time.