Giới thiệu
Trong thời đại công nghệ phát triển nhanh chóng, việc quản lý môi trường phát triển là một thách thức lớn đối với các nhà phát triển. Bài viết này sẽ giới thiệu về nền tảng phát triển nội bộ (IDP) mang tên Starry, giúp tạo ra môi trường tạm thời cho việc thử nghiệm mã nguồn một cách hiệu quả.
Vấn đề hiện tại
Giả sử công ty của bạn có một ứng dụng backend lớn cung cấp thông tin cho nhiều ứng dụng frontend. Hiện tại, khi một nhà phát triển thực hiện thay đổi trên một trong các ứng dụng, họ phải hợp nhất các thay đổi vào nhánh develop
để triển khai các thay đổi lên môi trường phát triển mà tất cả các nhà phát triển khác cùng sử dụng. Cấu trúc này có nhiều vấn đề:
- Nhà phát triển có thể triển khai thay đổi làm hỏng môi trường phát triển, cản trở việc kiểm tra của các nhà phát triển khác cho đến khi thay đổi được sửa hoặc loại bỏ.
- Việc kiểm tra các thay đổi cùng lúc với các thay đổi khác có thể khó khăn trong việc xác định nguồn gốc lỗi.
Giải pháp: Nội dung tạm thời
Bằng cách tạo ra một môi trường tạm thời dựa trên nhánh tính năng của nhà phát triển, các thay đổi có thể được cách ly để kiểm tra tốt hơn. Đây là lúc nền tảng phát triển nội bộ (IDP) xuất hiện. Vậy IDP là gì?
Định nghĩa IDP
Nền tảng phát triển nội bộ (IDP) được xây dựng bởi một nhóm nền tảng để tạo ra các con đường vàng và cho phép tự phục vụ cho nhà phát triển. IDP bao gồm nhiều công nghệ và công cụ khác nhau, kết hợp lại theo cách giảm tải nhận thức cho các nhà phát triển mà không làm mất đi ngữ cảnh và công nghệ nền tảng. Nhóm nền tảng coi nền tảng của họ như một sản phẩm và xây dựng nó dựa trên nghiên cứu người dùng, duy trì và cải tiến liên tục.
Thiết kế hệ thống Starry
Giờ hãy quay lại cấu trúc mà tôi đã trình bày ở phần đầu. Công ty của bạn có một ứng dụng backend lớn cung cấp thông tin cho nhiều ứng dụng frontend. Người dùng tương tác với các frontend thông qua trình duyệt của họ.
Chúng ta có thể thiết kế một hệ thống, gọi là Starry, tạo ra các môi trường tạm thời. Ví dụ, với một môi trường gọi là test-00
, nhà phát triển có thể truy cập các ứng dụng tại test-00.{app-name}.starry.mycompany.com
. Môi trường test-00
có thể đang kiểm tra các thay đổi mã nguồn thực hiện trên repo sample-be
dưới nhánh feat/myfeature-00
. Để xem các thay đổi đó ảnh hưởng đến các frontend như thế nào, các phiên bản của frontend cũng sẽ được khởi động.
Công cụ và Tài liệu
Kubernetes
Kubernetes giúp việc khởi động ứng dụng và quản lý tài nguyên trở nên đơn giản hơn, với một hệ sinh thái phong phú các công cụ và tài nguyên. Chúng ta sẽ sử dụng Kubernetes để quản lý hệ thống của mình. Giả sử chúng ta đang chạy trên GCP, cụm GKE của chúng ta sẽ tương tác với Artifact Registry để lấy các hình ảnh container backend và frontend, cùng với Secret Manager để quản lý các bí mật sử dụng bởi Starry.
Helm
Để bao gói các định nghĩa ứng dụng, chúng ta sẽ sử dụng Helm charts.
-
Đối với các môi trường, chúng ta có thể tạo một Helm chart tùy chỉnh quản lý các triển khai backend và frontend, ingress, cơ sở dữ liệu và cache. Helm chart cũng sẽ quản lý các dịch vụ cần thiết cho các ứng dụng frontend kết nối với backend cũng như các bí mật và tài khoản dịch vụ. Chart tạo ra một namespace duy nhất cho mỗi môi trường. Helm chart môi trường định nghĩa một phiên bản duy nhất của môi trường.
-
Chúng ta cũng cần một Helm chart cho ứng dụng Starry, cung cấp giao diện frontend cho người dùng để tạo môi trường, xem chi tiết và xóa môi trường sau khi thử nghiệm.
ArgoCD
Ứng dụng Starry cũng như các ứng dụng môi trường có tài nguyên Kubernetes cần được quản lý. Khi bạn hợp nhất các thay đổi vào nhánh main
của Starry, bạn muốn những thay đổi đó được phản ánh trong môi trường sản xuất. Khi bạn xóa một môi trường tạm thời, tất cả các tài nguyên liên quan như config maps cần phải được xóa, không chỉ là các triển khai, và chúng ta muốn dễ dàng theo dõi trạng thái của từng tài nguyên. Ngay cả đối với các nhà phát triển nền tảng, chúng ta cũng muốn một giao diện cho các ứng dụng của mình dễ hiểu với các chi tiết về trạng thái từng tài nguyên. Hệ thống như ArgoCD làm cho tất cả điều này trở nên dễ dàng hơn.
Terraform
Cuối cùng, tất cả hạ tầng này cần được khởi động và chúng ta có thể sử dụng công cụ Infrastructure-as-Code (IaC) Terraform cho việc đó.
Tài liệu
Chúng ta sẽ có các kho lưu trữ backend, frontend, Helm chart, ArgoCD và Terraform trên GitHub định nghĩa hệ thống của mình:
- Sẽ có 4 kho lưu trữ hình ảnh container: 1) sample-be 2) sample-fe-1 3) sample-fe-2 4) starry
Các thực tiễn tốt nhất
- Tạo môi trường tạm thời: Mỗi nhà phát triển nên có khả năng tạo ra môi trường riêng của họ để thử nghiệm mà không làm ảnh hưởng đến các nhà phát triển khác.
- Quản lý tài nguyên hiệu quả: Sử dụng ArgoCD để theo dõi và quản lý trạng thái của từng tài nguyên trong môi trường.
Những cạm bẫy phổ biến
- Thiếu sự hợp tác: Nếu không có sự hợp tác tốt giữa các nhà phát triển, việc triển khai có thể gặp khó khăn.
- Quản lý bí mật không đúng cách: Việc không quản lý bí mật một cách cẩn thận có thể dẫn đến rò rỉ thông tin nhạy cảm.
Mẹo hiệu suất
- Tối ưu hóa hình ảnh container: Sử dụng hình ảnh nhẹ hơn để giảm thời gian khởi động.
- Giảm số lượng truy cập mạng: Thực hiện các thao tác cục bộ khi có thể để giảm độ trễ.
Khắc phục sự cố
- Theo dõi lỗi: Sử dụng công cụ giám sát để theo dõi và phát hiện lỗi kịp thời.
- Ghi lại nhật ký: Ghi lại nhật ký chi tiết để dễ dàng tìm ra nguyên nhân gây lỗi.
Kết luận
Qua bài viết này, chúng ta đã tìm hiểu về nền tảng phát triển nội bộ Starry và cách nó có thể giúp các nhà phát triển tạo ra môi trường tạm thời một cách hiệu quả. Nếu bạn đang tìm kiếm một giải pháp để cải thiện quy trình phát triển của mình, hãy xem xét việc triển khai IDP. Đừng quên theo dõi phần tiếp theo của bài viết này!
Câu hỏi thường gặp
-
IDP là gì?
- IDP là nền tảng phát triển nội bộ giúp tự động hóa quy trình phát triển và thử nghiệm.
-
Tại sao cần môi trường tạm thời?
- Môi trường tạm thời giúp cách ly các thay đổi để kiểm tra mà không ảnh hưởng đến môi trường phát triển chung.
-
Các công cụ nào được sử dụng trong Starry?
- Starry sử dụng Kubernetes, Helm, ArgoCD và Terraform để quản lý hạ tầng và triển khai ứng dụng.
Hãy tiếp tục theo dõi các bài viết tiếp theo để tìm hiểu thêm về các khía cạnh chi tiết hơn của nền tảng này.