Kategori: Web Programming

Rute permintaan sitemap.xml ke controller kustom / tindakan

Dengan , Rabu 6 Januari 2010 12:13

Dalam rangka permintaan langsung / sitemap.xml ke controller kustom dan tindakan dalam Anda Zend Framework aplikasi hanya menambahkan berikut di application.ini Anda atau file konfigurasi alternatif (misalnya saya menggunakan navigation.ini):

 resources.router.routes.sitemap.route = "sitemap.xml"
 resources.router.routes.sitemap.defaults.controller = Indeks
 resources.router.routes.sitemap.defaults.action = sitemap

Contoh kode untuk keluaran dapat dilihat dengan menciptakan suatu tindakan di controller yang sesuai (misalnya sitemap saya terletak pada controller indeks, sitemap tindakan):

 < php
 class IndexController
     meluas Zend_Controller_Action
 {
     / **
      * Merender sitemap didasarkan pada setup Zend_Navigation
      * /
     fungsi publik sitemapAction ()
     {
    	 echo $ this-> view-> navigasi () -> sitemap ();
    	 $ This-> view-> tata letak () -> disableLayout ();
    	 $ This-> _helper-> viewRenderer-> setNoRender (true);
     }
 }

Sitemaps dapat dengan cepat dan mudah dihasilkan dengan menggunakan Zend_Navigation , tutorial cepat besar (dan umumnya sangat berguna untuk tutorial Zend Framework) adalah Zend Pemain - dinamis menciptakan menu sitemap dan remah roti .

Zend Framework Per-Modul pengaturan berdasarkan

Dengan , Jumat 1 Januari 2010 10:40

Saya telah membuat tindak lanjut untuk posting ini yang memerlukan konfigurasi kurang, silakan lihat Modul Tata Letak Berdasarkan - Zend Framework .

Bila menggunakan kerangka Zend dengan modul, yang nyata bahwa jika Anda menjalankan berbagai (sub-) situs dari aplikasi yang sama Anda tidak perlu menginginkan hal yang sama script tata letak untuk setiap bagian. Aku memutuskan untuk pergi dengan struktur situs berikut:

  / Aplikasi
     / Pengendali
         ...
     / Model
     / Modul
         / Default
             / Pengendali
             / Tata letak
                 / Script
             / Views
                 / Script
         / AnotherModule
             ...
     / Script

Masalahnya adalah menyiapkan script tata letak pada basis per-modul. Jawabannya datang melalui menggunakan Penolong Aksi. Menyiapkan layout pada basis per-modul melibatkan tiga langkah:

  1. Application.ini (atau setup konfigurasi serupa):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/ modules / admin / layouts / script"
     default.resources.layout.layoutPath = APPLICATION_PATH "/ modul / default / layouts / script"
     member.resources.layout.layoutPath = APPLICATION_PATH "/ modules / anggota / layouts / script"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ modules / afiliasi / layouts / script" 
  2. Buat Helper Tindakan Anda:
      <? Php
     / **
      * Mengatur jalur tata letak pada basis per-modul
      *
      * @ Author Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Sejak 2010-01-01
      * /
     kelas Pro_Controller_Action_Helper_SetLayoutPath
         meluas Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Mengatur jalur tata letak berdasarkan modul
          * /
         fungsi publik preDispatch ()
         {
        	 $ Modul = $ this-> getRequest () -> getModuleName ();
    
    	     if ($ bootstrap = $ this-> getActionController ()
    	                        -> GetInvokeArg ('bootstrap')) {
    
    	         $ Config = $ bootstrap-> getOptions ();
    
    	         if (isset ($ config [$ modul] ['sumber'] ['tata letak'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  [Modul $] $ config ['sumber'] ['tata letak'] ['layoutPath'];
    	             $ This-> getActionController ()
    	                  -> GetHelper ('tata letak')
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. Dan terakhir boostrap helper tindakan:
      ...
         / **
          * Mengatur tata letak script pada basis per-modul
          * /
         dilindungi fungsi _initLayoutHelper ()
    	 {
    	     $ This-> bootstrap ('frontController');
    	     $ Layout = Zend_Controller_Action_HelperBroker:: addHelper (
    	         baru Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

Ajaran: DateTime standar NOW ()

Dengan , Rabu 30 Desember 2009 06:30

Aku sudah berjuang dengan menyiapkan skema database untuk baru Zend Framework proyek. Aku menggunakan mencoba untuk menggunakan Ajaran ORM untuk model database saya. Aku perlu menyiapkan skema sehingga memungkinkan saya untuk menetapkan tanggal dan waktu standar untuk kolom `datetime`, misalnya saat menambahkan pesan baru saya mendapatkan timestamp saat ini. Setelah lama mencari dan bereksperimen saya menemukan solusi jadi aku berbagi.

Dalam skema Anda YAML file hanya lakukan hal berikut:

 Pesan:
   actAs:
     Timestampable:
       dibuat:
         Nama: created_at
         Jenis: timestamp
         Format: Ymd H: i: s
       diperbarui:
         Nama: last_updated
         Jenis: timestamp
         Format: Ymd H: i: s
   kolom:
     id:
       Jenis: integer
       utama: true
       autoincrement: true
     nama: string (255)
     email: string (300)
     pesan: string (2000)

Jika di sisi lain Anda tidak ingin `updated_at kolom` Anda dapat menggunakan sebagai berikut:

 Pesan:
   actAs:
     Timestampable:
       dibuat:
         Nama: created_at
         Jenis: timestamp
         Format: Ymd H: i: s
       diperbarui:
         dinonaktifkan: true
   kolom:
     id:
       Jenis: integer
       utama: true
       autoincrement: true
     nama: string (255)
     email: string (300)
     pesan: string (2000)

PHP Pola Desain - Pola Observer

Dengan , Selasa 29 Desember 2009 10:02

Saya telah membaca Pola Desain Pertama Kepala baru-baru ini dan telah memutuskan untuk menulis beberapa pola sebagai contoh PHP untuk keuntungan sendiri. Yang pertama bahwa saya telah memutuskan untuk kode up adalah Pola Observer . Definisi formal dari Pola Observer adalah:

Pola pengamat (subset dari asynchronous yang mempublikasikan / berlangganan pola ) adalah sebuah perangkat lunak desain pola di mana sebuah objek , yang disebut subjek, memelihara daftar tanggungan, yang disebut pengamat, dan memberitahukan mereka secara otomatis dari setiap perubahan negara, biasanya dengan memanggil salah satu dari mereka metode . Hal ini terutama digunakan untuk melaksanakan sistem penanganan event terdistribusi.

Sebagai sistem menjadi lebih longgar digabungkan memastikan bahwa ketika sebuah peristiwa terjadi semua sistem yang memerlukan pengetahuan tentang update ini diinformasikan. Sebagai contoh, sebuah posting blog, setelah menyimpan posting kita mungkin perlu untuk memperbarui mesin pencari (misalnya Lucene), update sitemap kita, tag, pengguna email berlangganan, dll pola pengamat memungkinkan pengembang untuk menambahkan pendengar tambahan tanpa mengedit objek diamati mereka . Dengan menyuntikkan pengamat (yaitu mesin pencari pembaruan pengamat, sitemap generator, dll) menjadi subjek (yaitu posting blog sistem editing) kita dapat memungkinkan itu untuk melakukan semua pembaruan yang diperlukan tanpa perubahan.

Lanjutkan membaca 'Pola PHP Desain - Pola Observer' »

Kantor Grid Computing menggunakan lingkungan virtual - Bagian 4

Dengan , Jumat 4 Desember 2009 23:59

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 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.

Di bagian 3 kita buat mesin pengolahan virtual kami dan mengatur jendela mesin menjadi idle-waktu pekerja.

Menjalankan kode terbaru

Tak pelak setelah membuat logika pekerja bisnis Anda akan berubah, bug akan ditemukan, kode lebih cepat lebih efisien akan diproduksi sehingga meninggalkan pekerja Anda duduk di sekitar pengolahan data menggunakan kode bau lama . Lalu bagaimana kita memastikan bahwa kami selalu menggunakan versi terbaru dan terbaik dari skrip pengolahan kami?

Ada beberapa cara sederhana yang sangat mudah kita bisa melakukan ini, trik, bagaimanapun, adalah untuk mengurangi kekuatan pemrosesan dan lalu lintas jaringan dalam mencapai hal ini. Mari kita mulai dengan sederhana solusi dan memperbaikinya perlahan-lahan selama beberapa iterasi.

Metode pertama akan hanya terhubung ke server kontrol pekerjaan kami (melalui samba, FTP, atau serupa) dan tarik ke bawah versi terbaru kode. Tidak sangat efisien, tetapi akan melakukan pekerjaan. Mari kita memperbaiki yang agak, bagaimana menciptakan sebuah script rsync dan menggunakan bahwa setiap kali bukan? Atau apa tentang menempatkan skrip processing mutakhir kita menjadi subversi memeriksa kode awalnya dan kemudian hanya memperbarui kode kita di masing-masing berjalan ( svn update )?

Pada akhirnya kita bisa berakhir dengan bash script (disebut oleh cron setiap 10 menit) yang tampak sederhana seperti ini:

  # / Bin! / Sh
 jika ps ax | grep-v grep | grep php > / dev / null
 kemudian
     echo "Ayub sedang diproses, keluar"
 lain
     echo "Ayub tidak berjalan, mulai sekarang"
     cd / path / ke / bekerja / copy
     svn update
     php yourJobProcessingScript.php
 fi 

Sekarang kita dapat yakin bahwa dengan menjalankan setiap kami pasti menjalankan kode terbaru. Kami memastikan ini dengan memperbarui basis kode kita setiap kali kita melakukan menjalankan dan mengurangi lalu lintas jaringan dengan hanya mentransfer perbedaan file di seluruh jaringan kami.

Dalam setup demonstrasi saya, saya melakukan persis seperti di atas. Subversi diinstal pada server pemrosesan pekerjaan saya dan saya hanya menarik kode terbaru dari cabang 'pekerja' menggunakan 'svn update'. Saya juga menambahkan tag nomor versi untuk script pengolahan saya yang dikembalikan ke database sebagai bagian dari hasil. Dengan cara ini aku bisa melihat bahwa kode saya sedang diperbarui setiap kali saya disalin bagasi ke cabang yaitu pekerja bahwa saya benar-benar menjalankan script processing mutakhir.

Menggunakan data terbaru

Jika pekerjaan Anda pengolahan yang menggunakan sumber data kemudian di beberapa titik ini akan diperbarui. Kecuali Anda menelepon data Anda sumber atas dasar yang sangat jarang terjadi Anda akan membanjiri jaringan dengan lalu lintas secepat pekerja Anda mulai berjalan membawa semuanya macet. Untuk solusi saya, saya memutuskan bahwa saya ingin memindahkan sumber data saya sekitar dengan VMs saya.

Tahan kau kuda di sana! Bagaimana jika sumber data saya BESAR? Nah ini benar-benar kasus seberapa banyak data yang kita bicarakan? Ini mungkin lebih hemat biaya untuk menginstal hard drive tambahan yang lebih besar ke setiap mesin daripada membeli server pengolahan tambahan. Ini adalah masalah anggaran dan hingga bisnis untuk memutuskan. Ini mungkin bahwa sumber data Anda yang begitu besar sehingga tidak layak yang hanya untuk menjaga jumlah data pada mesin pekerja Anda. Dalam hal bahwa apa yang akan Anda lakukan? Yah kita bisa melihat memanggil server data lokal, tapi ini mungkin menyebabkan masalah dengan jaringan. Dalam hal ini suatu sistem grid seperti ini dapat menjadi tidak realistis untuk memasukkan di lingkungan kantor Anda. Ini juga mungkin bahwa Anda dapat melihat ke dalam strategi berjalan alternatif, misalnya hanya memanggil pekerja Anda 20:00-06:00 setiap malam dan / atau data yang throttling permintaan sumber.

Pindah katakanlah data kami jumlah sumber untuk 100GB data. Nah ya itu sedikit data untuk bergerak di sekitar jaringan pada pembaruan. Bagaimana kita memastikan bahwa kita memiliki salinan terbaru dari data dalam kasus ini? Rsync adalah suatu kemungkinan, tapi secara pribadi saya pikir dengan menjalankan sumber data terbaru Anda pada server pemrosesan Anda kerja dan pengaturan ini sebagai master dalam replikasi (dengan log bin yang panjang dan bagus) mungkin cara untuk pergi:

replikasi Dengan menetapkan setiap pekerja Anda sebagai budak ke update pekerjaan kontrol server ke sumber data Anda akan menetes ke bawah baik untuk pekerja Anda tanpa peningkatan besar dalam aktivitas jaringan (yaitu kecuali jika Anda melakukan update data yang besar dan semua pekerja Anda menendang sekaligus). Ini memiliki keunggulan dibandingkan rsync dalam bahwa Anda tidak akan mendapatkan jeda lama sebelum setiap pekerjaan, seperti database update, yang mysql daemon pada pekerja Anda akan terus memperbarui data sementara pemrosesan berlanjut.

Ini adalah bagaimana saya menyiapkan server demonstrasi saya. Untuk mengatur replikasi Aku mengikuti panduan di situs mySQL ( Menyiapkan replikasi ) dan dalam 20 menit aku pekerja inital saya mereplikasi kontrol pekerjaan dataset server. Untuk setiap pekerja tambahan pengaturan replikasi dan proses bekerja setiap kali ketika VM disalin.

Ringkasan

Dalam bagian artikel kami telah melihat betapa mudah dan tidak menyakitkan itu adalah untuk menjaga kode pengolahan Anda up to date dengan using rsync atau subverion (SVN) untuk melakukan pekerjaan dan mengurangi lalu lintas jaringan di time. yang sama Kami juga membahas bagaimana untuk menyimpan data sumber Anda informasi yang up-to-date dengan memungkinkan untuk menetes ke bawah kepada setiap pekerja Anda. Jadi kita daerah memastikan bahwa kami mengikuti dengan logika bisnis dan informasi dalam sistem jaringan kantor kami. Ada jelas akan alternatif yang tak terhitung jumlahnya untuk melakukan tugas-tugas ini, tapi di sini dua contoh sederhana untuk menunjukkan betapa mudahnya solusi adalah untuk datang.

Berikutnya waktu

Pada bagian akhir dari seri ini, aptly bernama Bagian 5 , kita akan membahas sistem ini untuk menyebarkan. Aku akan meringkas apa yang telah dipelajari dan apa yang saya berhasil menciptakan.

Kantor Grid Computing menggunakan lingkungan virtual - Bagian 3

Dengan , Jumat 4 Desember 2009 11:37

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 2 kita melihat pekerjaan server akan berjalan, dan bagaimana pekerjaan harus dikonfigurasi untuk mencapai jumlah terbesar pengolahan sementara memastikan bahwa setiap pekerjaan diproses tanpa gagal.

Menyiapkan pekerja Anda - atau server lemas

Langkah selanjutnya dalam proses ini adalah untuk mengatur pekerja virtual Anda. Untuk ini saya akan menggunakan instalasi CentOS menggunakan VirtualBox. Aku akan menginstal mySQL dan PHP pada server, juga dikenal sebagai (Li nux, m ySQL, P HP) lemas Servera (Saya mungkin telah membuat nama atas).

  • Instal VirtualBox pada mesin windows Anda (ikuti link)
  • Download dan menginstal CentOS (versi 5.3) dalam mesin virtual yang dibuat

Tidak ada gunanya aku pergi ke ini mungkin ada 1.000 's tutorial besar di luar sana (ok, ini satu: Membuat dan Managing CentOS mesin virtual bawah virtualbox ). Yang penting untuk dicatat saya kira adalah bahwa saya disebut mesin virtual saya GridMachine.

Sejauh pilihan saya klien virtualisasi dan sistem operasi pergi ke sana ada alasan kuat yang besar untuk setiap pilihan. VirtualBox adalah sesuatu yang saya gunakan pada mesin rumah saya dan didukung oleh tiga sistem operasi utama. Saya memilih CentOS sebagai OS yang stabil baik dan saya gunakan di server web sendiri. Saya percaya pada alat yang tepat untuk pekerjaan itu (meskipun saya menerapkan 'menggunakan tercepat dan termudah untuk Anda' mentalitas di sini), jadi jika X sistem operasi menjalankan kode Anda lebih cepat dan lebih efisien menggunakan itu sebagai gantinya:)

Yang penting pastikan bahwa VM Anda menggunakan DHCP, jika untuk setiap mesin virtual baru akan perlu dikonfigurasi secara terpisah yang merupakan sesuatu yang tidak kita want.By menggunakan DHCP kita tidak perlu mengkonfigurasi pengaturan jaringan individual untuk mesin pekerja, DHCP akan tangan IP keluar untuk Anda. Oleh karena itu Anda dapat menyalin mesin virtual Anda tentang kantor tanpa khawatir tentang pengaturan masing-masing sampai (ini meningkatkan skalabilitas dan mengurangi administrasi pekerja).

Proses Anda harus bertujuan untuk mencapai adalah untuk mendapatkan sebuah mesin fisik baru, menginstal VirtualBox, dan kemudian cukup banyak menyebarkan citra virtual tanpa banyak lagi. Mungkin bijaksana untuk setup semua pekerja Anda pada subnet yang berbeda sehingga Anda dapat setidaknya melihat berapa banyak mesin yang menjalankan. Anda juga harus menyiapkan mesin Anda pada sewa jangka panjang atau terbatas sewa DHCP.

Bagaimana menjalankan Jobs pada pekerja

Ini adalah area yang menarik dan ada beberapa metode yang valid untuk diproses pekerjaan di pekerja. Di sini saya hanya akan membahas dua yang paling jelas:

  • Menerus menjalankan script: Sebuah script, baik itu shell script, atau script PHP dieksekusi sekali pada pekerja dan berjalan sebagai bagian dari sebuah loop tak terbatas. Aku sudah diskon metode ini sebagai salah satu kecelakaan script dan berpotensi pekerja Anda akan berhenti untuk berjalan tanpa semacam intervensi.
  • Cron eksekusi script berbasis: Setiap menit X daemon cron kicks off panggilan ke script Anda untuk mendapatkan hal yang terjadi. Tanpa memeriksa beberapa hal ini dapat menyebabkan banyak salinan banyak menjalankan script Anda pekerja.

Keputusan saya untuk pergi dengan cron yang kicks off shell script setiap 10 minutes. shell script saya melakukan tugas-tugas berikut:

  1. Dapatkan daftar proses dan grep ini untuk 'php'. Jika tidak ditemukan maka melanjutkan.
  2. Panggil kode pekerjaan Anda, dalam kasus saya ini akan menjadi sesuatu yang berbasis PHP
  3. Pekerja skrip selesai menjalankan nya
  4. Siap untuk pergi lagi pada panggilan yang sesuai berikutnya

Bash script saya terlihat seperti berikut:

  # / Bin! / Sh
 jika ps ax | grep-v grep | grep php> / dev / null
 kemudian
     echo "Ayub sedang diproses, keluar"
 lain
     echo "Ayub tidak berjalan, mulai sekarang"
     php yourJobProcessingScript.php
 fi 

Catatan: echo adalah hampir sepenuhnya sia-sia, tetapi mungkin membantu orang berikutnya yang datang untuk mencoba dan mengeditnya.

Yang menyimpulkan set up mesin pekerja virtual, cepat, sederhana, dan mudah untuk menyalin ke setiap bagian hardware baru yang diterima. The 'kepintaran' dari sistem grid benar-benar tidak di OS divisualisasikan, yang semua harus dilakukan dengan kode yang dibuat untuk memproses pekerjaan, konfigurasi pekerjaan, dan dalam memastikan bahwa pekerjaan berjalan pada saat yang tepat (yaitu ketika tuan rumah idle ).

Menyiapkan Windows untuk Menginisialisasinya Pekerja

Tugas pertama adalah untuk bekerja keluar perintah yang diperlukan untuk menjalankan mesin virtual dari baris perintah jendela. Jika anda telah menginstal VirtualBox di lokasi default dan Anda telah bernama Anda pekerja GridMachine maka perintah yang diperlukan untuk mengisi pekerja Anda:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxManage.exe" startvm GridMachine 

Namun untuk menjalankan script dalam keadaan 'tanpa kepala' kita perlu menggunakan:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxHeadless.exe"-startvm GridMachine - vrdp = off 

Ini akan memulai mesin virtual tanpa GUI dan memungkinkan untuk menyelamatkan negara anggun. Argumen kedua mematikan RDP sehingga tidak bertentangan dengan jendela RDP, atau memberikan pesan tentang mendengarkan pada port 3389. Nama mesin virtual adalah case sensitive!

Selanjutnya, kita harus mengatur jendela sampai untuk memulai VM buruh kita setelah mesin telah menganggur. Untuk melakukan hal ini (pada Windows XP) Anda akan perlu pergi Start -> All Programs -> Accessories -> System Tools -> Scheduled Tasks sebagai berikut:

dijadwalkan tugas

Selanjutnya klik pada 'Add Scheduled Task' diikuti dengan isi untuk menambahkan program kustom. Arahkan ke script VBoxManage Anda dan klik ok. Jadwal tugas Anda untuk setiap pilihan (kita akan perubahan ini dalam satu menit) dan terus. Setelah melewatkan jendela layar berikutnya akan meminta Anda yang Anda ingin menjalankan tugas ini, saya sarankan baik 'Administrator' atau membuat user dengan privilege baru. Ingat kita tidak ingin mengganggu dengan account staf standar pada mesin pada titik apapun. Klik berikutnya dan memeriksa menunjukkan opsi lanjutan untuk tugas ini.

Untuk akhir textbox tambahkan kami menjalankan string 'startvm GridMachine' dan memastikan bahwa hanya dijalankan ketika login yang tersisa unticked. Kunjungi tugas jadwal berikutnya dan mengubah jadwal drop down ke pilihan 'saat idle', memilih jumlah waktu yang Anda ingin mesin untuk idle sebelum pindah ke tab berikutnya.

Akhirnya untick opsi yang menyatakan menghentikan tugas jika telah berjalan jumlah X waktu, tapi jangan centang pilihan untuk menghentikan tugas jika mesin tidak lagi menganggur.

jadwal

Itu maka untuk pengaturan host jendela!

Ringkasan

Pada bagian ini kita telah menetapkan suatu mesin virtual untuk bertindak sebagai pekerja, serta cara yang kita sebut dan melaksanakan pekerjaan kita skrip pengolahan (untuk diri saya sendiri script PHP). Dari sini kita melihat bagaimana menyiapkan salinan kita jendela untuk memulai mesin virtual dalam modus tanpa kepala ketika komputer menjadi idle, dan menyelamatkan negara ketika pengguna resume penggunaan mesin. Mudah-mudahan pada saat ini Anda melihat betapa sederhananya adalah untuk mengatur sistem seperti dan gatal untuk mendapatkan beberapa eksperimen pergi sendiri!

Berikutnya waktu

Pada Bagian 4 kita akan melihat menggunakan alat untuk memastikan bahwa Anda menjalankan versi terbaru dari sumber kode dan data sehingga hasil yang diperoleh selalu up-to-date dengan informasi bisnis terbaru dan logika.

Kantor Grid Computing menggunakan Virtual Lingkungan - Part 1

Dengan , Jumat 4 Desember 2009 11:23

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.

Sebagai PHP pengembang Saya akan menggunakan alat-alat yang saya gunakan setiap hari yaitu, Linux, mySQL , PHP, VirtualBox dan subversi (SVN). Namun saya harap panduan ini akan beradaptasi dengan bahasa lain dan teknologi baik begitu.

Solusi yang saya berikan akan sangat longgar didasarkan pada jenis pengolahan kami perlu untuk mencapai namun hal ini tidak mungkin benar melalui seluruh artikel yang saya akan mengubah sesuatu untuk kesederhanaan, atau untuk menghasilkan skenario penggunaan lebih menarik.

Lingkungan ini virtualised akan berjalan di jendela mesin karena ini adalah apa yang mayoritas kantor berjalan. Pengolahan bahwa mesin kantor tidak boleh mengganggu dengan staf menggunakan mesin-mesin, seharusnya tidak memerlukan perawatan di mesin, dan mudah deployable untuk mesin baru mereka menjadi tersedia. Juga, baru mesin virtual seharusnya tidak memerlukan konfigurasi tambahan karena hal ini sangat mengurangi skalabilitas dan kemudahan di mana sistem grid dapat diperpanjang.

Mengapa Menyebarkan Grid Computing Kantor?

Pertama Anda mungkin berpikir, mengapa tidak hanya menggunakan sumber daya komputasi awan seperti Amazon EC2 Platform ? Nah alasan bisa beberapa, misalnya:

  • Anda tidak akan mempercayakan data-data tertentu ke lingkungan komputasi awan
  • Anda tidak dapat menempatkan data tertentu ke dalam lingkungan komputasi awan untuk alasan hukum (misalnya data meninggalkan negara), berpotensi untuk alasan hukum, misalnya NHS catatan.
  • Anda ingin menyimpan unit pengolahan Anda dekat dan memiliki kendali penuh atas perangkat keras terlalu
  • Anda tidak memiliki dana untuk menjalankan proyek contoh awan
  • Kantor Anda tidak memiliki koneksi ke internet dan karena itu yang tidak mungkin untuk menggunakan sumber daya awan
  • Anda tidak suka hujan, awan menunjukkan hujan, karena itu Anda tetap jauh

Aku yakin daftar bisa terus, tapi saya pikir itu cukup untuk saat ini.

Keuntungan dari Grid Computing Kantor

Nah, mari kita melakukan beberapa matematika (dan dalam gaya fisika yang benar memungkinkan membuat beberapa asumsi menyapu). Bayangkan Anda memiliki server pengolahan besar gemuk menjalankan 100 pekerjaan per hari. Di kantor Anda, Anda memiliki 50 mesin yang menganggur 16 jam sehari, masing-masing mesin adalah 10% sekuat memutuskan pengolahan gemuk Anda. (Semua hasil di sini adalah dibulatkan ke meremehkan meningkatkan kinerja).

Jadi, 1 mesin listrik * 10% * 2 / 3 waktu = 0,067 yaitu 1 pemrosesan desktop di waktu idle dapat memproses 6 pekerjaan penuh per hari.

Jika Anda sekarang skala ini dibutuhkan 15 desktop idle untuk memproses pekerjaan sebagai banyak per hari sebagai server pengolahan utama Anda tidak.

Jadi di kantor pura-pura kita 50 mesin kita dapat meningkatkan kekuatan pemrosesan kami dari 1 server sampai dengan 4 server pengolahan penuh, atau kita bisa memproses 400 pekerjaan per hari bukan 100.

Perhatikan, karena tidak ada investasi di hardware baru perusahaan Anda baru saja meningkatkan kapasitas pemrosesan batch nya 4 kali! Anda akan berpotensi untuk meningkatkan penggunaan kekuatan Anda tapi dari lingkungan kantor yang paling aku pernah berkunjung ke mesin umumnya dibiarkan menyala sepanjang malam, jadi Anda bisa melihat ini sebagai sebuah inisiatif hijau.

Keuntungan lain juga berarti bahwa investasi dalam baru (atau diperbarui) server pengolahan bisa ditunda jika mesin kantor Anda sudah cukup dan bahwa ketika Anda meningkatkan kekuatan mesin kantor Anda jaringan kantor Anda menjadi lebih kuat secara otomatis.

Teknologi

Apa yang Anda butuhkan? (Atau lebih tepatnya apa yang saya gunakan):

  • Menganggur mesin kantor (dalam kasus saya berumur cadang windows XP laptop)
  • VirtualBox (atau lain virtualisasi perangkat lunak klien)
  • Sebuah mesin virtual dengan PHP, mySQL running menjalankan menebang OS, aku menelepon server ini lemas saya:)
  • Pekerjaan untuk menjalankan
  • Ayub server (bisa mesin virtual lain di suatu tempat)

Khas Pekerjaan

Jenis pekerjaan bahwa sistem ini dirancang untuk menjalankan adalah sebagai berikut:

  • Sistem menerima data pada saat daftar yang kita butuhkan untuk mencocokkan dan memberikan hasil
  • Pencocokan melibatkan memeriksa / mencari beberapa (cukup statis) sumber data
  • Hasil dari sumber data mungkin membutuhkan validasi lebih lanjut, penggabungan, memeriksa sumber data tambahan dalam menanggapi hasil
  • Data dikembalikan dengan catatan pencocokan, sepenuhnya divalidasi dan diproses
  • Setiap record dalam pekerjaan adalah independen dari sisanya

Jadi pada dasarnya kita sedang melihat menjalankan pekerjaan yang memerlukan campuran lookup database dan beberapa angka-angka, skenario yang cukup khas dalam lingkungan bisnis.

Solusi grid tidak hanya menguntungkan untuk pengolahan pekerjaan jenis ini. Pada dasarnya, setiap proses yang dapat dipecah menjadi unit independen dapat dijalankan secara paralel. Lihat ini wikipedia untuk contoh dan informasi lebih lanjut: Grid Computing , namun beberapa contoh terkenal adalah Seti @ Home dan BIONC . Ada kerangka kerja untuk menjalankan komputasi grid, dan ini layak melihat ke dalam.

Apa yang akan kita capai?

Pada akhir artikel ini saya berharap untuk menunjukkan bahwa penggelaran jaringan kantor tidak perlu memakan sangat mahal atau waktu. Saya akan membahas:

  • Menyiapkan sistem kontrol pekerjaan, pekerjaan konfigurasi
  • Membuat mesin pengolahan yang tepat maya
  • Bagaimana men-setup sistem pada mesin windows
  • Memastikan Anda menggunakan kode terbaru dan data
  • Penyebaran dan pembandingan
  • Ke depan

Aku akan membangun (ok saya dibangun, kemudian menulis ini) contoh aplikasi untuk menguji konsep-konsep pada mesin lokal dengan menggunakan windows XP dan 'GridMachine' saya mesin virtual. Pekerjaan server DNS saya akan menjadi mesin utama saya yang menjalankan Fedora 11 .

Hal ini tidak dimaksudkan untuk menunjukkan sistem yang kuat yang bekerja penuh, yang berarti lebih dari demonstrasi dan mendiskusikan menunjukkan bahwa hal-hal dapat dicapai dalam ruang yang cukup singkat waktu dan dengan biaya sedikit. Silahkan kirim komentar, koreksi, atau perbaikan dan saya akan melakukan yang terbaik untuk menjaga artikel ini diperbarui untuk mencocokkan.

Berikutnya waktu

Dalam bagian 2 Aku akan mulai dengan melihat pada sistem kontrol pekerjaan, dan melihat ke dalam bagaimana pekerjaan harus dikonfigurasi untuk mencapai jumlah terbesar pengolahan sementara memastikan bahwa setiap pekerjaan diproses tanpa gagal.

Kantor Grid Computing menggunakan lingkungan virtual - Bagian 2

Dengan , Jumat 4 Desember 2009 11:23

Pengenalan

I work in a company where we run many batch jobs processing millions of records of data each day and I've been thinking recently about all the machines that sit around each and every day doing nothing for several hours. Wouldn't it be good if we could use those machines to bolster the processing power of our systems? In this set of articles I'm going to look at the potential benefits of employing an office grid using virtualised environments.

In Part 1 I gave an overview of the system and technologies I will be using as well as discussed some of the potential reasons why you would want to create an office grid.

Job Control

If you're going to be running jobs then you're going to need some way to manage them. Your job control system (on your job server) needs to be really well thought out before even attempting to run an office grid. So firstly, what are the tasks for a job control system:

  • Hand out jobs upon request from workers
  • Tell workers what type of jobs to run
  • Track jobs
  • Ensure that jobs are only run once
  • Provide job data to workers, or at least tell them where to get it

The system also needs to be extensible, a solution that works for now in a single case may be extended to run several types of jobs as the business sees the worth in a grid solution. For example, jobs may gain priorities, more than one job type may exist (ie several code bases), eventually you may even run several different worker machines that are optimised for each type of job (although that does move away from the 'generic worker' idea). Always try to think about the future when developing systems, a short term vision can lead to longer term frustration and increased development time.

Job Server

We're going to need somewhere to control our jobs from, this should be the only system in your grid that has a fixed resource locator, be that an IP address, host name, URL (using internal DNS), etc. This is because the workers need to know where to look for jobs, workers need to find the job control system (not the job control system find the workers).

The job server itself doesn't really have a complicated task (in a basic system anyhow), it needs to store a list of jobs, hand out jobs, receive results, and subsequently store them for later retrieval. Bagaimana bagian-bagian ini ('menyerahkan pekerjaan' seperti) didefinisikan bisa sangat dasar. Later on we can extend the system to include an administration interface to add, edit, delete, suspend jobs but this is beyond this exercise.

There is no reason whatsoever then that your job server could not be a virtual machine running within your main processing server provided it doesn't drain too many resources from it. The job server however does need high availability, if it goes down on a Friday evening you're going to lose a whole weekend of processing, potentially costing you a couple of weeks worth of processing time (when compared to your main processing server alone). You may want to consider putting your job server on a load balanced environment for high availability.

Basic Setup

The basic setup for our job server will consist of what I'm calling one of my LiMP servers (that is Li nux, m ySql, P HP). The code running on the workers will actually work out what jobs it can run by interacting with with job control system databases. Later on we could create a web service and actually hand out jobs rather than having the workers do the hard work themselves, but for now we'll continue using the KISS principle (Keep it Simple, Stupid!).

So, lets create three mySQL tables to deal with jobs. These will be `jobs`, `jobRecords`, and `jobResults`.

jobs table Here I'm using SQL Buddy a great little alternative to phpMyAdmin just because its easier to install on centOS (for others see: 10 Great alternatives to phpMyAdmin )

This table consists of 5 simple fields,

  • id: Uniquely identify the job
  • name: Could be a client reference, or any number of other identifiers
  • Status: You need to know where the job is at, eg
    • 0: Not started
    • 1: Picked up
    • 2: Completed
  • started_by: Who's started doing the job? This isn't entirely required but is a nice to have. I'd suggest tracking workers by their IP address on your network
  • started_at: When did the worker start the job? By tracking jobs that have not completed within X amount of time we know we need to pick up the job once again and start processing by another worker. Workers could stop processing/go offline for any number of reasons, power failure, crash, network loss, etc.

It is easy how this table could be extended with a few additional fields to allow for statistics tracking, a finish time column to see how long the job took, a counter to see how many workers picked up the job (obviously this needs to tend to 1), job priority, the list can go on and on. In more complex job scenarios it would be possible to specify how much memory the worker would need access to (and therefore only use suitable workers), or even what type of worker would be required.

Lets add a few example jobs:

example jobs

The next table again is quite simple to understand, these are our job records. They are linked to the main jobs table by a column `jobs_id`. The make up of this table very much depends on the data that you need to supply to your workers, lets make a very simple example where we have four columns:

  • id: ID of the record
  • name: Person's name
  • address: Person's address
  • jobs_id: The job ID that this record is linked to

The third and final table consists of a results table, it has much the same make up as our records table, and with the addition of some columns could be part of the records table:

  • job_record_id: Link the result to the job table
  • result: The result data

…and that's all you need for job control! (albeit at a very basic level) In my case I'm pointed to another table where my data to process was located, but this could just as easily been a file, parameters to run simulation code, you name it.

Selecting a job

As stated previously, the workers will do our job management for us for now, so all we need to really do is find a job that needs processing and get the information. How would we do this? Well pick our job selection criteria and look for jobs, in SQL I did the following:

  1. Take any jobs that are not marked as complete but from our worker and reset them (substitute __ME__ with an identifier, easiest would be IP address):
     UPDATE `jobs` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ME__; 
  2. Using our job selection criteria, select a job and tell the control system that this worker is dealing with it:
     UPDATE `jobs` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW() WHERE `status` = 0 OR
    (`status` = 1 AND `started_at` > DATE_SUB(NOW(), INTERVAL X HOUR)) ORDER BY `id` ASC; 

    By grabbing jobs that haven't returned results in X amount of time we ensure that all jobs are run in the event of a worker crashing or going AWOL.

  3. Next grab the jobs details followed by the records themselves:
     SELECT * FROM `jobs` WHERE `started_by` = __ME__ LIMIT 1;
    SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Upon completion of the job we insert our result records and mark the job as complete. Remember as jobs can suspend/resume at any time allow for some robustness in your script. It might be that the task suspends half way through updating the job control system, so checking the number of records in a job and the number of results saved back to the job control system would be a wise move.

In addition, whilst this demonstrates how jobs can be selected and managed from an SQL-query frame you should really be abstracting your job control so that if you decide to switch to using a web service, a file based system, XML , or any other number of systems it will not affect the code above it.

Job Configuration

The next aspect to consider is job size and configuration. By playing with job configuration we can strike an excellent balance between speed, process replication, and reliability. Take a couple of scenarios:

  1. Jobs take 1 day each to run: This means that your workers need 15 days to process each job (remember 10% of the power for 2/3rds of the time). This is clearly not a wise configuration, your job size is way too big! It would take at least double the time to get a job processed should the initial worker go AWOL (time to pick up that it hasn't returned a result plus reprocessing time). In an ideal you'd have at least one full job easily cleared by the end of each long idle period, that way you keep the jobs ticking over and at worst case a job would take two days to process should the first go missing.
  2. Jobs take 1 minute to run: This means that your workers take about 15 minutes to run each job. Whilst this may initially seem ideal, you gain additional work processing during lunch time, coffee breaks, meetings, etc this scenario puts strain on other areas of your system and introduces its own problems. For example, firstly your setup/processing time ratio is going to go right down, therefore losing system efficiency. Your network is going to be constantly streaming job information to the various workers frustrating staff who are dong their day to day work. You're also going to put more strain on your job processing server as it has to dish out lots and lots of small pieces of work on a regular basis. Lastly, in this situation if your job server goes down you're going to create a huge back log of uncompleted work whereas bigger jobs could of continued processing blissfully unaware that the job server was experiencing difficulties.

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 normal panjang 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
  • By abstracting your job select/results submission we can change the technology of the control server without much problems
  • Configure your jobs to ensure that they are run quickly and efficiently without putting too much pressure on your network infrastructure, and without duplicating processing tasks on a regular basis.
  • Ensure that you build fault tolerance and error checking into your routines, workers can suspend and resume and the most inconvenient of times. Remember to check if results have already been submitted by another worker.

Next time

In part 3 we'll create our virtual processing machine and set up our windows machines to become idle-time workers.

Office Grid Computing using Virtual environments – Part 5

By , Friday 4th December 2009 11:03 pm

Pengenalan

I work in a company where we run many batch jobs processing millions of records of data each day and I've been thinking recently about all the machines that sit around each and every day doing nothing for several hours. Wouldn't it be good if we could use those machines to bolster the processing power of our systems? In this set of articles I'm going to look at the potential benefits of employing an office grid using virtualised environments.

In Part 4 we looked at using tools to ensure that we're running the latest version of the code and data sources so that obtained results are always up-to-date with the latest business information and logic.

Pre-Deployment

Before deploying your grid system if there's one thing you do and one thing alone it's benchmark your current system ! No matter what you tell colleagues about how much extra work your system is going to do unless you have numbers to back this up your guarantees are nothing. So,

  • how many records can you process currently? Per Day? Per Jam?
  • How long does it typically take to turn around a job?
  • How much more capacity do you have?

There's also additional questions:

  • If your processing server (or one of your processing servers) goes down how will this affect your capabilities, will you be crippled?
  • What advantages do you hope/expect to get from a grid system?
  • Are your office machines capable of running the jobs?
  • Are your (or can you jobs be converted) to wrok in this style of running?

The last major point is to take your time on any major change like this. Update your processing code to work using the new methodology, benchmark again. Possibly set up your processing server to run a virtual machine, after all your processing server will just be another worker (just a very powerful one relatively). Allow the new process to settle.

Deployment

My suggestion would be to pop into the office one weekend perform all the installations and setup. Do this just before a fortnight's holiday and leave so other poor chap to deal with the consequences… maybe not…

Deployment for a system like this needs to be slow. Despite it being relatively simple to set up this system will affect your entire office infrastructure (well the digital one). Firstly, roll out to a couple of machines at a time, monitor network traffic, how the worker hosts perform on a day-to-day basis. You may need to alter your job configuration in response to your findings.

Once the system has settled with a few machines (lets say 10% of all office machines, ie 5) keep monitoring network traffic and host machine performance. Next benchmark again, you should now be processing 33% more jobs than your first benchmarks. Check this is so, or that you're at least in this ballpark. If not, investigate what is going on before moving on. Repeat this cycle until you happily have all office machines running without killing individual machine performance or grinding your network to a standstill.

At all times keep benchmarking, even after all deployments are made. Check how new code updates affect speed of your system, check all workers are reporting in and processing jobs. Slowly (very slowly) increment your job configuration to get the best from your workers and network.

Stop!

What if you want to stop your workers from running at some time? They are all out there running, regenerating, and trying their best to process data like hungry insects. The answer may seem obvious but its worth adding just in case its overlooked. Simply edit your processing script with an exit(0) or die() or some other statement to kill your processing job. An important reason why we always try to update to the latest processing script before any run!

Demonstration System

In order to write this set of short articles I created a very small grid to demonstrate the technologies and methodologies. I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. By no means have I gone out and saturated a whole office with traffic and nor have I had access to a regular staff members PC to see how host performance was affected.

My demonstration system was very humble indeed. I used my regular desktop set up as a job control server. On this I had installed mySQL server installed set up as a master in replication, PHP , and SVN linked through apache (for access via worker VM).

I then created a centOS worker machine on VirtualBox on a 6 year old windows XP laptop. I setup scheduled tasks as specified after copying the VM onto the machine and let it go.

The virtual machine was set up with PHP, subversion, and mySQL. I checked out a branch named 'worker' from my job control servers repository and made sure it could be updated using 'svn update'. Berikutnya saya setup mySQL sebagai budak dan memeriksa bahwa data replikasi dari mySQL di server kontrol pekerjaan ke VM pekerja. After all this I setup the bash script and the cron job.

My processing script basically went along the lines of this (very simple stuff):

  • Read in the name field
  • Counted the number of similar names in a table from the data source held on the VM
  • Counted the number of names as above but splitting the name by spaces (ie forename, middle, surname)
  • Repeated this process 1,000 times

Each job took approximately 20 minutes to run. At one point I opened several copies of the worker VM on the windows laptop and watched the jobs be checked off by each of the worker IP addresses. At this point I also confirmed that replication automatically restarted.

Leaving the laptop to idle resulted in a worker starting to process jobs from the job control server. When resuming laptop usage there was a delay of about 30-60 seconds, this is a fair amount of time and staff would need to be made aware that their machine may pause for a short while when returning to the machine. Newer machines may not have a pause of this long. The benefit of the amount of processing performed by these machines during idle periods would more that outweigh staff members having to wait a short period (say 1 minute) on arriving at their machines of a morning (I frequently wait longer that this for a Windows Defender update to take place) provided they were made aware of this (useful time to grab a morning coffee!).

Overall I feel confident that I have demonstrated the technologies that could be used to create such a system. I have shown that such a system does work on a (very) small scale and with some more experimenting could be scaled up utilise the resources of an office's machines. If I don't get to the point of doing this I would be very interested to know/see when someone else does.

Conclusions / Evaluation

The next obvious step would be to actually get a real world example and start to deploy a system such as this within an office environment and see what happens. Asking a business to commit to this without a trail blazing company to prove the technology and effectiveness may be a little difficult. Grid/Distributed computing is very popular is some circles and has some large applications (BIONC, SETI@Home, Folding@Home, etc). I did not, however, find a smaller scale and simple system like this in my searches that could be rolled out within an office environment.

I created a basically free system using mostly open source software and tools available in almost any office. The technologies were basically demonstrated and show to perform and work as expected. Hopefully I have show that with not much work and with a very simple setup you can deploy an office grid computing system that is powerful, cheap, and scalable all at the same time.

Once a system is up and running there is almost no end to the amount of customisation and improvements you can make. For example statistics / benchmarking can easily be added showing the worth of such a system every day. New machines can be added quickly and easily as and when they arrive with upgrades to existing hardware bolstering your processing power.

I hope you've enjoyed reading this series of articles and its given you food for thought on running an office grid system. The solution presented here won't necessarily work in all situations but should be adaptable to allow you to get your data processing done using your own solution.

Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.

Zend Framework: Fundamentals – Review

By , Saturday 28th November 2009 10:42 pm

My employer recently paid for a group of us developers to take the Zend Framework: Fundamentals course, here I'll summarise my thoughts and opinions on the course for others. For those looking to save time, here's my summary:

For developers who haven't had time to look at the Zend Framework this course (Zend Framework: Fundamentals) offers a good overall picture of the framework introducing you to the key areas and giving enough information in order to continue. For those who have spent time looking at the framework and have followed one or two tutorials this course does not offer much beyond.

Latar belakang

I've been a PHP developer for around 5-6 years, and have started working with the Zend Framework on a component basis over the last 6 months. I've developed and/or been a developer on a couple of small Zend Framework MVC sites. I'll be honest, I haven't had a huge amount of exposure to other frameworks from a coding point of view but have spent several hours researching the project websites and evaluating them. The framework and the community surrounding Zend Framework it is quite exciting and there seem to be huge possibilities in where its going.

About the Course

The course is delivered over 9 two hour webex sessions (with a 10-minute break in the middle). The time is spent going through a set of slides provided by Zend with discussion at any time. You can use a microphone to talk to the instructor, but to be honest I didn't see anyone use anything more than the chat window. In addition a VMWare Ubuntu machine is provided that has example code and projects set up an a trial version of Zend Studio. The course leader talks to attendees either over an integrated VoIP solution, or you can dial in using one of the many worldwide dial in numbers.

During the course the material consists of a brief overview of the Framework and the MVC pattern before heading into a sample guestbook application. The discussion demonstrated bootstrapping, Zend_Application, Db Tables, Database access, Forms, Filtering, ACL, Validating, etc, etc. Basically covering all the topics you'd require to get a basic site up an running all the time giving you the tools to go and get more advanced in the framework (although this did amount to 'See the website' much of the time).

Time is given to code up some examples, and to develop the 'guestbook' and simple 'wiki' application. Personally I felt that providing the code or each app and then asking us to develop what was essentially a copy alongside didn't really provide a good learning experience. I would have preferred to develop an application similar, but not identical. to the example application with the benefit of having a guide to refer to. Alternatively building the applications from scratch with the demonstrator would of possibly led to more questions about why and how , thus giving a better understanding of the framework, after all you can look up specifics after the course.

The last lecture consisted of working on the wiki application with help/guidance from the instructor. After the course feedback was taken, it was emphasised several times through the course that Zend takes feedback very seriously, in fact apparently our version of the course was quite new. Some of the other developers in the company will be taking the course soon so it will be interesting to see if this has happened.

The course style was informal, allowed for feedback and collaboration between attendees and the instructor. The course leader was friendly, approachable (email addresses were shared for questions), and whilst his presentation from the slides was a bit shaky seemed fully competent in the framework. He was clearly someone who used the framework on a regular basis rather than someone who is taught to teach the course, I liked the 'real world' experience in that respect.

Overall Feeling

In some ways I found the course a waste of time, in others it was very handy. Hopefully I'll get my reasons across clearly, and maybe provide some food for thought or useful feedback (knowing me this is unlikely!).

For myself this course was aimed at too low a level. Having gone through the quickstart guide, read Rob Allen's Zend Framework in Action, and worked with the framework a little I didn't really get anything too much. I would of liked the course to pick up from the end of the quickstart and develop additional skills.

That said, the course title does clearly state “Zend Framework: Fundamentals ” and in that aspect the course achieves what it sets out to do. Other members of the development team that haven't spent the time looking into the framework finished each session with enthusiasm and asked questions which was really nice to see.

All was not lost, it was good to spend time confirming the basic details of the framework and get to ask a couple of questions in areas where I wasn't 100%. It was also time that I got to sit down each day and think about coding using the framework and future projects, something I wouldn't of been able to do otherwise (can you imagine your company agreeing to that? :) ). Last but not least you also get a nice certificate from Zend to say that you attended the course (albeit by email).

Zend Framework Certification

This was one question that kept coming to mind during the course, would it prepare me for the certification? The quick, easy is a resounding No . The course instructor was quite clear on that with the additional advice that for the certification you should really be using the framework on a day to day basis and feel very comfortable and confident in its usage and methodologies.

Summary

Given everything I've written above, I'll summarise everything in two easy bullet points:

  • New to Zend Framework: This course does exactly what you'd expect, it gives you a nice introduction to the framework and a good grounding on the basics from which you can build. The course seems to generate interest and enthusiasm for the framework amongst developers.
  • Used the Zend Framework: While it was nice to shore up some of the very basics I felt the time, effort, and funds to take the course could of been better spent elsewhere. It will be nice to see Zend create a new higher level course to take developers to the next level – at least to the standard of certification and beyond. For that I would sign up immediately.












Panorama Didukung oleh Themocracy

10 pengunjung online sekarang
7 guests, 3 bots, 0 members
Max pengunjung hari ini: 16 jam 02:02 am UTC
This month: 16 at 01-09-2011 02:02 am UTC
Tahun ini: 130 pada 28-03-2011 10:40 UTC
Semua waktu: 130 pada 28-03-2011 10:40 UTC