Triển khaicácứngdụngmớitrênIBM
PureSystems bằng cáctrìnhcắmthêm,Phần2
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 ứngdụng của nhà
cung cấp dịch vụ độc lập, trênIBM PureSystems. SugarCRM là một ứngdụng PHP đòi hỏi ngăn
xếp LAMP (Linux®, Apache, MySQL, PHP). LAMP không được IBMPureSystems 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áctrìnhcắm thêm hỗ
trợ cho việc mô hình hóa, triểnkhai và hoạt động của ứngdụngtrê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 đọcPhầ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ìnhcắm thêm cho ứngdụ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ểncác kịch bản lệnh.
Gỡ lỗi cáctrìnhcắm thêm.
Chạy một kịch bản lệnh vòng đời.
Xóa một trìnhcắm thêm không thể xóa được.
Nhập khẩu cáctrìnhcắm thêm riêng lẻ so với cáctrìnhcắm thêm đóng gói.
Sử dụngcá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ìnhcắm thêm IBMPureSystems 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ìnhcắ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ìnhcắ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
Tệp cấu hình của trìnhcắmthê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ìnhcắ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ácphầ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ìnhcắ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ìnhcắm thêm cho nhiều nền tảng
Giao diện người dùng cấu hình của trìnhcắm thêm được định nghĩa trong tệp config_meta.json
của trìnhcắ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áctrìnhcắ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ợ
Nền tảng đích ban đầu để triểnkhai đá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 ứngdụ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ìnhcắm thêm vì
nó yêu cầu trìnhcắ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ểnkhai đượ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ứngdụng SugarCRM. Chúng tôi đã sử dụngcá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áctrìnhcắm thêm DB2 bên ngoài hộp, như đã mô tả
trong Phần 1, Sử dụng lại cáctrìnhcắ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ìnhcắ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ìnhcắ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ẻ.
Trong 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ìnhcắm thêm gỡ lỗi
Trong khi phát triểncá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ựngtrìnhcắmthêm, xóa trìnhcắm thêm trong IBM PureSystems,
rồi triểnkhai 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ểntrìnhcắ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ìnhcắ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ểncá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ìnhcắ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ểnkhai tải làm việc của IBM.
Về đầu trang
Xóa một trìnhcắ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ìnhcắm thêm trong IBMPureSystems vì một số phần tử của trìnhcắ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ìnhcắ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 ứngdụng và các khuôn mẫu ứngdụng đã triểnkhai có liên
quan đến trìnhcắm thêm đó thường loại bỏ được lỗi này.
Về đầu trang
Nhập khẩu cáctrìnhcắm thêm riêng lẻ so với cáctrìnhcắm thêm đóng gói
Mặc dù cuối cùng chúng tôi đã đóng gói tất cả cáctrìnhcắ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áctrìnhcắm thêm riêng lẻ vào IBMPureSystems 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áctrìnhcắ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áctrìnhcắ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áctrìnhcắ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ìnhcắ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ìnhcắ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ìnhcắm thêm gặp rắc rối. Cáctrìnhcắ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 IBMPureSystems cho phép xóa kiểu mẫu chỉ khi
không có cáctrìnhcắ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ụngcá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ểnkhai 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.
Trì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áctrìnhcắ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 IBMPureSystems 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ìnhcắ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ểntrìnhcắmthê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ểntrìnhcắ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áctrìnhcắ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ểntrìnhcắ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ểntrìnhcắ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ì IBMPureSystems 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ìnhcắ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ìnhcắm thêm. Nói chung, việc sử dụng một
hì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.
. Triể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) . 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. 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