LAMP không được IBM PureSystems hỗ trợ bên ngoài hộp, do đó, nhóm này đã phát triển một kiểu mẫu mới và một tập các trình cắm thêm hỗ trợ cho việc mô hình hóa, triển khai và hoạt động củ
Trang 1Triển khai các ứng dụng mới trên IBM
PureSystems bằng các trình cắm thêm, Phần 2
Trong Phần 1 của loạt bài này, các chuyên gia trong nhóm các phòng thí nghiệm IBM Cloud (Đám mây của IBM) mô tả những nỗ lực phát triển để chạy SugarCRM, một ứng dụng của nhà cung cấp dịch vụ độc lập, trên IBM PureSystems SugarCRM là một ứng dụng PHP đòi hỏi ngăn xếp LAMP (Linux®, Apache, MySQL, PHP) LAMP không được IBM PureSystems hỗ trợ bên ngoài hộp, do đó, nhóm này đã phát triển một kiểu mẫu mới và một tập các trình cắm thêm hỗ trợ cho việc mô hình hóa, triển khai và hoạt động của ứng dụng trên đỉnh của hình ảnh IBM AIX® và Linux cơ sở Bài này đề cập đến các bài học thu được từ dự án đó
Nó rất có ích, nhưng cũng không nhất thiết phải đọc Phần 1 trước khi tiếp tục với bài này
Các bài học thu được từ việc phát triển một trình cắm thêm cho ứng dụng SugarCRM hiện có của bên thứ ba trình bày các chủ đề sau:
Hỗ trợ nhiều nền tảng
Quản lý MySQL và DB2
Phát triển các kịch bản lệnh
Gỡ lỗi các trình cắm thêm
Chạy một kịch bản lệnh vòng đời
Xóa một trình cắm thêm không thể xóa được
Nhập khẩu các trình cắm thêm riêng lẻ so với các trình cắm thêm đóng gói
Sử dụng các phiên bản để tăng tốc độ phát triển
Xử lý các mã nhị phân lớn
Mở rộng hình ảnh cơ sở
Hỗ trợ nhiều nền tảng
Các trình cắm thêm IBM PureSystems về bản chất là trung lập về nền tảng Các nhà phát triển trình cắm thêm phải thiết kế một kế hoạch thực hiện để hỗ trợ nhiều nền tảng trong các giai đoạn khác nhau của vòng đời trình cắm thêm và ứng dụng Nếu không, việc phát triển, bảo trì và gỡ lỗi đang diễn ra có thể trở nên rất khó khăn hơn là nhanh chóng
Các lĩnh vực sau đây đặc biệt quan trọng cho dự án của chúng tôi:
Khai báo sự hỗ trợ và các yêu cầu về nền tảng
Thiết lập các tệp và các kịch bản lệnh cho nhiều nền tảng
Thu thập đầu vào hỗ trợ trình cắm thêm cho nhiều nền tảng
Viết các kịch bản lệnh trung lập-nền tảng và đặc trưng-nền tảng
Quản lý các nền tảng có hỗ trợ so với các nền tảng không hỗ trợ
Hãy xem xét các lĩnh vực này kỹ hơn
Khai báo sự hỗ trợ và các yêu cầu về nền tảng
Trang 2Tệp cấu hình của trình cắm thêm, config.json, có một phần requires (các yêu cầu) cho từng cá thể gói Nếu một trình cắm thêm hỗ trợ nhiều nền tảng có cùng một tập các tệp, thì không cần khai báo nền tảng
Nếu không, như trong trường hợp của chúng tôi, có những khác biệt rất lớn giữa các tệp và các kịch bản lệnh của Linux và AIX, mệnh đề arch nên được dùng, cùng với các thuộc tính khác như bộ nhớ và CPU, để biểu thị định nghĩa gói bị hạn chế để hỗ trợ một nền tảng cụ thể Như các kết quả cho thấy, gói của chúng tôi có hai định nghĩa, mỗi định nghĩa có các phần và các yêu cầu
hệ thống độc lập
Thiết lập các tệp và các kịch bản lệnh cho nhiều nền tảng
Cấu trúc thư mục trong trình cắm thêm có liên quan chặt chẽ đến định nghĩa gói Để bảo trì dễ dàng hơn, hãy luôn xem xét việc sử dụng một tập các tệp và các kịch bản lệnh giống nhau cho nhiều nền tảng Chúng tôi đã chọn biểu thị rõ platform (nền tảng) trong các tên thư mục của chúng tôi như được mô tả trong Phần 1, Thiết kế và phát triển
Thu thập đầu vào hỗ trợ trình cắm thêm cho nhiều nền tảng
Giao diện người dùng cấu hình của trình cắm thêm được định nghĩa trong tệp config_meta.json của trình cắm thêm Cách tiếp cận có thể khai báo được này giúp dễ dàng xây dựng giao diện người dùng và đồng thời làm cho việc hỗ trợ nhiều nền tảng bị hạn chế về tính linh hoạt nếu các yêu cầu khác nhau
Với danh sách các tệp được mô tả trong Phần 1, Đóng gói giải pháp cho Linux và một danh sách dài hơn nhiều cho AIX, về mặt tổng quát chúng tôi đã quyết định lấy một đầu vào của một tệp đóng gói có tất cả các tệp tiên quyết được nén vào một cấu trúc thư mục định sẵn cho từng trình cắm thêm chức năng của chúng tôi Thiết kế này cho phép người quản trị đám mây thu gom vừa
đủ các tệp dùng cho nền tảng đích trong khi các trình cắm thêm của chúng tôi hỗ trợ cả Linux lẫn AIX
Viết các kịch bản lệnh trung lập-nền tảng và đặc trưng-nền tảng
Nguyên tắc là viết một tập các kịch bản lệnh giống nhau cho các nền tảng Linux và AIX bất cứ ở đâu có thể Cuối cùng chúng tôi đã viết hai tập do các quá trình để dựng lên và chạy PHP khác nhau đáng kể
Tuy nhiên, chúng tôi đã hiểu được ý nghĩa quan trọng của việc biết rõ các hạn chế nền tảng về các lệnh và các kịch bản lệnh Ví dụ, trong AIX, dòng đầu tiên của một kịch bản lệnh vỏ (shell) nên là #!/bin/sh hoặc #!/bin/ksh chứ không phải là #!/bin/bash và nên sử dụng tar ngay sau gunzip vì lệnh tar không có tùy chọn -z
Quản lý các nền tảng có hỗ trợ so với các nền tảng không hỗ trợ
Trang 3Nền tảng đích ban đầu để triển khai đám mây của chúng tôi là System p (Hệ thống p); tuy nhiên,
vì rất nhiều lý do logic và lập lịch biểu, chúng tôi đã thấy nó cũng cần hỗ trợ cho cả System x (Hệ thống x) nữa
Một mẫu ứng dụng ảo là độc lập về nền tảng; do đó nhu cầu hỗ trợ cho nhiều nền tảng không ảnh hưởng đến các khía cạnh mô hình hóa, nhưng nó tác động đến việc thực hiện trình cắm thêm vì
nó yêu cầu trình cắm thêm cung cấp sự hỗ trợ đầy đủ cho tất cả các nền tảng
Trong trường hợp của chúng tôi, không thể trình bày đầy đủ ma trận hỗ trợ do tài nguyên bị hạn chế của chúng tôi Sự hạn chế này không để lộ ra nguy cơ về một trải nghiệm người dùng không mong muốn khi một mẫu bị hỏng không thể triển khai được trong một nền tảng không hỗ trợ Cách giải quyết hiện tại của chúng tôi cho tình huống này là cung cấp các khuôn mẫu có một tên gắn liền với nền tảng có hỗ trợ, ví dụ, "SugarCRM với DB2 trên AIX"
Về đầu trang
Quản lý MySQL và DB2
Về mặt kỹ thuật, MySQL và DB2 đều thỏa mãn cùng một mục đích của một cơ sở dữ liệu tầng sau cho các ứng dụng SugarCRM Chúng tôi đã sử dụng các khuôn mẫu Velocity tương tự để mô hình hóa và chuyển đổi để rút ngắn thời gian phát triển của chúng mình Tuy nhiên, các khía cạnh sở hữu phần mềm đã gây ra một tác động lớn đến cấu trúc liên kết được hỗ trợ và việc thực hiện trong giải pháp của chúng tôi IBM sở hữu DB2, do đó đương nhiên chúng tôi đã thiết kế các giải pháp của mình để tích hợp với các trình cắm thêm DB2 bên ngoài hộp, như đã mô tả trong Phần 1, Sử dụng lại các trình cắm thêm hiện có
Ngược lại, chúng tôi đã áp dụng cách tiếp cận ghép lỏng để hỗ trợ MySQL hiện có
Về đầu trang
Phát triển kịch bản lệnh
Trong khi cài đặt ngăn xếp phần mềm theo yêu cầu của SugarCRM trên hình ảnh cơ sở, chúng tôi đã thấy rằng một số gói (RPM) không được kèm theo trong hình ảnh đó Kết quả là, trình cắm thêm cần kèm theo và cài đặt lại thiếu các RPM này
Một giải pháp có thể là cung cấp một dịch vụ trong lúc kích hoạt để thỏa mãn tự động các phụ thuộc và cài đặt các gói còn thiếu Việc thực hiện trình cắm thêm chỉ đơn giản là liệt kê các gói tiên quyết và không cần xử lý chúng
Một điều kiện lỗi mà chúng tôi đã gặp phải liên quan đến điều kiện chạy đua giữa hai vai trò
(Một điều kiện chạy đua xảy ra khi đầu ra hoặc kết quả của quá trình này không theo dự kiến và
phụ thuộc rất nhiều vào trình tự hay thời gian của các sự kiện khác) Điều quan trọng cần lưu ý là các kịch bản lệnh vòng đời của các vai trò khác nhau được gọi song song; do đó, cần thận trọng
để tránh xung đột khi các kịch bản lệnh quản lý tài nguyên chia sẻ
Trang 4Trong một cá thể, chúng tôi đã thấy rằng một kịch bản lệnh của một vai trò đã dừng hoạt động Apache trong khi một kịch bản lệnh của vai trò khác đã khởi động Apache Điều này dẫn đến hành vi bất thường ở nơi Apache thường không hoạt động đúng Điều cần thiết là xác định các dịch vụ hoặc tài nguyên chia sẻ và thiết kế mã để quản lý chúng đúng đắn
Về đầu trang
Các trình cắm thêm gỡ lỗi
Trong khi phát triển các kịch bản lệnh vỏ, chúng tôi đã thấy rằng để đi qua chu kỳ chỉnh sửa kịch bản lệnh trong Eclipse, xây dựng trình cắm thêm, xóa trình cắm thêm trong IBM PureSystems, rồi triển khai lại là quá dài dòng Ngoài ra, cần xóa và tạo lại máy ảo và các mẫu đang sử dụng trình cắm thêm
Trong thực tế, chúng tôi tận dụng sự hỗ trợ gỡ lỗi trong PDK (Bộ dụng cụ phát triển trình cắm thêm) để tiến hành phát triển kịch bản lệnh Trước hết hãy thực hiện điều này bằng cách thêm tất
cả các tạo phẩm cần thiết và các tệp kịch bản lệnh cơ sở vào trình cắm thêm đó Chúng tôi đã triển khai mẫu có thành phần gỡ lỗi để tạo ra một môi trường có các tạo phẩm trong kho lưu trữ
và kích hoạt các thư mục có chứa các tệp JSON Sau đó, chúng tôi đã truy cập vào máy ảo và đã gọi riêng các kịch bản lệnh để phát triển và gỡ lỗi bổ sung Các kịch bản lệnh đã được sao chép lại vào các dự án Eclipse
Về đầu trang
Chạy một kịch bản lệnh vòng đời
Khi phát triển các kịch bản lệnh vòng đời Python, nhà phát triển phải chú ý tới các sự kiện vòng đời khởi động chạy mỗi kịch bản lệnh Một số kịch bản lệnh chỉ được chạy một lần trong toàn bộ vòng đời của một máy ảo và những kịch bản lệnh khác được thực hiện trong nhiều sự kiện vòng đời
Ví dụ, kịch bản lệnh install.py chỉ chạy một lần để khởi tạo trong khi kịch bản lệnh configure.py, start.py và stop.py cũng đều được gọi mỗi khi khởi động lại máy ảo
Chúng tôi đã có một yêu cầu cụ thể để thực hiện cài đặt SugarCRM trong kịch bản lệnh
changed.py của trình cắm thêm liên kết cơ sở dữ liệu sau khi tất cả Apache, PHP và cơ sở dữ liệu được cấu hình đúng Kịch bản lệnh install (cài đặt) sẽ chỉ được chạy một lần để thiết lập và cấu hình các nội dung SugarCRM, chứ không chạy mỗi khi gọi kịch bản lệnh changed.py để khởi động lại từng máy ảo
Một thuộc tính role (vai trò) có thể được giới thiệu trong Python để cho biết tình trạng cài đặt Trong kịch bản lệnh changed.py, chúng tôi kiểm tra sự tồn tại của một tệp cố định do SugarCRM tạo ra ở cuối quá trình cài đặt để bảo đảm không chạy quá trình này nhiều lần
Có thể tìm thấy các thông tin chi tiết về các kịch bản lệnh vòng đời trong Hướng dẫn phát triển
trình cắm thêm và Trung tâm Thông tin của bộ triển khai tải làm việc của IBM
Trang 5Về đầu trang
Xóa một trình cắm thêm không thể xóa được
Trong quá trình phát triển, chúng tôi thường phải đối mặt với một tình huống là không thể xóa được một trình cắm thêm trong IBM PureSystems vì một số phần tử của trình cắm thêm vẫn còn đang sử dụng Trong khi một thông báo lỗi chỉ nói đơn giản là trình cắm thêm đang sử dụng và không cung cấp thông tin về ở đâu hoặc như thế nào, chúng tôi đã thấy rằng việc tiến hành xóa hết các cá thể ứng dụng, các mẫu ứng dụng và các khuôn mẫu ứng dụng đã triển khai có liên quan đến trình cắm thêm đó thường loại bỏ được lỗi này
Về đầu trang
Nhập khẩu các trình cắm thêm riêng lẻ so với các trình cắm thêm đóng gói
Mặc dù cuối cùng chúng tôi đã đóng gói tất cả các trình cắm thêm của mình vào một kiểu mẫu, chúng tôi đã biết rõ rằng để nhập khẩu các trình cắm thêm riêng lẻ vào IBM PureSystems trong quá trình phát triển là hiệu quả và kịp thời hơn Kiểu mẫu chính vẫn phải được nhập khẩu riêng
rẽ sao cho có thể cấu hình và chạy các trình cắm thêm riêng lẻ
Cơ chế kết buộc cuối cùng này cho phép bất cứ ai trong chúng tôi thay đổi và gỡ lỗi chỉ một trình cắm thêm mà không làm ảnh hưởng đến kiểu mẫu và các trình cắm thêm khác Chu kỳ phát triển được rút ngắn là vô cùng có ích bởi vì một số các trình cắm thêm của chúng tôi chứa các tập tệp lớn và phải mất nhiều thời gian để nhập khẩu lại và chạy lại
Tức là, chúng tôi đã rơi vào một tình huống ở đó chúng tôi có thể không còn cấu hình hoặc xóa một trình cắm thêm được nhập khẩu riêng lẻ nữa nếu đã xóa kiểu mẫu chính trong IBM
PureSystems Kịch bản này có thể xảy ra khi một nhà phát triển cố gắng xóa một trình cắm thêm còn nhà phát triển khác đang ở trong quá trình làm mới kiểu mẫu đó Khi kiểu mẫu chính được đưa trở lại, có thể hoàn toàn quản lý được trình cắm thêm gặp rắc rối Các trình cắm thêm đóng gói kiểu mẫu không có vấn đề như vậy bởi vì chúng đến và đi cùng với kiểu mẫu đó
Chúng tôi đã đề nghị với nhóm sản phẩm IBM PureSystems cho phép xóa kiểu mẫu chỉ khi không có các trình cắm thêm phụ thuộc được nhập khẩu riêng lẻ; tính năng này sẽ được phân phối trong một bản phát hành tương lai
Về đầu trang
Sử dụng các phiên bản để tăng tốc độ phát triển
Mỗi kiểu mẫu có một phiên bản theo định dạng major.minor Trong quá trình phát triển, đôi khi chúng tôi đã muốn triển khai và so sánh nhiều phiên bản của một kiểu mẫu hoặc chúng tôi chỉ đơn giản không muốn trải qua chu kỳ xóa hết kiểu mẫu Chúng tôi đã thấy rằng nên sử dụng một phiên bản chính khác để xây dựng và cài đặt kiểu mẫu là rất thích hợp
Trang 6Trình cắm thêm được đóng gói trong kiểu mẫu cũng cần có một phiên bản chính mới và cần tham khảo phiên bản kiểu mẫu mới Ví dụ, nếu phiên bản kiểu mẫu hiện đang được cài đặt là 1.0.0.1 và phiên bản kiểu mẫu mới là 2.0.0.1, các trình cắm thêm nên có cấu hình như đoạn mã
ví dụ mẫu sau đây trong tệp config.json:
"name": "sugarcrm",
"version": "2.0.0.2",
"patterntypes": {
"primary": {
"sugarcrm": "2.0"
}
},
Kỹ thuật này không chỉ hỗ trợ xác minh nhanh chóng cách thực hiện kiểu mẫu mới, mà nó còn cho phép nhiều nhà phát triển chia sẻ môi trường IBM PureSystems giống nhau
Về đầu trang
Xử lý các mã nhị phân lớn
Do lý do cấp phép được mô tả trước đây, chúng tôi phải đóng gói một số phần mềm tách rời khỏi trình cắm thêm và tải chúng lên khi trình cắm thêm được triển khai Bước này được thực hiện chỉ một lần trong kịch bản bình thường; tuy nhiên, trong khi phát triển trình cắm thêm, việc tải lên lặp lại các tệp nhị phân lớn có dung lượng 500MB có thể bị cấm, đặc biệt là với một mạng có tốc
độ chậm
Một kỹ thuật được được nhóm phát triển trình cắm thêm sử dụng là dùng một biến thể của quá trình xây dựng cho phép tải các tệp nhị phân riêng rẽ với các trình cắm thêm Điều này là có thể với một môi trường phát triển nội bộ Nhóm phát triển trình cắm thêm đang làm việc để cung cấp khả năng này cho tất cả các nhà phát triển trình cắm thêm
Về đầu trang
Mở rộng hình ảnh cơ sở
Để cung cấp một tập phần mềm tiên quyết cho một ứng dụng, một sự trao đổi thường được tính đến là liệu có nên cài đặt phần mềm đó trên hình ảnh cơ sở hay kèm theo phần mềm đó như là một phần của hình ảnh cơ sở không Bởi vì IBM PureSystems cho phép người dùng mở rộng hình ảnh cơ sở, nên chúng tôi xem xét việc tạo ra một hình ảnh cơ sở mới với các RPM cần thiết cho SugarCRM Điều này làm đơn giản nỗ lực phát triển ban đầu cũng như nỗ lực bảo trì trong tương lai do trình cắm thêm sẽ được cách ly khỏi những thay đổi trong hình ảnh cơ sở
Tuy nhiên, vì một hình ảnh cơ sở được tùy chỉnh như vậy thường là phổ biến cho tất cả các mẫu, nên không rõ liệu cách tiếp cận này có khả thi trong thực tế không Hóa ra là một số tính linh hoạt trong khi kết hợp hình ảnh cơ sở, có lẽ cùng chung với một công cụ xây dựng hình ảnh như ICON, bổ sung các khả năng mới trong thiết kế trình cắm thêm Nói chung, việc sử dụng một
Trang 7hình ảnh cơ sở sẽ dễ dàng hơn cho khách hàng Việc bổ sung khả năng này đòi hỏi phải cân nhắc cẩn thận