몇 달 안에 학사 논문을 쓰기 시작할 것입니다. 제 논문의 주제를 매우 대략적으로 만 논의했지만 주요 문제는 다음과 같습니다.
C ++로 작성된 프로그램 (약간 HTTP- 서버이지만 여기서는 중요하지 않음)을 실행하여 작업을 수행해야합니다. 동시에 실행되는이 프로그램의 여러 인스턴스가 있으며로드 밸런서는 모든 인스턴스간에 http- 요청을 균등하게 분배합니다. 프로그램의 코드를 개선하거나 버그를 제거하기 위해 변경 될 때마다 모든 인스턴스를 다시 시작해야합니다. 한 인스턴스에 대해 최대 40 분이 걸릴 수 있습니다. 실행중인 인스턴스가 10 개 이상이므로 다시 시작 프로세스에 최대 하루가 걸릴 수 있습니다. 이것은 속도를 늦추는 방법입니다.
예상되는 병목 현상은 시작 중에 필요한 모든 데이터를로드하기 위해 데이터베이스에 액세스하는 것입니다 (mysql-database가 될 것으로 예상). 시작 프로세스에 필요한 시간을 줄이려는 팀 리더의 아이디어는 데이터베이스의 내용을 파일로 직렬화하고 데이터베이스에서 읽는 대신이 파일에서 읽는 것입니다. 그게 내 임무입니다. 물론 문제는 데이터베이스에 파일에없는 새 데이터가 있는지 확인하는 것입니다. 쓰기 프로세스는 직렬화 된 파일이 아닌 데이터베이스에 여전히 적용되는 것 같습니다. 내 첫 번째 아이디어는 직렬화 및 역 직렬화에 아파치 절약을 사용하는 것입니다. 이미 작업을 수행했으며 내가 아는 한 빠릅니다 (아마도 이것을 처리하기 위해 작은 파이썬 프로그램을 작성했을 것입니다). 그러나이 문제에 대한 몇 가지 기본적인 질문이 있습니다.
정보가 없으면 물어보십시오. 미리 감사드립니다. 논문을 시작하기 전에 잘 알고 준비하고 싶을뿐입니다. 이것이 제가 묻는 이유입니다.
종류 안부
남자 이름
캐시가 왕
일반적인 권장 사항 : 캐시가 왕이지만 파일을 사용하지 마십시오.
은닉처? 무슨 캐시?
제가 말하는 캐시는 물론 외부 캐시입니다. 사용 가능한 많은 시스템이 있으며, 많은 시스템이 여러 시스템의 RAM에 분산 된 캐시 된 항목으로 캐시 클러스터를 형성 할 수 있습니다. 현명하게 수행한다면, 메모리로 직렬화 / 역 직렬화하는 비용은 데이터베이스를 연마하는 비용에 비해 알고리즘을 빛나게 할 것입니다. 또한 캐시 된 데이터에 대한 TTL, 비즈니스 로직이 충돌하더라도 지속되는 캐시 등과 같은 멋진 기능을 얻을 수 있습니다.
일관성은 어떻습니까?
글을 쓰지 않고 읽기만하기 때문에 일관성을 신경 쓸 필요가 없죠?
잘못된. 문제는 누가 데이터베이스에 쓰는가 가 아닙니다 . 그것은 관한 여부 누군가 이런 일이 발생하는 빈도를 데이터베이스에 쓰기, 얼마나 최신의 데이터가 있어야합니다.
질문에서 계획 한대로 데이터를 파일에 캐시하더라도 원래 데이터 원본과 연결이 끊어진 중복 데이터 중복이 생성된다는 점을 알고 있어야합니다. 그래서 당신이 대답해야 할 진짜 질문은 (나는 당신을 위해 이것을 할 수 없습니다) 최적의 업데이트 빈도가 무엇이어야 하는가입니다. 가까운 시간에 즉각적인 업데이트가 필요합니까? 특정 시간 지연이 허용됩니까?
이것이 바로 캐시 된 데이터에 넣을 수있는 TTL (Time to Live) 값의 목적입니다. 더 자주 업데이트해야하는 경우 짧은 TTL을 설정하십시오. 느린 빈도로 업데이트해도 괜찮다면 그에 따라 TTL을 설정하거나 업데이트를 수행하는 예약 된 작업 / 스레드 / 프로세스를 실행하십시오.
알겠습니다. 이제 뭐?
Redis 또는 "oldtimer"Memcached를 확인하십시오 . 플랫폼에 대해 많이 언급하지는 않았지만 두 가지 모두에 사용할 수있는 Linux 및 Windows 버전이 있습니다 (특히 Windows에서는 Redis를 사용하면 훨씬 더 재미있을 것입니다).
추신 : 네, Thrift 직렬화는 직렬화 부분에 사용할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다