Tingkatkan kinerja pada panggilan SOAP

13

Saya memiliki masalah kinerja dengan Magento 2.1

Di toko saya, saya punya 90.000 produk. Saya menambahkan produk ini ke sabun. Ketika saya melakukan ini, dibutuhkan sekitar 7 detik untuk setiap artikel (produk?) (Permintaan> Respons). Singkatnya, butuh beberapa hari untuk memasukkan semua produk.

Sekarang semua produk ada di toko. Semua beberapa minggu saya harus memperbarui beberapa hal pada artikel (produk). Ketika saya melakukan ini dengan sabun lagi, butuh durasi yang sama. Ketika saya melakukan pembaruan toko tidak dapat digunakan. Contoh permintaan dan respons ada di sini: https://pastebin.com/aqnMJk98 https://pastebin.com/UAh0h8Zz

Server saya memiliki CPU 12 inti, RAM 24 GB, dan SSD. Ini menjalankan Ubuntu 16.04 dengan Apache2 PHP7-fpm dan MYSQL.

Ketika saya menonton proses pembaruan, saya melihat bahwa 5 core dengan MySQL 100% PHP bekerja sedikit dan sisanya idle. Ram hanya digunakan dalam jumlah kecil iotopmengatakan bahwa SSD saya bosan.

Saya menyaksikan kinerja basis data dan melihat bahwa Magento melakukan proses penambahan ribuan perintah ke basis data. Apakah ini ok?

Ketika saya memperbaruinya dengan impor CSV Magento itu jauh lebih cepat.

Apa yang bisa saya lakukan untuk mempercepat Magento2 ini? Dalam situasi ini tidak mungkin bekerja dengan baik dengan toko ini.

tadeus
sumber
Ekstensi mana yang Anda gunakan? Masalahnya dapat dikaitkan dengan salah satu ekstensi Anda.
Bunyamin Inan
@tadeus Sudahkah Anda menyelesaikan masalah kecepatan dalam 2 tahun terakhir? Jika tidak, PENAFIAN: Saya adalah pembuat konten situs web yang disebutkan dalam profil saya, profil Jaringan tempat kami memiliki Skrip Utilitas gratis untuk meningkatkan kinerja dan Layanan Analisis lainnya.
Wilson Hauck

Jawaban:

1

Impor massal

kuncinya adalah menggunakan impor batch, seperti yang Anda sebutkan:

Ketika saya memperbaruinya dengan impor CSV Magento itu jauh lebih cepat.

Pertimbangkan untuk memikirkan kembali API SABUN Anda dan mengubahnya menjadi mode massal, mis. Anda dapat membuat beberapa middleware yang akan menerima data produk Anda dan menghasilkan file csv yang nantinya dapat diumpankan ke Magento.

Ada beberapa ekstensi dari pihak ke-3 yang membantu.

Saran kinerja umum

Anda dapat mencoba mempercepat Magento sendiri, tetapi Anda akan mendapatkan ~ 1-10% peningkatan dari setiap peningkatan, ketika Anda melakukan banyak dari itu manfaatnya dikalikan:

  1. Pastikan Anda tidak memiliki kode yang tidak efisien
    1. Pastikan kode Anda tidak menelurkan pemberitahuan / kesalahan / peringatan
    2. Pastikan Anda tidak memiliki pendengar acara yang mahal di ekstensi yang dipasang (dari pihak ke-3 atau dari Anda sendiri).
  2. Setelah selesai menghapus pemberitahuan dan peringatan - pertimbangkan menonaktifkan logging.
  3. Periksa Magento dan ekstensi pihak ketiga mana yang tidak Anda gunakan dan dapat menonaktifkan lihat Modul mana yang dapat saya nonaktifkan di Magento 2? sebagai referensi.
  4. Jika server database Anda menggunakan mesin yang sama dengan aplikasi Magento - pastikan Anda menggunakan soket linux, bukan koneksi TCP / IP.
  5. Jika server database Anda tidak pada mesin yang sama dengan aplikasi Magento - pastikan PHP tidak perlu melakukan resolusi DNS setiap kali menanyakan database.
  6. Periksa saran tuning kinerja database, artikel percona disebutkan dalam salah satu jawaban, periksa juga https://github.com/major/MySQLTuner-perl
  7. Periksa mode pengindeksan magento, alihkan ke indeks sesuai jadwal dan lakukan pengindeksan ulang setiap malam atau setelah impor selesai, bukan pada penyimpanan produk. https://devdocs.magento.com/guides/v2.2/extension-dev-guide/indexing.html#m2devgde-indexing-modes

Jika semua hal di atas dilakukan dan Anda memerlukan lebih banyak kinerja:

  • profil aplikasi Anda dengan xDebug atau blackfire, lihat di mana leher botol, cobalah untuk menghilangkannya.
  • tanyakan sekitar, tetapi lebih spesifik, jelaskan apa yang sebenarnya ingin Anda tingkatkan saat ini.
  • pertimbangkan untuk meminta mitra Magento atau pengembang Magento bersertifikat untuk mendapatkan bantuan.
Anton Boritskiy
sumber
0

Masalahnya di sini adalah, bahwa Panggilan SOAP sangat mahal. Jika Anda menjalankan Permintaan SOAP untuk menambah / mengedit / menghapus suatu produk, Magento harus bergabung dengan banyak tabel untuk mendapatkan semua informasi yang diperlukan. Perilaku ini dalam kombinasi dengan PHP itu sendiri membuatnya lambat untuk jumlah produk atau data yang ingin Anda proses.

Magento sendiri merekomendasikan cluster server 5 node (1 x DB, 4 x Webserver) untuk menangani lalu lintas.

Saya akan merekomendasikan penskalaan secara horizontal, misalnya dengan AWS. Ini mungkin memiliki dampak yang lebih besar pada bisnis Anda, tetapi IMHO Anda tidak akan dapat mengubah Magento agar kinerjanya lebih baik.

Dalam AWS, Anda harus menggunakan Fitur grup autoscaling yang bertanggung jawab atas jumlah server yang Anda luncurkan. Setiap kali Anda menambahkan data, ada server baru yang diluncurkan untuk menangani tekanan. Hal yang sama dapat dilakukan dengan AWS RDS (Layanan DB) sangat mudah dan cepat.

Jika AWS itu bukan opsi sama sekali, Anda dapat mencoba mengubah Magento dan PHP. Saya akan merekomendasikan untuk memeriksa pengaturan untuk:

David Lambauer
sumber
0

Tautan ini menjelaskan cara mengubah penggunaan memori MySQL. Karena Anda memiliki begitu banyak RAM, Anda dapat mengambil manfaat dari mengalokasikan lebih banyak ke MySQL. Itu mungkin solusi yang lebih mudah dan lebih murah ($) yang membangun server database khusus.

https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/

Anda juga dapat menemukan utilitas MySQL Workbench berguna untuk membantu Anda dengan mengutak-atik ini dan juga memantau apa yang dilakukan MySQL secara umum. Utilitas ini dibuat oleh Oracle / MySQL; itu bukan beberapa aplikasi shareware acak.

https://dev.mysql.com/downloads/workbench/

plotkin
sumber