문제

우리는 응용 프로그램의 교차 절단 측면 (현재 보안 및 캐싱)을 위해 Spring AOP를 사용하기 시작했습니다.

저의 관리자는이 기술의 성능 영향에 대해 걱정합니다.

내 질문, AOP (특히 Spring AOP)를 사용하여 도입 된 성능 문제를 겪었습니까?

도움이 되었습니까?

해결책

당신만큼 통제권이 있습니다 당신의 AOP 중 나는 그것이 효율적이라고 생각합니다. 우리는 어쨌든 성과 문제가 있었기 때문에 자신의 추론으로 우리는 완전히 통제하지 못했습니다.) 이것은 대부분 측면을 작성하는 사람이 누구나 가지고있는 것이 중요하기 때문입니다. 가득한 모든 것에 대한 이해 다른 시스템의 측면과 그들이 어떻게 상호 관련되는지. "스마트"작업을 시작하면 지피에서 자신을 능가 할 수 있습니다. 시스템의 작은 부분 만 볼 수있는 많은 사람들과 함께 큰 프로젝트에서 현명한 일을하는 것은 성능이 매우 위험 할 수 있습니다. 이 조언은 아마도 AOP없이 적용되지만 AOP를 사용하면 진정한 우아한 방식으로 발에 자신을 쏘아 낼 수 있습니다.

Spring은 또한 범위 관리를위한 프록시를 사용합니다 그게 바람직하지 않은 성능 손실을 쉽게 얻을 수있는 영역.

그러나 통제력이 있다는 점을 감안할 때 AOP의 유일한 진정한 진통 점은 디버깅에 미치는 영향입니다.

다른 팁

성능이 우려되면 우리는 종자 큰 효과.

바이트 코드 직조 (컴파일 시간 대 런타임이 상당히 차이를 만듭니다)를 사용하기 때문에 가장 빠른 AOP 프레임 워크 중 하나입니다. 보다: AOP 벤치 마크

내가 그것을 사용했을 때, 나는하지 않았지만 내 응용 프로그램은 당신의 응용 프로그램이 아닙니다.

매우 단단한 루프에 사용되는 통화에 사용하는 경우 기회 상당한 성능을 얻으려면. 요청 당 한 번 보안을 확인하고 다양한 것들을 캐시하는 데 사용된다면, 그것이 어떻게 중요한지 알 수 없지만 프로필과 벤치 마크를해야합니다. 당신의 앱.

나는 "당신의 앱으로 측정"이 당신이 찾고 있던 대답이 아니라는 것을 알고 있지만, 그것은 당신이 얻는 사람 일 것입니다. :)

프록시 기반 AOP를 사용하는 경우 적용된 측면 당 1 개의 추가 Java 메소드 호출에 대해 이야기하고 있습니다. 성능 영향은 매우 무시할 수 있습니다. 유일한 관심사는 프록시의 생성이지만 일반적으로 응용 프로그램 시작에서 한 번만 발생합니다. Springsource 블로그에는 이것에 대한 훌륭한 게시물이 있습니다.

http://blog.springsource.com/2007/07/19/debunking-myths-proxies-mimpact-performance/

이론적으로, AOP를 사용하면 하드 커플 링으로 수행 할 수있는 작업을 수행하면 성능 문제, 오버 헤드 및 추가 메소드 호출이 없습니다. AOP 프레임 워크는 하드 커플 링을 제거하고 교차 절단 문제를 인수하는 방법을 제공합니다.

실제로 AOP 프레임 워크는 3 가지 유형의 오버 헤드를 소개 할 수 있습니다.

  • 화재 시간
  • 차단 역학
  • 소비자 통합 (조언 개발 방법)

자세한 내용은 참조하십시오 IS-AOP 코드가 실행될 때.

횡 방향 코드는 권투/무 복원 및 반사에 대한 유혹 (성능 측면에서 비싸다)이기 때문에 조언을 구현하는 방법에주의하십시오.

AOP 프레임 워크가 없으면 (교차 절단 문제를 결합) 권한이 없으면 추정 된 조언을 개발할 수 있으며 (각각의 치료를위한 전용) 권투/무 복원 및 반사없이 더 쉽게 개발할 수 있습니다.

대부분의 AOP 프레임 워크는 완전히 권투/개봉 및 반사를 피할 수있는 방법을 제공하지 않는다는 것을 알아야합니다.

나는 3 가지에 집중된 대부분의 누락 된 요구에 대응하기 위해 하나를 개발했습니다.

  • 사용자 친화적 (가볍고 배우기 쉬운)
  • 투명한 (포함 할 수있는 중단 코드 없음)
  • 효율적 (권투/개봉 없음, 공칭 사용자 코드의 반사 없음 및 우수한 차단 역학)

여기에서 내 오픈 소스 프로젝트를 찾을 수 있습니다. Puresharp API .NET 4.5.2+ 이전에 NCONCERN .NET AOP 프레임 워크

필요할 때 런타임에 객체에 측면을 추가하는 AOP 도구에 대해 생각해 본 적이 있습니까? .NET의 "동적 데코레이터를 사용하여 객체에 측면 추가"(http://www.codeproject.com/kb/architecture/aspectddecorator.aspx)가 있습니다. 나는 당신이 Java를 위해 비슷한 것을 쓸 수 있다고 생각합니다.

측면에 하나의 프레임 워크를 사용하는 경우 몇 가지 성능 문제가있을 수 있습니다 .next 하나의 프레임 워크 이상의 추상화를 생성하는 경우 프레임 워크에서 처리 된 측면 처리가 수행 된 경우 성능 문제와 관련된 문제의 원인을 찾기가 매우 어렵습니다. 성능과 소규모 시간 슬라이스 문제에 대해 더 많은 관심을 가지고 있다면, 자체 측면을 작성하는 것이 좋습니다.

현재 프로젝트의 배치 프로세스에서 Spring AOP를 사용하여 거래 관리 데이터베이스 관리를했습니다.

처음에는 성능 문제가 없을 것이라고 생각되었지만 데이터베이스를 수천 번이라고 불렀다는 방정식을 알아 내지 못했습니다. AOP의 한 가지 측면 호출은 성능에 큰 영향을 미치지 않지만 수천 개의 곱하기를 곱하며 새로운 시스템이 추가 메소드 호출로 인해 이전 시스템보다 더 나쁘다는 것이 밝혀졌습니다.

AOP는 사용하기에 좋은 시스템이라고 말하지만 응용 프로그램에 추가 된 메소드 호출 수에 유의하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top