14

우리는 nhibernate와 2 차 수준 캐시를 사용하는 웹 사이트를 가지고 있습니다. 우리는 다중 웹 서버 환경 (로드 밸런서가 앞에 있음)으로 이동하면서 한 사람이 두 번째 레벨 캐시를 끄기를 원할 때 토론을하고 있습니다.분산 된 2 차 수준 캐시와 찬성 데이터베이스는 튜닝 데이터베이스에 초점을 맞추고 있습니다

두 번째 레벨 캐시를 없애고 Db 최적화 및 조정에 중점을 두는 것이 하나의 인수입니다. 다른 인수는 분산 캐시를 두 번째 레벨 캐시로 롤아웃하는 것입니다. 나는 사람들이 프로와 여기에 DB의 죄수 당신이 분산 캐시를 사용할 필요가로드 밸런싱 시나리오의 경우

답변

13

분산 캐시 (참여 노력 인수, 비용, 복잡성 등) 대 조정 듣고 궁금

공급자가 최상의 성능과 일관성을 얻으려면 데이터베이스 최적화와 아무런 관련이 없습니다. 어떤 시나리오에서든 데이터베이스를 최적화해야합니다.

5

두 단어 : 측정하십시오.

이미 캐시를 구현 했으므로 벤치 마크 목적으로 캐시를 끄는 것이 무엇인지 측정 할 수 있습니다.

2

매우 어려운 주제입니다. 두 경우 모두 숙련이 필요합니다. 아주 능숙한 DBA이거나, 능숙한 NHibernate/Cache 관리자.

저는 개인적으로 SQL을 완벽하게 제어하고 데이터베이스를 조정하는 것을 선호합니다. 여러 개의 웹 서버 (여러 개의 데이터베이스 인스턴스가 반드시 필요한 것은 아님) 만 있으면되므로 그렇게하는 것이 나을 것입니다. 현대 데이터베이스는 매우 효율적인 캐시를 가지고 있기 때문에 일반적으로 SQL 문, 커서, 데이터, 버퍼 등을 데이터베이스 캐시에 저장하는 것보다 애플리케이션에 잘못 구성된 두 번째 수준 캐시를 사용하면 더 많은 피해를 입힐 수 있습니다. 약 15 개의 웹 로직 서버와 많은 메모리를 가진 단 하나의 데이터베이스에 대해서.

NHibernate를 이미 가지고 있기 때문에, SQL에서 다시 LINQ로 옮겨가는 것은 꽤 많은 비용이 드는 작업입니다. 그만한 가치는 없습니다.

8

둘 다. 초기 호출을 신속하게 반환 할 수 있도록 데이터베이스 및 튜닝 된 데이터베이스에 불필요한 호출을 방지하려면 분산 캐시가 있어야합니다. 예를 들어, 페이스 북은 상당한 양의 캐싱을 필요로했지만 초기 쿼리에 10 분이 걸린다면별로 좋지 않을 것이라고 확신합니다. :)

5

나는 다중 웹 서버와 분산 된 2 차 수준의 캐시가 가능할 것이라고 생각한다 - 그리고 아마도 공존해야한다.

우선 memcached 예제를 사용하면 분산 객체 저장을 지원하므로 사용하지 않는 경우 전환 할 수 있습니다. 그것은 작동합니다.

두 번째로 증가하는 웹 요청에 응답하기 위해 웹 서버 팜을 도입하고 있으며 이는 데이터 요청 증가를 의미합니다. 캐싱을 중단해도 쿼리를 통해 스 래싱 할 데이터베이스를 얼마나 최적화했는지는 중요하지 않습니다. 따라서 실행 시간은 향상되지만 데이터베이스가 데이터를 반환 할 때까지 기다릴 것입니다.

특히 웹 노드 1이 데이터 집합 A를 요청하고 웹 노드 2가 데이터 집합 A를 요청하는 경우 - 두 번째 수준의 캐싱을 사용하면 두 번 동일한 쿼리를 수행하지만 한 번만 수행합니다.

그래서 내 추천 :

이 두 번째 레벨 캐시를 죽이지 마십시오. 이미 구현을 위해 리소스를 사용했으며 비활성화하면 애플리케이션의 성능을 향상시키지 않습니다. memcached의 단일 노드조차 전혀없는 것보다 더 빠를 것입니다.

데이터베이스 작업을 최적화하십시오. 즉, 데이터베이스 측면 (인덱스, 뷰, SP, 기능, 읽기 전용 및 쓰기 전용 노드가있는 클러스터)과 응용 프로그램 측면 (쿼리 최적화, 지연/열망 로딩 프로파일 링, 데이터를 가져 오지 않음) Future, MutliQuery, MultiCriteria를 통해 단일 쿼리로 여러 쿼리를 결합해야 함)

Do 두 번째 수준 캐시 구현을 최적화하십시오. 만료 날짜가 무한한 데이터 집합이 있으므로 한 번만 쿼리하고 만료 날짜가 짧은 데이터 집합이 있으므로 비용이 많이 드는 쿼리가 더 자주 실행됩니다. 쿼리와 db를 최적화하면 쿼리의 성능이 향상되지만 2 차 수준 캐시는 짧은 만료 날짜 데이터 집합 일 때 캐시에서 더 자주 가져 오는 최대로드시 스킨을 저장합니다.

텍스트 쿼리를 사용하는 것은 일상적인 작업이 더 나은, (NHibernate.Search를 통해 NHibernate에 통합 할 수 있습니다) Lucene.NET 같은 독립적 인 서비스를 우리가 사용하는

1

를 사용하여 데이터베이스의 전체 텍스트 기능을 사용하거나 경우 큰 성공을 거둔 Microsoft AppFabric 분산 캐시 프레임 워크 (NHibernate Velocity Provider)를 사용하는 다중 서버 환경에서 NHibernate의 2 차 수준 캐시. 두 번째 레벨 캐시를 사용하면 예상치 못한 결과를 막기 위해 프레임 워크를 더 깊이 이해해야합니다. 또한 분산 캐시를 사용하기 전에 오버 헤드를 측정하는 것이 중요합니다.

내 대답은 기본적으로 - 2 차 수준 캐시를 사용하기 전에 실제로 테스트해야하며 실제로 필요한지 확인해야합니다.

+0

걱정할 몇 가지 문제점이나 문제점을 강조 표시 할 수 있습니까? 또한 측정에 사용 된 최상의 측정 항목은 무엇입니까 ?? – leora

관련 문제