DVCS may mắn nhân rộng repo giữa các đội phân phối theo địa lý


9

Công ty của tôi đang khám phá việc chuyển từ Perforce sang DVCS và chúng tôi hiện đang sử dụng rất nhiều proxy của Perforce vì các nhóm phát triển phần mềm trải khắp Đức, Trung Quốc, Mỹ và Mexico và đôi khi băng thông từ nơi này đến nơi khác không phải là tuyệt vời.

Nói chuyện với CNTT, chúng tôi bắt đầu tìm cách để mọi thứ hoạt động trơn tru từ góc độ phân phối theo địa lý để mọi người đều có được bản mới nhất và tốt nhất mà không xác định máy chủ repo nào là nguồn gốc của sự thật (tức là sao chép trong suốt ).

Tôi nghĩ rằng có lẽ chúng ta có thể mô phỏng cơ chế DNS thông qua các móc đẩy trước và kéo trước . Ví dụ, hãy xem xét các quốc gia A, B và C. Khi rút khỏi phước lành A, chính A sẽ kéo theo các thay đổi từ B, từ đó sẽ kéo theo các thay đổi trong C. Nếu B và C có thay đổi mới, họ sẽ rơi vào A. Ngược lại, khi có một cú hích, nó có thể được truyền đến tất cả các kho lưu trữ may mắn.

Tôi biết rằng nhìn chung bạn chỉ có một repo may mắn, tuy nhiên điều này có thể không mở rộng trên toàn cầu và mỗi kho lưu trữ may mắn sẽ chỉ được áp dụng cho các đội từ một quốc gia.

Câu hỏi của tôi là : khái niệm về sao chép DVCS sao chép được sử dụng trong thực tế?, Có ai đã thực hiện thành công không?, Nếu vậy, cách chính xác để làm điều đó là gì?


Bất kỳ thành viên của nhóm phân phối sử dụng kiểm soát phiên bản phân tán xung quanh?
dukeofgaming

Tùy thuộc vào chính trị của công ty, lưu trữ trên Github hoặc Bitbucket có thể hoạt động thực sự tốt. Có vẻ như một sự lãng phí để thiết lập một giải pháp CNTT phức tạp khi có những công ty đã có các thiết lập có thể truy cập toàn cầu với mức giá hợp lý.
captncraig

1
"Tùy thuộc vào chính trị của công ty" <--- yup
dukeofgaming

Câu trả lời:


11

Câu hỏi này hỏi về sao chép minh bạch , và tôi nghi ngờ vẫn chưa có câu trả lời nào vì mọi người có thể đang bị treo lên vì sự minh bạch. Tôi sẽ tự do đặt sự minh bạch sang một bên để tập trung vào việc nhân rộng. Tôi sẽ giải quyết (hoặc phạt) sự minh bạch sau này và trên thực tế tôi không thực sự nghĩ rằng đó là tất cả những gì quan trọng trong DVCS.

Trước tiên, hãy để tôi chạy xuống một vài điểm chính về cách thức hoạt động của kho lưu trữ trong DVCS. (Tôi quen thuộc nhất với Mercurial, vì vậy đó là những gì tôi sẽ sử dụng làm ví dụ, nhưng tôi tin rằng mọi điều tôi nói cũng đúng với git.)

A. Trong một DVCS, bất kỳ bản sao nào cũng chứa nội dung và lịch sử tệp giống như bản gốc.

Cung cấp cho bạn giữ các repos đúng cách đồng bộ, điều này có nghĩa là bạn có thể sử dụng các hoạt động lan truyền thay đổi DVCS thông thường (nhân bản, đẩy, kéo) và các repos thông thường để xây dựng một hệ thống sao chép.

B. Những thay đổi mới không phải được truyền bá đến nơi chúng đến.

Đặc biệt, nếu tôi nhận được các thay đổi từ một repo cụ thể và thêm một số thay đổi của riêng tôi, các thay đổi của tôi không phải quay lại repo cụ thể đó. Họ có thể đi nơi khác. Tiện ích này sẽ trở nên rõ ràng từ các ví dụ tôi sẽ trình bày bên dưới.

C. Thay đổi có thể được truyền qua đẩy hoặc kéo.

Trong một hệ thống tập trung, những thay đổi mới có thể khá nhiều (tôi nghĩ) chỉ được đẩy vào repo. Trong một DVCS, có thể thiết lập một loạt các cấu trúc liên kết lan truyền thay đổi, một số trong đó chỉ liên quan đến việc kéo. Điều này cho phép linh hoạt hơn trong việc thiết lập.

Ví dụ

Để thảo luận, giả sử các nhóm phân phối của bạn sử dụng các hệ thống trong các miền duke.de, duke.us, duke.cn và duke.mx, và hơn nữa rằng duke.de là nơi chúng tôi muốn có repo "may mắn". Với các giả định này, hãy để tôi đưa ra một số ví dụ về các cấu trúc liên kết khác nhau mà bạn có thể thiết lập, ghi nhớ ba điểm DVCS chính ở trên.

0. Mô hình đẩy tập trung

Có một repo duy nhất tại hg.duke.de và có các nhà phát triển ở tất cả các vị trí nhân bản và kéo từ đây và đẩy các thay đổi ở đây. Điều này có thể làm việc cho những người ở Đức, nhưng nó có thể là một vấn đề cho người dân trên toàn thế giới. Tất cả các hoạt động nhân bản, kéo và đẩy sẽ đi qua các liên kết mạng đường dài chậm. Điều này đang sử dụng DVCS giống như một hệ thống tập trung. Đây là vấn đề bạn đang cố gắng giải quyết.

1. Đẩy tập trung với nhân rộng

Có repo may mắn tại hg.duke.de và có bản sao tại hg.duke.cn, hg.duke.mx và hg.duke.us. Các nhà phát triển đã sao chép từ bản sao cục bộ của họ và đẩy các thay đổi sang hg.duke.de. Bất cứ khi nào những thay đổi mới xuất hiện trong hg.duke.de, một hook sẽ truyền chúng đến các bản sao. Các bản sao chỉ đọc, do đó sẽ không bao giờ có bất kỳ sự hợp nhất hoặc xung đột nào.

Ví dụ: nếu tôi là nhà phát triển ở Mexico, tôi sẽ sao chép từ hg.duke.mx nhưng đẩy các thay đổi thành hg.duke.de. Nếu các thay đổi khác được đẩy vào hg.duke.de trước khi tôi có thể đẩy các thay đổi của mình, việc đẩy của tôi sẽ bị chặn. Các thay đổi khác sẽ được sao chép thành hg.duke.mx, vì vậy tôi sẽ kéo các thay đổi này cục bộ, hợp nhất và sau đó thử đẩy sang hg.duke.de một lần nữa.

Điều này sẽ cung cấp một số lợi thế, vì các hoạt động nhân bản lớn đều được thực hiện tại địa phương. Đẩy vào repo trung tâm ở một vị trí khác có thể không quá tệ, vì các thay đổi được đẩy tương đối không thường xuyên, thay đổi gia tăng thường khá nhỏ. (Đặc biệt Mercurial gửi các khác biệt được nén, không phải toàn bộ tệp và lịch sử của chúng.)

Trong Mercurial, bạn có thể thiết lập một repo cục bộ để kéo từ một vị trí và đẩy đến một vị trí khác bằng cách đặt một cái gì đó như sau vào .hg/hgrctệp:

[paths]
default = ssh://hg.duke.mx
default-push = ssh://hg.duke.de

2. Mô hình kéo đơn giản

Tiếp tục với hg.duke.de là repo may mắn và những người khác là bản sao, chúng ta có thể tuyên truyền các thay đổi thông qua kéo thay vì đẩy. Các nhà phát triển nhân bản và lấy từ bản sao địa phương của họ như bình thường. Khi một thay đổi đã sẵn sàng, một nhà phát triển gửi yêu cầu kéo đến một số dịch vụ trung tâm, kéo từ repo của nhà phát triển vào hg.duke.de. Một chính sách sẽ cần phải được thiết lập để sáp nhập. Ví dụ: nếu có xung đột hợp nhất, yêu cầu có thể bị từ chối, yêu cầu nhà phát triển phải kéo (từ bản sao cục bộ), hợp nhất và gửi lại yêu cầu kéo.

Cách tiếp cận này có ưu điểm là không khiến nhà phát triển chờ đợi trong khi các thay đổi đang được tuyên truyền. Tất nhiên, nhà phát triển vẫn phải chờ yêu cầu kéo được thực hiện, nhưng ít nhất anh ta hoặc cô ta có thể làm việc với những thay đổi bổ sung trong thời gian đó.

Biến thể

Có một loạt các biến thể có thể được áp dụng.

Việc gửi yêu cầu kéo là một thời gian hoàn hảo để xem xét mã. Các thay đổi được công bố, theo nghĩa là chúng có sẵn cho tất cả mọi người, nhưng chúng chưa được tích hợp vào repo may mắn.

Yêu cầu kéo có thể được thực hiện theo cách thủ công hoặc bởi một số hệ thống tự động. Xử lý một yêu cầu kéo có thể không hợp nhất các thay đổi trực tiếp vào repo may mắn, mà thay vào đó là một khu vực tổ chức tạm thời, nơi chu trình xây dựng và thử nghiệm được thực hiện. Chỉ sau khi vượt qua tất cả các bài kiểm tra, bộ thay đổi mới được tích hợp vào repo may mắn.

Những người thoải mái hơn với mô hình đẩy có thể muốn thiết lập repo dàn địa phương ở mỗi vị trí, bên cạnh bản sao, ví dụ: hg-stage.duke.mx, hg-stage.duke.cn, v.v. Điều này đòi hỏi nhiều công việc hơn một chút, mặc dù, vì các nhà phát triển không chỉ phải hợp nhất với các thay đổi cục bộ khác, mà ai đó phải chịu trách nhiệm hợp nhất các thay đổi từ các repos dàn dựng vào repo may mắn. Điều này có thể làm việc trong các trường hợp phù hợp, mặc dù, và có thể được hỗ trợ bởi tự động hóa.

"Minh bạch"

Bây giờ đến vấn đề nhân rộng minh bạch.

Với các kịch bản trên, tôi không thực sự thấy sự cần thiết phải sao chép minh bạch. Tất cả các repos đều có thể nhìn thấy cho mọi người, và có những quy ước để kéo / nhân bản từ bản sao địa phương và đẩy đến một repo may mắn hoặc khu vực tổ chức địa phương.

Nếu bạn muốn minh bạch, bạn có thể yêu cầu mọi người thiết lập miền tìm kiếm DNS theo vị trí của họ. Bản sao cục bộ và repos dàn dựng đơn giản sẽ được gọi là "hg" và "hg-giai đoạn" và thiết lập DNS sẽ giải quyết những điều này cho hg.duke.cn và hg-stage.duke.cn cho các nhà phát triển ở Trung Quốc và tương ứng cho nhà phát triển ở các địa điểm khác. Nhưng đây là một chút ma thuật và có thể gây nhầm lẫn, và tôi thực sự không nghĩ rằng nó bổ sung nhiều.

Tôi mong bạn trả lời câu hỏi này. Tôi đã nhận được một số quyền tự do với câu trả lời, nhưng dường như với tôi rằng tình huống của bạn có thể được khắc phục thông qua việc sử dụng các kỹ thuật mà tôi đã mô tả ở trên.


1
Tôi thích ý tưởng dàn dựng repos xung quanh người may mắn. Ngay cả khi một nhà tích hợp đến từ Hoa Kỳ, thì trách nhiệm của ông là nhà tích hợp dự án toàn cầu để tìm kiếm một quốc gia. Nó có thể không phải là một điều gì đó minh bạch ... nhưng chúng phản ánh một quy trình công việc theo cách rõ ràng hơn, đồng thời, điều này có thể mang lại sự độc lập cho mỗi quốc gia theo nghĩa là họ sẽ không phải lo lắng về việc các quốc gia khác thêm bất ổn vào công cụ của họ.
dukeofgaming

1
Tôi sẽ cung cấp cho bạn một số tiền thưởng thêm sau khi SE cho phép tôi (24 giờ), câu trả lời tuyệt vời
dukeofgaming

1
Trên các repos dàn địa phương ... nếu các thay đổi được tổ chức cục bộ cho đến khi chúng ổn định và chỉ sau đó được tích hợp vào repo chính, điều này làm tăng độ trễ lan truyền giữa các đội khác nhau. Điều này có thể dẫn đến trường hợp tương tác xấu giữa các thay đổi không được thực hiện cho đến vài ngày hoặc vài tuần sau đó, khiến cho việc chẩn đoán trở nên khó khăn hơn. Tôi khuyên bạn nên tránh sự mất ổn định tạm thời thông qua phát triển gia tăng và phơi bày mọi thay đổi (ổn định) của mọi người khác càng nhanh càng tốt.
Stuart Marks
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.