Pengenalan
Saya bekerja di sebuah syarikat di mana kita menjalankan banyak kerja kelompok pemprosesan berjuta-juta rekod data setiap hari dan saya telah memikirkan tentang semua mesin yang duduk di sekitar setiap hari dan setiap melakukan apa-apa untuk beberapa jam baru-baru ini. Bukankah lebih baik jika kita boleh menggunakan mesin tersebut untuk mengukuhkan kuasa pemprosesan sistem kami? Dalam set rencana-rencana ini, saya akan melihat manfaat yang berpotensi menggajikan pejabat grid yang 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 perlu menjalankan kerja maka anda akan memerlukan beberapa cara untuk menguruskan mereka. Keperluan sistem kawalan kerja anda pada pelayan kerja anda akan benar-benar difikirkan dengan baik sebelum cuba untuk menjalankan grid pejabat. Jadi pertamanya, apakah tugas untuk sistem kawalan kerja:
- Membiayai aktiviti pekerjaan atas permintaan daripada pekerja
- Memberitahu pekerja apa jenis daripada pekerjaan untuk menjalankan
- Trek pekerjaan
- Pastikan yang pekerjaan hanya dijalankan sekali
- Menyediakan data pekerjaan kepada pekerja-pekerja, atau sekurang-kurangnya memberitahu mereka di mana untuk mendapatkan
Sistem ini juga perlu untuk menjadi extensible, satu penyelesaian yang bekerja buat masa ini dalam kes satu boleh dilanjutkan untuk menjalankan beberapa jenis pekerjaan sebagai perniagaan melihat dalam penyelesaian grid bernilai. Sebagai contoh, pekerjaan boleh mendapat keutamaan lebih daripada satu jenis kerja mungkin wujud (iaitu beberapa asas kod), akhirnya anda mungkin menjalankan mesin pekerja yang berlainan yang dioptimumkan untuk setiap jenis pekerjaan (walaupun yang tidak bergerak dari pekerja 'generik 'idea). Sentiasa cuba untuk berfikir tentang masa depan apabila membangunkan sistem, visi jangka pendek boleh membawa kepada kekecewaan jangka panjang dan peningkatan masa pembangunan.
Pelayan kerja
Kami akan memerlukan tempat untuk mengawal kerja kita, ini perlu menjadi satu-satunya sistem dalam grid anda yang mempunyai sumber tetap pencari, adalah bahawa alamat IP, nama hos, URL (menggunakan dalaman DNS), dll. Ini adalah kerana pekerja perlu tahu di mana untuk mencari pekerjaan, pekerja perlu mencari sistem kerja kawalan (tidak sistem kawalan kerja mencari pekerja).
Pelayan kerja itu sendiri tidak benar-benar mempunyai satu tugas yang rumit (dalam sistem asas bagaimanapun), ia perlu untuk menyimpan senarai pekerjaan, tangan keluar kerja, menerima keputusan, dan seterusnya menyimpannya untuk mendapatkan semula kemudian. Bagaimana bahagian-bahagian ini ('tangan keluar pekerjaan' seperti) ditakrifkan boleh menjadi sangat asas. Kemudian kita boleh melanjutkan sistem termasuk antara muka pentadbiran untuk menambah, mengedit, memadam, menggantung pekerjaan tetapi ini adalah di luar latihan ini.
Terdapat tiada sebab kemudian bahawa pelayan kerja anda tidak boleh menjadi mesin maya berjalan dalam pelayan pemprosesan utama anda dengan syarat ia tidak mengalirkan sumber-sumber yang terlalu banyak daripada ia. Walau bagaimanapun, pelayan pekerjaan tidak memerlukan ketersediaan tinggi, jika ia menjunam pada malam Jumaat anda akan kehilangan hujung minggu seluruh pemprosesan, berpotensi berharga beberapa minggu yang bernilai masa pemprosesan (apabila dibandingkan dengan pelayan pemprosesan utama anda sahaja) . Anda mungkin mahu mempertimbangkan untuk meletakkan pelayan kerja anda terhadap alam sekitar beban yang seimbang bagi ketersediaan tinggi.
Persediaan Asas
Persediaan asas untuk pelayan tugas kami akan terdiri daripada apa yang saya memanggil salah satu pelayan tempang saya (yang Nux Li, m ySql, 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 pada kita dapat mewujudkan perkhidmatan web dan sebenarnya tangan keluar pekerjaan dan bukannya mempunyai para pekerja melakukan kerja keras sendiri, tetapi sekarang ini kita akan terus menggunakan prinsip KISS (Keep it Simple, Stupid!).
Jadi, mari kita membuat tiga jadual mySQL untuk berurusan dengan pekerjaan. Ini akan menjadi `kerja`, `jobRecords`, dan `jobResults`.
Di sini saya menggunakan SQL Buddy alternatif yang besar sedikit untuk phpMyAdmin hanya kerana lebih mudah dengan memasang CentOS (untuk orang lain melihat: 10 alternatif Great untuk phpMyAdmin )
Jadual ini terdiri daripada 5 bidang yang mudah,
- id: Unik mengenal pasti pekerjaan
- name: dapat menjadi rujukan pelanggan, atau mana-mana nombor pengenalan lain
- Status: Anda perlu tahu di mana kerja adalah pada, contohnya
- 0: Tidak memulakan
- 1: meningkat
- 2: Siap
- started_by: Siapa yang mula melakukan kerja? Ini tidak sepenuhnya diperlukan tetapi adalah baik untuk mempunyai. 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 pemprosesan oleh pekerja lain. Pekerja boleh berhenti pemprosesan / pergi offline untuk apa-apa bilangan sebab, kegagalan kuasa, kemalangan, kehilangan rangkaian, dll.
Ia adalah mudah bagaimana jadual ini boleh dilanjutkan dengan beberapa bidang tambahan bagi membolehkan statistik pengesanan, lajur penamat masa untuk melihat berapa lama Kerja mengambil, kaunter untuk melihat berapa ramai pekerja yang mengambil kerja (jelas ini perlu cenderung untuk 1), keutamaan kerja, senarai yang boleh menyala dan menyala. Dalam senario pekerjaan yang lebih kompleks, ia akan dibuat untuk menentukan berapa banyak memori pekerja akan memerlukan akses kepada (dan oleh itu hanya menggunakan pekerja yang sesuai), atau pun jenis pekerja yang dikehendaki.
Mari menambah beberapa pekerjaan contoh:
Jadual seterusnya sekali lagi agak ringkas difahami, ini adalah rekod tugas kami. Mereka ada kaitan dengan jadual kerja utama oleh kolum `jobs_id`. Membuat jadual ini amat bergantung kepada data yang anda perlukan untuk membekalkan kepada pekerja-pekerja anda, membolehkan membuat contoh yang sangat mudah di mana kita ada 4 lajur:
- id: ID rekod
- nama: nama Orang.
- address: alamat Orang
- jobs_id: ID kerja bahawa rekod ini dikaitkan dengan
Jadual ketiga dan terakhir terdiri daripada jadual keputusan, ia mempunyai banyak yang sama mengikut jadual rekod kami, dan dengan penambahan beberapa lajur boleh menjadi sebahagian daripada jadual rekod:
- job_record_id: Link keputusan untuk jadual kerja
- result: data hasil
... Dan itulah 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 pekerjaan
Seperti yang dinyatakan sebelum ini, pekerja akan melakukan pengurusan tugas kita untuk kita sekarang, jadi kita perlu benar-benar melakukan mencari pekerjaan yang memerlukan pemprosesan dan mendapatkan maklumat. Bagaimana kita akan melakukan ini? Juga memilih kriteria pemilihan kerja kami dan mencari pekerjaan, dalam SQL saya lakukan yang berikut:
- Mengambil mana-mana kerja yang tidak ditandakan sebagai lengkap tetapi dari pekerja kami dan menetapkan semula mereka (menggantikan ME__ __ dengan pengecam, mudah akan menjadi alamat IP):
UPDATE `kerja` SET `status` = 0 MANA `status` = 1 DAN `started_by` = __ ME__;
- Menggunakan kriteria pemilihan kerja kami, memilih pekerjaan dan memberitahu sistem kawalan bahawa pekerja ini berurusan dengan:
UPDATE `kerja` SET `status` = 1, `started_by` = __ ME__, `started_at` = SEKARANG () DI MANA `status` = 0 ATAU
(`Status` = 1 DAN `started_at`> DATE_SUB (SEKARANG (), JARAK X JAM)) PERINTAH OLEH `id` ASC;
Oleh pekerjaan capaian anak yang telah tidak dikembalikan keputusan dalam jumlah X masa kita memastikan bahawa semua kerja berjalan sekiranya pekerja terhempas atau akan AWOL.
- Seterusnya merebut butiran pekerjaan yang diikuti dengan rekod itu sendiri:
SELECT * DARIPADA `kerja` MANA `started_by` = __ ME__ HAD 1;
Pilih * DARIPADA `job_records` MANA `id` = __ JOBID__;
Setelah selesai kerja, kami memasukkan rekod hasil dan menandakan pekerjaan sebagai lengkap. Ingat sebagai pekerjaan boleh menggantung / disambung semula pada bila-bila masa membolehkan untuk ketegapan beberapa 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 kepada sistem kawalan kerja akan menjadi satu langkah yang bijak.
Di samping itu, sementara ini menunjukkan bagaimana pekerjaan boleh dipilih dan diuruskan dari bingkai SQL-query anda benar-benar perlu pengabstrakan kawalan kerja anda bahawa jika anda memutuskan untuk beralih untuk menggunakan perkhidmatan laman web, sistem berasaskan fail XML , atau mana-mana orang lain bilangan sistem ia tidak akan menjejaskan kod di atas.
Konfigurasi kerja
Aspek seterusnya adalah untuk saiz pekerjaan dan konfigurasi. Dengan bermain dengan konfigurasi kerja kita boleh menyerang keseimbangan yang terbaik antara kelajuan, replikasi proses, dan kebolehpercayaan. Ambil senario Salim pasangan:
- Pekerjaan mengambil 1 setiap hari untuk menjalankan: Ini bermakna bahawa pekerja-pekerja anda memerlukan 15 hari untuk memproses setiap pekerjaan (ingat 10% daripada kuasa untuk 2/3rds masa). Ini adalah jelas tidak tatarajah bijaksana, saiz tugas anda ialah terlalu besar! Ia akan mengambil masa sekurang-kurangnya dua kali ganda masa untuk mendapatkan pekerjaan diproses pekerja awal yang perlu pergi AWOL (masa mengutip bahawa ia telah tidak dikembalikan hasil tambah masa pemprosesan semula). Dalam ideal anda akan mempunyai sekurang-kurangnya satu kerja mudah dibersihkan oleh akhir setiap tempoh terbiar panjang, dengan cara itu anda menyimpan pekerjaan berdetik lebih dan paling teruk kes pekerjaan akan mengambil masa dua hari untuk proses yang pertama harus hilang.
- Pekerjaan mengambil 1 minit untuk menjalankan: Ini bermakna bahawa pekerja-pekerja anda mengambil masa kira-kira 15 minit untuk menjalankan setiap pekerjaan. Walaupun ini pada mulanya mungkin kelihatan sesuai, anda boleh mendapat pemprosesan kerja-kerja tambahan pada waktu makan tengahari, rehat kopi, mesyuarat, dll senario ini meletakkan tekanan pada kawasan lain sistem anda dan memperkenalkan masalah sendiri. Sebagai contoh, pertama nisbah tetapan / pemprosesan masa anda akan pergi ke bawah, oleh itu kehilangan kecekapan sistem. Rangkaian anda akan menjadi kerja yang sentiasa streaming maklumat kepada pekerja mengecewakan pelbagai kakitangan yang dong hari mereka untuk kerja hari. Anda juga akan meletakkan ketegangan yang lebih pada pelayan pemprosesan kerja anda kerana ia mempunyai ketepikan banyak dan banyak kepingan kecil kerja secara tetap. Akhir sekali, dalam situasi ini jika pelayan kerja anda terbenam anda akan mewujudkan log belakang besar kerja yang belum siap manakala lebih besar pekerjaan boleh terus memproses tidak sedar bahawa pelayan kerja mengalami masalah.
Dalam realiti tidak akan ada konfigurasi ideal bagi persediaan grid anda, banyak bergantung kepada sumber-sumber yang sedia ada, jenis pekerjaan, keperluan masa yang diambil kerja, keupayaan rangkaian, dan sebagainya. Walau bagaimanapun, beberapa garis panduan akan:
- Pekerjaan saiz supaya setiap pekerja boleh mendapatkan melalui sekurang-kurangnya pekerjaan 3-4 dalam tempoh 15 jam (yang paling lama tempoh masa mungkin terbiar)
- Bermain dengan saiz kerja supaya masa persediaan menjadi agak kecil berbanding dengan masa pemprosesan (berkenaan dalam minda titik di atas).
- Jika kerja tidak lengkap dalam jumlah dua kali ganda masa (mungkin kurang) anda menjangka ia selesai, ia mengandaikan bahawa AWOL hilang dan mula memproses dengan pekerja lain. Ini bermakna anda mungkin perlu menunggu sehingga tiga kali panjang biasa kerja untuk melengkapkan (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 menduplikasi tugas pemprosesan secara tetap.
- Pekerjaan seharusnya 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 mendapati menggunakan rangkaian mengecewakan dan masalah boleh dialami dengan sambungan menentukan masa yang sesuai masalah yang hanya akan bertambah buruk sebagai anda skala grid anda.
- Memastikan kerja boleh dijalankan ke atas pekerja anda. Jika pekerjaan menjadi terlalu memori pekerjaan ruang intensif atau cakera intensif akan bermula paksa dan satu-satunya perkara yang anda akan perasan penurunan dalam bilangan pekerjaan yang diproses dengan tanpa sebab sebenar mengapa.
Mengemukakan Keputusan Ayub
Apabila mengemukakan hasil kerja adalah penting untuk memeriksa bahawa keputusan telah tidak diserahkan oleh pekerja lain, terutamanya jika pekerja semasa telah tidak aktif untuk beberapa waktu.
Apabila keputusan telah diserahkan memastikan bahawa bilangan keputusan sepadan dengan bilangan rekod dalam kerja.
Seperti yang telah dinyatakan sebelum ini, dan tidak boleh lebih menekankan, membina toleransi kesalahan ke dalam mendapatkan semula pekerjaan dan penyerahan keputusan. Pekerja-pekerja boleh (dan besar kemungkinan akan) pergi ke mod menggantung pada kali yang menyusahkan dan ini perlu dipenuhi. Juga sekali lagi abstrak penyerahan keputusan anda akan membantu menampung perubahan masa depan kepada sistem kawalan kerja anda lebih mudah untuk berurusan dengan.
Ringkasan
Dalam section ini kita telah melihat di pelayan kerja kawalan perlu lakukan dan bagaimana untuk mendapatkan satu sistem yang sangat asas ditubuhkan. Kami membincangkan cara untuk mengambil kerja 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 kawalan kerja menguruskan pekerjaan dan memastikan bahawa semua unit kerja telah siap
- Oleh pengabstrakan kerja anda pilih / keputusan penyerahan kita boleh mengubah teknologi pelayan kawalan tanpa banyak masalah
- Mengkonfigurasi pekerjaan anda untuk memastikan bahawa mereka berjalan dengan pantas dan cekap tanpa meletakkan terlalu banyak tekanan ke atas infrastruktur rangkaian anda, dan tanpa menduplikasi tugas pemprosesan secara tetap.
- Pastikan anda membina toleransi kesalahan dan checking kesilapan ke dalam rutin anda, pekerja boleh menggantung dan resume dan yang paling menyusahkan kali. Ingatlah untuk memeriksa jika keputusan telah pun diserahkan oleh pekerja lain.
Masa yang akan datang
Dalam 3 bahagian, kita akan membuat mesin pemprosesan maya kami dan menubuhkan mesin tingkap kami untuk menjadi pekerja yang terbiar masa.