CHƯƠNG 1: KIẾN THỨC CƠ BẢN Cùng với sự xuất hiện và phổ biến của phương pháp phát triển phần mềm linh hoạt, các ý tưởng mới liên tục xuất hiện để tận dụng tối đa lợi ích mà phương pháp này mang lại. Trong đó, nổi bật nhất là ý tưởng về việc tích hợp, chuyển giao và triển khai liên tục: phần mềm sẽ được dịch (build), đóng gói và phát hành ngay khi có sự thay đổi trên hệ thống quản lý mã. Tuy nhiên, ý tưởng này không thể thực hiện được tại thời điểm mà nó được đề xuất do nhiều giới hạn về công nghệ và cơ sở hạ tầng. Với sự xuất hiện của tính toán đám mây, sự tiến hóa trong kiến trúc phần mềm (từ kiến trúc một khối tới kiến trúc vi dịch vụ) hay ý tưởng về đóng gói ứng dụng trong container, việc xây dựng một hệ thống triển khai liên tục đã trở nên khả thi hơn.
Để giúp làm rõ hơn những nội dung trong các chương tiếp theo, chương này sẽ giới thiệu các khái niệm cơ bản nêu trên một cách chi tiết.1 Tính toán đám mây 1.1 Giới thiệu về tính toán đám mây Tính toán đám mây là sự cung cấp, phân phối sức mạnh tính toán, hệ thống lưu trữ, ứng dụng hoặc các nguồn tài nguyên công nghệ thông tin khác thông qua nền tảng đám mây, sử dụng kênh truyền internet và giá cả được tính toán dựa vào khối lượng sử dụng [2]. Sử dụng tính toán đám mây, một công ty hay tổ chức không cần đầu tư nhiều chi phí ban đầu vào việc chuẩn bị các thiết bị phần cứng, hay dành nhiều thời gian để quản lý chúng. Thay vào đó, công ty/tổ chức chỉ cần cung cấp đúng yêu cầu về chủng loại và kích thước nguồn tài nguyên tính toán cho nhà cung cấp dịch vụ, mọi thứ sẽ được cung ứng gần như ngay lập tức. Một đặc điểm quan trọng của đám mây đó là các dịch vụ gần như trong suốt với người dùng, nghĩa là người dùng gần như không cần quan tâm làm thế nào mà dịch vụ đó được cung ứng mà chỉ cần tập trung vào việc làm thế nào để sử dụng chúng.
Với giao diện người dùng đơn giản, hầu hết các dịch vụ đám mây đòi hỏi rất ít kiến thức về quản trị. Tính toán đám mây được chia thành ba mô hình cơ bản [3]: • Cơ sở hạ tầng như một dịch vụ (Infrastructure as a service - IaaS): cung cấp cho người dùng các tài nguyên tính toán ở cấp độ thấp nhất, bao gồm: máy chủ, mạng, hệ thống lưu trữ, trung tâm dữ liệu,. và giá cả tính theo khối lượng sử dụng. Đối với người sử dụng, đặc biệt là các doanh nghiệp, lợi ích mà IaaS mang lại là rất lớn, điển hình là việc không cần đầu tư phần cứng, cơ sở hạ tầng 4 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com có thể thay đổi linh động tùy vào nhu cầu sử dụng và việc có nhiều dịch vụ linh hoạt, sáng tạo đi kèm.
• Nền tảng như một dịch vụ (Platform as a service - PaaS): cung cấp môi trường được xây dựng trên nền tảng đám mây với tất cả mọi thứ cần thiết để phát triển và chuyển giao những ứng dụng trên nền web (cloud). Người dùng không cần gánh chi phí cũng như quan tâm tới các công việc phức tạp liên quan tới việc mua, quản lý thành phần phần cứng, phần mềm, cung ứng hay hosting như cách truyền thống. Lợi ích của PaaS đối với người dùng trước hết là ở việc phát triển và đưa phần mềm ra thị trường nhanh hơn so với trước đây, việc triển khai phần mềm mới lên đám mây chỉ mất vài phút. Ngoài ra, Paas giúp giảm thiểu sự phức tạp của việc quản lý phần giữa (middleware).
• Phần mềm như một dịch vụ(Software as a service - SaaS): là các ứng dụng trên nền tảng đám mây, chạy trên những máy tính "nằm trong đám mây", được sở hữu và vận hành bởi nhà cung cấp nền tảng đám mây, kết nối tới người dùng qua internet và trình duyệt. Với SaaS, người dùng có thể nhanh chóng đăng kí và bắt đầu sử dụng phần mềm mà gần như không phải làm bất cứ việc gì liên quan tới phát triển; các ứng dụng và dữ liệu có thể được truy cập từ bất cứ máy tính nào có kết nối Internet. Người dùng cũng không cần lo lắng về việc mất mát dữ liệu do dữ liệu đã được lưu trữ trong đám mây. Hơn thế, các dịch vụ có khả năng scale linh hoạt theo nhu cầu sử dụng, do vậy hiệu năng luôn được đảm bảo.2 Sự phổ biến của ứng dụng dựa vào đám mây Việc chuyển đổi sang đám mây là sự phát triển tự nhiên đối với việc cung ứng các dịch vụ công nghệ thông tin.
Nền tảng đám mây cung cấp một môi trường với các tài nguyên đa dạng, từ tính toán, lưu trữ cho tới mạng, có khả năng co dãn, linh động theo nhu cầu sử dụng. Ngày càng nhiều công ty, tổ chức chuyển dần sang phát triển phần mềm, ứng dụng cho nền tảng đám mây thay vì cách phát triển truyền thống, bởi: • Tốc độ: Ngày nay tốc độ có yếu tố quan trọng quyết định sự tồn tại của một công ty, tổ chức. Các tính năng mới khi được hoàn thành cần được triển khai ngay để thu hút người sử dụng, giành lấy thị phần. Những công ty lớn như Google, Facebook, Amazon, Uber, Grab,.
triển khai tính năng mới, hay đơn giản chỉ là bản vá, bản nâng cấp hàng chục tới hàng trăm lần mỗi ngày. Điều này giúp họ thu hút người dùng trước khi đối thủ kịp phản ứng, nhanh chóng sửa lỗi trước khi có vấn đề phát sinh. Đặc điểm co dãn và khả năng kết nối của đám mây giúp việc triển khai liên tục này trở nên khả thi. 5 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com • Khả năng cô lập lỗi: Kiến trúc sử dụng cho các ứng dụng dựa vào đám mây giúp cho việc cô lập lỗi trở nên dễ dàng hơn.
Đối với các phần mềm truyền thống, kiến thúc thường được sử dụng là một khối, tuy nhiên đối với nền tảng đám mây, kiến trúc phổ biến nhất hiện nay là vi dịch vụ. Với vi dịch vụ, khi lỗi xảy ra, chỉ những thành phần có lỗi bị ảnh hưởng. Chúng có thể được tắt đi và thay thế mà không gây ảnh hưởng tới cả hệ thống tổng thể. Cụ thể về kiến trúc này sẽ được giới thiệu trong các phần sau.
• Khả năng co dãn (scale): Khi ứng dụng giành được thị phần nhất định, số lượng người dùng có thể sẽ tăng lên nhanh chóng. Trước khi xuất hiện nền tảng đám mây, các công ty thường phải nâng cấp phần cứng cho máy chủ bằng việc nâng cao sức mạnh máy (scale-up), do việc mở rộng năng lực theo chiều ngang (scale-out) đòi hỏi quá trình mua máy, cài đặt, tích hợp mất quá nhiều thời gian và phần mềm truyền thống không được thiết kế phù hợp cho việc scale-out. Kể cả khi việc scale-out có thể được thực hiện thì cũng không hiệu quả. Với sự xuất hiện của những nền tảng đám mây như Amazon Web Services (AWS), Google Cloud Platform (GCP) hay Microsoft Azure, cùng với việc xuất hiện các công nghệ, kiến trúc mới cho nền tảng đám mây, việc mở rộng theo chiều ngang (scale-out) có thể được thực hiện chỉ trong vòng vài phút.2 Tích hợp, chuyển giao và triển khai liên tục 1.1 Tích hợp liên tục Tích hợp liên tục là quá trình tự động hóa việc dịch (build) và kiểm thử mã mỗi khi các thành viên trong đội cập nhật mã lên hệ thống quản lý phiên bản (tích hợp liên tục đòi hỏi những nhà phát triển phải tích hợp mã vào một kho chứa mã duy nhất).
Tích hợp liên tục khuyến khích các nhà phát triển chia sẻ mã và các bài kiểm thử đơn vị (unit test) bằng việc hợp nhất những thay đổi trên máy lên kho quản lý mã chung ngay khi hoàn thiện một tác vụ nhỏ nào [4]. Từ yêu cầu hợp nhất, các máy chủ sẽ kích hoạt luồng (pipeline): lấy mã mới về máy chủ CI, chạy quá trình dịch, kiểm thử, … Nếu có lỗi xảy ra ở bất cứ phần nào trong luồng, sửa lỗi là việc được ưu tiên hàng đầu. Tích hợp liên tục ngày càng trở nên phổ biến hơn bởi những nhà phát triển phần mềm thường sẽ làm việc một cách độc lập, và cuối cùng họ sẽ cần tích hợp mã với những thành viên khác trong đội, hoặc rộng hơn là các đội khác trong công ty. Việc chờ đợi nhiều ngày để tích hợp mã sẽ gây ra nhiều lỗi hợp nhất (merge conflict) khó giải quyết.
Luồng (pipeline) tích hợp được khởi động mỗi khi có mã được đẩy lên kho chứa mã chung giúp giảm thiểu đáng kể vấn đề trên. 6 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Với mỗi công ty, tổ chức, pipeline tích hợp được xác định tùy thuộc vào công cụ sử dụng, ngôn ngữ lập trình cũng như rất nhiều yếu tố khác, tuy nhiên luồng thực hiên cơ bản bao gồm các bước sau [5]: 1. Đẩy mã lên kho chứa mã chung 2. Phân tích tĩnh 3.
Kiểm thử trước khi triển khai 4. Đóng gói và triển khai lên môi trường kiểm thử 5. Kiểm thử sau khi triển khai 1.2 Chuyển giao liên tục Về cơ bản, một luồng chuyển giao liên tục bao gồm các bước giống như luồng tích hợp liên tục đã liệt kê ở phần trước đó. Điểm khác biệt lớn nhất đó là: bước "5.
Kiểm thử sau khi triển khai" trong tích hợp liên tục thường đòi hỏi việc can thiệp bằng tay. Các bản dịch không vượt qua được các bài kiểm tra ở bước này sẽ bị loại. Còn trong Chuyển giao liên tục, sẽ có các cơ chế để tự động hóa bước này. Kết quả cuối cùng là một bản dịch mà luôn sẵn sàng để triển khai trên môi trường sản phẩm thực tế.1: Các bước cơ bản trong tích hợp liên tục [5] 7 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.3 Triển khai liên tục Triển khai liên tục là mục tiêu cuối cùng trong chuỗi tự động hóa này.
Bản dịch cuối cùng sau bước chuyển giao liên tục là bản dịch luôn sẵn sàng để triển khai vào môi trường thực tế, tuy nhiên việc triển khai hay không và chọn phiên bản nào để triển khai lại phụ thuộc vào quyết định của đội vận hành. Trong triển khai liên tục, bất cứ bản dịch nào vượt qua được tất cả các bài kiểm thử đều sẽ được triển khai tự động lên môi trường sản phẩm thực tế. Không có sự can thiệp của con người trong qúa trình này.3 Kiến trúc hệ thống Trong những năm gần đây, kiến trúc phần mềm web đã phát triển với một tốc độ nhanh chóng.