Pengenalan
Saya bekerja di sebuah syarikat di mana kita menjalankan kerja kumpulan yang memproses berjuta-juta rekod data setiap hari dan saya telah memikirkan baru-baru ini kira-kira semua mesin yang duduk di sekeliling setiap dan setiap hari melakukan apa-apa untuk beberapa jam. Bukankah lebih baik jika kita dapat menggunakan mesin tersebut untuk mengukuhkan kuasa pemprosesan sistem kami? Dalam set ini artikel saya akan melihat potensi manfaat menggajikan pejabat grid menggunakan persekitaran virtualised.
Dalam Bahagian 1 , saya memberi gambaran keseluruhan sistem dan teknologi yang saya akan gunakan serta membincangkan beberapa potensi sebab-sebab mengapa anda mahu untuk mewujudkan grid pejabat.
Kawalan Kerja
Jika anda akan menjalankan kerja, maka anda akan memerlukan beberapa cara untuk menguruskan mereka. Sistem kawalan kerja anda (pada pelayan kerja anda) perlu benar-benar baik difikirkan sebelum cuba untuk menjalankan grid pejabat. Jadi pertamanya, apakah tugas-tugas untuk satu sistem kawalan kerja:
- Keluar kerja tangan atas permintaan daripada pekerja-pekerja
- Beritahu pekerja apakah jenis pekerjaan untuk menjalankan
- Track pekerjaan
- Pastikan bahawa pekerjaan hanya berjalan sekali
- Menyediakan data pekerjaan kepada pekerja-pekerja, atau sekurang-kurangnya memberitahu mereka di mana untuk mendapatkan
Sistem ini juga perlu extensible, penyelesaian yang bekerja buat masa ini dalam mana-mana satu boleh dilanjutkan untuk menjalankan beberapa jenis pekerjaan sebagai perniagaan melihat dalam penyelesaian grid bernilai. Sebagai contoh, kerja boleh mendapat keutamaan lebih daripada satu jenis pekerjaan mungkin wujud (kod asas iaitu beberapa), akhirnya anda mungkin menjalankan mesin pekerja yang berlainan yang optimum bagi setiap jenis kerja (walaupun yang tidak bergerak jauh dari pekerja 'generik 'idea). Sentiasa cuba untuk memikirkan masa depan apabila pembangunan sistem, wawasan jangka pendek boleh membawa kepada kekecewaan jangka panjang dan masa pembangunan yang meningkat.
Server Kerja
Kami akan memerlukan tempat untuk mengawal kerja kita, ini harus menjadi satu-satunya sistem dalam grid anda yang mempunyai sumber tetap pencari, alamat IP, nama tuan rumah, URL (menggunakan DNS dalaman), dll. Ini adalah kerana para pekerja perlu tahu di mana untuk mencari pekerjaan, pekerja perlu mencari sistem kerja kawalan (bukan sistem kawalan kerja mencari pekerja).
Pelayan kerja itu sendiri tidak benar-benar mempunyai tugas yang rumit (dalam sistem asas bagaimanapun), ia perlu untuk menyimpan senarai pekerjaan, tangan keluar kerja, menerima keputusan, dan seterusnya menyimpan mereka untuk mendapatkan semula kemudian. Bagaimana bahagian-bahagian ini ('tangan daripada kerja' seperti) ditakrifkan boleh sangat asas. Kemudian kita boleh melanjutkan sistem termasuk muka pentadbiran untuk menambah, mengedit, memadam, menggantung pekerjaan tetapi ini adalah di luar latihan ini.
Tidak ada sebab apa-apa kemudian bahawa pelayan kerja anda tidak dapat menjadi mesin virtual yang berjalan dalam pelayan pemprosesan utama anda dengan syarat ia tidak mengalirkan sumber-sumber yang terlalu banyak dari. Walau bagaimanapun, pelayan kerja tidak perlu ketersediaan tinggi, jika ia menjunam pada malam Jumaat anda akan kehilangan seluruh hujung minggu pemprosesan, berpotensi berharga beberapa minggu masa pemprosesan (jika dibandingkan dengan server pemprosesan utama anda sahaja) . Anda mungkin ingin mempertimbangkan untuk meletakkan pelayan kerja anda ke atas alam sekitar beban yang seimbang bagi ketersediaan tinggi.
Persediaan Asas
Persediaan asas untuk pelayan tugas kita akan terdiri daripada apa yang saya memanggil salah satu pelayan Bizkit saya (yang Li Nux, ySql m, P HP ). Kod yang dijalankan pada pekerja Thea sebenarnya akan bekerja apa pekerjaan yang ia boleh berjalan dengan berinteraksi dengan pangkalan data sistem kawalan kerja. Kemudian kita boleh mewujudkan satu perkhidmatan web dan sebenarnya tangan daripada pekerjaan dan bukannya yang mempunyai pekerja yang melakukan kerja-kerja keras sendiri, tetapi sekarang ini kita akan terus menggunakan prinsip KISS (Pastikan ia Simple, Stupid! ).
Jadi, mari kita membuat tiga jadual MySQL untuk berurusan dengan pekerjaan. Ini akan `pekerjaan`, `jobRecords`, dan `jobResults`.
Di sini saya menggunakan SQL Buddy alternatif yang hebat sedikit phpMyAdmin hanya kerana lebih mudah untuk memasang pada CentOS (untuk orang lain melihat: 10 alternatif Great untuk phpMyAdmin)
Jadual ini terdiri daripada 5 bidang yang mudah,
- id: Uniquely mengenal pasti pekerjaan
- nama: dapat menjadi rujukan pelanggan, atau mana-mana bilangan pengecam lain
- Status: Anda perlu tahu di mana kerja di, contohnya
- 0: Tidak bermula
- 1: diambil
- 2: Selesai
- started_by: yang mula menjalankan tugas? Ini tidak semuanya diperlukan tetapi yang bagus telah. Saya hendak mencadangkan pekerja menjejaki oleh alamat IP mereka di rangkaian anda
- started_at: Bilakah pekerja memulakan kerja? Dengan menjejaki pekerjaan yang belum selesai dalam jumlah X masa kita tahu kita perlu memilih kerja sekali lagi dan mula memproses oleh pekerja lain. Pekerja boleh menghentikan pemprosesan / luar talian untuk apa-apa bilangan sebab, kegagalan kuasa, kemalangan, kehilangan rangkaian, dll.
Ia adalah mudah bagaimana jadual ini boleh dilanjutkan dengan beberapa bidang tambahan untuk membolehkan statistik Penjejakan, lajur penamat masa untuk melihat berapa lama kerja mengambil, kaunter untuk melihat berapa ramai pekerja yang mengambil pekerjaan (jelas ini perlu cenderung untuk 1), keutamaan kerja, senarai boleh pergi dan. Dalam senario pekerjaan yang lebih kompleks, ia akan dilakukan untuk menentukan berapa banyak ingatan pekerja akan memerlukan akses (dan oleh itu hanya menggunakan pekerja-pekerja yang sesuai), ataupun jenis pekerja yang diperlukan.
Mari menambah beberapa pekerjaan contoh:
Jadual seterusnya sekali lagi adalah agak mudah untuk difahami, ini adalah rekod tugas kita. Mereka dikaitkan dengan jadual kerja utama oleh lajur `jobs_id`. Membuat jadual ini amat bergantung kepada data yang anda perlukan untuk membekalkan kepada pekerja-pekerja anda, mari kita membuat satu contoh yang sangat mudah di mana kita mempunyai empat tiang:
- id: ID rekod
- name: nama Orang
- alamat: alamat Orang.
- jobs_id: ID kerja bahawa rekod ini dikaitkan dengan
Jadual ketiga dan terakhir terdiri jadual keputusan, ia telah banyak yang sama seperti pada table rekod kami, dan dengan tambahan beberapa tiang boleh menjadi sebahagian daripada jadual rekod:
- job_record_id: Link keputusan untuk jadual kerja
- hasil: data hasil
... Dan bahawa semua yang anda perlukan untuk mengawal kerja! (Walaupun pada tahap yang sangat asas) Dalam kes saya saya menunjukkan ke meja yang lain di mana data saya untuk proses itu terletak, tetapi ini boleh semudah fail, parameter untuk menjalankan kod simulasi, anda namakan sahaja.
Memilih kerja
Seperti yang dinyatakan sebelum ini, para pekerja akan melakukan pengurusan tugas kita untuk kita buat masa sekarang, jadi semua yang kita perlu untuk benar-benar melakukan mencari pekerjaan yang memerlukan pemprosesan dan mendapatkan maklumat. Bagaimana kita akan melakukan ini? Well memilih kriteria pemilihan kerja kami dan mencari kerja di SQL saya melakukan perkara-perkara berikut:
- Mengambil apa-apa pekerjaan yang tidak ditandakan sebagai lengkap tetapi dari pekerja kami dan menetapkan semula mereka (menggantikan __ME__ dengan pengecam, paling mudah akan alamat IP):
UPDATE `pekerjaan` SET `status` = 0 DI MANA `status` = 1 DAN `started_by` = __ME__;
- Menggunakan kriteria pemilihan kerja kami, pilih kerja dan memberitahu sistem kawalan bahawa pekerja ini adalah menangani:
UPDATE `pekerjaan` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW () DI MANA `status` = 0 ATAU
(`Status` = 1 DAN `started_at`> DATE_SUB (NOW (), interval X HOUR)) ORDER BY `id` ASC;
Dengan meraih pekerjaan yang tidak dikembalikan keputusan dalam X jumlah masa kita memastikan bahawa semua kerja dijalankan sekiranya pekerja terhempas atau akan AWOL.
- Seterusnya merebut butiran kerja yang diikuti oleh rekod-rekod itu sendiri:
SELECT * FROM `kerja` WHERE `started_by` = __ME__ HAD 1;
PILIH * DARI `job_records` DI MANA `id` = __JOBID__;
Setelah selesai kerja kita memasukkan rekod hasil dan menandakan pekerjaan sebagai lengkap. Ingat sebagai pekerjaan boleh menggantung / resume pada bila-bila masa membenarkan beberapa keteguhan dalam skrip anda. Ia mungkin bahawa tugas menggantung setengah jalan melalui mengemaskini sistem kawalan kerja, jadi memeriksa bilangan rekod dalam pekerjaan dan bilangan keputusan yang disimpan kembali ke sistem kawalan kerja akan menjadi satu langkah yang bijak.
Di samping itu, sementara ini menunjukkan bagaimana pekerjaan boleh dipilih dan diuruskan dari kerangka SQL-query anda benar-benar harus pengabstrakan kawalan kerja anda supaya jika anda membuat keputusan untuk beralih menggunakan perkhidmatan web, sistem berasaskan fail, XML , atau mana-mana orang lain bilangan sistem, ia tidak akan menjejaskan kod di atas.
Konfigurasi Kerja
Aspek seterusnya yang perlu diambil kira adalah saiz kerja dan konfigurasi. Dengan bermain dengan konfigurasi kerja, kita boleh mencapai keseimbangan yang sangat baik antara kelajuan, replikasi, proses, dan kebolehpercayaan. Ambil senario of pasangan:
- Pekerjaan mengambil masa 1 setiap hari untuk menjalankan: Ini bermakna bahawa pekerja-pekerja anda memerlukan 15 hari untuk memproses setiap kerja (ingat 10% daripada kuasa untuk 2/3rds masa). Ini jelas tidak tatarajah yang bijak, saiz kerja anda terlalu besar! Ia akan mengambil sekurang-kurangnya menggandakan masa untuk mendapatkan pekerjaan yang diproses pekerja awal harus pergi AWOL (masa memilih bahawa ia telah tidak kembali hasil tambah masa memproses semula). Dalam ideal anda hendak mempunyai sekurang-kurangnya satu kerja mudah dibersihkan menjelang akhir setiap tempoh terbiar lama, cara anda menyimpan pekerjaan yang berdetik lebih dan pada kes terburuk kerja akan mengambil masa dua hari untuk proses yang pertama harus hilang.
- Pekerjaan mengambil 1 minit untuk berjalan: Ini bermakna bahawa pekerja-pekerja anda mengambil masa kira-kira 15 minit untuk menjalankan kerja masing-masing . Walaupun ini pada mulanya mungkin kelihatan ideal, anda boleh mendapat pemprosesan kerja-kerja tambahan pada waktu makan tengah hari, rehat kopi, mesyuarat, dll senario ini meletakkan tekanan pada kawasan lain sistem anda dan memperkenalkan masalah sendiri. Sebagai contoh, pertama setup / nisbah pemprosesan masa anda akan pergi ke kanan ke bawah, dengan itu kehilangan kecekapan sistem. Rangkaian anda akan sentiasa streaming maklumat pekerjaan kepada pekerja-pekerja kakitangan pelbagai mengecewakan yang dong hari mereka perlu bekerja pada hari. Anda juga akan melibatkan ketegangan yang lebih pada pelayan pemprosesan kerja anda kerana ia telah menghidangkan banyak dan banyak kepingan kecil kerja secara tetap. Akhir sekali, dalam situasi ini jika pelayan kerja anda turun anda akan membuat log masuk semula besar kerja yang belum selesai sedangkan pekerjaan yang lebih besar daripada terus memproses tidak sedar bahawa pelayan kerja sedang mengalami kesukaran.
Dalam realiti, akan ada satu konfigurasi yang ideal untuk setup grid anda, banyak bergantung kepada sumber-sumber yang sedia ada, jenis pekerjaan, keperluan pekerjaan masa yang diambil, keupayaan rangkaian, dan sebagainya. Walau bagaimanapun, beberapa garis panduan akan:
- Pekerjaan Saiz bahawa setiap pekerja boleh mendapatkan melalui sekurang-kurangnya kerja 3-4 dalam tempoh 15 jam (paling lama mungkin masa tempoh yang terbiar)
- Bermain dengan saiz kerja supaya masa persediaan menjadi adil tidak penting berbanding dengan masa pemprosesan (dengan mengambil titik di atas).
- Jika pekerjaan tidak lengkap dalam jumlah dua kali ganda masa (mungkin kurang), anda menjangka ia selesai, ia menganggap bahawa AWOL hilang dan mula memproses dengan pekerja lain. Ini bermakna anda mungkin perlu menunggu sehingga tiga kali panjang biasa kerja untuk itu untuk menyelesaikan (mungkin lebih panjang jika kerja berikutnya gagal). Anda mungkin mahu mengurangkan masa ini, tetapi berhati-hati untuk tidak mengurangkan terlalu banyak kerana anda mungkin mula pendua tugas pemprosesan secara tetap.
- Pekerjaan hendaklah bebas daripada keperluan di luar sebanyak mungkin. Pelayan pekerjaan, sebagai contoh, hanya perlu dihubungi pada permulaan dan akhir setiap kerja.
- Jangan menepukan rangkaian anda, ini akan mempunyai dua kesan negatif, kakitangan siang hari anda akan mencari menggunakan rangkaian mengecewakan dan masalah yang mungkin dialami dengan sambungan masa masalah yang hanya akan menjadi lebih teruk seperti yang anda skala grid anda.
- Memastikan kerja dapat berjalan kepada pekerja anda. Jika pekerjaan menjadi terlalu ingatan pekerjaan intensif ruang intensif atau cakera akan mula paksa dan satu-satunya perkara yang anda akan notis penurunan dalam bilangan pekerjaan yang diproses dengan tanpa sebab yang sebenar mengapa.
Menyerahkan Keputusan Ayub
Apabila mengemukakan hasil kerja adalah penting untuk memeriksa bahawa keputusan telah tidak diserahkan oleh pekerja lain, lebih-lebih lagi jika pekerja semasa telah tidak aktif untuk beberapa lama.
Apabila keputusan telah diserahkan memastikan bahawa jumlah hasil sepadan dengan bilangan rekod dalam kerja.
Seperti yang dinyatakan sebelum ini, dan tidak boleh lebih menekankan, membina toleransi kesalahan kepada mendapatkan semula pekerjaan dan penyerahan keputusan. Para pekerja boleh (dan kemungkinan besar akan) pergi ke mod menggantung pada kali yang paling menyusahkan dan ini perlu dipenuhi. Juga sekali lagi pengabstrakan penyerahan keputusan anda akan membantu menampung perubahan masa depan untuk sistem kawalan kerja anda lebih mudah untuk berurusan dengan.
Ringkasan
Dalam section ini kita telah melihat apa yang pelayan kerja kawalan perlu dilakukan dan bagaimana untuk mendapatkan satu sistem yang sangat asas yang ditetapkan. Kami membincangkan bagaimana untuk mendapatkan pekerjaan dari sistem kawalan dan cara terbaik untuk mengkonfigurasi pekerjaan untuk mendapatkan yang paling kami sistem grid pejabat anda. Hingga ke akhir, perenggan atau dua mengemukakan keputusan kembali ke pelayan kawalan kerja telah dibentangkan.
- Pelayan kerja kawalan menguruskan pekerjaan dan memastikan semua unit kerja disiapkan
- Dengan pengabstrakan kerja anda pilih / keputusan penyerahan kita boleh mengubah teknologi pelayan kawalan tanpa banyak masalah
- Konfigurasi kerja anda untuk memastikan bahawa mereka berlari dengan pantas dan cekap tanpa meletakkan terlalu banyak tekanan ke atas infrastruktur rangkaian anda, dan tanpa pendua memproses tugas-tugas secara tetap.
- Pastikan anda membina toleransi kesalahan dan checking kesilapan dalam rutin anda, pekerja boleh menggantung dan resume dan yang paling menyusahkan kali. Ingatlah untuk memeriksa jika keputusan telah pun diserahkan oleh pekerja lain.
Next time
Dalam 3 bahagian , kita akan mencipta mesin pemprosesan maya kami dan menubuhkan mesin tingkap kami untuk menjadi pekerja terbiar masa .