Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 55 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
55
Dung lượng
1,85 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ PHẠM THỊ VÂN PHÁT TRIỂN PHẦN MỀM DỰA TRÊN MICROSERVICES LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ PHẠM THỊ VÂN PHÁT TRIỂN PHẦN MỀM DỰA TRÊN MICROSERVICES Ngành: Công nghệ Thông tin Chuyên ngành:Kỹ thuật phần mềm Mã số: 60480103 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƢỜI HƢỚNG DẪN KHOA HỌC: PGS.TS.TRƢƠNG ANH HOÀNG Hà Nội - 2015 LỜI CAM ĐOAN Tôi xin cam đoan kết đạt luận văn sản phẩm riêng cá nhân tôi, không chép lại người khác Trong toàn nội dung luận văn, điều trình bày cá nhân tôi tổng hợp từ nhiều nguồn tài liệu Tất nguồn tài liệu tham khảo có xuất xứ rõ ràng trích dẫn hợp pháp Tôi xin chịu toàn trách nhiệm chịu hình thức kỷ luật theo quy định cho lời cam đoan Hà Nội, tháng 10 năm 2015 Phạm Thị Vân LỜI CẢM ƠN Tôi xin chân thành cảm ơn hướng dẫn bảo tận tình PGS.TS Trương Anh Hoàng – người kiên nhẫn hướng dẫn, quan tâm, động viên, thông cảm, tạo điều kiện thuận lợi cho nhiều trình thực luận văn Các định hướng hiểu biết khoa học thầy tiền đề để hoàn thành luận văn Đồng thời, xin gửi lời cảm ơn đến thầy cô giáo khoa Công nghệ thông tin trường Đại học Công nghệ – Đại học Quốc Gia Hà Nội giảng dạy truyền đạt kiến thức, kinh nghiệm quý báu cho suốt khóa học Tôi xin cảm ơn tác giả công trình nghiên cứu, tài liệu, báo sử dụng, trích dẫn luận văn cung cấp nguồn tư liệu quý báu kiến thức liên quan để thực luận văn Đặc biệt, xin cảm ơn gia đình, bạn bè anh chị em đồng nghiệp – người động viên, hỗ trợ mặt tinh thần giúp đỡ, tạo điều kiện để hoàn thành luận văn kế hoạch Hà Nội, ngày 30 tháng 10 năm 2015 Phạm Thị Vân MỤC LỤC MỞ ĐẦU Chƣơng Tổng quan kiến trúc microservices 11 1.1 Dịch vụ 11 1.2 Kiến trúc monolithic 12 1.3 Kiến trúc microservices 13 1.4 Mẫu thiết kế microservices 16 1.5 Lợi ích microservices 20 1.6 Thực trạng ứng dụng kiến trúc microservices 21 Chƣơng Xây dựng ứng dụng SOML microservices .24 2.1 Giới thiệu SOML 24 2.1.1 SOML 24 2.1.2 Các chức SOML 24 2.2 Mô hình hoá micoservice SOML 29 2.2.1 Xác định microservice cho SOML .29 2.2.2 Mô hình tổng quan SOML 31 2.2.3 Kiến trúc hệ thống SOML 34 2.2.4 Cơ chế kết nối SOML .38 2.2.5 Xây dựng cổng API 41 2.3 Triển khai 41 2.3.1 Đóng gói microservice 41 2.3.2 Cấu hình cho máy chủ 42 2.4 Kiểm thử microservices 44 2.4.1 Mô hình kiểm thử kim tự tháp Mike Cohn 44 2.4.2 Kiểm thử đơn vị 45 2.4.3 Kiểm thử dịch vụ 46 2.4.4 Kiểm thử đầu cuối 47 2.4.5 Kiểm thử tích hợp .48 Chƣơng Đánh giá microservices 50 3.1 Ưu điểm microservices 50 3.2 Nhược điểm micoservices 51 3.3 Đánh giá 52 KẾT LUẬN 54 TÀI LIỆU THAM KHẢO 55 DANH MỤC CÁC TỪ VIẾT TẮT Từ viết tắt Từ viết đầy đủ Diễn giải HTML Hyper Text Markup Language Ngôn ngữ đánh dấu văn API Application Program Interface Giao diện lập trình ứng dụng JavaScript Object Notation Một cú pháp javascript dùng để lưu trữ trao đổi thông tin văn SOML Story Of My Life Tên ứng dụng cho phép người dùng chia sẻ câu chuyện sống hình ảnh XML eXtensible Markup Language Ngôn ngữ đánh dấu mở rộng SOAP Simple Object Access Protocol Giao thức trao đổi thông tin RoR Ruby on Rails Một framework để xây dựng ứng dụng ngôn ngữ Ruby IPC Inter-Process Communication Liên lạc liên tiến trình HTTP HyperText Transfer Protocol Giao thức truyền tải siêu văn URL Uniform Resource Locator Địa web hay liên kết mạng JSON, JSONb DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ Hình 1.1 Các thành phần dịch vụ 11 Hình 1.2 Các thành phần kiến trúc Monolithic 12 Hình 1.3.Ví dụ kiến trúc microservices 14 Hình 1.4 Mô hình kiến trúc microservices (7) 15 Hình 1.5 Cổng API ứng dụng quản lý sản phẩm 17 Hình 1.6 Cơ chếphát phía máy trạm (client-side discovery) 18 Hình 1.7 Cơ chế phát dịch vụ phía máychủ (server-side discovery) 19 Hình 1.8 Cơ chế tự đăng ký dịch vụ(self-registration) 20 Hình 1.9 Cơ chế đăng ký dịch vụ qua bên thứ ba (third-party registration) 20 Hình 2.1 Mô hình hoạt động SOML 25 Hình 2.2 Sơ đồ ca sử dụng tổng thể củaSOML 26 Hình 2.3 Sơ đồ ca sử dụng quản lý người dùng 27 Hình 2.4 Sơ đồ ca sử dụng quản lý Story 27 Hình 2.5 Sơ đồ ca sử dụng quản lý Photo 28 Hình 2.6 Sơ đồ ca sử dụng quản lý Comment 29 Hình 2.7 Phân vùng hành vi SOML 30 Hình 2.8 Mô hình tổng quan SOML 31 Hình 2.9 Các thành phần Docker 33 Hình 2.10 Kiến trúc hệ thống SOML 35 Hình 2.11 Tạo tài khoản người dùng 39 Hình 2.12 Tạo tài khoản người dùng 39 Hình 2.13 Tạo Story SOML 40 Hình 2.14 Tạo Photo SOML 40 Hình 2.15 Đóng gói microservice SOML 42 Hình 2.16 Nhiều microservice máy chủ 43 Hình 2.17 Mỗi microservice máy chủ 43 Hình 2.18 Mô hình kiểm thử kim tự tháp Mike Cohn (14) 44 Hình 2.19 Kiểm thử đơn vị Stories service 46 Hình 2.20 Kiểm thử dịch vụ Stories service 47 Hình 2.21 Kiểm thử đầu cuối Stories service 48 Hình 2.22 Kiểm thử tích hợp 48 MỞ ĐẦU Dịch vụ (service) đời ngày phát triển giúp nhà xây dựng phát triển phần mềm tạo hệ thống có khả thích ứng cao với nhiều môi trường khác nhau, tăng khả tái sử dụng Các hệ thống phát triển nhanh chóng giảm phức tạp, hạ giá thành xây dựng triển khai Tuy nhiên việc không quan tâm đến kích thước dịch vụ hệ thống đặt toán khó cho nhà xây dựng phát triển phần mềm giảm chi phí xây dựng hệ thống với dịch vụ, tránh ảnh hưởng đến hệ thống muốn thay đổi số chức hệ thống … Phạm vi dịch vụ lớn hệ thống trở lên phức tạp, khó phát triển, kiểm thử bảo trì Chính điều làm cho việc xây dựng phát triển hệ thống phần mềm dựa dịch vụ vượt khỏi khả kiểm soát kiểu kiến trúc phần mềm có cần phải có kiểu kiến trúc để giải vấn đề Kiến trúc microservices kiểu kiến trúc phần mềm phát triển Trong dịch vụ chia nhỏ để thực chức hệ thống Việc chia nhỏ dịch vụ kiến trúc microservices giúp cho hệ thống đơn giản hơn, dễ phát triển hơn, giảm chi phí xây dựng, tăng khả thích ứng công nghệ Kiến trúc microservices coi lời giải ưu việt cho toán xây dựng phát triển hệ thống dựa dịch vụ Nó nghiên cứu ứng dụng rộng rãi công ty lớn Netflix, Ebay, Amazon, Twitter, Paypal, Gilt, Soundcloud, …Đặc biệt sản phẩm phần mềm đóng gói dần thay phần mềm dịch vụ kiến trúc microservices đề tài ngày quan tâm Xuất phát từ ý nghĩa thực tiễn vậy, thực đề tài luận văn “Phát triển phần mềm dựa Microservices” để tìm hiểu áp dụng kiến trúc microservices việc xây dựng phát triển ứng dụng cụ thể - SOML (Story Of My Life) dạng mạng xã hội cho phép người dùng chia sẻ câu chuyện sống họ thông qua ảnh Dựa việc áp dụng kiến trúc microservices thực tế từ đưa phân tích, đánh giá rút ưu nhược điểm kiến trúc microservices Luận văn tổ chức sau: Chương 1: Giới thiệu kiến trúc microservices, tảng, định nghĩa, đặc điểm, lợi ích mẫu thiết kế kiến trúc microservices Chương 2: Trình bày bước xây dựng hệ thống dựa kiến trúc microservices xác định, triển khai kiểm thử microservice cho hệ 10 thống Từ áp dụng vào thiết kế, xây dựng triển khai ứng dụng mạng xã hội SOML Chương 3: Đánh giá kiến trúc microservices, đưa ưu nhược điểm cách khắc phục nhược điểm kiến trúc microservices 41 service thực tạo Photo vào PhotosDB gửi HTTP response có mã mã trạng thái 201 đến máy trạm để thông báo việc tạo Photo thành công 2.2.5 Xây dựng cổng API Cổng API thành phần quan trọng hệ thống xây dựng kiến trúc microservices Tất yêu cầu máy trạm đến microservice hệ thống phải qua cổng API mà lại tính xác ngày có lượt yêu cầu qua cổng API nên xây dựng cổng API điều quan trọng hiệu tính mở rộng cổng API Hiện có nhiều công nghệ khác để thực việc mở rộng cổng API bật xây dựng cổng API dựa tảng hỗ trợ xử lý bất đồng chế non-blocking I/O (Input/Output) Một cổng API không kết nối máy trạm đến microservice mà cổng API định tuyến yêu cầu gửi từ máy trạm đến microservice để thực xử lý yêu cầu Sau cổng API lại tổng hợp kết từ microservice lại để phản hồi cho máy trạm Vì thi thiết kế xây dựng cổng API ta nên xây dựng cổng API có khả thực yêu cầu đồng thời lúc để giảm thời gian phản hồi tăng hiệu hệ thống Các microservice kiến trúc microservices nằm phân tán khắp nơi mạng Internet nên kết nối đến microservice xảy số lỗi kết nối Cổng API phải không bị chặn yêu cầu kết nối đến microservice bị kết nối có phản hồi chậm Để làm điều cổng API nên có nhớ đệm tạm thời để lưu trữ thông tin thay đổi cho trường hợp microservice kết nối có phản hồi chậm có thông báo lỗi cho máy trạm biết microservice kết nối bị kết nối Có nhiều cổng API phổ biến Kong10 – kiểu cổng API mã nguồn mở, Cloud Endpoints11 Google API Gateway12 Amazon, …Trong SOML, sử dụng API Gateway Amazon để làm cổng API 2.3 Triển khai 2.3.1 Đóng gói microservice Trong kiến trúc microservices để đảm bảo tính độc lập cho microservice đóng gói microservice ta nên đóng gói micservice khối (Container) Hiện nay, có nhiều công nghệ khác để đóng gói dịch 10 https://getkong.org/about/ https://cloud.google.com/appengine/docs/java/endpoints/ 12 http://aws.amazon.com/api-gateway/ 11 42 vụ Docker, CoreOS13, … SOML sử dụng Docker để đóng gói microservice Docker cho phép đóng gói microservice cách nhúng file Dockerfile vào microservice Dockerfile file dạng văn chứa tất lệnh mà ta phải dùng để lắp ráp Docker image Docker (Hình 2.15) Hình 2.15.Đóng gói microservice SOML Mỗi microservice muốn đóng gói Docker phải có file Dockerfile Docker Engine đóng gói thành Container Sau Container đẩy (push) lên Docker Hub để lưu trữ dạng Docker image.Và Docker Hub quản lý, điều phối Container để giúp Container chạy 2.3.2 Cấu hình cho máy chủ Có hai phương pháp để cấu hình máy chủ cho hệ thống kiến trúc microservices nhiều microservice máy chủ microservice máy chủ 13 https://coreos.com/ 43 Hình 2.16.Nhiều microservice máy chủ Hình 2.16 thể phương pháp nhiều microservice máy chủ Đây phương pháp cho phép chạy nhiều microservice khác máy chủ Ưu điểm phương pháp đơn giản, dễ quản lý microservice hệ thống, tiết kiệm chi phí triển khai Tuy nhiên phương pháp có khó khăn việc theo dõi kiểm tra micoservice, microservice chạy máy chủ nên khó khăn để theo dõi, kiểm tra microservice Đồng thời phương pháp mang lại không rủi ro máy chủ gặp cố microservice chạy máy chủ ngừng hoạt động theo làm hệ thống bị ảnh hưởng, máy chủ bị hacker công hệ thống bị dừng hoạt động Phương pháp thứ hai triển khai microservice máy chủ (Hình 2.17) Hình 2.17.Mỗi microservice máy chủ 44 Phương pháp cho phép microservice triển khai máy chủ Nó khắc phục khó khăn phương pháp triển khai nhiều microservice máy chủ Nhưng đổi lại chi phí để triển khai theo mô hình lớn Trong SOML, chọn phương pháp triển khai nhiều microservice máy chủ để tiết kiệm chi phí triển khai Để tránh việc máy chủ có cố gây ảnh hưởng đến hệ thống, đặt chế độ lưu hệ thống liệu cho SOML hàng tuần Điều giúp cho hệ thống phục hồi lại cách nhanh máy chủ gặp cố 2.4 Kiểm thử microservices Các microservice kiến trúc microservices thực chức hệ thống, điều đảm bảo microservice hệ thống ổn định, có thay đổi kiểm thử kiến trúc microservices ta cần kiểm thử nhiều môi trường khác Sử dụng kiểm thử tự động giải pháp tối ưu cho hệ thống xây dựng kiến trúc microservices Kiểm thử tự động trình kiểm tra hệ thống với liệu đầu vào đầu xác định trước cách tự động Việc áp dụng kiểm thử tự động mang lại nhiều ưu điểm nâng cao hiệu quả, tăng độ tin cậy, cải thiện chất lượng sản phẩm, tốc độ kiểm thử nhanh đặc biệt giảm chi phí cho hệ thống khâu kiểm thử Kiến trúc microservices áp dụng mô hình kiểm thử kim tự tháp Mike Cohn để kiểm thử tự động hệ thống xây dựng 2.4.1 Mô hình kiểm thử kim tự tháp Mike Cohn Mô hình kiểm thử kim tự tháp Mike Cohn đề xuất vào năm 2010 nhằm liệt kê mức kiểm thử cần để thực trình kiểm thử tự động hệ thống (Hình 2.18) Hình 2.18.Mô hình kiểm thử kim tự tháp Mike Cohn (14) 45 Theo mô hình kiểm thử kim tự tháp Mike Cohn có ba mức để kiểm thử tự động hệ thống, là: giao diện (UI), dịch vụ (service) đơn vị (unit) Theo Mike Cohn có hai chiến lược để kiểm thực kiểm thử mô hình kiểm thử kim tự tháp từ xuống (Top-Down) từ lên (Bottom Up) Chiến lược kiểm thử từ xuống thực kiểm thử từ mức giao diện người dùng đến mức dịch vụ cuối kiểm thử đơn vị Áp dụng chiến lược giúp hệ thống nhanh chóng có phiên kiểm thử chức thẩm định tính dùng hệ thống sớm Tuy nhiên chiến lược kiểm thử từ xuống thích hợp cho hệ thống độc lập hệ thống có mối liên hệ với áp dụng kiểm thử từ xuống khó mô tả dịch vụ mức thấp Chiến lược kiểm thử từ lên có trình tự thực mức kiểm thử ngược lại so với chiến lược kiểm thử từ xuống Trong chiến lược kiểm thử này, Mike Cohn đề xuất việc kiểm thử mức thấp kim tự tháp kiểm thử đơn vị sau di chuyển lên kiểm thử dịch vụ cuối giao diện người dùng Ưu điểm chiến lược tăng tính tin cậy cho kiểm thử tự động, khắc phục nhược điểm chiến lược kiểm thử từ xuống Trong SOML thực kiểm thử microservice SOML dựa chiến lược kiểm thử từ lên mô hình kiểm thử kim tự tháp Mike Cohn Sau thực hiển kiểm thử tích hợp microservice SOML Để kiểm thử microservice SOML, kiểm thử đơn vị cho hành vi microservice sau kiểm thử microservice mà chưa gắn giao diện người dùng vào micoservice Cuối dùng kiểm thử đầu cuối (end to end) để kiểm thử microservice có giao diện người dùng Việc kiểm thử đầu cuối lặp lại thực kiểm thử tích hợp hệ thống 2.4.2 Kiểm thử đơn vị Kiểm thử đơn vị thực đồng thời với trình xây dựng microservice kiến trúc microservices Tại microservice, kiểm thử đơn vị kiểm thử hành vi microservice Vì việc viết mã kiểm thử cho kiểm thử đơn vị nhanh chóng dễ dàng Trong SOML mã kiểm thử đơn vị gắn trực tiếp vào misrocervice để kiểm thử hàm nhỏ Ví dụ để kiểm thử đơn vị Stories services thực kiểm thử đơn vị hành vi 46 microservice Các hành vi bao gồm: tạo story (create), sửa story (edit, update), xóa story (delete), hiển thị story (show) hiển thị danh sách story (list) (Hình 2.19) Hình 2.19.Kiểm thử đơn vị Stories service 2.4.3 Kiểm thử dịch vụ Kiểm thử dịch vụ thực kiểm thử dịch vụ mà không quan tâm đến giao diện người dùng dịch vụ Trong microservices ta thực kiểm thử dịch vụ cho microservice cách độc lập việc kiểm thử nhanh chóng xác định sửa lỗi microservice 47 Hình 2.20.Kiểm thử dịch vụ Stories service Theo hình 2.20, SOML tiến hành kiểm thử dịch vụ cho microservice cách độc lập Mỗi microservice kiểm thử mức dịch vụ mà không cần quan tâm đến giao diện người dùng microservice Tuy nhiên, microservice SOML cần phải kiểm thử lại với liệu thật tình tín hiệu mạng thấp thời gian dành cho kiểm thử dịch vụ bị tăng lên 2.4.4 Kiểm thử đầu cuối Kiểm thử đầu cuối kiểm thử mức giao diện mô hình kiểm thử kim tự tháp Kiểm thử đầu cuối thực kiểm thử hoạt động tổng thể ứng dụng cách kiểm thử trình thực chức từ đầu đến cuối trình xử lý, từ giao diện đến giao tiếp với nguồn liệu Trong microservices việc áp dụng kiểm thử đầu cuối cho microservice tiến hành kiểm thử tất trình thực microservice từ API đến thao tác sở liệu chúng Như phạm vi microservice thấy kiểm thử đầu cuối kiểm thử hệ thống cho microservice (Hình 2.21) 48 Hình 2.21.Kiểm thử đầu cuối Stories service 2.4.5 Kiểm thử tích hợp Trong kiến trúc microservices ta sử dụng phương pháp kiểm thử đầu cuối để kiểm thử tích hợp microservice hệ thống (Hình 2.22) Hình 2.22.Kiểm thử tích hợp Sau kiểm thử cho microservice hệ thống tiến hành kiểm thử tích hợp cách kiểm thử đầu cuối cho toàn hệ thống Việc kiểm thử đầu cuối cho microservice đơn giản tích hợp 49 chúng lại lại khó khăn, đặc biệt với hệ thống lớn có nhiều microservice Để khắc phục điều SOML, thực trình tích hợp liên tục (continuous integration) để thực kiểm thử tích hợp Mỗi hoàn thành microservice thực triển khai tích hợp vào hệ thống thực kiểm thử tích hợp microserice với micorservice mà phụ thuộc hệ thống Ưu điểm phương pháp nhanh chóng phát lỗi lại cần phải có thêm đội ngũ nhân viên để thực việc mối quan hệ microservice hệ thống phải xác định rõ ràng từ đầu Ở chương 2, trình bày bước thiết kế, xây dựng hệ thống kiến trúc microservices từ mô hình hóa microservice, triển khai kiểm thử áp dụng vào thiết kế, xây dựng ứng dụng mạng xã hội SOML Chương tiếp theo, dựa kiến thức kiến trúc microservices kinh nghiệm xây dựng ứng dụng SOML kiến trúc microservice đưa số phân tích, đánh giá ưu nhược điểm kiến trúc microservices khả áp dụng kiến trúc microservices xây dựng phát triển phần mềm 50 Chương Đánh giá microservices Từ kiến thức tìm hiểu trình ứng dụng thực tế, chương trình bày ưu, nhược điểm đánh giá nên dùng kiến trúc microservices 3.1 Ƣu điểm microservices Từ chương chương ta thấy kiến trúc microservices kiểu kiến trúc lại có nhiều ưu điểm, xu hướng xây dựng phần mềm dịch vụ (SaaS – Software as a Service) ngày phát triển mạnh mẽ Việc áp dụng kiến trúc microservices khiến cho microservice kiến trúc microservices xác định phạm vi chức giúp ta dễ dàng quản lý, bảo trì nâng cấp cho microservice cần thiết Đặc biệt microservice lại hoàn toàn độc lập với nên nhà phát triển phần mềm tự lựa chọn công nghệ thích hợp cho microservice Điều giúp nâng cao hiệu suất hệ thống Các microservice xác định ranh rới rõ ràng, tập trung vào chức giúp nhà phát triển dễ dàng xây dựng, kiểm thử phát triển Chính chuyên biệt microservice khiến hoạt động ổn định, có thay đổi chức năng, có có khả loại bỏ hẳn chức Do xây dựng hệ thống dựa kiến trúc microservices ta hạn chế việc thay đổi chỉnh sửa hệ thống, có không ảnh hưởng đến hệ thống, giúp hệ thống hoạt động ổn định, tiết kiệm chi phí vận hành Các microservice có phạm vi nhỏ so với dịch vụ kiểu kiến trúc khác nên triển khai ta cần triển khai phạm vi nhỏ Trong trình triển khai có vấn đề xảy ta cô lập phục hồi lại cách nhanh chóng Các microservice kiến trúc microservices tồn độc lập với nên có số microservice ngừng hoạt động hệ thống hoạt động, hệ thống bị chức mà microservice thực Mỗi microservice kiến trúc microservices hoàn toàn độc lập lại kết nối với thông qua API, điều đảm bảo tính kết nối lỏng lẻo cho microservice hệ thống Điều đảm bảo cho kiến trúc microservices nhà phát triển phần mềm muốn muốn nâng cấp, sửa đổi microservice họ cần chỉnh sửa, kiểm thử lại microservice mà không gây ảnh hưởng đến hệ thống 51 Các máy trạm kết nối đến microservice hệ thống phải thông qua cổng API Cổng API giúp hệ thống che giấu kiến trúc bên trong, tăng độ an toàn bảo mật cho hệ thống Đối với việc dùng dịch vụ thuê, mua từ bên thứ ba, hệ thống đảm bảo tính bảo mật dịch vụ phải thông qua cổng API để truy cập đến microservice khác hệ thống Các microservice đóng gói chuyển từ môi trường phát triển sang môi trường chạy thật cấu hình thủ công lại Điều giúp nhà phát triển phần mềm triển khai hệ thống xây dựng kiến trúc microservices cách nhanh chóng, rủi ro, tỷ lệ thành công cao 3.2 Nhƣợc điểm micoservices Nhược điểm microservices từ cổng API, tất yêu cầu từ phía máy trạm đến microservie phải qua cổng API cổng API trở thành nút thắt cổ chai hệ thống Để tránh vấn đề xây dựng hệ thống kiến trúc microservices nên thiết kế xây dựng cổng API có khả mở rộng áp dụng chế bất đồng để kết nối máy trạm tới cổng API, từ cổng API đến microservice ngược lại Hiện có nhiều tảng để xây dựng cổng API thỏa mãn tiêu chí vây Netty14, Vertx15, Spring Reactor16 Jboss Undertow17 Kiến trúc microservices nhấn mạnh kích thước nhỏ gọn microservice Một số nhà phát triển phần mềm đề xuất microservice siêu nhỏ cỡ 100 dòng code Việc chia microservice nhỏ dẫn đến hệ thống trở lên manh mún, khó kiểm soát Việc lưu trữ liệu bên microservice nhỏ khiến liệu bị phân tán mức cần thiết Các microservice kiến trúc microservices triển khai phân tán khắp nơi mạng Internet kiến trúc microservices bị ảnh hưởng nhược điểm hệ phân tán: Để kết nối microservice đến microservice khác chúng xa khiến hệ thống nhiều thời gian chúng gần nhau, điều khiến cho hiệu suất hệ thống bị giảm xuống Để khắc phục điều sử dụng chế kết nối không đồng để kết nối microservice hệ thống Tuy nhiên mặt trái sử dụng chế bất đồng khó khăn việc cấp quyền để kết 14 http://netty.io/ http://mvnrepository.com/artifact/io.apiman/apiman-gateway-platforms-vertx/1.1.5.Final 16 https://spring.io/ 17 http://undertow.io/ 15 52 nối Các kết nối microservice kiến trúc microservices thất bại lúc xảy cố kết nối chậm, lỗi thông điệp không gửi thông điệp gửi đến nhiều đích đến vào thời điểm khác Điều khiến độ tin cậy hệ thống bị giảm xuống Các microservice hệ thống phân tán khắp nơi mạng Internet đồng nghĩa với việc liệu hệ thống bị phân tán Theo nguyên tắc CAP (CAP theorem) giao dịch phân tán thỏa mãn điều kiện: o Tính quán (consistency): liệu điểm khác mạng phải giống o Tính sẵn sàng (availablity): yêu cầu gửi phải có phúc đáp o Khắc phục lỗi phần (partition tolerance): hệ thống hoạt động mạng bị lỗi Tuy nhiên công nghệ sở liệu phi quan hệ (NoSQL) hay môi giới thông điệp (message broker) tốt chưa vượt qua nguyên tắc CAP Kiểm thử tự động microservice kiến trúc microservices yêu cầu phải chạy microservice khác mà phụ thuộc Vì việc kiểm thử trở lên khó khăn việc phát lỗi Để khắc phục điều này, xác định microservice cho hệ thống nên khoanh vùng chức phụ thuộc vào microservice, đảm bảo tính kết nối lỏng lẻo cho microservice hệ thống Hệ thống có hai microservice có kết nối API chúng, ba microservice có ba kết nối, có bốn microservice phải có sáu kết nối Như với hệ thống có n microservice có n! /((n-2)! * 2!) kết nối API Điều khiến cho hệ thống có nhiều microservice theo dõi kết nối microservice hệ thống Hệ thống bị chậm tắc nghẽn kết nối mà ta tìm kết nối gây tắc nghẽn Để tránh tình trạng này, xây dựng hệ thống kiến trúc microservices cần phải có quy tắc phân luồng, quản lý, đo đếm, theo dõi microservice hệ thống 3.3 Đánh giá Như thấy kiến trúc microservices có nhiều ưu điểm để thỏa 53 mãn yêu cầu việc xây dựng phát triển phần mềm dịch vụ Ưu điểm lớn kiến trúc microservices độc lập microservice hệ thống giúp cho microservice dễ dàng áp dụng công nghệ phù hợp cho giúp hệ thống dễ quản lý, bảo trì phát triển Bên cạnh ưu điểm bật kiến trúc microservices mang lại không thách thức cho nhà phát triển phần mềm Việc áp dụng kiến trúc microservices bắt buộc nhà phát triển phải có kiến thức thiết kế hướng miền (DDD – Domain-Driven Design) để phân vùng xác chức có ràng buộc với miền từ xác định biên microservice cho hệ thống Việc xác định sai biên cho microservice kéo theo nhiều hạn chế cho kiến trúc mivroservices mà trình bày phần 3.2 Tuy nhiên áp dụng kiến trúc microservices cách đắn từ khâu xác định microservice đến việc phân luồng, quản lý, đo đếm, theo dõi microservice kiến trúc microservices đáp án tối ưu cho việc xây dựng phần mềm hướng dịch vụ Đặc biệt, việc áp dụng kiến trúc microservices hiệu quả, phù hợp cho ứng dụng phức tạp, đòi hỏi phải phát triển liên tục 54 KẾT LUẬN Luận văn tìm hiểu kiến trúc microservices việc xây dựng ứng dụng, hệ thống phần mềm, bước để xây dựng, triển khai ứng dụng, hệ thống dựa kiến trúc microservices Việc áp dụng kiến trúc microservices để xây dựng ứng dụng mạng xã hội SOML cho thấy nhiều ưu điểm hệ thống hệ thống xây dựng microservices trở lên đơn giản, dễ quản lý Việc chỉnh sửa, thay đổi cập nhật công nghệ cho microservice hệ thống trở lên dễ dàng so với kiểu kiến trúc phần mềm đại khác Bên cạnh việc áp dụng kiến trúc microservices mang lại không khó khăn việc hợp liệu phân tán, giải tắc nghẽn kết nối micorservice hệ thống Hầu hết nhược điểm áp dụng kiến trúc microservices xuất phát từ việc nhà phát triển xác định sai microservice hệ thống, nhà phát triển phần mềm muốn áp dụng kiến trúc microservices cần có kiến thức thiết kế hướng miền (Domain-Driven Design) cần phải có quy tắc phân luồng, quản lý, đo đếm, theo dõi microservice rõ ràng Thực điều giúp cho áp dụng kiến trúc microservices cách đắn mang lại hiệu cao xây dựng phát triển hệ thống microservices Kiến trúc microservices xuất vài năm gần nhiều công ty lớn đưa vào nghiên cứu áp dụng, điều chứng tỏ lợi ích mà kiến trúc microservices mang lại to lớn Đặc biệt ngày nay, mà sản phẩm phần mềm dịch vụ ngày phổ biến thay sản phẩm phần mềm đóng gói việc áp dụng kiến trúc microservices xây dựng phát triển phần mềm yêu cầu cần thiết Tuy nhiên kiến trúc microservices có phải kiểu kiến trúc cho tương lai hay không vấn đề gây nhiều tranh cãi cho nhà phát triển phần mềm, vấn đề bảo mật sở liệu micrservices vấn đề khó khăn áp dụng kiến trúc microservices Hướng phát triển luận văn nghiên cứu thử nghiệm phương pháp để bảo mật phương pháp để quản lý liệu phân tán kiến trúc microservices 55 TÀI LIỆU THAM KHẢO Tiếng Anh Eric Newcomer, Greg Lomow Understanding SOA with Web Services 2004 ICCI Monolithic Applications Retrieved 2007 Martin Fowler Microservices 2014 Stefan BorsjeJuly How we build microservices at Karma 2014 Toby Clemson Testing Strategies in a Microservice Architecture 2014 Sam Newman Building Microservice 2015 Nikola Stjelja Microservices architecture models - How to document and think about microservices based architecture models 2015 Joachim Rohde Amazon Architecture 2007 Sudhir Tonse & Nitesh Kant MicroServices at NETFLIX 2014 10 Eric Evans Domain-Driven Design 2003 11 Sam Ruby Agile Web Development with Rails 2013 12 Peter Shaw Postgres Succinctly 2013 13 Clément Nedelcu Nginx HTTP Server - Second Edition 2013 14 Mike Cohn Succeeding with Agile 2010 15 James Turnbull The Docker Book 2014 Website http://microservices.io/ http://www.statista.com/statistics/272014/global-social-networks-ranked-bynumber-of-users/ https://www.docker.com/what-docker https://aws.amazon.com/ https://www.rabbitmq.com/ http://kafka.apache.org/ http://activemq.apache.org/ https://getkong.org/about/ https://cloud.google.com/appengine/docs/java/endpoints/ 10 http://aws.amazon.com/api-gateway/ 11 https://coreos.com/ [...]... hợp các thành phần, tương tác, thử lỗi đầu cuối để các nhà phát triển phần mềm khắc phục được các khó khăn trong quá trình xây dựng phần mềm dựa trên kiến trúc microservices Kiến trúc microservices là một kiểu kiến trúc phần mềm dành cho các hệ thống được xây dựng dựa trên các dịch vụ, trong đó các dịch vụ này được chia thành các thành phần nhỏ và hoàn toàn độc lập với nhau, mỗi thành phần nhỏ 14 này... thống sẽ dễ dàng được phát triển, kiểm thử, gỡ lỗi và triển khai Tính đến nay Netflix đã có hơn 600 microservice chạy trong hệ thống microservices của họ (9) Từ những ví dụ về phát triển microservices tại các công ty hàng đầu về công nghệ ở trên chúng ta có thể thấy kiến trúc microservices đang là kiểu kiến trúc mà các nhà phát triển phần mềm đang hướng tới Hiện nay kiến trúc microservices cũng đang... 23 mềm, cũng như tình hình áp dụng microservices hiện nay trong việc xây dựng và phát triển phần mềm Trong chương tiếp theo tôi sẽ trình bày quá trình xây dựng một hệ thống trên microservices và áp dụng vào xây dựng ứng dụng SOML 24 Chương 2 Xây dựng ứng dụng SOML trên microservices Chương 2 sẽ trình bày các bước để thiết kế và xây dựng ứng dụng mạng xã hội - SOML trên kiến trúc microservices Phần. .. kiến trúc microservices Mở đầu chương 1 trình bày các khái niệm nền tảng của kiến trúc microservices: dịch vụ, kiến trúc monolithic và định nghĩa kiến trúc microservices Phần tiếp theo trình bày các mẫu thiết kế của kiến trúc microservices Phần cuối chương trình bày các lợi ích của kiến trúc microservices cũng như thực trạng sử dụng kiến trúc microservices hiện nay 1.1 Dịch vụ Dịch vụ trong phần mềm là... microservices có thể giảm được chi phí, tăng độ thích nghi và đơn giản hóa hệ thống cho các nhà phát triển phần mềm 1.6 Thực trạng ứng dụng kiến trúc microservices hiện nay Kiến trúc microservices đang là một trong những chủ đề hấp dẫn nhất trong lĩnh vực công nghệ phần mềm hiện nay Tuy nó còn khá mới nhưng kiến trúc microservices đã được nhiều các công ty lớn đang áp dụng cho việc xây dựng hệ thống, điển... dựng, phát triển, sửa lỗi và kiểm thử mỗi chức năng sẽ tăng lên theo độ lớn của hệ thống Mặc dù kiến trúc monolithic còn tồn tại nhiều nhược điểm nhưng nhờ các ưu điểm độc lập, dễ xây dựng và quản lý monolithic đã được sử dụng để xây dựng và phát triển thành các kiểu kiến phúc phần mềm khác rất phổ biến hiện nay như kiến trúc hướng dịch vụ Microservices cũng là một kiểu kiến trúc được xây dựng và phát triển. .. nhiều sự chú ý và quan tâm của các nhà nghiên cứu và phát triển phần mềm, nó cũng đang được dự đoán là kiểu kiến trúc dành cho tương lai khi mà các sản phẩm phầm mềm hướng dịch vụ đang ngày càng phổ biến Ở chương 1 tôi đã trình bày các kiến thức cơ bản về kiến trúc microservices, các đặc điểm, mẫu thiết kế và lợi ích nó mang lại cho ngành phát triển phần 2 http://www.statista.com/statistics/272014/global-social-networks-ranked-by-number-of-users/... đội ngũ phát triển phải tạo ra một phiên bản mới cho cả hệ thống Ví dụ người dùng muốn thay đổi màu sắc của một nút ngoài giao diện người dùng thì cả hệ thống sẽ phải được điều 13 chỉnh, tái kiểm thử, tái triển khai trên một phiên bản mới Điều này khiến cho việc xây dựng và phát triển hệ thống trên monolithic là rất tốn kém và không linh hoạt Đặc biệt là với các hệ thống lớn việc xây dựng phát triển. .. cấp, thay đổi, Twitter cần một công nghệ mới để giải quyết các khó khăn của họ và kiến trúc microservices đã được mạng xã hội lớn thứ hai trên thế giới này lựa chọn Hiện tại Twitter vẫn đang trong quá trình phát triển hệ thống dựa trên kiến trúc microservices Netflix có lẽ là công ty sớm nhất sử dụng kiến trúc microservices cho hệ thống của mình (2011) Hàng năm có hàng triệu người dùng truy cập vào hệ... quản lý dự án Basecamp của công ty phát triển Web 37signals – nơi David Heinemeier Hansson làm việc Sau đó RoR được ông phát triển thành một framework (11) 32 RoR bao gồm 2 phần: phần ngôn ngữ Ruby và phần framework Rails (bao gồm các thư viện và chúng được liên kết với nhau) RoR sử dụng mô hình MVC – (Model – View – Controller) để xây dựng kiến trúc, bao gồm ba thành phần chính: Model, View, Controller ... biệt sản phẩm phần mềm đóng gói dần thay phần mềm dịch vụ kiến trúc microservices đề tài ngày quan tâm Xuất phát từ ý nghĩa thực tiễn vậy, thực đề tài luận văn Phát triển phần mềm dựa Microservices ... hợp thành phần, tương tác, thử lỗi đầu cuối để nhà phát triển phần mềm khắc phục khó khăn trình xây dựng phần mềm dựa kiến trúc microservices Kiến trúc microservices kiểu kiến trúc phần mềm dành... dựng phát triển phần mềm mà tránh rủi ro gây Việc áp dụng microservices giảm chi phí, tăng độ thích nghi đơn giản hóa hệ thống cho nhà phát triển phần mềm 1.6 Thực trạng ứng dụng kiến trúc microservices