CHƯƠNG 2: YÊU CẦU CỦA HỆ THỐNG TRIỂN KHAI LIÊN TỤC
2.1 Yêu cầu về điều phối container
Trong các cách tiếp cận cơ sở hạ tầng dùng để triển khai dịch vụ, cách thức xem các máy như nhau thường được dùng trong các hệ thống vi dịch vụ sử dụng container.
Với cách tiếp cận này, các máy được đối xử một cách công bằng và người vận hành không phân phối các ứng dụng cụ thể lên các máy nhất định mà sử dụng các phần mềm lập lịch để quản lý vòng đời các ứng dụng (thường được đóng gói và triển khai
dưới dạng container). Tuy nhiên, yêu cầu đặt ra là làm cách nào người vận hành biết được container nào được triển khai trên máy nào bởi bộ lập lịch. Các công cụ khám phá dịch vụ được giới thiệu để giúp giải quyết vấn đề này.
Đối với các Docker container, vấn đề được thu gọn lại thành làm thế nào để có thể ánh xạ giữa container đang chạy và vị trí của nó. Vị trí ở đây chính là địa chỉ IP và cổng trên máy mà container được triển khai. Việc ánh xạ này cần được thực hiện một cách nhanh chóng và chính xác, bởi các container có thể được tắt hay bật lại trên các máy khác nhau trong cluster tại bất cứ thời điểm nào tùy thuộc vào môi trường.
Một giải pháp khám phá dịch vụ cần cung cấp được hai chức năng chính: [11]
• Đăng kí: thiết lập ánh xạ giữa container và vị trí chạy khi container được triển khai. Bởi chỉ có bộ lập lịch biết chính xác vị trí mà container chạy, bộ lập lịch được xem như là nguồn đáng tin cậy duy nhất về vị trí container.
• Tìm kiếm: Cho phép các container hay các dịch vụ ngoài tìm kiếm các ánh xạ của các container khác để có thể giao tiếp với chúng. Yêu cầu đối với việc tìm kiếm là thông tin cần chính xác và thời gian phản hồi nhanh.
2.1.2 Bộ lập lịch
Một bộ lập lịch cho hệ thống phân tán sẽ dựa vào yêu cầu của người dùng để xác định ứng dụng và triển khai nó trên một hoặc nhiều máy đang khả dụng.
Ví dụ: người dùng có thể gửi yêu cầu chạy nhiều bản sao của một ứng dụng nhất định, bộ lập lịch sẽ dựa vào thông tin về tài nguyên của các máy để phân bố triển khai ứng dụng một cách hợp lí. Đối với Docker, việc này đòi hỏi ảnh của ứng dụng phải có sẵn trên máy chuẩn bị triển khai và Docker phải được cài trên các máy đó.
Hình 2.1: Bộ lập lịch
Hình 2.1 thể hiện một ví dụ của lập lịch: người dùng yêu cầu triển khai ba bản
về trạng thái cluster, cách tận dụng tài nguyên các máy để đảm bảo bật đủ số lượng bản sao yêu cầu và làm thế nào để thỏa mãn các ràng buộc khác từ người dùng (Ví dụ:
chỉ triển khai ứng dụng trên máy có sử dụng ổ chứa SSD). Ngoài ra, chất lượng dịch vụ cũng là một yếu tố để đưa ra quyết định lựa chọn máy triển khai.
2.1.3 Điều phối container
Bộ lập lịch và chức năng khám phá dịch vụ đóng vai trò quan trọng trong việc quản lý container. Trên thực tế, hai thành phần này gần như luôn được sử dụng cùng nhau và nằm trong một khái niệm rộng hơn gọi là điều phối container [11].
Hình 2.2: Điều phối container và các thành phần
Hình 2.2 thể hiện các thành phần cơ bản của một nền tảng điều phối container như thành phần kiểm tra sức khỏe, tự động scale, thành phần khám phá dịch vụ, bộ lập lịch hay thành phần nâng cấp hệ thống. Nền tảng điều phối container sẽ thực hiện qúa trình khởi tạo, lập lịch, lựa chọn máy cho tới giám sát, cập nhật và đảm bảo giao tiếp của các container trong cluster.
Các nền tảng điều phối container khác nhau thường có nhiều đặc điểm khác nhau, nhưng tất cả những nền tảng này đều phải đảm bảo cung cấp được các tính năng cơ bản như:
• Cách thức cấu hình đơn giản: Những nền tảng điều phối container thường cho phép người dùng khai báo các thông tin về cấu hình ứng dụng, kho ảnh, cấu hình về mạng và các cổng được mở trên máy, thông tin về bộ lưu trữ ... một cách đơn giản, trực quan thông qua các định dạng JSON hoặc YAML.
• Có các API để bật tắt container: Nền tảng điều phối container sẽ có API cho phép việc cung ứng hay xếp lịch để bật container. Dựa vào các ràng buộc về tài nguyên, về mối tương quan của container cần bật với các container đang chạy khác mà các nền tảng điều phối sẽ chọn máy phù hợp để triển khai.
• Có cơ chế khám phá dịch vụ: Khi triển khai một hệ thống gồm rất nhiều dịch vụ, các dịch vụ được đóng gói theo dạng ảnh container và chạy trên nhiều máy khác nhau thì việc một container có thể nhận biết các thông tin về container khác sẽ trở nên khó khăn và đây là một trong những việc quan trọng hàng đầu trong qúa trình quản lý toàn bộ cluster. Các nền tảng điều phối container đều cung cấp giải pháp để giải quyết vấn đề này cho người dùng, chẳng hạn thông qua các dịch vụ dạng DNS, dịch vụ proxy, ...
• Cơ chế giám sát và sửa lỗi: Nền tảng điều phối container có trách nhiệm theo dõi, giám sát container cũng như các máy mà chúng đang chạy. Nếu container bị lỗi, việc bật một container mới để thay thế được thực hiện gần như ngay lập tức. Nếu một máy trong cluster bị lỗi, các container đang chạy trên máy đấy sẽ được phân phối để bật lại trên những máy còn lại. Thường thì người sử dụng sẽ miêu tả trạng thái container mong muốn thông qua file cấu hình (phổ biến nhất là dạng JSON hoặc YAML) còn nền tảng điều phối sẽ giám sát để luôn đảm bảo điều này.
Để đảm bảo xây dựng được hệ thống triển khai liên tục cho các phần mềm dựa trên vi dịch vụ, yêu cầu đầu tiên chính là việc lựa chọn nền tảng điều phối container thỏa mãn những tính chất đã nêu trên, phù hợp với cơ sở hạ tầng mà tổ chức đang sử dụng, có nhiều công cụ hỗ trợ cũng như có khả năng mở rộng tốt trong tương lai.
2.2 Yêu cầu cho các nhà phát triển