본문 바로가기

쓸모 있는 제품

Ehcache - A Java Distributed Cache

원제 : Ehcache - A Java Distributed Cache

번역 : Ehcache - A Java Distributed Cache

Ehcache 는 다음 기능을 제공하는 순수 자바 캐시입니다: 빠르고, 단순하고, 작은 foot print, 적은 의존성, 기가바이트 확장을 위한 메모리와 디스크 저장 지원, 수백개의 캐시로의 확장은 Hibernate를 위한 플러그 캐시이며, 커다란 다중 CPU 서버에서 높은 동시 로드를 조정하며, LRU, LFU, FIFO 캐시 제거 규칙을 제공하며, 그리고 테스트된 제품입니다. Ehcache은 사용자 프로파일을 캐시하기 위해 LinkedIn이 사용합니다. 사용자 지침서는 퍼시스턴트 객체 관계 캐싱보다 2.5정도 빠르며, 웹 페이지 캐싱은 1000 배정도 빠르며, 웹 페이지 조각 캐싱은 1.6배 정도 빠르다고 알려줍니다.

웹 사이트에서:


http://ehcache.org/documentation/introduction.html

Introduction

Ehcache 는 캐시 라이브러리입니다. ehcache를 사용하기 전에,  한 걸음 물러나 일반적으로 캐싱에 대해서 생각해보는 것이 가치있습니다.

About Caches

Wiktionary 는 미래에 요구받고 매우 빠르게 조회할 수 있는 저장하는 것으로 캐시를 정의합니다. 이게 바로 캐시의 요점입니다.

전산학 관점으로, 캐시는 어디에나 위치하는 데이터를 복제하거나 계산 결과인 임시 데이터의 모음입니다. 한번 캐시에 들어가면, 데이터는 반복적으로 비용이 거의 들지 않게 접근가능합니다.

Why caching works

Locality of Reference

Ehcache가 자바 객체에 관여하게 되면, 캐싱은 CPU 캐시부터 DNS 시스템까지 컴퓨팅 전반에 사용됩니다. 왜냐고요? 많은 컴퓨터 시스템은 참조의 지역성(locality of reference)을 보입니다. 인접하거나 방금 사용된 데이터는 다시 사용되는 경향이 있습니다. 

The Long Tail

Wired Magazine의 Chris Anderson은 경제 시스템과 관련이 있는 The Long Tail 이라는 단어를 만들었습니다. 아이템의 작은 판매 숫자가 큰 규모의 판매를 만들고, 블로그의 작은 방문수가 대부분의 방문수를 만든다는 것입니다. 인기이있는 아이템의 적은 리스트가 있을 때, 덜 인기있는 아이템의 long tail이 있습니다.(Chris Anderson, of Wired Magazine, coined the term The Long Tail to refer to Ecommerce systems. The idea that a small number of items may make up the bulk of sales, a small number of blogs might get the most hits and so on. While there is a small list of popular items, there is a long tail of less popular ones.)(아무래도 번역이 매끄럽지 못해서)

The Long Tail

Long Tail 은 거듭 제곱 분산(Power Law probability distribution)을 위한 양식 용어입니다. 전자상거래뿐 아니라 자연에도 나타압니다.  거듭 제곱 분산은 파레토 분산인데, 80:20 법칙으로 잘 알렺 있습니다.

이 현상은 캐싱에 유용합니다. 객체의 20%가 80%의 시간에 사용되고 이 20%를 얻기 위한 비용을 줄이는 비용을 발견하다면, 시스템의 성능이 향상됩니다.

Will an Application Benefit from Caching?

짧은 답변은 자주 캐시를 사용하는 것은, 위에 설명한 효과때문입니다.

중간 답변은 응용프로그램이 CPU한계나 I/O 한계에 자주 의존하기 때문입니다.응용프로그램이 I/O 한계를 가지면 계산을 완료하는데 걸리는 시간은 원칙적으로 데이터를 얻는 비율에 의존하게 됩니다. CPU 한계를 가지면, 걸기는 시간은 원칙적으로 CPU와 main memory에 의존하게 됩니다.

캐싱에 집중하는 것은 성능 향상에 대한 것인데, 부하를 감소시키는 것 또한 가치있습니다. 계산하는데 걸리는 시간은 보통 비용과 관련있습니다. 그래서, 캐싱은 자주 부족한 자원에 대한 로드를 감소시킵니다.

Speeding up CPU bound Applications

CPU 한계를 가지는 응용프로그램은 다음 같은 방법으로 속도를 향상시킵니다:

  • 알고리즘의 성능을 개선합니다.
  • 다중 CPU(SMP)나 다중 장비(클러스터)를 통해 계산을 병렬화홥니다.
  • CPU 속도를 올립니다.

    캐싱의 역할은, 하나가 있다면, 다시 사용할지 모르는 계산을 임시로 저장하는 것입니다.

    Ehcache의 예제는 높은 랜더링 비용이 드는 큰 웹 페이지입니다. 또 다른 예제는 인증 상태의 캐싱인데, 인증은 암호변환을 필요로 합니다.

Speeding up I/O bound Applications

많은 응용프로그램은 I/O 한계를 가지는데, 디스크나 네트워크 동작에서 발생합니다. 데이터베이스 경우에는 둘 다에 의해 제한될 수 있습니다.

하드디스크에는 무어의 법칙이 없습니다. 만 RPM 디스크는 10년전에 빨랐지만 지금도 여전히 빠릅니다. 하드 디스크는 자체의 메모리로의 블럭 캐싱을 사용하여 속도를 향상시킵니다.

네트워크 동작은 몇 가지 요소로 한계를 가집니다:

  • time to set up and tear down connections
  • latency, or the minimum round trip time
  • throughput limits
  • marshalling and unmarhshalling overhead

    데이터의 캐싱은 때때로 I/O 한계를 가지는 응용프로그램을 많이 도울 수 있습니다. Ehcache의 몇 가지 예제입니다:

  • Data Access Object caching for Hibernate
  • Web page caching, for pages generated from databases.

Increased Application Scalability

향상된 성능의 다른 측면은 늘어난 확장성입니다. 초당 100개의 비싼 질의를 할 수 있는 데이터베이스가 있다고 합시다. 데이터베이스를 백업하고 연결이 추가되었는데, 천천히 죽어갑니다.

이 경우에, 캐싱은 요구된 작업부하를 감소시킬 수 잇씁니다. 캐싱이 100개 중 90개를 캐시 적중하고 데이터베이스에 가지 않는다면, 데이터베이스는 10배 정도 확장될 수 있습니다.

How much will an application speed up with Caching?

The short answer

짧은 답변은 많은 요소에 의존합니다::

  • 얼마나 많이 데이터 부분을 캐시할 수 있으며 응용프로그램이 재사용할 수있는가입니다
  • 캐싱으로 완화하는 응답시간의 비율

    I/O 한계를 가지는 응용프로그램에서, 대부분의 응용프로그램인데, 대부분의 응답시간은 데이터베이에서 데이터를 얻는 시간입니다. 따라서 속도 향상은 대부분은 얼마나 얻어온 데이터들을 재사용하는가에 따릅니다.

    데이터의 모든 조각은 단지 한번만 사용하는 시트메은 0입니다. 데이터를 매우 많이 재사용하면 속도향상은 매우 큽니다.

긴 답변은, 불행하게, 복잡하고 수학적입니다. 긴 답변은 다음에 깊이 생각해봅니다.


Related Articles

 

  • Caching Category on High Scalability
  • Product: Memcached
  • Manage a Cache System with EHCache