1k에서 10k 웹 사이트 / 상점의 성능 문제


9

웹 사이트 / 상점의 수가 1k를 초과 할 때 Magento 성능을 향상시키는 방법을 찾으려고 노력하고 있으며 목표는 약 10k입니다. 다음은 몇 가지 질문입니다. 모든 팁 / 도움을 환영합니다!

  1. 새로운 웹 사이트 / 상점을 추가하는 것은 느립니다.
    Mage_Core_Model_Abstract의 _afterSave ()에서 $ this-> cleanModelCache ()를 주석 처리했으며 상황이 좋아 보이지만 웹 사이트 / 상점 수가 증가함에 따라 속도가 느려집니다. 그리고 이것이 앞으로 전체 시스템에 어떤 영향을 미칠지 모르겠습니다.

  2. API 호출이 느려집니다.
    주요 프로세스 중 하나는 주문을하는 것입니다. 내 맞춤형 모델은 일부 데이터를 처리하고 본질적으로 sales / quote 모델과 sales / service_quote 모델을 사용하여 처리합니다. 프로세스는 Oauth로 시작합니다. 웹 사이트 / 상점 수가 증가하면 Oauth 및 주문 순서가 더 오래 걸리고 메모리 소비가 더 커 보입니다. 이것은 구성 XML을로드하는 마법사와 관련이 있으며 웹 사이트 수가 증가함에 따라 구성 데이터가 커진다는 사실이 있습니까?

  3. n98-magerun dev : console을 여는 데 시간이 오래 걸립니다. 그 원인을 모릅니다.

  4. 관리자 패널에서 구성을 저장하면 시간이 더 걸립니다. 그것을 개선하는 방법을 모른다.

Magento가 구성 데이터를 생성하고로드하는 방식을 재구성하여 메모리 소비를 줄일 수 있습니까? 이것이 내 상황에서 성능 문제를 일으키는 요인 중 하나입니까?

현재 마 젠토 인스턴스 : Version = Magento EE 1.14.2.4;
캐시 설정; 다른 캐시 오프;
Mysql 5.6 및 MongoDB 사용 (catalog_category_entity, catalog_product_entity, core_website);
웹 사이트 수 = 상점 수 = 조회수 = 1024;
제품 수 = 4501;

미리 감사합니다!


2
왜 마 젠토 지원이 도움이되지 않습니까 ???
MagenX

그들로부터 도움을 받으려면 어떻게해야합니까? 나는 지역 사회에 새로운입니다 .. 감사합니다!
Jack.W

1
엔터프라이즈 버전이 있지만 어디에서 구할 수 있는지 확실하지 않지만 그 뒤에 마 젠토가 지원되지 않으면 돈과 시간을 낭비하는 것입니다. 당신은 그들이 당신을 돕는 토끼처럼 실행되도록 공에 그들을 칠해야합니다. 엔터프라이즈 버전의 요점은 무엇입니까 ???
MagenX 2016 년

1
그러나 귀하의 질문에 대한 명백한 대답은 10-20 상점 당 배치와 같은 별도의 데이터베이스가있는 별도의
마 젠토

아 맞아 .. 상사에게 계정을 물어 볼게요.
Jack.W

답변:


3

속도가 느려지는 이유 중 하나는 각 저장소의 구성이 / config / websites 및 / config / global에서 복제되고이를 수행하는 코드가 최소한 효율적이지 않기 때문입니다. 설정 변경으로 인해 몇 시간이 아니라도 수십 분 동안 성능 및 처리량이 감소 할 수 있습니다. 보다 효율적으로 만드는 것은 기본적으로 Ben Marks가 당신을 뒤따를 것입니다.

이 경로를 사용하려는 경우 가장 쉬운 방법은 10k Magento를 설치하고 적절한 웹 사이트에 요청을 위임하는 일종의 브로커를 사용하는 것입니다. 물론 실제 사용 사례에 따라 다릅니다.

[추가]

유스 케이스에 따라 카테고리를 의사 저장소로 사용할 수 있습니다. 그런 다음 기술적으로 레이아웃 XML을 사용하여 상점 당 테마를 변경할 수 있습니다. 그러나 당신은 체크 아웃의 한계에 부딪 칠 것입니다. 모든 상점은 체크 아웃을 공유해야합니다.

어느 쪽이든, 10k 마 젠토 매장은 불가능하지 않다는 점에서 가능합니다. 그러나 어떤 길을 선택하든 어려운 길이 될 것입니다.


케빈 안녕하세요, 답장을 보내 주셔서 감사합니다! 예, 구성 트리를 업데이트하는 코드, 즉 내가 잘못하지 않은 경우 loadToXml ()입니다. 내 생각은 그리고 당신은 그것을 수정하는 것이 좋지 않다고 말했습니까? Ben Marks가 저를 뒤따른다는 것은 무슨 뜻입니까? 또한 Magento에 오는 각 http 요청은 결국 구성 트리를로드 할 것 같습니다. 정확합니까? 크기를 줄일 수있는 방법이 있습니까? 아마 10k Magento 인스턴스를 얻는 것에 대해 생각해야 할 것입니다 ... 얼마나 많은 리소스가 필요할지 생각하십니까? 케빈 감사합니다!
Jack.W

그러나 10k Magento 설치가 10k mysql 인스턴스를 의미합니까? 이 작업을 수행하는 방법이나 좋은 아이디어인지 잘
모르겠습니다

1
아니요, 10k mysql 데이터베이스가 있다는 것을 의미하지만 10k 데이터베이스는 모두 단일 mysql 인스턴스에있을 수 있습니다.
Christian

1
후 나오는 "벤 마크는"이에 대한 참조입니다 camo.githubusercontent.com/...
케빈 슈뢰더

1
10k Magento 설치는 10k MySQL 데이터베이스를 의미하지만 그 데이터베이스는 널리 퍼져 있습니다. 기존 핵심 코드를 10k 상점에서 작동시키는 것보다 10k 개별 Magento 설치를 배포하는 스크립트를 작성하는 것이 훨씬 쉽습니다.
Kevin Schroeder

1

코어를 해킹하고 웹 사이트 캐시 분할을 활성화 할 수 있습니다. 데이터베이스를 해킹하고 구성 정보를 메모리에 저장할 수 있습니다. 재정의 데이터를 동적으로 검색하면서 xml 파일 (정적이며 모든 웹 사이트 및 저장소에 적용됨)의 정보를 캐싱하는 등 구성 캐시를보다 스마트 한 것으로 교체해 볼 수 있습니다.

나는 서버 녀석이므로 데이터베이스와 함께 뭉칠 것입니다. 특히 사소하기 때문에.

데이터베이스 서버를 제어 할 수있는 경우 : core_config_data 테이블의 이름을 core_config_data_offline으로 변경하십시오. MEMORY 스토리지 엔진 http://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html을 사용하여 새 core_config_data 테이블을 작성 하십시오. core_config_data_offline에서 core_config_data로 모든 데이터를 복사하십시오.

모든 데이터를 거기에서 core_config_data_offline으로 복사하는 경우 core_config_data가 존재하는지 확인하도록 cron 작업을 설정하십시오. 그렇지 않은 경우이를 작성하고 core_config_data_offline에서 core_config_data로 모든 항목을 복사하십시오.

구성 캐시를 끄십시오. 구성 캐시를 켜면 데이터베이스에서 구성 데이터를 처음으로 읽은 후에 만 ​​성능이 향상됩니다. 그 후에는 캐시에 있고 문제가 발생합니다. 단점은 xml 파일이 더 이상 캐시되지 않기 때문에 많은 XML 파일을 구문 분석하는 성능 적중에 대해 대규모 구성 데이터를 직렬화 해제하는 성능 적중을 교환 한 것입니다.

Mage / Core / Model / Config.php 파일 변경을 실험하고 개별 웹 사이트 캐시를 활성화 할 수도 있습니다. 기본적으로 각 상점 특정 구성 데이터는 개별적으로 캐시됩니다. 모든 웹 사이트 구성 데이터는 하나의 개체에 캐시됩니다.

이는 구성 재정의를위한 것입니다 [관리자 설정]. 따라서 상점 레벨에서 모든 구성 변경을 수행하면 이미 설정되어 있습니다. "웹 사이트에서 상속"을 사용하고 사이트 레벨에서 대부분의 상점 특정 구성을 변경하는 경우 캐시에는 모든 웹 사이트가 포함됩니다. 그것을 나누면 훨씬 더 나아질 수 있습니다. protected $ _cacheSections = array ( 'admin'=> 0, 'adminhtml'=> 0, 'crontab'=> 0, 'install'=> 0, 'stores'=> 1, 'websites'=> 0);

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

개리 안녕하세요, 도움이 되신 답변에 감사드립니다! 몇 가지 질문이 있습니다. 1) 1k 이상의 웹 사이트 / 상점에서도 데이터베이스 쿼리는 문제가되지 않습니다. 그렇다면 메모리 저장소를 사용하는 것이 여전히 도움이됩니까? 2) 올바른지 모르겠지만 구성 캐시는 시스템 및 모듈 정보 만 저장하는 것 같습니다. 웹 사이트 / 상점 구성과 관련이 있습니까? 3) magento가 http 요청에서 특정 상점 / 웹 사이트 ID를 인식하여 해당 구성 파일 만로드하는 방법이 있습니까? 게리 감사합니다!
Jack.W

2
이러한 권장 사항은 OP가 지적한 문제를 해결하지 못합니다. 구성 캐시를 끄면 결국 시스템이 종료됩니다. Magento가 모든 구성 파일을로드하고 병합 한 다음 모든 / global을 병합 한 다음 모든 / websites를 병합 한 다음 모든 / stores 노드로 병합합니다. 각 요청마다 발생합니다. 10k 사이트를 사용하면 요청 당 벽시계 시간을 몇 분 확인할 수 있습니다 .
케빈 슈뢰더

케빈, 답장을 보내 주셔서 감사합니다. 실제로 core_config_data 테이블을 메모리로 옮기고 시스템 및 모듈 구성을위한 캐시를 활성화하고 core_config_data가 구성 트리로 병합되는 것을 중지하고이 데이터의 일부를 읽는 함수를 데이터베이스에서 직접 쿼리 할 계획입니다. 어떻게 생각해?
Jack.W

1
문제는 core_config_data가 아닙니다. 문제는 저장소 구성이 XML의 / global에서 병합 된 / websites에서 병합된다는 것입니다. 데이터베이스는 완벽합니다. 구성 병합으로 인해 생명을 싫어하는 것은 PHP입니다. Mage_Core_Model_Resource_Config를 통해 디버거 단계 : loadToXml 라인 (110)에 특별한주의를 지불하고 다음
케빈 슈뢰더

1
이제 내 기억 테이블로 돌아와 데이터 캐싱은 빠르게 액세스 할 수있는 곳에 저장하는 것을 의미합니다. Magento는 구성 데이터를 PHP 직렬 객체로 캐시합니다. 구성 데이터가 크면 PHP는 모든 요청에 ​​대해 대량의 데이터를 역 직렬화해야합니다. 당신이 Xdebug는 사용하는 방법을 알고있는 경우 때 unserialize 기능을 실행하는 동안 얼마나 많은 시간에 느린 페이지가로드 모습의 일부를 프로필 : php.net/manual/en/function.unserialize.php를 - 그 다음 [이 100ms 이상] 거대 경우 구성을 "캐싱"하면 시스템이 손상됩니다.
게리 모트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.