CƠ SỞ LÝ THUYET
2.2.1 Nguồn gốc hình thành
Mặc dù các phương pháp phát triển phần mềm Agile ngày càng trở nên phổ biến, nhưng nhiều công ty và tổ chức nhận thấy rằng họ không thể phát hành các sản phẩm thường xuyên hơn, nguyên nhân là do nhóm vận hành phần mềm (nhóm thực hiện việc điều phối, phát hành phần mềm trong công ty) không thể làm việc nhịp nhàng với nhóm phát triển sản phẩm, tạo ra một "nit that cổ chai" trong quá trình phát triển sản phẩm [16]. Với cách làm việc truyền thống, nhóm phát triển làm việc riêng và nhóm vận hành phần mềm làm việc riêng, họ sẽ có mục tiêu công việc khác nhau. Nếu như mục tiêu của nhóm phát triển là xây dựng các tính năng (function) đúng với yêu cầu (requirement) và phát hành (release) cho khách hàng càng nhanh càng tốt thì mục tiêu
của nhóm vận hành phần mềm là tạo ra một hệ thống ổn định. Trong một hoàn cảnh nào đó, hai mục tiêu này sẽ đối lập nhau, và các nhóm thì chỉ quan tâm đến công việc của mình, dẫn đến sản phẩm dễ xảy ra vấn dé làm kéo dài thời gian phát triển và làm khách hàng không hài lòng. Vì thé, DevOps được sinh ra với ý tưởng là kết hợp Dev và Ops để thực hiện một mục tiêu chung là “Speed and Stability” - tốc độ và 6n định.
Phong trào DevOps bắt đầu hình thành trong khoảng thời gian từ năm 2007 đến năm 2008, khi các công ty và cộng đồng phát triển phần mềm nhận ra những vấn
đề có hậu quả nghiêm trong trong quá trình phát triền phần mềm. Năm 2009, tại hội
nghị Velocity, hai kỹ sư của Flickr là John Allspaw và Paul Hammond đã có một bài
thuyết trình nổi tiếng với tiêu đề "/0 Deploys per Day: Dev and Ops Cooperation at Flickr" [L7]. Trong bài thuyết trình này, Allspaw và Hammond đã thể hiện được các mâu thuẫn và tranh cãi giữa nhóm phát triển và nhóm vận hành. Bài thuyết trình của họ cho thấy cách hợp lý nhất để quy trình phát triển phần mềm đáp ứng được nhu cầu ngày càng cao của thị trường là thực hiện các hoạt động phát triển và vận hành ứng dụng một cách liền mạch, minh bạch và được tích hợp hoàn toàn với nhau. Cũng trong năm này, được truyền cảm hứng sau khi xem bài thuyết trình của Allspaw và Hammond, Patrick Debois đã tổ chức hội nghị mang tên "DevOpsDay" tại Bỉ [18]. Từ đó, thuật
ngữ DevOps đã chính thức được sử dụng.
Hình 2.3: Sự hình thành DevOps.
Thuật ngữ DevOps được tao ra từ sự kết hợp của hai từ "Development (Dev)" và
"Operations (Ops)". DevOps mở rộng các nguyên tắc Agile và nhắn mạnh sự hợp tác và trao đổi thông tin của các kỹ sư phát triển phần mềm (Dev - Developer - Development)
và bộ phận vận hành (Ops - Operator - Operations) bao gồm kỹ sư hệ thống, kỹ sư bao mật, kỹ sư mạng, kỹ sư hạ tang,... khi làm việc cùng nhau để tự động hóa quá trình chuyển giao sản phẩm phần mềm, nhằm mục đích rút ngắn vòng đời phát triển phần mềm (SDLC). Với các dự án có kiến trúc phức tạp và quy mô lớn, việc thay đổi hay bổ sung các tính năng mới mang đến nhiều tác động đến chất lượng phần mềm và được thực hiện lặp đi lặp lại để cải thiện chất lượng phần mềm. Từ các yêu cầu thực tiễn, DevOps áp dụng các công cụ tự động để quản lý hạ tầng phần mềm giúp tăng tốc độ xây dựng, triển khai và nhận phản hồi liên tục.
Nói một cách dễ hiểu hơn thì DevOps là một sự kết hợp của các nguyên lý, kỹ thuật, quy trình và các công cụ giúp tự động hóa quá trình lập trình và chuyển giao
phần mềm. Với DevOps, các công ty có thể phát hành (release) các tính năng nhỏ rất nhanh, thu thập các phản hồi một cách nhanh chóng và đưa ra những thay đổi phù hợp
để nâng cao chất lượng sản phẩm. DevOps nhắn mạnh vào con người và văn hóa, đồng thời tìm cách cải thiện sự hợp tác giữa các nhóm vận hành và nhóm phát triển.
DevOps được tạo ra để kết hợp tất cả những người có liên quan đến việc phát triển
và phát hành phần mém - người dùng (user), lập trình viên (developer), chuyên viên kiểm thử (tester), kỹ sư bảo mật hệ thống (security), kỹ sư quản trị hệ thống (system administrators) - vào một quy trình làm việc duy nhất, tự động hóa cao với trọng tâm chung là: phát hành phan mêm có chất lượng tốt nhất trong thời gian nhanh nhất mà vẫn đáp ứng được các yêu cầu của người dùng, đồng thời vẫn duy trì được tính toàn vẹn và ổn định của toàn bộ hệ thống.