H2o: Tidak ada penundaan (tidur, Thread.sleep) di mruby?

Dibuat pada 2 Mei 2017  ·  6Komentar  ·  Sumber: h2o/h2o

Saya menulis mruby handler yang menggunakan http_request untuk menjaga cache saya tetap segar di wordpress tetapi karena saya tidak tahu cara apa pun untuk menidurkan handler dan terlalu banyak permintaan, permintaan itu gagal karena php tidak dapat mengikuti.

Apakah ada cara untuk tidur selama beberapa detik di h2o menggunakan mruby (saya mencoba menginstal ekstensi mruby Thread khusus tetapi sepertinya saya tidak bisa mendapatkan tanggal untuk respons dari utas)?

kesalahan:
[lib/handler/fastcgi.c] in request:/index.php/tag/science:connection failed:failed to connect to host

Kode:

if request_is_from_self and links_file_exist and req_is_get
    links = `php #{links_filepath}`

    for link in links.split(' ') do
        req = http_request(link)
        _, _, _ = req.join
    end
end
enhancement mruby

Semua 6 komentar

hai @taosx
saya agak ragu bahwa itu benar-benar php yang tidak dapat mengikuti.
apakah Anda mengirimkan permintaan http ke instance h2o sendiri yang kemudian menjalankan fastcgi?

tidak yakin apakah Anda melakukan ini dengan sengaja untuk meniru jeda tetapi dari apa yang saya baca Anda bergabung untuk setiap permintaan secara berurutan. Idenya adalah bahwa permintaan keluar secara paralel, jadi Anda hanya mulai bergabung setelah semua permintaan dipecat.

dapatkah kamu mencoba sesuatu seperti?

links.split(' ').map{|l| http_request }.to_a.map{|r| r.join}

dan posting deskripsi kesalahan yang lebih rinci?

juga jika selalu ada beberapa tautan yang sama dan mereka kurang lebih statis, Anda dapat dengan cepat menerapkan cache memori yang murah.

Saya yakin kode Anda tidak memberikan argumen ke http_request, saya memodifikasi seperti ini:
links.split(' ').map{|l| http_request(l) }.map{|r| r.join}
tetapi tampaknya masih berkinerja lebih buruk daripada kode yang saya posting di atas.
Saya memecahkan solusinya dengan menginstal dan mengaktifkan opcache ke php dan sekarang waktu yang diperlukan untuk melakukan semua permintaan turun dari 27 detik menjadi 3,1 detik tanpa kesalahan. Dengan menggunakan kode Anda akan 4 detik.

Setelah saya melakukan beberapa tes lagi, saya ingin membuka sumber seluruh kode untuk situs wordpress saya dengan h2o yang men-cache halaman setiap 2 menit, melakukan precompress dengan gzip dan brottli pada pengaturan maksimal dan melayani dari cache. Cinta h2o sejauh ini, terima kasih semua kontributor untuk h2o!!

Di masa depan saya ingin melihat lebih banyak fitur scripting untuk h2o, seperti openresty tetapi berdasarkan h2o :D

@taosx ah maaf. saya lupa bagian penting: .to_a

links.split(' ').map{|l| http_request }.to_a.map{|r| r.join}

hanya karena penasaran, dapatkah Anda mencobanya lagi. dan berapa banyak permintaan yang Anda buat / seberapa besar array tautan?

@yannick Saya mencoba lagi, saya harus memodifikasi http_request untuk memberikan argumennya (l).
Kecepatan turun menjadi 3,06 detik :D dan terkadang 2,9+ saat menghangatkan cache.
Array tautan memiliki 41 elemen (aws ec2 t2.micro).

Setiap kali saya menambahkan posting lain saya mendapatkan 1 link dari posting itu sendiri + ~5 link dari tag ditambahkan...
Saya pikir saya punya masalah kecil dalam waktu dekat. Saya pikir saya akan meninggalkan mruby untuk saat ini dan melakukan pendekatan yang berbeda di masa depan.

Apakah Anda pikir saya bisa menggunakan h2o dengan mruby sebagai cache proxy terbalik untuk wp, saya yakin itu mungkin.

tampaknya Anda keluar ke php melalui tautan = php #{links_filepath} . yang kemungkinan sangat lambat, apakah Anda menghapus waktu itu?
hanya untuk h2o t2.micro seharusnya baik-baik saja, tetapi jika Anda juga menjalankan hal-hal php pada mesin itu, mereka bersaing untuk satu cpu dan kinerja turun lebih jauh. jadi setidaknya untuk pengujian saya akan mengambil sesuatu seperti c4.large atau c4.xlarge.

ya caching melalui mruby harus dimungkinkan, baik Anda melakukannya di memori atau Anda menggunakan redis (yang saat ini masih membutuhkan tambalan tetapi harus segera digabungkan, lihat https://github.com/h2o/h2o/pull/1152 )

Ini adalah diskusi yang menarik!

Selain bagaimana masalah tersebut harus diselesaikan (misalnya dengan mengimplementasikan cache menggunakan mruby), saya percaya bahwa tidak ada alasan mengapa kita tidak menyediakan fungsi sleep di handler mruby kita.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

voiddeveloper picture voiddeveloper  ·  6Komentar

utrenkner picture utrenkner  ·  8Komentar

wujunjenny picture wujunjenny  ·  5Komentar

Ys88 picture Ys88  ·  5Komentar

basbebe picture basbebe  ·  3Komentar