Vấn đề về hiệu suất với các trang web / cửa hàng 1k đến 10k


9

Tôi đang cố gắng tìm cách cải thiện hiệu suất Magento khi số lượng trang web / cửa hàng vượt quá 1k và mục tiêu của tôi là khoảng 10k. Đây là một số câu hỏi; bất kỳ lời khuyên / giúp đỡ đều vô cùng hoan nghênh!

  1. Thêm trang web / cửa hàng mới là chậm;
    Tôi nhận xét $ this-> cleanModelCache () trong _afterSave () trong Mage_Core_Model_Abauge, và tình hình có vẻ tốt hơn nhưng ngày càng chậm hơn khi số lượng trang web / cửa hàng tăng lên. Và tôi không biết điều này sẽ ảnh hưởng đến toàn bộ hệ thống trong tương lai.

  2. Cuộc gọi Api trở nên chậm chạp.
    Một trong những quy trình chính là đặt hàng; mô hình tùy chỉnh của tôi xử lý nó bằng cách xử lý một số dữ liệu và về cơ bản sử dụng mô hình bán hàng / báo giá và mô hình sales / service_quote. Quá trình bắt đầu với Oauth. Cả Oauth và đặt hàng đều mất nhiều thời gian hơn khi số lượng trang web / cửa hàng tăng lên và mức tiêu thụ bộ nhớ có vẻ lớn hơn. Điều này có liên quan gì đến việc Mage tải config xml không, và thực tế là dữ liệu cấu hình sẽ lớn hơn với số lượng trang web ngày càng tăng?

  3. Mở n98-magerun dev: console mất nhiều thời gian hơn; không biết nguyên nhân của nó.

  4. Việc lưu cấu hình từ bảng quản trị mất nhiều thời gian hơn; không biết làm thế nào để cải thiện nó

Có thể xây dựng lại cách Magento tạo và tải dữ liệu cấu hình để giảm mức tiêu thụ bộ nhớ của nó không? Đây có phải là một trong những yếu tố gây ra vấn đề hiệu suất cho tình huống của tôi?

Ví dụ Magento hiện tại: Phiên bản = Magento EE 1.14.2.4;
Cấu hình bộ đệm trên; tắt bộ nhớ cache khác;
Sử dụng Mysql 5.6 và MongoDB (cho catalog_carget_entity, catalog_product_entity, core_website);
số lượng trang web = số lượng cửa hàng = số lượt xem = 1024;
số lượng sản phẩm = 4501;

Trước tiên xin cảm ơn tất cả các bạn!


2
Tại sao hỗ trợ magento không thể giúp bạn ???
MagenX

Làm thế nào để tôi nhận được sự giúp đỡ từ họ? Tôi mới tham gia cộng đồng .. cảm ơn!
Jack.W

1
bạn có phiên bản doanh nghiệp, không chắc chắn nơi bạn nhận được nó, nhưng nếu không có hỗ trợ magento đằng sau nó, chỉ lãng phí tiền bạc và thời gian. bạn cũng phải đánh chúng trong những quả bóng để khiến chúng chạy như những con thỏ giúp bạn. điểm có phiên bản doanh nghiệp là gì ???
MagenX

1
nhưng câu trả lời rõ ràng cho truy vấn của bạn là - các cửa hàng magento riêng biệt với cơ sở dữ liệu riêng biệt, như các đợt trên 10-20 cửa hàng ...
MagenX

À đúng rồi .. Tôi sẽ xin sếp cho tài khoản..haha.
Jack.W

Câu trả lời:


3

Một trong những lý do khiến nó bị chậm là vì cấu hình cho mỗi cửa hàng được sao chép từ / config / website và / config / global và mã để thực hiện điều đó không hiệu quả trong ít nhất. Bất kỳ thay đổi cài đặt nào cũng có thể gây ra vài phút, nếu không phải là hàng giờ, làm giảm hiệu suất và thông lượng. Làm cho nó hiệu quả hơn về cơ bản có nghĩa là Ben Marks sẽ đến sau bạn ... và không phải là một cách tốt.

NẾU bạn sẽ đi xuống tuyến đường này, cách dễ nhất là có 10k cài đặt Magento và có một loại nhà môi giới ủy thác các yêu cầu cho trang web thích hợp. Mặc dù vậy, tất nhiên, nó sẽ phụ thuộc vào trường hợp sử dụng thực tế của bạn là gì.

[thêm]

Tùy thuộc vào trường hợp sử dụng, bạn có thể sử dụng các danh mục làm cửa hàng giả. Về mặt kỹ thuật, bạn có thể sử dụng XML bố trí để thay đổi chủ đề cho mỗi cửa hàng. Nhưng sau đó bạn sẽ chạy vào giới hạn của thanh toán. Tất cả các cửa hàng sẽ cần phải chia sẻ kiểm tra.

Dù bằng cách nào, các cửa hàng Magento 10k là có thể, trong đó không phải là không thể. Nhưng nó sẽ là một con đường khó khăn cho dù bạn chọn con đường nào.


Xin chào Kevin, cảm ơn bạn đã trả lời! Có, tôi thấy mã cập nhật cây cấu hình, đó là loadToXml () nếu tôi không sai. Suy nghĩ của tôi là; và bạn nói nó không phải là một ý tưởng tốt để sửa đổi nó? Bạn có ý nghĩa gì bởi Ben Marks đến sau tôi? Ngoài ra, có vẻ như mỗi yêu cầu http đến Magento cuối cùng sẽ tải cây cấu hình, điều đó có đúng không? Bất cứ cách nào tôi có thể thu nhỏ kích thước của nó? Tôi có lẽ nên suy nghĩ về việc nhận 10k Magento phiên bản ... bất kỳ suy nghĩ nào về việc cần bao nhiêu tài nguyên? Cảm ơn Kevin rất nhiều!
Jack.W

Nhưng có cài đặt Magento 10k có nghĩa là 10k phiên bản mysql phải không? Tôi không biết làm thế nào để làm điều này, hoặc nếu đó là một ý tưởng tốt ..
Jack.W

1
Không, điều đó có nghĩa là có 10k cơ sở dữ liệu mysql, nhưng tất cả 10k trong số đó có thể nằm trong một phiên bản mysql duy nhất.
Christian

1
"Ben Marks" xuất hiện sau bạn là một tài liệu tham khảo cho camo.githubusercontent.com/
Kevin Schroeder

1
Cài đặt Magento 10k có nghĩa là 10k cơ sở dữ liệu MySQL, tuy nhiên điều đó sẽ được trải ra. Sẽ dễ dàng hơn để kịch bản triển khai 10k cài đặt Magento riêng lẻ hơn là làm cho mã lõi hiện có hoạt động với các cửa hàng 10k.
Kevin Schroeder

1

Bạn có thể thử hack lõi và cho phép chia tách bộ đệm trang web. Bạn có thể thử hack cơ sở dữ liệu và lưu trữ thông tin cấu hình trong bộ nhớ. Bạn có thể thử thay thế bộ đệm cấu hình bằng một cái gì đó thông minh hơn - giả sử bộ đệm thông tin từ các tệp xml [là tĩnh và áp dụng cho tất cả các trang web và cửa hàng] trong khi lấy dữ liệu ghi đè một cách linh hoạt.

Tôi là một người phục vụ, vì vậy tôi đi tìm cơ sở dữ liệu. Đặc biệt là vì nó là tầm thường để làm.

Nếu bạn có quyền kiểm soát máy chủ cơ sở dữ liệu của mình: Đổi tên bảng core_config_data thành core_config_data_offline Tạo bảng core_config_data mới bằng cách sử dụng công cụ lưu trữ MEMORY http://dev.mysql.com/doc/refman/5.7/en/memory-st Storage-engine.html Sao chép tất cả dữ liệu từ core_config_data_offline sang core_config_data

Thiết lập một công việc cron để kiểm tra xem core_config_data có tồn tại không, nếu nó sao chép tất cả dữ liệu từ đó sang core_config_data_offline. Nếu không, hãy tạo nó và sao chép mọi thứ từ core_config_data_offline sang core_config_data

Tắt bộ đệm cấu hình. Khi bộ đệm cấu hình được bật, bạn chỉ được tăng hiệu suất cho lần đầu tiên dữ liệu cấu hình được đọc từ cơ sở dữ liệu - sau đó nó nằm trong bộ đệm và bạn phải chịu đựng. Mặt khác, các tệp xml không còn được lưu trong bộ nhớ cache, do đó bạn đã đánh đổi điểm hiệu năng của việc hủy xác định dữ liệu cấu hình khổng lồ cho lần truy cập hiệu năng của việc phân tích một loạt các tệp xml.

Bạn cũng có thể muốn thử nghiệm thay đổi tệp Mage / Core / Model / Config.php và bật bộ đệm trang web riêng lẻ. Theo mặc định, mỗi cửa hàng dữ liệu cấu hình cụ thể được lưu trữ riêng lẻ. Tất cả dữ liệu cấu hình trang web được lưu trữ trong một đối tượng.

Lưu ý rằng điều này chỉ dành cho cấu hình ghi đè [cài đặt quản trị viên]. Vì vậy, nếu bạn thực hiện tất cả các thay đổi cấu hình của mình ở cấp cửa hàng mà bạn đã đặt. Nếu bạn sử dụng "kế thừa từ trang web" và làm cho hầu hết các thay đổi cấu hình cụ thể của cửa hàng của bạn ở cấp trang web - thì bộ đệm chứa mọi trang web. Bằng cách tách nó, bạn có thể phá vỡ nó tốt hơn nhiều. được bảo vệ $ _cacheSections = mảng ('admin' => 0, 'adminhtml' => 0, 'crontab' => 0, 'install' => 0, 'store' => 1, 'website' => 0);

đến

protected $_cacheSections = array(
    'admin'     => 0,
    'adminhtml' => 0,
    'crontab'   => 0,
    'install'   => 0,
    'stores'    => 1,
    'websites'  => 1
); 

Xin chào Gary, cảm ơn bạn đã trả lời hữu ích như vậy! Tôi có một số câu hỏi: 1) Từ quan sát của tôi, truy vấn cơ sở dữ liệu không phải là vấn đề, ngay cả với hơn 1k trang web / cửa hàng; Vì vậy, nếu đó là trường hợp, sử dụng bộ nhớ lưu trữ vẫn còn giúp đỡ? 2) Tôi không biết có đúng không, nhưng cấu hình bộ đệm dường như chỉ lưu trữ thông tin hệ thống và mô-đun; Vì vậy, nó có một cái gì đó để làm với cấu hình trang web / cửa hàng? 3) Có cách nào để magento nhận ra id cửa hàng / trang web cụ thể từ yêu cầu http và do đó chỉ tải tệp cấu hình tương ứng không? Cảm ơn Gary rất nhiều!
Jack.W

2
Những khuyến nghị này không giải quyết được vấn đề mà OP đã lưu ý. Tắt bộ đệm cấu hình cuối cùng sẽ giết hệ thống. Nó sẽ khiến Magento tải lên tất cả các tệp cấu hình, hợp nhất chúng, sau đó hợp nhất tất cả / toàn cầu sau đó hợp nhất tất cả / trang web và sau đó hợp nhất tất cả các tệp đó vào mỗi nút / cửa hàng. Điều đó sẽ xảy ra cho MACHI yêu cầu. Với các trang web 10k, bạn có thể xem số phút của đồng hồ treo tường cho mỗi yêu cầu .
Kevin Schroeder

Này Kevin, cảm ơn vì đã trả lời; Trên thực tế, tôi dự định chuyển bảng core_config_data vào bộ nhớ, kích hoạt bộ đệm cho cấu hình hệ thống và mô-đun, ngăn chặn core_config_data không được hợp nhất vào cây cấu hình và tạo các hàm đọc phần dữ liệu này truy vấn trực tiếp từ cơ sở dữ liệu. Bạn nghĩ sao?
Jack.W

1
Vấn đề không phải là core_config_data. Vấn đề là các cấu hình cửa hàng được hợp nhất từ ​​/ các trang web được hợp nhất từ ​​/ toàn cầu trong XML Cơ sở dữ liệu sẽ hoàn toàn tốt. Đó là PHP sẽ ghét cuộc sống vì cấu hình hợp nhất. Trong trình gỡ lỗi của bạn, bước qua Mage_Core_Model_Resource_Config :: loadToXml đặc biệt chú ý đến các dòng 110 và tiếp theo
Kevin Schroeder

1
Bây giờ để trở lại bảng bộ nhớ của tôi. Dữ liệu lưu trữ có nghĩa là lưu trữ nó ở một nơi nào đó có thể được truy cập nhanh chóng. Magento lưu trữ dữ liệu cấu hình vào một đối tượng được tuần tự hóa php - nếu dữ liệu cấu hình của bạn rất lớn, điều đó có nghĩa là PHP phải giải tuần tự hóa một lượng dữ liệu khổng lồ cho mỗi yêu cầu. Nếu bạn biết cách sử dụng xdebug, hãy cấu hình một số tải trang chậm hơn của bạn và xem thời gian dành cho việc chạy hàm unserialize: php.net/manual/en/feft.unserialize.php - nếu nó rất lớn [trên 100ms] "lưu trữ" cấu hình đang phá vỡ hệ thống của bạn.
Gary Mort
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.