mở đầu tiên cung cấp giải pháp tổng thể và đủ lớn để xây dựng nên một hệ thống SOA. Mule cung cấp một bộ đầy đủ các tính năng tích hợp cần thiết cho một doanh nghiệp. Mule là một nền tảng tích hợp dựa trên Java, cho phép các nhà phát triển kết nối các ứng dụng với nhau một cách nhanh chóng và dễ dàng, giúp các ứng dụng trao đổi dữ liệu với nhau. Mule cho phép tích hợp các hệ thống hiện có, bất kể các công nghệ khác nhau mà các ứng dụng sử dụng, bao gồm JMS, dịch vụ Web, JDBC, HTTP, và nhiều hơn nữa.
Kiến trúc ESB có thể đƣợc triển khai ở mọi nơi, có thể tích hợp và sắp xếp các sự kiện theo thời gian thực hoặc theo lô và có kết nối chung. Mule cung cấp đầy đủ công cụ và thƣ viện hỗ trợ cho lập trình viên phát triển ứng dụng. Anypoint Studio là một công cụ giúp dễ dàng phát triển một ứng dụng trên nền tảng MuleESB. Đƣợc xây dựng từ nền tảng của IDE Eclipse, Anypoint Studio cho phép lập trình viên có thể kéo thả các thành phần để tạo nên các dòng điều khiển (flow), để có thể chuyển đổi dữ liệu gửi đi từ ứng dụng này sang dữ liệu nhận vào của ứng dụng kia.
MuleSoft cung cấp cả giải pháp chạy tích hợp Mule server trên Anypoint Studio lẫn chạy độc lập ứng dụng trên Mule server (Standalone). Mule nhẹ nhƣng có khả năng mở rộng cao, cho phép ngƣời dùng bắt đầu từ việc kết nối một vài ứng dụng và tăng số lƣợng ứng dụng tham gia vào hệ thống theo thời gian. Một hệ thống theo kiến trúc ESB quản lý tất cả các tƣơng tác giữa các ứng dụng và các thành phần một cách minh bạch, bất kể chúng tồn tại trong cùng một máy ảo hay trên Internet, và bất kể giao thức truyền tải cơ bản mà chúng sử dụng. MuleSoft là z 7 nhà cung cấp duy nhất đƣợc Gartner đánh giá là công cụ đứng đầu trong việc phát triển hệ thống tích hợp, đặc biệt là ứng dụng theo công nghệ trục tích hợp (xem Hình 1.
MuleESB là bộ thƣ viện đƣợc cung cấp bởi MuleSoft cho phép phát triển ứng dụng ESB. Việc triển khai ứng dụng phân tán trên môi trƣờng mạng giúp cho việc kết nối giữa các ứng dụng dễ dàng, tuy nhiên lại gây ra khó khăn trong giao tiếp giữa các ứng dụng do việc khác biệt về công nghệ, nền tảng. MuleESB giải quyết vấn đề này bằng việc cung cấp một trục tích hợp có chức năng nhận và định tuyến thông điệp giữa các ứng dụng với nhau.3: Nền tảng tích hợp cho doanh nghiệp [8] MuleESB hoạt động nhƣ một bộ chứa các dịch vụ có khả năng tái sử dụng. Ngoài việc che giấu các dịch vụ khỏi định dạng thông điệp và các giao thức, tách biệt luồng nghiệp vụ với xử lý thông điệp, cho phép gọi dịch vụ ở các điểm độc lập, MuleESB còn cung cấp khả năng định tuyến, phân loại, sắp xếp thứ tự các thông điệp dựa trên nội dung và các quy tắc quản lý luồng nghiệp vụ cũng nhƣ chuyển đổi dữ liệu qua lại giữa các định dạng và giao thức khác nhau.
Kiến trúc MuleESB Hình 1.4 mô tả kiến trúc của MuleESB. Trong luồng xử lý, bộ chuyển đổi (Transformer) có vai trò chuyển đổi định dạng thông điệp thành các loại định dạng phù hợp với nơi nhận thông điệp, trƣớc khi đƣợc xử lý và định tuyến. Các bộ chuyển đổi (Transformer) là chìa khoá để trao đổi dữ liệu, dữ liệu chỉ đƣợc chuyển đổi khi cần thiết thay vì chuyển đổi thành định dạng chung, thông điệp có thể đƣợc gửi qua các kênh truyền khác nhau. z 8 Việc tách biệt giữa luồng logic nghiệp vụ và cách thức truyền nhận dữ liệu cho phép mở rộng kiến trúc hệ thống và dễ dàng tuỳ biến luồng nghiệp vụ.4: Kiến trúc MuleESB [6].
Khi một thông điệp đƣợc gửi đi giữa các ứng dụng, MuleESB tiếp nhận thông điệp, chuyển đổi định dạng thông điệp, phân loại và điều hƣớng sang dịch vụ nhận cần thiết bằng việc sử dụng bộ chuyển đổi (Transformer). Các thành phần (Components) chứa logic nghiệp vụ để xử lý dữ liệu bên trong thông điệp và không chứa thông tin nào về cách gửi/nhận của bản thân thông điệp đó.5: Mô hình luồng xử lý trên MuleESB Quá trình điều hƣớng thông điệp giữa các thành phần nhƣ Hình 1.5 là một ví dụ về luồng cơ bản của MuleESB. Quản lý luồng (Flow control) đảm bảo việc thông tin đúng đắn sẽ đƣợc chuyển đi đến đúng đích dựa vào các điều kiện đƣợc ghi trong thông điệp. Mule hỗ trợ nhiều loại thành phần xử lý khác nhau để quản lý và điều hƣớng z 9 thông điệp, để thêm các thành phần này, chỉ cần định nghĩa các thẻ XML trong file cấu hình của một ứng dụng Mule, Mule Studio sẽ tự động tìm và xử lý nội dung theo vai trò của thành phần đó.
Ứng dụng thực tế sử dụng MuleESB MuleESB đƣợc sử dụng rộng rãi để phát triển ứng dụng ESB, đặc biệt trong ngành tài chính, ngân hàng. Ví dụ sau đây trình bày về một hệ thống ngân hàng điện tử sử dụng MuleESB để phát triển ứng dụng ESB, giúp giảm thiểu chi phí phát triển và bảo trì, nâng cao chất lƣợng sản phẩm. Internet Banking (IB) là hệ thống ngân hàng điện tử dành cho khách hàng doanh nghiệp sử dụng các dịch vụ của VietinBank nhƣ: chuyển tiền, chi lƣơng, thanh toán chuỗi hóa đơn, nộp ngân sách nhà nƣớc, báo cáo.Hệ thống bao gồm các ứng dụng phía khách hàng, các ứng dụng quản trị của ngân hàng và các hệ thống lõi của ngân hàng (core banking). Các ứng dụng trong hệ thống đƣợc xây dựng trên các nền tảng khác nhau nhƣ .M… thậm chí có những ứng dụng xây dựng trên nền tảng công nghệ cũ nhƣ Visual Basic.6: Kiến trúc hệ thống IB cũ Trong hệ thống IB (Hình 1.6), ứng dụng RestAPI cung cấp các đầu dịch vụ cho các ứng dụng ERP của doanh nghiệp ngoài kết nối vào và thực hiện các giao dịch.
Mobile API cung cấp giao diện kết nối cho ứng dụng chạy trên thiết bị di động, khách hàng có thể sử dụng ứng dụng trên thiết bị cầm tay để thực hiện giao dịch. Web application là nơi cung cấp các giải pháp giao dịch cho doanh nghiệp trên nền tảng web. Report Dasboard hỗ trợ báo cáo cho ngƣời dùng ngân hàng. Bankend Application cung cấp màn hình quản trị hệ thống, xử lý lỗi xảy ra cho các giao dịch của khách hàng gửi tới.
IB Database là nơi lƣu trữ thông tin khách hàng và giao dịch của hệ thống Internet Banking. CoreBank thực hiện nghiệp vụ giao dịch, sao kê ngân hàng. Datawarehouse là kho dữ liệu phục vụ báo cáo. Payment gateway thực hiện z 10 nhiệm vụ cổng thanh toán, kết nối với các đối tác bên ngoài nhƣ nhà cung cấp dịch vụ, kho bạc nhà nƣớc, chi cục thuế.6 mô tả kiến trúc hệ thống Internet Banking xây dựng theo mô hình kết nối điểm-điểm (point-to-point).
Với kiến trúc này, hệ thống sẽ bao gồm nhiều kết nối giữa các ứng dụng khác nhau. Việc này dẫn đến quá trình bảo trì và mở rộng hệ thống gặp nhiều khó khăn, khả năng kiểm soát lỗi kém. Ngoài ra, kết nối point-to-point đối với hệ thống này dẫn đến các quy trình nghiệp vụ của các ứng dụng trên lặp lại và chồng chéo nhau, gây tốn chi phí phát triển và bảo trì.7 mô tả hệ thống Internet Banking sau khi phát triển sử dụng một lớp ESB thực hiện điều hƣớng thông điệp và xử lý kết hợp với quy trình nghiệp vụ để giảm thiểu việc phát triển chồng chéo nhiều chức năng giống nhau, đồng thời giảm thiểu số lƣợng các kết nối giữa các ứng dụng. Ngoài ra, việc tích hợp còn giúp tiết kiệm kiệm chi phí triển khai, bảo trì.
MuleESB là một framework nhẹ, quá trình triển khai diễn ra tự động và nhanh chóng, nên thời gian ngắt của ứng dụng trong lúc triển khai nhỏ (dƣới 60 giây), đảm bảo hệ thống chạy thông suốt thời gian dài.7: Kiến trúc hệ thống IB mới 1. Tích hợp và triển khai liên tục 1. Tích hợp liên tục Theo định nghĩa của Martin Fowler [9], tích hợp liên tục – Continuous Intergration là phƣơng pháp phát triển phần mềm đòi hỏi các lập trình viên trong nhóm tích hợp ứng dụng thƣờng xuyên. Mỗi ngày, các thành viên đều phải theo dõi và phát triển công việc của họ ít nhất một lần.
Việc này sẽ đƣợc một nhóm khác kiểm tra tự động, nhóm này sẽ tiến hành kiểm thử truy hồi để phát hiện lỗi nhanh nhất có thể. Đây là phƣơng pháp tiếp cận giúp giảm bớt vấn đề về tích hợp hơn và cho phép phát triển phần mềm gắn kết nhanh hơn. Các nhóm phát triển sử dụng phƣơng pháp Agile thƣờng dùng tích hợp liên tục để đảm bảo mã nguồn của toàn dự án luôn dịch đƣợc và z 11 chạy đúng. Đây là một thực tiễn phát triển yêu cầu các lập trình viên tích hợp mã vào một kho lƣu trữ đƣợc chia sẻ trong các khoảng thời gian đều đặn, giúp loại bỏ các vấn đề của việc tìm lỗi xảy ra trong pha lập trình.
Bởi vậy, mỗi khi có một sự thay đổi mã nguồn trên kho lƣu trữ, quá trình tích hợp liên tục sẽ đƣợc kích hoạt. Với tầm quan trọng của kiểm thử, việc sử dụng một giải pháp tích hợp liên tục (Continuous Integration - CI) trong cả quá trình phát triển là vô cùng cần thiết. CI đem lại nhiều thuận lợi trong kiểm thử nhƣ phát hiện sớm các vấn đề của hệ thống trong vòng đời phát triển, đảm bảo các ca kiểm thử đƣợc chạy hết trƣớc khi triển khai một phiên bản mới. Hệ thống CI có khả năng tự động cập nhật và biên dịch mã nguồn, chạy các ca kiểm thử đã đƣợc định nghĩa trƣớc cho mỗi một commit.
Ngoài ra CI còn giúp cho việc đóng gói phần mềm dễ dàng, kết hợp với các giải pháp triển khai liên tục (Continuos Delivery - CD) triển khai nhanh gọn hơn. Quy trình tích hợp liên tục (CI) (xem Hình 1.8) bắt đầu khi có một sự thay đổi (commit) mới đƣợc đẩy lên, hệ thống CI sẽ tự lấy mã nguồn mới về bằng lệnh gọi từ svn, git hoặc CSV… sau đó thực hiện dịch mã. Hệ thống sẽ tự động gửi email về cho các thành viên nếu nhƣ việc dịch mã bị lỗi. Bƣớc tiếp theo khi bƣợc biên dịch thành công, các ca kiểm thử đã đƣợc định nghĩa sẽ đƣợc chạy toàn bộ, nếu có ca kiểm thử thất bại, hệ thống sẽ gửi email thông báo cho đội phát triển.
Sau khi chạy thành công các ca kiểm thử, hệ thống CI tiến hành đóng gói và triển khai ứng dụng lên máy chủ (nếu cần). Quá trình tích hợp sẽ đƣợc tiến hành theo cấu hình của đội phát triển ứng dụng.