Làm thế nào có thể xây dựng toàn bộ cơ sở mã từ nguồn ở quy mô Google?


8

Các câu trả lời đầu tiên để một, thời gian gần đây hoạt động cũ câu hỏi liên quan đến một đoạn video mà nói về cách kho Google được thực hiện.

Một điều thú vị đã được đề cập là thực tế là mọi thứ đều được xây dựng từ nguồn, mà không dựa vào nhị phân. Điều này giúp tránh các vấn đề với sự phụ thuộc trở nên lỗi thời nhưng vẫn được sử dụng trong các dự án khác, một vấn đề tôi thực sự gặp phải rất nhiều.

Làm thế nào là nó có thể về mặt kỹ thuật? Nếu tôi thử điều tương tự trong công ty của mình, thậm chí xem xét khoảng cách lớn giữa quy mô của cơ sở mã công ty của tôi và quy mô của Google, thì không thể vì hai lý do:

  • IDE (Visual Studio) sẽ nhanh chóng trở nên không phản hồi, với điều đó là rất nhiều tại các giải pháp nhỏ có chứa, giả sử, 50 dự án.

  • Bất kỳ phân tích tĩnh nào cũng sẽ bị phá vỡ bởi kích thước của toàn bộ cơ sở mã. Ví dụ: số liệu mã hoặc kiểm tra tĩnh các hợp đồng mã khó có thể thực hiện được (hợp đồng mã có thể sẽ mất vài ngày hoặc vài tuần).

  • Với việc tích hợp liên tục, việc biên dịch cũng sẽ mất một lượng lớn thời gian và sẽ phá vỡ các máy chủ ngay khi một dự án có nhiều phụ thuộc được sửa đổi, đòi hỏi phải có một cây lớn các dự án được biên dịch lại.

Làm thế nào một công ty nhỏ có thể tránh được những vấn đề đó và có thể:

  1. Sử dụng IDE mà không bị ảnh hưởng bởi hiệu suất kém,

  2. Biên dịch mã sau mỗi lần xác nhận mà không làm hỏng máy chủ, ngay cả khi hậu quả của thay đổi yêu cầu một lượng lớn cơ sở mã được biên dịch lại?


Có một cuộc nói chuyện trên Youtube về cách Google thực hiện: youtube.com/watch?v=2qv3fcXW1mg
Patrick

Câu trả lời:


11

Bạn đang giả sử một quy trình xây dựng truyền thống và quy trình của Google là bất cứ điều gì ngoài truyền thống. Có một loạt bài viết trong blog Công cụ Kỹ thuật giải thích quy trình của họ một cách chi tiết, xây dựng trên bản trình bày năm 2010: Công cụ để tích hợp liên tục ở quy mô Google :

  1. Build in the Cloud: Truy cập mã nguồn
  2. Build in the Cloud: Cách hệ thống Build hoạt động
  3. Xây dựng trong đám mây: Phân phối các bước xây dựng
  4. Build in the Cloud: Truy cập mã nguồn
  5. Thử nghiệm ở tốc độ và quy mô của Google

Tóm lại, họ sử dụng một hệ thống xây dựng phân tán tùy chỉnh cho phép mức độ song song và tự động hóa rất cao, tận dụng tối đa cơ sở hạ tầng hiện có của họ. Nó cũng phụ thuộc rất nhiều vào bộ nhớ đệm, với tỷ lệ nhấn bộ nhớ cache tổng thể 90%.

Nhưng làm thế nào bạn có thể áp dụng tất cả điều này trong công ty của bạn? Bước đầu tiên là phân phối biên dịch và cho điều đó bạn cần:

  • Một đám mây
  • Một trình biên dịch phân tán
  • Bộ đệm của trình biên dịch

Trên môi trường phát triển gcc, thiết lập trang trại biên dịch tương đối dễ dàng. distcc đảm nhiệm việc phân phối và ccache chăm sóc bộ nhớ đệm và chúng hoạt động rất đẹp cùng nhau. Tôi không biết bất kỳ công cụ tương tự nào cho hệ sinh thái của Microsoft (Tôi giả sử bạn đang sử dụng ngôn ngữ Microsoft dựa trên lựa chọn IDE của bạn), nhưng tôi biết rằng MSBuild có thể chạy các bản dựng song song , tận dụng CPU đa lõi . Không thực sự là một trang trại biên dịch, nhưng chắc chắn là một bước đi đúng hướng.


2
  1. Bạn không phải xây dựng tất cả 2000 dự án để chỉ sử dụng những dự án bạn cần.
  2. Ngôn ngữ Go được thiết kế đặc biệt để giảm bớt vấn đề này bằng cách thực hiện thời gian biên dịch rất nhanh. đó là một trong những lý do họ phát minh ra ngôn ngữ

Điều đó nói rằng, tôi sẽ cảnh giác với "tòa nhà chỉ trong thời gian", trừ khi mã đang được triển khai trên toàn công ty đã được xác minh là một phần của chu kỳ phát hành chính thức (ít nhiều) và không chỉ là ngẫu nhiên xây dựng hàng đêm. H

Có 5000 nhà phát triển truy cập 2000 dự án đang trong tình trạng thay đổi liên tục nghe có vẻ như là một công thức cho thảm họa và Google thuê những người rất thông minh, vì vậy tôi khá chắc chắn đó không phải là những gì đang thực sự xảy ra.


1. Tất nhiên, nhưng đó là lý do tại sao tôi đã nói về trường hợp sửa đổi được thực hiện trong một dự án có ảnh hưởng đến nhiều dự án khác. Điều này không xảy ra thường xuyên, nhưng nó xảy ra. 2. Trong video, Ashish Kumar lưu ý rằng codebase chủ yếu bằng C và Java. Không có đề cập đến Go.
Arseni Mourzenko

Sau đó, có lẽ việc tạo ra Go là một phản ứng với những khó khăn mà họ đang gặp phải.
Robert Harvey

đúng, nhưng vẫn có thể, Google vẫn có thể làm cho nó hoạt động trong nhiều năm. Làm sao?
Arseni Mourzenko

Rất cẩn thận? Hãy nhớ rằng, họ không từng lớn như bây giờ. Bạn đã xem video mà Patrick liên kết?
Robert Harvey

1
Tôi không thực sự quan tâm đến kỷ nguyên mà Google codebase nhỏ bé, cũng không phải là kỷ nguyên nơi Google di chuyển một cách kỳ diệu / sẽ di chuyển toàn bộ cơ sở mã sang Go. Tôi đang nói về năm 2010 (thời điểm Ashish Kumar đang nói về codebase, tôi đoán đó là năm 2010). Vào năm 2010 , theo video của Ashish Kumar, (1) codebase rất lớn, (2) nó chứa C và Java chính, (3) mọi thứ được biên dịch từ nguồn, (4) các nhà phát triển Google vẫn có thể mở mã trong IDE của họ và máy chủ vẫn có thể biên dịch mã. Lưu ý: không, tôi chưa xem video mà Patrick liên kết. Tôi sẽ xem nó vào ngày mai.
Arseni Mourzenko
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.