복붙노트

[SPRING] AOP 사용의 성능 영향

SPRING

AOP 사용의 성능 영향

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

관리자는 이점을 완전히 이해하지만이 기술의 성능 영향에 대해 걱정합니다.

내 질문에 aop (특히 spring aop)을 사용하여 성능 문제가 발생 했습니까?

해결법

  1. ==============================

    1.당신이 AOP를 제어 할 수 있다면 그것이 효율적이라고 생각합니다. 우리는 어쨌든 성능 문제가있었습니다. 그래서 우리는 완전히 통제 할 수 없었습니다.) 이것은 측면을 작성하는 사람이 시스템의 다른 모든 측면에 대한 완전한 이해와 상호 연관성을 갖는 것이 중요하기 때문입니다. 당신이 "똑똑한"일을 시작하면 당신은 자신감이 뛰어나다. 시스템의 작은 부분 만 보는 많은 사람들이있는 대규모 프로젝트에서 현명한 일을하는 것은 성과 측면에서 매우 위험 할 수 있습니다. 이 충고는 아마도 AOP 없이도 적용될 수 있지만, AOP를 사용하면 아주 우아한 방식으로 발을 쏠 수 있습니다.

    당신이 AOP를 제어 할 수 있다면 그것이 효율적이라고 생각합니다. 우리는 어쨌든 성능 문제가있었습니다. 그래서 우리는 완전히 통제 할 수 없었습니다.) 이것은 측면을 작성하는 사람이 시스템의 다른 모든 측면에 대한 완전한 이해와 상호 연관성을 갖는 것이 중요하기 때문입니다. 당신이 "똑똑한"일을 시작하면 당신은 자신감이 뛰어나다. 시스템의 작은 부분 만 보는 많은 사람들이있는 대규모 프로젝트에서 현명한 일을하는 것은 성과 측면에서 매우 위험 할 수 있습니다. 이 충고는 아마도 AOP 없이도 적용될 수 있지만, AOP를 사용하면 아주 우아한 방식으로 발을 쏠 수 있습니다.

    Spring은 scope-manipulation을 위해 proxying을 사용하기 때문에 원하지 않는 성능 손실을 받기 쉽습니다.

    하지만 제어권이 주어지면 AOP의 유일한 고통은 디버깅에 미치는 영향입니다.

  2. ==============================

    2.성능이 문제가된다면, 우리는 AspectJ를 큰 효과로 사용했다.

    성능이 문제가된다면, 우리는 AspectJ를 큰 효과로 사용했다.

    Bytecode 짜기를 사용하기 때문에 (컴파일 시간 대 런타임은 꽤 차이가납니다), 가장 빠른 AOP 프레임 워크 중 하나입니다. 참조 : AOP 벤치 마크

  3. ==============================

    3.내가 그것을 사용했을 때, 나는하지 않았다 - 그러나 나의 신청은 당신의 신청이 아니다.

    내가 그것을 사용했을 때, 나는하지 않았다 - 그러나 나의 신청은 당신의 신청이 아니다.

    매우 긴밀한 루프에서 사용되는 호출에이 호출을 사용하면 상당한 성능 저하가 발생할 수 있습니다. 요청 당 보안을 한 번 확인하고 여러 가지를 캐시하는 데 방금 사용되는 경우 중요한 것으로 드러날 수는 없지만 앱을 프로파일 링하고 벤치마킹해야합니다.

    나는 "당신의 앱으로 측정"이 아마도 당신이 찾고있는 대답이 아니라는 것을 알고 있습니다. 그러나 그것은 아마도 당신이 얻을 것이라고 짐작했던 것일 수도 있습니다. :)

  4. ==============================

    4.프록시 기반 AOP를 사용하는 경우, aspect 당 적용되는 1 개의 추가 Java 메소드 호출에 대해 이야기하고 있습니다. 성능에 미치는 영향은 무시해도됩니다. 유일하게 진짜 관심사는 프록시의 생성이지만, 이는 대개 응용 프로그램 시작시 한 번 발생합니다. SpringSource 블로그에는 다음과 같은 훌륭한 게시물이 있습니다.

    프록시 기반 AOP를 사용하는 경우, aspect 당 적용되는 1 개의 추가 Java 메소드 호출에 대해 이야기하고 있습니다. 성능에 미치는 영향은 무시해도됩니다. 유일하게 진짜 관심사는 프록시의 생성이지만, 이는 대개 응용 프로그램 시작시 한 번 발생합니다. SpringSource 블로그에는 다음과 같은 훌륭한 게시물이 있습니다.

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

  5. ==============================

    5.이론적으로, AOP를 하드 커플 링으로 할 수있는 것에 사용한다면 아무런 직조를하지 않으면 성능 문제가없고 오버 헤드가없고 여분의 메소드 호출도 없습니다. AOP 프레임 워크는 하드 커플 링을 제거하고 교차 절단 문제를 해결할 수있는 방법을 제공합니다.

    이론적으로, AOP를 하드 커플 링으로 할 수있는 것에 사용한다면 아무런 직조를하지 않으면 성능 문제가없고 오버 헤드가없고 여분의 메소드 호출도 없습니다. AOP 프레임 워크는 하드 커플 링을 제거하고 교차 절단 문제를 해결할 수있는 방법을 제공합니다.

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

    더 자세한 내용은 aop-code-executed 때 참조 할 수 있습니다.

    횡단 코드는 복싱 / 언 박싱 및 반사 (성능면에서 비싼)를위한 유혹이기 때문에 조언을 구현하는 방법에주의하십시오.

    AOP 프레임 워크가 없으면 (cross-cutting concern을 강하게 결합 함) boxing / unboxing과 reflection을하지 않고도 (각 처리에 전용 된) 조언을 쉽게 개발할 수 있습니다.

    당신은 대부분의 AOP 프레임 워크가 완전히 boxing / unboxing과 reflection을 피하는 방법을 제공하지 않는다는 것을 알아야합니다.

    나는 실종 된 욕구의 대부분을 3 가지에 집중하도록 개발했다.

    내 오픈 소스 프로젝트를 찾을 수 있습니다 : Puresharp API .net 4.5.2+ 이전 NConcern .NET AOP 프레임 워크

  6. ==============================

    6.필요할 때 실시간으로 객체에 aspect를 추가하는 AOP 툴에 대해 생각 해본 적이 있습니까? 닷넷 "Dynamic Decorator를 사용하여 오브젝트에 애스펙트 추가하기"(http://www.codeproject.com/KB/architecture/aspectddecorator.aspx)를 참조하십시오. 나는 당신이 자바와 비슷한 것을 쓸 수 있다고 믿는다.

    필요할 때 실시간으로 객체에 aspect를 추가하는 AOP 툴에 대해 생각 해본 적이 있습니까? 닷넷 "Dynamic Decorator를 사용하여 오브젝트에 애스펙트 추가하기"(http://www.codeproject.com/KB/architecture/aspectddecorator.aspx)를 참조하십시오. 나는 당신이 자바와 비슷한 것을 쓸 수 있다고 믿는다.

  7. ==============================

    7.애스펙트에 대해 하나의 프레임 워크를 사용하는 경우 성능 문제가 발생할 수 있습니다. 다음으로 프레임 워크에서 애스펙트를 생성하고 aspect 처리를 프레임 워크에서 수행하면 성능 문제와 관련된 문제의 원인을 찾기가 매우 어렵습니다. 퍼포먼스와 작은 타임 슬라이스에 대한 걱정이 더 많다면, 나는 자신의 측면을 쓰는 것이 좋습니다. 휠을 재발 명하고 싶지는 않지만 언젠가는 더 좋을 수 있습니다. AOP 얼라이언스 추상화를 직접 작성할 수 있습니다.

    애스펙트에 대해 하나의 프레임 워크를 사용하는 경우 성능 문제가 발생할 수 있습니다. 다음으로 프레임 워크에서 애스펙트를 생성하고 aspect 처리를 프레임 워크에서 수행하면 성능 문제와 관련된 문제의 원인을 찾기가 매우 어렵습니다. 퍼포먼스와 작은 타임 슬라이스에 대한 걱정이 더 많다면, 나는 자신의 측면을 쓰는 것이 좋습니다. 휠을 재발 명하고 싶지는 않지만 언젠가는 더 좋을 수 있습니다. AOP 얼라이언스 추상화를 직접 작성할 수 있습니다.

  8. ==============================

    8.나는 Spring AOP를 현재 프로젝트의 배치 프로세스에서 사용하여 트랜잭션 관리를 수행했다.

    나는 Spring AOP를 현재 프로젝트의 배치 프로세스에서 사용하여 트랜잭션 관리를 수행했다.

    처음에는 성능 문제가 발생하지 않을 것이라고 생각했지만 데이터베이스를 수천 번 호출 한 방정식을 계산하지 않았습니다. aop의 한 측면 호출은 성능에 많은 영향을 미치지 않지만 수천을 곱하면 성능이 향상됩니다. 이러한 새로운 메소드 호출로 인해 새로운 시스템이 이전 시스템보다 더 나빴던 것으로 나타났습니다.

    나는 AOP가 사용하기에 훌륭한 시스템이라고 말하고 싶지만 애플리케이션에 얼마나 많은 메소드 호출이 추가되는지에 주목해야한다.

  9. from https://stackoverflow.com/questions/433475/performance-impact-of-using-aop by cc-by-sa and MIT license