CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI, CÔNG NGHỆ VÀ GIẢI PHÁP SỬ DỤNG 1. Giới thiệu đề tài 1. Lí do chọn đề tài Trong vài thập kỉ gần đây, quy trình phát triển phần mềm đã thay đổi một cách chóng mặt, và đặc biệt với cuộc cách mạng gần nhất: dịch chuyển khỏi việc triển khai thủ công, hướng tới tư duy DevOps và tự động hoá (CI/CD). Sự dịch chuyển này không những đã tăng năng suất và độ hiệu quả trong vòng đời phát triển phần mềm, mà còn nâng cao sự hợp tác giữ các đội phát triển, vận hành và đảm bảo chất lượng.
Sự thay đổi này sinh ra không phải ngẫu nhiên, mà là do chính thị trường công nghệ đi với sự phát triển mạnh của các công nghệ triển khai ứng dụng và sự hỗ trợ, đầu tư cực kì mạnh tay của các ông lớn trong ngành công nghệ như Google, Amazon, Microsoft. Các dịch vụ ngày một phức tạp, việc thay đổi kiến trúc là điều không thể tránh khỏi, cũng như việc phát triển cực mạnh mẽ của cloud. Hay yêu cầu của khách hàng cũng ngày một tăng cao, yêu cầu việc phát triển phầm mềm ngày càng phải linh hoạt hơn, ổn định hơn, và đặc biệt sản phẩm phải đến với khách hàng nhanh hơn và liên tục hơn. Trong những năm gần đây, chuyển đổi số trong doanh nghiệp trở thành một điều tất yếu, các doanh nghiệp, tổ chức trong mọi lĩnh vực hiện đã và đang khai thác các chiến lược chuyển đổi số, từ các tổ chức tư nhân đến nhà nước.
Chuyển đổi số là số hóa toàn bộ cả một tổ chức. Chuyển đổi số là thay đổi quy trình mới, mô hình tổ chức mới, phương thức cung cấp dịch vụ, tư duy mới cho nhân viên và việc khai thác các công cụ hỗ trợ mới. DevOps và DevSecOps cũng chính là một phần trong chuỗi những thay đổi rất nhiều các doanh nghiệp đã bắt đầu áp dụng để tiến tới chuyển đổi số hoàn toàn. Trải nghiệm người dùng ngày càng trở thành trung tâm, và khi đưa lại những trải nghiệm tốt nhất cho khách hàng thì sẽ đưa lại những lợi thế cạnh tranh khi mà thị trường sản phẩm công nghệ thông tin ngày càng bão hoà.
DevOps không phải sinh ra để rút ngắn quy trình hay thời gian phát triển, mà là để thời gian từ mã nguồn đến sản phẩm trở thành ngắn nhất, hay tức là đưa sản phẩm đến tay người dùng nhanh nhất có thể. Hơn nữa, việc một sản phẩm đến được tay khách hàng, tất yếu sẽ sinh ra đóng góp, ý kiến và phản ảnh từ khách hàng, từ đó cho phép đổi mới và cải tiến liên tục sản phẩm. Một sản phẩm được cập nhật liên tục, đúng với mong muốn, yêu cầu và có các tính năng mong đợi của khách hàng chắc chắn sẽ có lợi thế cực lớn so với các đối thủ. DevSecOps đóng một vai trò nòng cốt, song hành với việc thay đổi tư duy phát triển sản phẩm để có thể tiến tới chuyển đổi số.
Vì vậy nên em đã lựa chọn đề tài “Nghiên cứu giải pháp DevSecOps trong hỗ trợ phát triển phần mềm”. Thông qua đề tài em muốn chứng minh được những lợi ích vô cùng to lớn và thiết thực mà DevSecOps và Lê Quý Hoàng - B19DCCN276 1 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ÁP DỤNG GIẢI PHÁP DEVSECOPS HỖ TRỢ PHÁT TRIỂN MỘT WEBSITE MÔ HÌNH MICROSERVICE tự động hoá có thể mang lại trong phát triển phần mềm, và đưa ra được một giải pháp tổng thể và thực tiễn để có thể áp dụng trong thực tế. Mục tiêu nghiên cứu đề tài - Nghiên cứu về lý thuyết của DevOps, và mở rộng ra DevSecOps trong hỗ trợ quy trình phát triển phần mềm. - Đặt ra một giải pháp mang tính tổng thể theo tư duy DevSecOps để giải quyết bài toàn tự động hoá trong phát triển phàn mềm.
- Áp dụng giải pháp DevSecOps vào trong việc phát triển một ứng dụng web mô hình microservice. Đối tượng và phạm vi Các đội nhóm và doanh nghiệp phát triển sản phẩm, đặc biệt các đội nhóm đã và đang chuyển dịch, áp dụng Agile trong phát triển phần mềm. Giải pháp sử dụng 1. Lịch sử phương pháp triển khai ứng dụng Ứng dụng là một phần đã giúp việc phổ biến hoá máy tính đến đại chúng, một trang web, một dịch vụ xử lí ảnh, một ứng dịnh tính toán trên mạng, tất cả đều là ứng dụng.
Vậy ứng dụng chạy ở đâu? Hầu hết, nhất là các ứng dụng, dịch vụ online là chạy ở trên các máy chủ. a) Thời kì máy chủ vật lí Thời kì sơ khai nhất, gần như chỉ có thể chạy một ứng dụng trên một máy chủ, đây là giới hạn đặc tính kĩ thuật của thời kì này. Chính vì những hạn chế đó, mỗi khi doanh nghiệp cần có thêm, hoặc triển khai, mở rộng thêm các dịch vụ mới thì sẽ cần thêm một máy chủ mới. Tuy nhiên, yêu cầu về hiệu năng của các ứng dụng hầu như không được làm rõ với những ứng dụng mới đó, nên việc chọn mua máy chủ mới phần lớn phụ thuộc vào suy đoán.
Từ vấn đề trên, sinh ra một các giải quyết đơn giản nhất: mua máy chủ phải to, phải mạnh, tốn nhiều tiền. Lí do giải thích đơn giản là vì yêu cầu kĩ thuật hiệu năng không rõ ràng, các doanh nghiệp không bao giờ muốn ứng dụng sẽ chạy chậm chỉ vì phần cứng quá yếu, từ đó có thể mất khách hàng. Kết cục là các máy chủ thường không bao giờ chạy hết hiệu năng tối đa, là một sự lãng phí tiền của rất lớn. b) Máy ảo Lê Quý Hoàng - B19DCCN276 2 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ÁP DỤNG GIẢI PHÁP DEVSECOPS HỖ TRỢ PHÁT TRIỂN MỘT WEBSITE MÔ HÌNH MICROSERVICE Hình 1.1 Cấu trúc của máy ảo Những năm cuối của thế kỉ 20, máy ảo ra đời một cách rộng rãi.
Máy ảo ngay lập tức thay đổi các ứng dụng chạy trên máy chủ, cho phép nhiều ứng dụng có thể chạy trên một máy chủ duy nhất. Từ đó cũng làm việc mua máy chủ mới cho ứng dụng mới biến mất, thay vào đó là sử dụng chính tài nguyên của những máy chủ sẵn có một các hiệu quả hơn. Tuy nhiên, máy ảo không phải là một giải pháp hoàn hảo. Mỗi máy ảo đều phải có một hệ điều hành hoàn chỉnh riêng biệt cho chính nó là một điểm trừ lớn.
Hệ điều hành sẽ tiêu tốn tài nguyên của máy chủ, gây lãng phí khi những tài nguyên đó có thể để sử dụng để chạy nhiều ứng dụng hơn. Ngoài ra, mỗi hệ điều hành đều cần theo dõi và cập nhật, sửa lỗi. Và trong một số trường hợp, hệ điều hành sẽ yêu cầu bản quyền. Tất cả các điều trên đều gây lãng phí thời gian và tài nguyên.
Lê Quý Hoàng - B19DCCN276 3 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ÁP DỤNG GIẢI PHÁP DEVSECOPS HỖ TRỢ PHÁT TRIỂN MỘT WEBSITE MÔ HÌNH MICROSERVICE Chưa kể thêm mô hình máy ảo có một số điểm trừ khác như máy ảo thường khởi động chậm và tính di động không cao, một khi đã sử dụng một dạng máy ảo (hypervisor hoặc các nền tảng cloud) thì khá khó để có thể chuyển dịch sang một hypervisor hoặc một nhà cung cấp khác. c) Container và Docker Các tập đoàn lớn trong mảng dịch vụ web, ví dụ như Google, đã sử dụng container để giải quyết các điểm yếu của máy ảo từ khá lâu. Cơ bản thì một container có thể nói là ngang hàng với một máy ảo. Điểm khác biệt rõ ràng nhất là container không cần có một hệ điều hành đầy đủ của riêng nó như máy ảo, mà thay vào đó là sẽ chia sẻ hệ điều hành với cả máy chủ (máy cho phép các container chạy trên nó).
Điểm khác biệt này cũng giúp một lượng lớn tài nguyên như RAM, CPU và bộ nhớ dược giải phóng. Ngoài ra còn giúp giảm được chi phí để mua bản quyền hệ điều hành, hay công sức để bảo trì, cập nhật, vá lỗi hệ điều hành. Kết quả là giúp tiếp kiệm thời gian, tài nguyên và tiền bạc. Container cũng có khả năng khởi động nhanh hơn và có tính di động rất cao.
Việc chuyển và chạy container từ laptop cá nhân, lên cloud, hay vào trong máy ảo, hoặc chạy trên một máy chủ trực tiếp đều rất dễ dàng. Container hiện đại bắt nguồn từ thế giới Linux và là một sản phẩm được sinh ra từ sự góp sức khổng lồ từ rất nhiều người trông cộng đồng mã nguồn mở trong một thời gian dài. Ví dụ như Google đã có rất nhiều công sức trong việc viết các phần liên quan đến công nghệ container cho Linux kernel, nếu không có những thành phần này, container hiện như như có hiện nay có thể không tồn tại. Những công nghệ chính đã cho phép sự phát triển cực kì mạnh mẽ của container trong những năm gần đây có thể kể đến như kernel namespace, control group, union filesystem và Docker.
Tuy nhiên, trước khi có Docker, container vẫn là một công nghệ rất phực tạp và ngoài tầm với của phần lớn tổ chức. Nhờ có Docker, container đã trở thành một công nghệ được phổ rộng hoá, cho phép đại chúng sử dụng một cách dễ dàng. Và từ sự phổ rộng hoá của Docker nói riêng và container nói chung, đã sinh ra nhu cầu cần thay đổi từ máy ảo sang container trong quy trình phát triển và triển khai ứng dụng của doanh nghiệp. Cùng với cách mà ứng dụng được phát triển cũng đang dần dịch chuyển theo một hướng mới.
Tuy nhiên container không phải sinh ra để thay thế hoặc cạnh tranh với máy ảo, thay vào đó là một sự cộng hưởng và cùng hỗ trợ với nhau để sinh ra một hệ thống phát triển và vận hành phần mềm phù hợp với thời kì hiện đại. Lê Quý Hoàng - B19DCCN276 4 ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ÁP DỤNG GIẢI PHÁP DEVSECOPS HỖ TRỢ PHÁT TRIỂN MỘT WEBSITE MÔ HÌNH MICROSERVICE Hình 1.2 So sánh mô hình của container và máy ảo Container là một đơn vị phần mềm độc lập, chứa tất cả các thành phần cần thiết để chạy một ứng dụng hoặc một website, một container bao gồm mã nguồn, các thư viện phụ thuộc, hệ điều hành độc lập và tài nguyên hệ thống ảo hóa. Container giúp đóng gói và triển khai ứng dụng một cách đáng tin cậy và dễ dàng hơn, cũng như tăng tính di động, linh hoạt của ứng dụng cho phép các nhà phát triển có thể triển khai ứng dụng của mình trên nhiều nền tảng, môi trường khác nhau một cách đơn giản và nhanh chóng. Mỗi container được xem như một môi trường độc lập với các container khác trên cùng một máy chủ.
Các container được ảo hóa ở mức hệ điều hành và dùng chung nhân hệ điều hành với máy chủ chạy các container này.