2011-09-08 26 views
6

Câu hỏi này tiếp tục từ những gì tôi đã học được từ câu hỏi của tôi hôm qua có tiêu đề using git to distribute nightly builds.Sử dụng giao thức bittorrent để phân phối hàng đêm và CI tạo

Trong câu trả lời cho các câu hỏi trên, rõ ràng là git không phù hợp với nhu cầu của tôi và được khuyến khích kiểm tra lại bằng BitTorrent.


Version ngắn

Cần phân phối hàng đêm được xây dựng để 70+ người mỗi buổi sáng, muốn sử dụng gitBitTorrent để cân bằng việc chuyển tải.

dài Version

NB. Bạn có thể bỏ qua đoạn dưới đây nếu bạn đã đọc previous question của tôi.

Mỗi buổi sáng, chúng tôi cần phân phối bản dựng hàng đêm của mình cho studio của hơn 70 người (nghệ sĩ, người thử nghiệm, lập trình viên, sản xuất, v.v ...). Cho đến bây giờ, chúng tôi đã sao chép bản dựng lên máy chủ và đã viết chương trình đồng bộ hóa tìm nạp nó (sử dụng Robocopy bên dưới); thậm chí với việc thiết lập gương, tốc độ truyền không thể chấp nhận được với thời gian lên tới một giờ hoặc lâu hơn để đồng bộ vào thời gian cao điểm (thời gian ngoài giờ cao điểm là khoảng 15 phút), là điểm nghẽn phần cứng I/O và có thể là băng thông mạng.

Những gì tôi biết cho đến nay

Những gì tôi đã tìm thấy cho đến nay:

  • Tôi đã tìm thấy mục xuất sắc trên Wikipedia về BitTorrent protocol đó là một chi thú vị (tôi đã chỉ trước đây đã biết các thông tin cơ bản về về cách hoạt động của torrents). Cũng tìm thấy điều này StackOverflow answer trên trao đổi BITFIELD xảy ra sau khi bắt tay khách hàng-máy chủ.

  • Tôi cũng đã tìm thấy MonoTorrent C# Library (GitHub Source) mà tôi có thể sử dụng để viết trình theo dõi và khách hàng của riêng mình. Chúng tôi không thể sử dụng các trình theo dõi giá hoặc khách hàng (ví dụ: uTorrent).

Câu hỏi

Trong thiết kế ban đầu của tôi, tôi có xây dựng hệ thống của chúng tôi tạo ra một .torrent tập tin và thêm nó để theo dõi. Tôi sẽ siêu hạt giống torrent bằng cách sử dụng các bản sao hiện có của chúng tôi về bản dựng.

Sử dụng thiết kế này, tôi có cần phải tạo tệp .torrent mới cho mỗi bản dựng mới không? Nói cách khác, bạn có thể tạo một "cán" .torrent nếu nội dung của bản dựng chỉ thay đổi 20% là tất cả những gì cần được tải xuống mới nhận được?

... Thực ra.Khi viết câu hỏi trên, tôi nghĩ rằng tôi sẽ cần phải tạo tệp mới tuy nhiên Tôi có thể tải xuống cùng một vị trí trên máy người dùng và mã băm sẽ tự động tự động xác định những gì tôi đã có. Điều này có đúng không?

Đáp lại ý kiến ​​

  1. Đối với đồng bộ hóa hoàn toàn tươi toàn bộ xây dựng (bao gồm: các trò chơi, mã nguồn, dữ liệu cục bộ, và hình ảnh đĩa cho PS3 và X360) ~ 37.000 file và sắp tới trong chỉ dưới 50 GB. Điều này sẽ tăng lên khi sản xuất tiếp tục. Quá trình đồng bộ hóa này mất 29 phút để hoàn thành vào thời điểm khi chỉ có 2 đồng bộ khác xảy ra, mức thấp nhất nếu bạn cho rằng vào lúc 9 giờ sáng, chúng tôi sẽ có hơn 50 người muốn nhận thông tin mới nhất.

  2. Chúng tôi đã điều tra I/O đĩa và băng thông mạng với bộ phận CNTT; kết luận là lưu trữ mạng đã được bão hòa. Chúng tôi cũng đang ghi số liệu thống kê vào cơ sở dữ liệu đồng bộ, những bản ghi này hiển thị ngay cả với số ít người dùng chúng tôi đang nhận được tỷ lệ chuyển không được chấp nhận.

  3. Về vấn đề không sử dụng khách hàng off-the-shelf, đó là một mối quan tâm quy phạm pháp luật với việc có một ứng dụng như uTorrent được cài đặt trên máy người dùng cho rằng các mặt hàng khác có thể dễ dàng tải về sử dụng chương trình đó. Chúng tôi cũng muốn có quy trình làm việc tùy chỉnh để xác định bản dựng nào bạn muốn nhận (ví dụ: chỉ PS3 hoặc X360 tùy thuộc vào DEVKIT bạn có trên bàn làm việc của bạn) và có thông báo về các bản dựng mới. Việc tạo ứng dụng khách bằng MonoTorrent không phải là phần mà tôi quan tâm.

+1

Kích thước tệp bạn phân phối là bao nhiêu? Bạn đã thử nén tốt chưa? Bạn cũng có thể sử dụng công cụ khác biệt nhị phân so với phiên bản trước, bản vá sẽ đủ cho hầu hết mọi người (những người khác sẽ tải xuống gói đầy đủ). – Guillaume

+1

Bạn có chắc chắn rằng việc thay đổi giao thức/công cụ sẽ khắc phục được sự cố không? Bạn đã thực hiện bất kỳ toán học thực sự về những gì bạn đang cố gắng để phân phối trên mạng của bạn so với phần cứng của bạn, băng thông mạng, vv ... Đối với exampel, bạn đã kiểm tra bộ đệm hệ thống tập tin hệ thống (cf: http: //blogs.technet. com/b/askperf/archive/2007/05/08/slow-large-file-copy-issues.aspx)? –

+0

Tôi thực sự không thể hiểu tại sao bạn không thể sử dụng hết các ứng dụng khách hàng, bạn có đang chạy trình duyệt web trong nhà và trình xử lý văn bản không? – grapefrukt

Trả lời

6

Đối với câu hỏi có cần tạo một tệp .torrent mới hay không, câu trả lời là: .

Tuy nhiên, tùy thuộc vào cách bố trí dữ liệu của bạn, bạn có thể thực hiện một số bản cập nhật bán đồng bằng đơn giản.

Nếu dữ liệu bạn phân phối là tập hợp lớn các tệp riêng lẻ, với mỗi bản dựng, một số tệp có thể đã thay đổi, bạn chỉ cần tạo tệp .torrent mới và tất cả khách hàng đều tải xuống cùng vị trí cũ. như bạn đề nghị). Các khách hàng đầu tiên sẽ kiểm tra các tệp đã tồn tại trên đĩa, cập nhật các tệp đã thay đổi và tải xuống các tệp mới. Hạn chế chính là các tệp đã xóa sẽ không thực sự bị xóa tại các máy khách.

Nếu bạn đang viết ứng dụng khách của riêng mình, xóa các tệp trên hệ thống tệp không có trong tệp .torrent là một bước khá đơn giản có thể được thực hiện riêng.

Điều này không có tác dụng nếu bạn phân phối tệp hình ảnh, vì các bit vẫn giữ nguyên trên các phiên bản có thể đã di chuyển và do đó sinh ra các phần băm khác nhau.

Tôi sẽ không nhất thiết khuyên bạn nên sử dụng siêu hạt giống. Tùy thuộc vào mức độ nghiêm ngặt của việc triển khai siêu giống mà bạn sử dụng là, nó thực sự có thể gây hại cho tỷ lệ chuyển khoản. Hãy nhớ rằng mục đích của việc nhân giống siêu là giảm thiểu số lượng byte được gửi từ hạt giống, chứ không phải để tối đa hóa tốc độ truyền tải. Nếu tất cả các khách hàng của bạn đang hoạt động đúng cách (ví dụ: sử dụng đầu tiên hiếm nhất), phân phối phần không phải là vấn đề.

Ngoài ra, để tạo một torrent và kiểm tra băm 50 GiB torrent đặt rất nhiều tải trên ổ đĩa, bạn có thể muốn chuẩn hóa việc triển khai bittorrent mà bạn sử dụng cho điều này, để đảm bảo nó đủ trình diễn. Tại 50 GiB, sự khác biệt giữa các triển khai khác nhau có thể là đáng kể.

0

Chỉ cần ném một tùy chọn khác vào danh sách kết hợp, bạn đã xem xét BITS chưa? Không sử dụng nó bản thân mình, nhưng từ đọc tài liệu nó hỗ trợ một phân phối peer caching model mà âm thanh như nó sẽ đạt được những gì bạn muốn.

Nhược điểm là nó là một dịch vụ nền nên nó sẽ từ bỏ băng thông mạng có lợi cho hoạt động do người dùng khởi tạo - tốt cho người dùng của bạn nhưng có thể không phải những gì bạn muốn nếu bạn cần dữ liệu trên máy vội vàng.

Tuy nhiên, đó là một tùy chọn khác.

+0

Cảm ơn bạn đã đề xuất. Chúng tôi đã xem BITS (Dịch vụ Truyền tải Thông minh Nền) và có lẽ sẽ sử dụng nó như một giải pháp ngắn hạn. – Dennis

+1

BITS hoạt động tốt như trình tải xuống nền ** NHƯNG ** Theo tài liệu: _ "BITS 3.0: Bắt đầu với Windows 7, mô hình bộ nhớ đệm ngang BITS 3.0 sẽ không được chấp nhận. Nếu BITS 4.0 được cài đặt, mô hình bộ nhớ đệm ngang BITS 3.0 Để biết thêm thông tin, xem Peer Caching. "_ –

+0

@Hightechrider: Cảm ơn bạn đã thêm thông tin về mô hình bộ nhớ đệm BITS. – Dennis

3

Chỉ muốn thêm một vài gợi ý không BitTorrent cho sự nhìn chăm chú của bạn:

  • Nếu vùng đồng bằng giữa đêm xây dựng là không đáng kể, bạn có thể sử dụng rsync để giảm lưu lượng mạng của bạn và giảm thời gian cần để sao chép bản dựng. Tại một công ty trước đây, chúng tôi đã sử dụng rsync để gửi các bản dựng cho nhà xuất bản của mình, vì chúng tôi thấy rằng hình ảnh đĩa của chúng tôi không thay đổi nhiều so với xây dựng.

  • Bạn có coi đơn giản là đáng kinh ngạc thao tác sao chép để khách hàng không làm chậm quá trình chuyển giao cho nhau không? Chúng tôi đã sử dụng một kịch bản Python đơn giản trong nội bộ khi chúng tôi thực hiện các mốc quan trọng: kịch bản chuyển sang chế độ ngủ cho đến một khoảng thời gian ngẫu nhiên trong một phạm vi cụ thể, đánh thức, tải xuống và kiểm tra các kho lưu trữ cần thiết và chạy một bản dựng. Người dùng chạy tập lệnh khi rời khỏi công việc trong ngày, khi họ quay lại, họ có một bản sao mới về mọi thứ sẵn sàng để sử dụng.

2

Bạn có thể sử dụng BitTorrent sync Cách nào đó thay thế cho dropbox nhưng không có máy chủ trong đám mây. Nó cho phép bạn đồng bộ hóa bất kỳ số lượng các thư mục và tập tin có kích thước bất kỳ. với một số người và nó sử dụng cùng một thuật toán từ giao thức bit Torrent. Bạn có thể tạo một thư mục chỉ đọc và chia sẻ khóa với người khác. Phương thức này loại bỏ sự cần thiết phải tạo một tệp torrent mới cho mỗi bản dựng.

+0

Tôi chỉ đọc về đồng bộ hóa trên '\ .' và cách 6 tháng qua nó đã chuyển 1PB dữ liệu. Tuy nhiên, nó đã không ngay lập tức xảy ra với tôi mà tôi có thể sử dụng cho mục đích này. Cảm ơn! – Dennis

Các vấn đề liên quan