Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Ngày nay, để đáp ứng các yêu cầu ngày càng cao từ phía người dùng, nâng cao năng lực cạnh tranh của sản phẩm, các nhà phát triển phần mềm, các nhà vận hành hệ thống thông tin phải đối mặt với việc chu kì phân phối phần mềm đến tay người dùng ngày càng ngắn hơn, kích thước ứng dụng ngày càng lớn hơn. Đối mặt với thách thức này, một vai trò mới trong phát triển phần mềm ra đời được gọi là DevOps là sự kết hợp linh hoạt của 2 quá trình development và operations, DevOps chịu trách nhiệm hỗ trợ việc build và delivery sản phẩm.
Trong phạm vi bài viết này mình sẽ tập trung giải quyết 3 câu hỏi:
Quá trình xây dựng ứng dụng và phân phối ứng dụng đến tay người dùng là đề tài luôn luôn được thảo luận, nó liên quan mật thiết đến vòng đời phát triển phần mềm, mình tạm gọi là SDLC (Software Development Life Cycle). Ở phần tiếp theo chúng ta sẽ nhìn lại một số mô hình phát triển phần mềm phổ biến và sự tiến hóa của chúng theo thời gian.
Trở lại những năm 1990, phân phối phần mềm đã được áp dụng bằng một phương pháp vật lý, chẳng hạn như đĩa mềm hoặc CD-ROM. Do đó, SDLC là một lịch trình rất dài hạn, bởi vì nó không dễ dàng (tái) cung cấp cho khách hàng.
Tại thời điểm đó, một phương pháp phát triển phần mềm chính là mô hình thác nước, có các giai đoạn phân tích yêu cầu, thiết kế, triển khai thực hiện, kiểm thử và bảo trì như trong sơ đồ sau:
Trong mô hình này chúng ta không thể quay trở lại phase trước, ví dụ sau khi bắt đầu hoặc kết thúc giai đoạn Implementation không chấp nhận quay lại giai đoạn Design (điều này sẽ ảnh hưởng đến kế hoạch và chi phí tổng thể). Dự án có xu hướng hoàn thành tới giai đoạn release và lại tiếp tục 1 chu kỳ tiếp theo bao gồm 1 thiết kế mới. Mô hình này hoàn toàn phù hợp với việc phân phối vật lý, và kết quả là chúng ta có các đĩa chứa các bản phân phối phần mềm. Nếu bạn cần một version mới hơn cho một tựa game bạn ưa thích, cách duy nhất là mua đĩa mới.
Một vài năm sau, khi internet được phổ cập đến các bản làng, các nhà phát triển cũng dần dịch chuyển phương pháp phân phối phần mềm từ physical sang electrical, chẳng hạn như việc tải xuống trực tuyến. Các công ty phần mềm đã cố tìm ra cách rút ngắn quy trình SDLC để đánh bại các đối thủ cạnh tranh.
Nhiều nhà phát triển đã bắt đầu áp dụng các mô hình phát triển phần mềm mới như incremental, iterative hay agile để phần mềm đến tay người dùng 1 cách nhanh nhất. Các bản cập nhật, vá lỗi đến tay người dùng nhanh chóng. Microsoft Windows update cũng đã được giới thiệu kể từ Windows 98.
Trong trường hợp này, phần mềm sẽ được phát triển thành các module nhỏ và quy trình implement, test, release lặp lại liên tục, tham khảo hình dưới đây:
Mô hình này làm cho chu trình SDLC và phân phối phần mềm nhanh hơn và cũng dễ dàng điều chỉnh trong quá trình, bởi vì chu kỳ là từ vài tuần đến vài tháng, đủ nhỏ để điều chỉnh nhanh.
Mặc dù mô hình này hiện đang được đa số ưa chuộng, nhưng tại thời điểm đó, phân phối phần mềm ứng dụng có nghĩa là các file nhị phân, như chương trình EXE được thiết kế để cài đặt và chạy trên PC của khách hàng. Mặt khác, infrastructure (như server, network ..) rất tĩnh và được thiết lập trước. Do đó, SDLC không có xu hướng bao gồm infrastructure.
Vài năm sau, điện thoại thông minh (như iPhone) và công nghệ không dây (như mạng Wi-Fi và 4G) đã được chấp nhận rộng rãi và ứng dụng phần mềm cũng thay đổi từ binary sang online service. Trình duyệt web là giao diện của phần mềm ứng dụng, không cần cài đặt nữa. Mặt khác, infrastructure trở nên dynamic, do yêu cầu ứng dụng liên tục thay đổi và phần mềm cũng yêu cầu khả năng phát triển, mở rộng.
Công nghệ ảo hóa làm cho server trở nên dynamic. Với các dịch vụ đám mây như Amazon Web Service (AWS) hay Google Cloud Platform (GCP) chúng ta có thể dễ dàng tạo và quản lý dynamic infrastructures.
Infrastructures đã trở thành 1 phần quan trọng trong phát triển và phân phối phần mềm, bởi vì các ứng dụng được cài đặt và chạy ở server side thay vì client side nên quá trình phân phối phần mềm chỉ mất vài ngày đến vài tuần.
Như đã thảo luận ở trên, môi trường phân phối phần mềm xung quanh tiếp tục thay đổi; tuy nhiên, chu kỳ delivery ngày càng ngắn hơn. Để delivery nhanh chóng với chất lượng cao hơn, các nhà phát triển và quản lí chất lượng bắt đầu áp dụng một số công nghệ tự động hóa. Một trong những công nghệ tự động hóa phổ biến là Tích hợp liên tục (CI). CI là sự kết hợp các công cụ hữu ích, chẳng hạn như Version Control Systems (VCS), build server và testing automation tools.
VCS giúp nhà phát triển duy trì mã nguồn chương trình trên máy chủ trung tâm. Nó ngăn chặn việc ghi đè hoặc xung đột với mã của các nhà phát triển khác và cũng lưu trữ lịch sử. Do đó, nó dễ dàng hơn để giữ mã nguồn nhất quán và phân phối cho chu kỳ tiếp theo.
Giống như VCS, có kể tích hợp 1 build server kết nối tới VCS để lấy source code và build 1 cách tự động hoặc định kì hoặc khi devloper tạo 1 Pull Request mới. Nếu build thất bại, build server thông báo cho developer để kịp thời khắc phục sự cố.
...
Còn tiếp