MariaDB Galera Cluster와 함께 사용할 경우 PHPUnit 테스트가 랜덤으로 실패함(읽기/쓰기 사용자)
MariaDB Galera Cluster에 대해 실행되는 Laravel(Lumen 5.2) 프로젝트가 있습니다.앱을 실행하면 정상적으로 동작하는 것 같습니다.그러나 PHPUnit 테스트를 실행하면 랜덤으로 실패합니다.
문제는 데이터베이스를 채우고 데이터(ID)를 가져와 다른 테이블에 외부 키를 채우는 것입니다.그러나 그 직후에 데이터를 취득하려고 하면, 데이터는 무효가 됩니다.
Laravel 데이터베이스 연결은 READ 사용자 및 WRITE 사용자와 함께 사용됩니다(Laravel은 삽입 또는 읽을 때 자동으로 올바른 연결을 사용합니다).그리고 나는 이것이 어떻게든 문제라고 생각한다.WRITE 사용자만 사용하면 테스트는 정상적으로 작동합니다.
SET SESSION wsrep_sync_wait = 1;
이 되기 전에SELECT글쓰기가 따라잡혔다는 것을 보증합니다.
Galera는 "동기식"이지만, 그렇지 않습니다.쓰기는 다른 모든 노드에 전송되며 해당 노드에서 작동합니다.단, "중요한" 판독의 경우SELECT수신자 노드에 너무 빨리 도달하여 쓰기가 인식되지 않을 수 있습니다.위의 설정으로 그 문제가 해결됩니다.
이제 Galera를 커버에 가린 웹 사이트를 어떻게 구현해야 하는지 확인해 보겠습니다.
- 트랜잭션 등 실용적인 경우 동일한 노드에 대해 모든 명령을 수행합니다.벌칙은 없습니다.단, 다음 오류가 없는지 확인합니다.
COMMIT. - 새 HTTP 연결에서 새 웹 페이지를 시작하는 것과 같이 실용적이지 않은 경우 - 다음을 사용합니다.
SET.
잠재적인 경우, 에 약간의 지연이 있을 수 있습니다.SELECT복제를 대기하는 경우 지연은 보통 0에 매우 가깝습니다.나는 당신의 테스트가 효과적으로 스트레스 테스트라고 제안하고 싶다. 대기시간이 길다고 속일 것이다.즉, 벤치마크는 보통 '표준'이 아닌 '최악'을 찾기 위해 설계되었습니다.
쓰기와 실패 사이에 얼마나 지연이 얼마나 됩니까?SELECT아마 1ms 정도일 거예요'사용자'가 '블로그'를 게시한 후 다음 페이지로 이동하여 '누락'을 찾을 수 있는 속도는 얼마나 됩니까?아마 100밀리초 이상일 겁니다.
당신의 스트레스 테스트에 의해,SET갈레라가 '부러졌다'는 게 아니라
언급URL : https://stackoverflow.com/questions/36735874/phpunit-tests-fails-randomly-when-used-with-mariadb-galera-cluster-read-write-u
'programing' 카테고리의 다른 글
| __asm____volatile__는 C에서 무엇을 합니까? (0) | 2022.10.22 |
|---|---|
| 어레이에 여러 요소가 있는지 확인하는 더 좋은 방법은 무엇입니까? (0) | 2022.10.21 |
| Linux에서 rand()가 Mac보다 훨씬 더 자주 숫자를 반복하는 이유는 무엇입니까? (0) | 2022.10.21 |
| Java 8에서 비교기 반전 (0) | 2022.10.21 |
| MYSQL에서 SQL을 사용하여 두 날짜 시간 값에서 빼서 몇 분 또는 몇 초 안에 결과를 가져오려면 어떻게 해야 합니까? (0) | 2022.10.21 |