2010-08-04 4 views
1

그런 방식으로 자식을 사용하고 있습니까?피어 투 피어 콘텐츠 배포 네트워크에 대한 Git

멀티미디어 콘텐츠를 서버에서 일부 Android remote devices으로 배포하고 싶습니다. 나는 그들에게 장치 사용 통계가있는 로그 파일을 보내고 싶습니다. (필자가 쓰는 안드로이드 앱에서 제공합니다.)

서버는 아무것도 될 수는 없지만 나는 리눅스 박스를 선호한다.

나는 git 핸들과 sych 파일 간의 차이점만으로이 목적을위한 훌륭한 도구가 될 것이라고 생각했으며, 컨텐츠 개정 내역을 보너스로 사용할 것이라고 생각했습니다.

저장소 아키텍처를 구성하는 방법에 대한 조언이 필요합니다. 별 토폴로지 또는 다른 것이 있어야합니까?

시스템의 원격 끝은 상호 작용이 필요하지 않습니다. 즉, 원격 자식 저장소는 필요한 모든 것을 자동으로 자동으로 가져올 수 있습니다.

UPDATE : 내가 자식 내부의 SO 저자 (나는 지금 그것을 다운로드하는거야)에 here을 발견했습니다, 내가 구현하고자하는 아키텍처에 대해 이야기 스콧 차콘.

업데이트 2 : 저자는 CDN 피어 투 피어에 대한 말씀입니다 내가 여기에 "비 SCM이 망할 놈의 사용"약 장을 읽어 OK : 당신은 새로운 내용을 [가야

을 ...] 은 xml 파일, 이미지, 애니메이션, 텍스트 및 소리의 조합으로 구성됩니다. 배포 프레임 워크를 구축해야합니다. 은 네트워크의 머신에 필요한 모든 컨텐츠를 으로 쉽고 효율적으로 전송해야합니다. 당신은 지속적으로 각 기계가 무슨 내용을 결정하고 그것이 무엇 을 가지고 효율적으로 로 차이를 전송해야 해야합니다. [...] 이 망할 놈의이 문제에 대한 훌륭한 해결책이 밝혀졌습니다.

그 안에 책의 일부는 언급하지 않았으므로 저작권을 침해하지 않기 바랍니다. 어쨌든 나는 누군가가 불평하면 그것을 삭제할 것이다.

+0

git을 해킹하여 원하는대로 만들 수는 있지만이 기능이 콘텐츠 배포 시스템으로 설계된 프로그램에 비해 어떤 이점이 있는지 분명하지 않습니다. – masonk

+0

클라이언트에 대한 이점 : 실제로 필요한 것만 가져옵니다. 개체의 무결성을 확인합니다. 물건을 가져 오지 마십시오. 이미 다른 이름으로되어 있습니다. 중단 된 다운로드를 다시 시작하십시오 (http). 잘 저울. – microspino

+0

다시 말하지만 rsync, unison 또는 수백 가지 다른 특수 목적의 컨텐츠 배포 시스템과 같은 프로그램에 비해 장점은 없습니다. – masonk

답변

1

이전 작업에서 우리는 Git을 정확히 사용했기 때문에 미디어 자산이 자주 변경되지 않았기 때문에 우리가 사용하는 것이 무엇이든 어쨌든 전체 파일을 보내야했습니다 - 따라서, 다른 컨텐트 배포 도구와 관련한 문제이기는하지만 이진 분리 문제는 중요하지 않습니다.

rsync의 주요 장점은 (아마도 한 번도 사용해 본 적이 없지만) 내가 색인을 사용하여 콘텐츠 트리를 만들고 Git에 모든 것을 가지지 않고 클라이언트별로 지점에 트리를 저장할 수 있다는 것입니다 디스크에 rsync를 실행합니다. 콘텐츠에 여러 가지 변형이있는 경우 각 클라이언트가 필요로하는 고유 한 콘텐츠 트리를 기록 할 수 있으며 (수천 가지 조합을 가질 수 있음) 간단한 푸시 명령을 사용하여 필요한 내용 만 가져 와서 클라이언트에서 업데이트하십시오 . 그것이 rsync 대신에 Git을 선택하는 이유입니다. 모든 클라이언트가 똑같은 데이터 세트를 필요로한다면 rsync가 더 쉬울 것입니다. 그러나 Git에 대한 또 다른 좋은 점은 모든 클라이언트에 대해 언제 그리고 어떻게 변경되었는지에 대한 정보를 각 클라이언트에서 얻는 것입니다.

우리는 또한 로그 파일을 기록하는 데 사용했습니다. 로그 파일은 일반적으로 꽤 균일하고 텍스트 기반 이었으므로 델타는 매우 효율적으로 전송되었습니다. 우리는이를 사용하여 로그 데이터를 기록하고 다시 전송하는 것에 매우 만족했습니다.

2

나는 이러한 purpases에 자식을 사용하지 않는 것이 좋습니다. 처음에는 Git이 개정 내역에 여분의 전화 보관함을 사용하고 멀티미디어 콘텐츠가 바이너리이고 diffing이 작동하지 않기 때문에 델타가 아닌 전체 파일을 전송합니다. 마지막으로 수정 한 날짜와 업데이트 된 파일을 다운로드하는 또 다른 방법으로 서버 쪽 멀티미디어를 나열하는 방법을 구현하면됩니다 (HTTP가 가장 단순하므로 제안합니다). 서버 측에서는 물론 내부적으로 git을 사용하여 멀티미디어 파일을 버전 관리 할 수 ​​있지만 git 인터페이스를 노출하지는 않을 것입니다.

+0

나는 diffing 미디어에 대해 지적 해 주셔서 고마워. Scott Chacon http://github.com/schacon/git-media가이 문제를 해결할 수 있다고 생각하십니까? – microspino

+1

git은 deltaification을 위해 libxdiff를 사용하며 바이너리 diffs를 지원합니다. 그러나 대부분의 바이너리 파일은 델타 파일이 아닙니다. –

+0

나는 이진 diffs 할 자식, 정정 맞았다. 고마워, Jakub. –

2

git 프로토콜은 전체 파일 대신 패치를 보내려고하지만 git 저장소 엔진은 항상 전체 파일을 저장하고 항상 이전 버전의 파일을 유지합니다. git는 파일 히스토리를 유지하려고하지 않을 경우 아마 작업 도구가 아닙니다.

rsync는 ssh 나 자체 프로토콜 (git과 동일)을 처리 할 수 ​​있고, 바이너리 패치를 만들 수 있으며, 변경 기록을 유지하지 않는 성숙한 파일 배포 시스템입니다. 아마저기서 그 일을 할 수 있는지보기 시작할 것입니다.

관련 문제