Bagaimana tepatnya cara kerja pembaruan otomatis?

28

Saya menerima email pagi ini yang menyatakan bahwa situs Wordpress saya telah diperbarui secara otomatis ke versi terbaru. Saya tahu tentang fitur ini tetapi saya selalu bertanya-tanya bagaimana cara kerjanya.

PHP bukan proses yang berjalan secara permanen: PHP hanya berjalan saat diminta. Sejauh yang saya tahu, Wordpress hanya dapat memperbarui dirinya sendiri ketika seseorang memuat halaman web. Tetapi proses pembaruan tidak instan, jadi tentunya pengguna yang mengunjungi situs akan memiliki halaman yang sangat lambat.

Apakah ada trik berbeda yang mereka gunakan untuk pembaruan otomatis? Saya sudah mencari di semua tempat tetapi belum menemukan penjelasan.

DisgruntledGoat
sumber
Untuk lebih tepatnya itu hanya akan memperbarui ketika minor baru atau pembaruan keamanan dirilis jadi misalnya 3,8-3,8,1 tetapi ketika 3,9 dirilis (sebagai pembaruan versi utama) maka Anda harus melakukannya secara manual.
Borek

Jawaban:

15

PHP bukan proses yang berjalan secara permanen: PHP hanya berjalan saat diminta. Sejauh yang saya tahu, Wordpress hanya dapat memperbarui dirinya sendiri ketika seseorang memuat halaman web. Tetapi proses pembaruannya tidak instan, jadi tentunya pengguna yang mengunjungi situs akan memiliki halaman yang sangat lambat.

Apakah ada trik berbeda yang mereka gunakan untuk pembaruan otomatis? Saya sudah mencari di semua tempat tetapi belum menemukan penjelasan.

Sistem yang Anda cari di sini disebut "WP Cron". Ini adalah sistem proses latar belakang di WordPress yang memungkinkan acara terjadi di luar pemrosesan normal. Mereka masih membutuhkan pemicu untuk memulai, tetapi mereka tidak mengganggu pemuatan halaman karena proses latar belakang.

Jadi ya, seseorang harus memuat halaman Anda. Tidak aktif di file default-filter.php, Anda akan menemukan baris kode ini:

add_action( 'init', 'wp_cron' );

Jadi, pada setiap pemuatan halaman, fungsi wp_cron berjalan. Fungsi ini berakhir di wp-include / cron.php dan apa yang dilakukannya adalah untuk memeriksa acara yang dijadwalkan dalam database. Jika ada proses yang perlu dijalankan di latar belakang, maka ia memanggil fungsi spawn_cron.

Spawn cron memiliki dua metode operasi yang mungkin, tetapi yang pertama dan paling umum adalah memanggil fungsi wp_remote_post untuk membuat koneksi kembali ke dirinya sendiri, di URL wp-cron.php. Dengan membuat permintaan HTTP tambahan ini, ia memulai proses PHP lain untuk melakukan semua pekerjaan yang sebenarnya. Permintaan yang dibuat di sini adalah non-pemblokiran, dengan batas waktu 0,01 detik. Jadi, itu tidak benar-benar mendapatkan hasil apa pun di sini. Tujuan dari permintaan ini hanyalah untuk memulai proses baru di latar belakang. Setelah ini selesai, itu hanya kembali, sehingga pengguna yang melihat tidak pernah memiliki penundaan.

Proses wp-cron.php adalah apa yang benar-benar berfungsi, dan pembaruan, dan yang lainnya. Banyak proses di WordPress ditangani oleh sistem cron. Penerbitan posting terjadwal, pemrosesan ping, perbarui cek, apa pun yang perlu terjadi di luar aliran normal dapat dijadwalkan dan kemudian berjalan sesuai kebutuhan.

Tapi ya, hit normal ke situs itu memang harus terjadi untuk memulai proses. Dan tidak, WordPress.org tidak menghubungi situs Anda secara langsung untuk memulai sesuatu, situs Anda harus menerima beberapa bentuk lalu lintas untuk memulainya. Segala bentuk lalu lintas akan dilakukan.

Otto
sumber
17

Sebenarnya, pembaruan otomatis didorong dari wp.org. Proses pembaruan masih berjalan di situs Anda, tetapi di latar belakang via wp-cron.

Ketika pembaruan kecil baru dirilis, orang-orang di WordPress mulai meluncurkan pembaruan. Proses pembaruan aktual dimulai setelah situs Anda memeriksa wp.orgpembaruan, pembaruan tersedia secara teoritis, dan situs Anda dipilih secara acak untuk diperbarui.


(Terima kasih @otto untuk menunjukkan kata-kata salah saya :))


Karena setiap situs memeriksa wp.orgversi baru (biasanya menggunakan dua kali sehari wp-cron), rolloutserver tahu berapa banyak situs yang memerlukan pembaruan.

Kemudian peluncuran dimulai, mulai perlahan - 1 dari 128 situs diperbarui secara otomatis. Ini sedang dipantau, dan jika berturut-turut menunjukkan tidak ada masalah dengan peluncuran, lebih banyak situs mendapatkan pembaruan otomatis (biasanya langkah berikutnya adalah 1 dari 64, dan terus meningkat seperti itu) sampai semua pembaruan otomatis dikirim.

Ini memungkinkan pengembang untuk menghentikan peluncuran jika ada masalah, tetapi pembaruan terakhir dari 3.8ke 3.8.1memiliki tingkat keberhasilan 100%.

Situs yang dipilih 1 out of 128sebenarnya acak. Yah, tidak juga, tetapi jika Anda ingin tahu, itu berfungsi seperti ini:

Url situs yang membutuhkan pembaruan akan di-hash menggunakan MD5. Menggunakan hanya tiga karakter pertama dari hash ini dan mengubahnya menjadi base10, ini menghasilkan 4096 kemungkinan. Pembaruan dimulai untuk situs yang memiliki angka yang dihitung antara 0 dan 31 (4096/32 = 128).

Oke, saya kira itu cukup acak;)

Dalam kasus saya, ketika saya menjalankan banyak situs WordPress, pembaruan membutuhkan waktu 1 hari - cukup lucu untuk melihat ketika semua halaman diperbarui.

Kalau-kalau Anda bertanya-tanya: D

btw, berikut ini artikel di make.wordpress.org yang menjelaskan prosesnya, seperti yang terjadi.

fischi
sumber
Jika "dimulai dengan permintaan dari wp.org ke situs Anda", bagaimana itu aman? Tidak bisakah ada yang mengirim permintaan ke situs Anda?
DisgruntledGoat
Sebenarnya, saya tidak tahu bagaimana ini ditangani secara teknis. Tapi saya yakin ada pemeriksaan keamanan, seperti nonce dan / atau dari mana permintaan itu berasal.
fischi
1
@fischi Apakah Anda mendapatkan info dari mana wp.org memulai pembaruan? Ada perbedaan besar antara wp.org yang memulai pembaruan atau situs wordpress yang memeriksa pembaruan dan kemudian memulai pembaruan itu sendiri jika wp.org memberi tahu bahwa ada pembaruan.
kraftner
1
Jawaban ini sebenarnya salah. Proses pembaruan tidak dimulai oleh WordPress.org ke situs Anda. Situs Anda memang perlu memiliki beberapa bentuk lalu lintas untuk memulai, tetapi WordPress.org tidak melakukan ping situs Anda secara langsung.
Otto
1
Oke, tetapi "dimulai dengan permintaan dari wp.org ke situs Anda" tidak benar. Situs Anda membuat permintaan pembaruan, dan respons memberi tahu Anda apakah ada pembaruan atau tidak. Bukan sebaliknya, situs Anda harus memulai proses.
Otto
1

Dalam istilah yang sangat luas, ketika pengguna mengunjungi situs wordpress memeriksa waktu kedaluwarsa dan jika kedaluwarsa terdeteksi, permintaan lain dikirim ke server untuk "menjalankan" tindakan yang terkait dengan peristiwa kedaluwarsa. Inilah sebabnya mengapa pengguna tidak merasakan keterlambatan nyata dalam memuat halaman, karena server menjalankan tindakan yang sebenarnya (upgrade dalam hal ini) dalam proses terpisah.

Ini berfungsi tetapi waktunya tidak terlalu akurat. Semakin banyak lalu lintas situs Anda semakin akurat.

Orang yang ingin mendapatkan kinerja yang lebih baik dan pengaturan waktu yang lebih akurat dapat memblokir "proses" cron internal yang dimiliki wordpress, dan menggunakan proses cron OS untuk memicu pengecekan pengatur waktu.

Mark Kaplun
sumber