Trường Hợp Sử Dụng – Kích Thước Có Quan Trọng Không? CI/CD Trong Hạ Tầng Quy Mô Lớn

Trường Hợp Sử Dụng – Kích Thước Có Quan Trọng Không? CI/CD Trong Hạ Tầng Quy Mô Lớn

Talk Transcription:

(Loreli) Chắc hẳn bạn đã đọc tiêu đề của buổi chia sẻ này. Dù tiêu đề khá ấn tượng, nhưng xin khẳng định, Donald Trump sẽ không có mặt để trình bày đâu. Xin lỗi Jim, nếu điều này làm bạn thất vọng.

Thay vào đó, chúng tôi sẽ chia sẻ về cách chúng tôi mở rộng quy mô tích hợp liên tục (CI) và triển khai liên tục (CD) tại một tổ chức lớn như Oracle. Tôi là Loreli, đồng nghiệp của tôi là Rohit Kumar. Chúng tôi cùng thuộc nhóm Kỹ thuật phát triển trung tâm, Bộ phận Middleware của Oracle. Nhiệm vụ chính của nhóm là tối ưu chất lượng sản phẩm, cải thiện năng suất cho lập trình viên, tăng tốc CI/CD, cải thiện tốc độ xử lý pipeline đồng thời cung cấp cho các nhóm sản phẩm sự tự chủ cần thiết để xây dựng và phát triển sản phẩm hiệu quả hơn.

Sau đây là tuyên bố miễn trừ trách nhiệm. Mời bạn dành ít phút để đọc qua nội dung này.

Về thách thức tăng trưởng: Trong các doanh nghiệp lớn như Oracle, không thể tránh khỏi những “cơn đau chuyển mình”. Hai vấn đề chính mà chúng tôi gặp phải gồm: Quản lý phụ thuộc và quản lý vòng đời binary; đồng thời là khâu tích hợp, triển khai liên tục giữa các nhóm sản phẩm trên hệ thống phân tán. Hãy cùng phân tích xuất phát điểm và kế hoạch cải thiện mà chúng tôi triển khai ở Oracle.

Mục tiêu là tối ưu tiêu thụ các dependencies. Trước đây, các nhóm phát triển phải lấy dependency qua cùng SCM với source code. Điều này tạo sự ràng buộc chặt chẽ mà chúng tôi muốn cởi bỏ. Ngoài ra, để nâng cao chất lượng kiểm thử, hệ thống CI còn cần phối hợp với hệ thống test farm, kho binary, v.v.

Thách thức đầu tiên là quản lý dependency. Cùng một công cụ vừa quản lý source control vừa quản lý binary tạo ra sự phụ thuộc lớn. Thời điểm đó, ADE là SCM mà chúng tôi sử dụng. Nhưng chúng tôi đã quyết định tách rời nhằm tăng sự linh hoạt cho các team sản phẩm.

Một hạn chế khác là cách tiêu thụ coarse-grained, các team thường dựa theo một directory lớn thay vì phân rã chi tiết dependency. Điều này khiến xác định dependency cụ thể trở nên khó khăn.

Chúng tôi cũng gặp vòng lặp phụ thuộc (circular dependencies) giữa các team, gây khó khăn lớn trong kiểm soát.

Giải pháp đưa ra là chuyển sang sử dụng Artifactory, tách biệt khỏi ADE. Sau khi đánh giá kỹ giữa nhiều lựa chọn trên thị trường như Nexus, chúng tôi chọn Artifactory bởi dịch vụ, hỗ trợ và tính năng vượt trội.

Hiện tại, Oracle Middleware đã triển khai sáu instance Artifactory tại sáu trung tâm dữ liệu lớn, tất cả đều là bản HA với cấu trúc node từ bốn, sau tăng lên năm node mỗi trung tâm. Nhờ Artifactory, toàn bộ các nhóm đều tiêu thụ binary linh hoạt và tăng tốc pipeline rõ rệt.

Ở lần chia sẻ trước, các con số thống kê chưa thực sự ấn tượng so với hiện tại. Oracle giờ đã dùng tới 80 TB lưu trữ, sở hữu 47,1 triệu artifact, mỗi ngày xử lý khoảng 39,1 triệu request, trong đó đa phần là download/pull, còn khoảng 1,5 triệu là publish. Phân tích mới nhất cho thấy lượng dữ liệu luân chuyển mỗi ngày đạt 85 TB, hệ thống vận hành qua sáu data center với node memory tới 256 GB.

Về hành trình phát triển, đầu năm 2013, chúng tôi chưa dùng bất kỳ lưu trữ nào trên Artifactory, nhưng hiện đã đạt 80 TB. Đáng chú ý, khoảng cuối 2015, chúng tôi quyết định cần một mô hình quản lý kho storage tốt hơn, đặc biệt là kiểm soát dung lượng và phân bổ hợp lý giữa các nhóm sản phẩm. Từ đó, quota per team, cùng với hoạt động liên tục xóa/purge repository đã được triển khai, giúp cân bằng và tối ưu chi phí lưu trữ.

Thách thức thứ hai là CI/CD: Làm thế nào để mở rộng tích hợp và triển khai liên tục? Ngoài hệ thống CI, các hệ thống phân tán như test farm, Jira… cũng phải đồng bộ vào pipeline. Do đó, chỉ dựa vào Jenkins hay Hudson và pipeline truyền thống là không đủ. Chúng tôi phải xây dựng một hệ thống sự kiện (event-based system) mới.

Các pipeline bao phủ nhiều nhóm dev với tổng lực 6000 kỹ sư build song song và publish liên tục lên Artifactory, khiến một Jenkins instance là không thể đáp ứng được nhu cầu. Vì thế, kiến trúc multi-master được áp dụng.

Ban đầu, mỗi tổ chức/phòng ban có riêng một master Jenkins hoặc Hudson kèm số lượng slave riêng. Các master này quản lý plugin, cấu hình và cài đặt riêng biệt. Qua một thời gian, nhận thấy nhiều slave bị để không, chúng tôi tích hợp Mesos để sử dụng tài nguyên hiệu quả, đồng thời cung cấp dữ liệu realtime cho analytics và tối ưu phân bổ resource giữa các hệ thống CI, test farm.

Sau khi có multi-master Jenkins, vấn đề tiếp theo là tích hợp vào pipeline chung cho cả hệ thống, quản lý quá trình promotion, kiểm tra build đối với test farm (mô hình D to E), doc translation, patching, Artifactory, visualization… Kết quả, hệ thống Carson ra đời.

Carson là nền tảng orchestration dựa trên event, cho phép tích hợp hệ thống phân tán ở quy mô lớn. hiện Carson đã được rất nhiều nhóm sản phẩm sử dụng, bao gồm cả on-premise, cloud, documentation, v.v.

Bên dưới là ví dụ về pipeline promotion. Một developer sẽ commit code vào SCM (có thể là Perforce, ADE, Git, v.v.), trigger build trên CI (Jenkins/Hudson), publish lên Artifactory, rồi kiểm thử sản phẩm trên phiên bản được promote mới nhất. Việc này giờ đây diễn ra nhiều lần/ngày. Thêm vào đó là pipeline tích hợp toàn bộ sản phẩm – level 2 pipeline – phục vụ integration testing giữa các sản phẩm khác nhau.

Quy mô hiện tại của Carson: 460 orchestration pipelines, 18,000 orchestration execution mỗi ngày, quản lý 238 master Jenkins/Hudson, 515 VM cho agents. Mỗi ngày Carson xử lý khoảng 81,000 sự kiện (event), hơn nửa từ CI servers, phần còn lại từ test farm, feedback kết quả test hoặc preflight/promotion sản phẩm đều dựa hoàn toàn trên event.

Sau đây, Rohit sẽ trình bày về kiến trúc Carson.

(Rohit) Cảm ơn Loreli.

(Loreli) Cảm ơn mọi người.

(Rohit) Carson được phát triển nhằm orchestrate workflow giữa nhiều hệ ứng dụng CI và nhóm sản phẩm khác nhau. Đặc trưng của Carson là event-driven, nghĩa là một pipeline có thể giao tiếp giữa nhiều master Jenkins/Hudson hay các ứng dụng khác, mọi thao tác không cần polling mà hoàn toàn dựa trên dòng sự kiện (event stream), giúp orchestration hiệu quả, ổn định.

Ví dụ: Một thay đổi trên Git (commit, push), mọi SCM đều gửi sự kiện đã được json encode thể hiện trạng thái hoặc thông tin transaction. Tương tự, job trên Hudson/Jenkins phát sinh event theo từng trạng thái: build thành công/thất bại/kết thúc/khởi tạo. Từ Jira (khi tạo/bổ sung issue hoặc chấp nhận yêu cầu triển khai…), tất cả đều được tập trung về hệ thống orchestration qua messaging layer (sử dụng broker), hoặc webhook HTTP.

Kiến trúc Carson bao gồm: các nguồn event/job system phía trái (các master Jenkins/Hudson, CI server, SCM, Jira, Artifactory, documentation, test farm…), ở giữa là messaging/webhook, authentication engine, từ đó điều khiển pipeline tiến trình thực hiện công việc thông qua các plugin hoặc REST API. Các event được Carson tổng hợp điều phối qua REST API (giao tiếp các hệ job system, invoke job mới…). Carson hỗ trợ một DSL riêng biệt để định nghĩa orchestrations linh hoạt, cho phép tích hợp thêm bất kỳ CI server/job system mới khi cần.

Orchestrations được mô tả dưới dạng Closure DSL. Mỗi handler gồm ba thành phần: channel (nguồn event hoặc job cần listen), filter (vọc trạng thái event), action (block thực thi tiếp theo trong pipeline). Việc tách biệt này giúp scale pipeline sang multi-master, nhiều CI host, cho phép tái sử dụng job, mở rộng workflow linh hoạt.

Ví dụ: Lệnh deforg cho phép triển khai pipeline mới, defstart handler để khởi động instance pipeline, lọc theo channel, predicate, hành động tương ứng (VD: kiểm tra commit của một organization nhất định, dự án xác định, gọi build job với thông số cần thiết qua REST API).

DSL cũng hỗ trợ khai báo động (dynamic job execution): một pipeline có thể nhận các config `job list` động, thực thi và report tập hợp kết quả quay lại một cấu trúc thống nhất, phù hợp với các tác vụ dịch ngôn ngữ, build đa nhiệm… Ngoài ra, DSL còn cung cấp khả năng lồng ghép predicate và action phức tạp, hỗ trợ các pattern workflow hiện đại.

DSL đóng vai trò trung tâm cho việc thiết kế workflow, kế thừa điểm mạnh của hệ sinh thái Closure như multimethod, protocol, cho phép plug thêm Messaging broker như Kafka chỉ với thao tác định nghĩa protocol mới, hoàn toàn không bị ràng buộc platform. Code của DSL vừa là code, vừa là data (s-expression) giúp việc phân tích, dựng cây pipeline và render báo cáo thuận lợi.

Carson thực thi hoàn toàn bất đồng bộ (async) nhờ thư viện code.async của Closure, orchestration thực chất là Closure module nên truy cập dễ dàng tới Java interrupt, đồng thời sandbox để đảm bảo bảo mật nhưng vẫn linh hoạt bổ sung chức năng predicate cho workflow.

Một số tính năng độc đáo của DSL: pluggable throttling, lặp lại job đến khi thành công, giới hạn số instance pipeline, queue, ưu tiên latest run… Việc phối hợp các block DSL theo config giúp workflow năng động, tùy chỉnh cao.

Tất cả orchestrations, event, cấu hình, báo cáo đều được quản lý qua REST API (JSON). Optimization engine của chúng tôi ghi nhận trạng thái, sự kiện từng bước chuyển trong pipeline, compile thời gian thực sang biểu đồ, báo cáo động giúp người dùng phân tích, thiết kế, tinh chỉnh workflow tối ưu.

Chúng tôi đang tiếp tục thử nghiệm các tính năng tương lai như preprocessing event, tự động phân vùng dòng sự kiện, đảm bảo không có single point of failure, tối ưu quan sát và track deployment pipeline, tăng khả năng visualization & analytics chỉ bằng vài thao tác cấu hình.

Cuối cùng, Loreli sẽ tổng kết lại.

(Loreli) Cảm ơn Rohit. Kết luận:

Cách thiết kế Carson tại Oracle giúp khả năng tích hợp công nghệ mới một cách chủ động, luôn sẵn sàng trước mọi thay đổi của hệ sinh thái công nghệ. Carson là xương sống của CI/CD event-based, cũng như giải quyết các bài toán khác: quản lý quota Artifactory, provisioning repo, tự động khởi tạo tổ chức mới, phân bổ slave, v.v. Tất cả đều đi qua Carson giúp Oracle mở rộng quy mô CI/CD linh hoạt và đột phá.

Vậy, quy mô liệu có thực sự quan trọng? Hãy tự trải nghiệm và quyết định. Cảm ơn bạn đã đồng hành cùng chúng tôi.

Đừng bỏ lỡ cơ hội tối ưu hóa hệ thống CI/CD, quản lý hiệu quả kho lưu trữ và orchestration pipeline với các giải pháp công nghệ tiên tiến!

Liên hệ ngay với Softribution để được tư vấn hoặc đặt mua các giải pháp, dịch vụ phù hợp cho doanh nghiệp của bạn.

Try the free CSS tidy which lets you beautify stylesheets for your websites.

Share this post