Kiến trúc Microservice - Hướng dẫn nhanh
Microservice là một phương pháp luận phát triển ứng dụng dựa trên dịch vụ. Trong phương pháp luận này, các ứng dụng lớn sẽ được chia thành các đơn vị dịch vụ độc lập nhỏ nhất. Microservice là quá trình thực hiện Kiến trúc hướng dịch vụ (SOA) bằng cách phân chia toàn bộ ứng dụng thành một tập hợp các dịch vụ được kết nối với nhau, trong đó mỗi dịch vụ sẽ chỉ phục vụ một nhu cầu kinh doanh.
Khái niệm về Đi vi mô
Trong kiến trúc hướng dịch vụ, toàn bộ gói phần mềm sẽ được chia nhỏ thành các đơn vị kinh doanh nhỏ, được kết nối với nhau. Mỗi đơn vị kinh doanh nhỏ này sẽ giao tiếp với nhau bằng các giao thức khác nhau để mang lại kết quả kinh doanh thành công cho khách hàng. Bây giờ câu hỏi là, Kiến trúc Microservice (MSA) khác với SOA như thế nào? Nói một cách dễ hiểu, SOA là một mẫu thiết kế và Microservice là một phương pháp triển khai để thực hiện SOA hoặc chúng ta có thể nói Microservice là một loại SOA.
Sau đây là một số quy tắc mà chúng ta cần ghi nhớ khi phát triển một ứng dụng theo định hướng Microservice.
Independent - Mỗi microservice phải có thể triển khai độc lập.
Coupling - Tất cả các dịch vụ vi mô phải được kết hợp lỏng lẻo với nhau để những thay đổi trong dịch vụ này sẽ không ảnh hưởng đến dịch vụ khác.
Business Goal - Mỗi đơn vị dịch vụ của toàn bộ ứng dụng phải là đơn vị nhỏ nhất và có khả năng thực hiện một mục tiêu kinh doanh cụ thể.
Chúng ta hãy xem xét một ví dụ về cổng mua sắm trực tuyến để hiểu sâu hơn về microservice. Bây giờ, chúng ta hãy chia toàn bộ Cổng thương mại điện tử này thành các đơn vị kinh doanh nhỏ như quản lý người dùng, quản lý đơn hàng, đăng ký, quản lý thanh toán, quản lý giao hàng, v.v. Một đơn đặt hàng thành công cần phải tiến hành tất cả các mô-đun này trong một thời gian cụ thể khung. Sau đây là hình ảnh hợp nhất của các đơn vị kinh doanh khác nhau liên kết với một hệ thống thương mại điện tử.
Mỗi mô-đun nghiệp vụ này nên có logic nghiệp vụ riêng và các bên liên quan. Họ giao tiếp với các phần mềm của nhà cung cấp bên thứ ba khác cho một số nhu cầu cụ thể và cả với nhau. Ví dụ: quản lý đơn hàng có thể giao tiếp với quản lý người dùng để lấy thông tin người dùng.
Bây giờ, xem xét bạn đang chạy một cổng mua sắm trực tuyến với tất cả các đơn vị kinh doanh này được đề cập trước đó, bạn cần một số ứng dụng cấp doanh nghiệp bao gồm các lớp khác nhau như front-end, back-end, database, v.v. Nếu ứng dụng của bạn không được mở rộng và được phát triển hoàn toàn trong một tệp chiến tranh duy nhất, sau đó nó sẽ được gọi là một ứng dụng nguyên khối điển hình. Theo IBM, một ứng dụng nguyên khối điển hình phải có cấu trúc mô-đun sau trong nội bộ, nơi chỉ một điểm cuối hoặc ứng dụng sẽ chịu trách nhiệm xử lý tất cả các yêu cầu của người dùng.
Trong hình trên, bạn có thể thấy các mô-đun khác nhau như Cơ sở dữ liệu để lưu trữ người dùng và dữ liệu kinh doanh khác nhau. Ở front-end, chúng tôi có một thiết bị khác nhau, nơi chúng tôi thường hiển thị dữ liệu người dùng hoặc doanh nghiệp để sử dụng. Ở giữa, chúng ta có một gói có thể là tệp EAR hoặc WAR có thể triển khai chấp nhận biểu mẫu yêu cầu mà người dùng kết thúc, xử lý nó với sự trợ giúp của các tài nguyên và hiển thị lại cho người dùng. Mọi thứ sẽ ổn cho đến khi doanh nghiệp muốn có bất kỳ thay đổi nào trong ví dụ trên.
Hãy xem xét các tình huống sau đây mà bạn phải thay đổi ứng dụng của mình theo nhu cầu kinh doanh.
Đơn vị kinh doanh cần một số thay đổi trong mô-đun "Tìm kiếm". Sau đó, bạn cần thay đổi toàn bộ quy trình tìm kiếm và triển khai lại ứng dụng của mình. Trong trường hợp đó, bạn đang triển khai lại các đơn vị khác của mình mà không có bất kỳ thay đổi nào.
Bây giờ một lần nữa đơn vị kinh doanh của bạn cần một số thay đổi trong mô-đun “Thanh toán” để bao gồm tùy chọn “ví”. Bây giờ bạn phải thay đổi mô-đun “Kiểm tra” và triển khai lại mô-đun tương tự vào máy chủ. Lưu ý, bạn đang triển khai lại các mô-đun khác nhau của gói phần mềm của mình, trong khi chúng tôi chưa thực hiện bất kỳ thay đổi nào đối với nó. Ở đây có khái niệm kiến trúc hướng dịch vụ cụ thể hơn cho kiến trúc Microservice. Chúng tôi có thể phát triển ứng dụng nguyên khối của mình theo cách mà mỗi và mọi mô-đun của phần mềm sẽ hoạt động như một đơn vị độc lập, có khả năng xử lý một tác vụ kinh doanh một cách độc lập.
Hãy xem xét ví dụ sau.
Trong kiến trúc trên, chúng tôi không tạo bất kỳ tệp tai nào với dịch vụ end-to-end nhỏ gọn. Thay vào đó, chúng tôi đang phân chia các phần khác nhau của phần mềm bằng cách hiển thị chúng như một dịch vụ. Bất kỳ phần nào của phần mềm có thể dễ dàng giao tiếp với nhau bằng cách sử dụng các dịch vụ tương ứng. Đó là cách mà microservice đóng một vai trò lớn trong ứng dụng web hiện đại.
Hãy để chúng tôi so sánh ví dụ về giỏ hàng của chúng tôi trong dòng microservice. Chúng tôi có thể chia nhỏ giỏ hàng của mình trong các mô-đun khác nhau như “Tìm kiếm”, “Bộ lọc”, “Thanh toán”, “Giỏ hàng”, “Đề xuất”, v.v. Nếu chúng tôi muốn xây dựng cổng giỏ hàng thì chúng tôi phải xây dựng các mô-đun được đề cập ở trên theo cách chúng có thể kết nối với nhau để mang đến cho bạn trải nghiệm mua sắm 24x7 tốt.
Ưu điểm & Nhược điểm
Sau đây là một số điểm về lợi thế của việc sử dụng microservice thay vì sử dụng một ứng dụng nguyên khối.
Ưu điểm
Small in size- Microservices là một triển khai của mẫu thiết kế SOA. Bạn nên duy trì dịch vụ của mình nhiều nhất có thể. Về cơ bản, một dịch vụ không nên thực hiện nhiều hơn một tác vụ kinh doanh, do đó rõ ràng là nó sẽ có kích thước nhỏ và dễ bảo trì hơn bất kỳ ứng dụng nguyên khối nào khác.
Focused- Như đã đề cập trước đó, mỗi microservice được thiết kế để chỉ thực hiện một nhiệm vụ kinh doanh. Trong khi thiết kế một microservice, kiến trúc sư nên quan tâm đến tiêu điểm của dịch vụ, đó là dịch vụ có thể cung cấp được. Theo định nghĩa, một microservice về bản chất phải là toàn bộ và phải cam kết chỉ cung cấp một tài sản kinh doanh.
Autonomous- Mỗi microservice phải là một đơn vị kinh doanh tự quản của toàn bộ ứng dụng. Do đó, ứng dụng trở nên liên kết lỏng lẻo hơn, giúp giảm chi phí bảo trì.
Technology heterogeneity- Microservice hỗ trợ các công nghệ khác nhau để giao tiếp với nhau trong một đơn vị kinh doanh, giúp các nhà phát triển sử dụng đúng công nghệ tại đúng nơi. Bằng cách triển khai một hệ thống không đồng nhất, người ta có thể có được sự bảo mật, tốc độ tối đa và một hệ thống có thể mở rộng.
Resilience- Khả năng phục hồi là một thuộc tính của việc cô lập một đơn vị phần mềm. Microservice tuân theo khả năng phục hồi cao trong việc xây dựng phương pháp luận, do đó bất cứ khi nào một đơn vị gặp lỗi, nó sẽ không ảnh hưởng đến toàn bộ hoạt động kinh doanh. Khả năng phục hồi là một thuộc tính khác triển khai hệ thống có khả năng mở rộng cao và ít kết hợp hơn.
Ease of deployment- Vì toàn bộ ứng dụng được chia nhỏ thành các phần nhỏ đơn vị, nên mọi thành phần đều phải là ngăn xếp đầy đủ về bản chất. Tất cả chúng có thể được triển khai trong mọi môi trường rất dễ dàng với ít phức tạp về thời gian không giống như các ứng dụng nguyên khối khác cùng loại.
Sau đây là một số điểm về nhược điểm của kiến trúc microservice.
Nhược điểm
Distributed system- Do không đồng nhất về kỹ thuật, các công nghệ khác nhau sẽ được sử dụng để phát triển các phần khác nhau của một microservice. Cần có một số lượng lớn các chuyên gia lành nghề để hỗ trợ phần mềm phân tán không đồng nhất lớn này. Do đó, phân tán và không đồng nhất là một bất lợi số một khi sử dụng microservice.
Cost - Microservice tốn kém, vì bạn phải duy trì không gian máy chủ khác nhau cho các nhiệm vụ kinh doanh khác nhau.
Enterprise readiness- Kiến trúc microservice có thể được coi là một tập hợp các công nghệ khác nhau, khi công nghệ đang phát triển từng ngày. Do đó, khá khó để làm cho một doanh nghiệp ứng dụng microservice sẵn sàng so sánh với mô hình phát triển phần mềm thông thường.
Microservice qua SOA
Bảng sau liệt kê một số tính năng nhất định của SOA và Microservice, làm nổi bật tầm quan trọng của việc sử dụng microservice so với SOA.
Thành phần | SOA | Microservice |
---|---|---|
Mẫu thiết kế | SOA là một mô hình thiết kế cho phần mềm máy tính, nơi các thành phần phần mềm được tiếp xúc với thế giới bên ngoài để sử dụng dưới dạng dịch vụ. | Dịch vụ vi mô là một phần của SOA. Đây là một triển khai chuyên biệt của SOA. |
Sự phụ thuộc | Các đơn vị kinh doanh phụ thuộc vào nhau. | Tất cả các đơn vị kinh doanh đều độc lập với nhau. |
Kích thước | Kích thước phần mềm lớn hơn phần mềm thông thường. | Kích thước phần mềm nhỏ. |
Công nghệ | Ngăn xếp công nghệ ít hơn Microservice. | Microservice về bản chất không đồng nhất vì các công nghệ chính xác được sử dụng để thực hiện một nhiệm vụ cụ thể. Microservices có thể được coi là một tập đoàn của nhiều công nghệ. |
Tự chủ và Tập trung | Các ứng dụng SOA được xây dựng để thực hiện nhiều tác vụ kinh doanh. | Các ứng dụng microservice được xây dựng để thực hiện một tác vụ kinh doanh duy nhất. |
Thiên nhiên | Nguyên khối trong tự nhiên. | Full stack trong tự nhiên. |
Triển khai | Việc triển khai tốn nhiều thời gian. | Triển khai rất dễ dàng. Do đó, nó sẽ ít tốn thời gian hơn. |
Hiệu quả chi phí | Tiết kiệm chi phí hiệu quả. | Tiết kiệm chi phí. |
Khả năng mở rộng | Ít hơn so với Microservices. | Đã thu nhỏ hoàn toàn. |
Thí dụ | Hãy để chúng tôi xem xét một ứng dụng đặt phòng CAB trực tuyến. Nếu chúng ta muốn xây dựng ứng dụng đó bằng SOA, thì các đơn vị phần mềm của nó sẽ là:
|
Nếu cùng một ứng dụng được xây dựng bằng kiến trúc microservice, thì các API của nó sẽ là:
|
Chia tỷ lệ là một quá trình chia nhỏ một phần mềm theo các đơn vị khác nhau. Scaling cũng định nghĩa về khả năng mở rộng. Khả năng mở rộng là tiềm năng để triển khai các tính năng tiên tiến hơn của ứng dụng. Nó giúp cải thiện tính bảo mật, độ bền và khả năng bảo trì của ứng dụng. Chúng tôi có ba loại quy trình mở rộng quy mô được tuân theo trong các ngành công nghiệp. Sau đây là các phương pháp chia tỷ lệ khác nhau cùng với các ví dụ thực tế tương ứng.
Tỉ lệ trục X
Tỉ lệ trục X còn được gọi là tỉ lệ ngang. Trong quy trình này, toàn bộ ứng dụng được chia nhỏ thành các phần ngang khác nhau. Thông thường, bất kỳ ứng dụng máy chủ web nào cũng có thể có kiểu chia tỷ lệ này. Hãy xem xét một kiến trúc MVC bình thường tuân theo tỷ lệ ngang như thể hiện trong hình sau.
Ví dụ, chúng ta có thể xem xét bất kỳ ứng dụng JSP servlet nào. Trong ứng dụng này, bộ điều khiển kiểm soát mọi yêu cầu và nó sẽ tạo chế độ xem bằng cách giao tiếp với mô hình bất cứ khi nào cần thiết. Thông thường, các ứng dụng nguyên khối tuân theo phương pháp chia tỷ lệ này. Việc chia tỷ lệ X-Axis về bản chất là rất cơ bản và nó rất ít tốn thời gian. Trong phương pháp luận này, một phần mềm sẽ được thay đổi tỷ lệ tùy thuộc vào nhiệm vụ khác nhau của nó mà đơn vị đó chịu trách nhiệm. Ví dụ: bộ điều khiển chịu trách nhiệm kiểm soát yêu cầu đến và đi, chế độ xem có trách nhiệm đại diện chức năng nghiệp vụ cho người dùng trong trình duyệt, trong khi mô hình chịu trách nhiệm lưu trữ dữ liệu của chúng tôi và nó hoạt động như cơ sở dữ liệu.
Tỷ lệ trục Y
Tỷ lệ theo trục Y còn được gọi là tỷ lệ theo chiều dọc bao gồm bất kỳ tỷ lệ cấp tài nguyên nào. Bất kỳ hệ thống DBaaS hoặc Hadoop nào cũng có thể được coi là theo trục Y. Trong kiểu chia tỷ lệ này, yêu cầu của người dùng được chuyển hướng và hạn chế bằng cách triển khai một số logic.
Chúng ta hãy coi Facebook là một ví dụ. Facebook cần xử lý 1,79 triệu người dùng trong mỗi giây; do đó, kiểm soát lưu lượng truy cập là một trách nhiệm rất lớn của các kỹ sư mạng Facebook. Để khắc phục mọi nguy cơ, họ tuân theo quy mô trục Y, bao gồm việc chạy nhiều máy chủ với cùng một ứng dụng cùng một lúc. Giờ đây, để kiểm soát mức lưu lượng khổng lồ này, Facebook chuyển hướng tất cả lưu lượng truy cập từ một khu vực đến một máy chủ cụ thể, như được mô tả trong hình ảnh. Việc chuyển giao lưu lượng dựa trên vùng này được gọi là cân bằng tải trong ngôn ngữ kiến trúc.
Phương pháp chia nhỏ tài nguyên thành các đơn vị kinh doanh nhỏ độc lập được gọi là Y-Axis scale.
Tỉ lệ trục Z
Chia tỷ lệ trục X và Y dễ hiểu hơn nhiều. Tuy nhiên, một ứng dụng cũng có thể được mở rộng ở cấp độ doanh nghiệp, được gọi là mở rộng trục Z. Dưới đây là một ví dụ về việc mở rộng ứng dụng dịch vụ taxi trong các ngành dọc khác nhau của các đơn vị kinh doanh.
Ưu điểm của việc mở rộng quy mô
Cost - Việc mở rộng quy mô phù hợp của một phần mềm sẽ giảm chi phí bảo trì.
Performance - Do khớp nối lỏng lẻo, hiệu suất của phần mềm được chia tỷ lệ thích hợp luôn tốt hơn so với phần mềm không được mở rộng.
Load distribution - Sử dụng các công nghệ khác nhau, chúng tôi có thể dễ dàng duy trì tải máy chủ của mình.
Reuse - Khả năng mở rộng của một phần mềm cũng làm tăng khả năng sử dụng của phần mềm.
Microservice triển khai SOA bên trong. Theo nghĩa rộng hơn, chúng ta có thể coi nó như một tập con của một ứng dụng SOA.
Quy tắc & Quy trình làm việc
Sau đây là những nguyên tắc cần được lưu ý khi phát triển một microservice.
High Cohesion- Tất cả các mô hình kinh doanh cần được chia nhỏ thành phần kinh doanh nhỏ nhất có thể. Mỗi dịch vụ chỉ nên tập trung để thực hiện một nhiệm vụ kinh doanh.
Independent - Tất cả các dịch vụ phải là toàn bộ về bản chất và độc lập với nhau.
Business Domain Centric - Phần mềm sẽ modul hóa theo đơn vị kinh doanh và không theo cấp.
Automation- Việc triển khai thử nghiệm sẽ được tự động hóa. Cố gắng giới thiệu sự tương tác tối thiểu của con người.
Observable - Mỗi dịch vụ sẽ có bản chất là full stack và chúng phải được triển khai độc lập và có thể quan sát được như một ứng dụng doanh nghiệp.
Quản lý nhóm
“Quy tắc hai chiếc bánh pizza” là một loại quy tắc hạn chế số lượng người tham dự trong nhóm phát triển dịch vụ vi mô. Theo quy tắc này, số lượng thành viên trong nhóm của một ứng dụng phải ít đến mức họ có thể cho hai chiếc bánh pizza ăn. Nói chung, số lượng không được nhiều hơn 8. Vì microservice có bản chất là full stack, nên nhóm cũng có bản chất là full stack. Để tăng năng suất, chúng tôi cần xây dựng một đội gồm tối đa 8 thành viên với tất cả các loại chuyên môn cần thiết cho dịch vụ đó.
Quản lý công việc
Nhiệm vụ là một vai trò quan trọng trong vòng đời phát triển phần mềm. Việc phát triển một ứng dụng quy mô lớn có thể được chia nhỏ thành nhiều đơn vị nhiệm vụ nhỏ. Hãy để chúng tôi xem xét chúng tôi cần phát triển một ứng dụng chẳng hạn như Facebook. Sau đó, chức năng “Đăng nhập” có thể được coi là một nhiệm vụ của toàn bộ quá trình xây dựng. Tiến độ cho mỗi nhiệm vụ này cần được theo dõi đúng cách dưới sự chỉ đạo của các chuyên gia tay nghề cao. Agile là cấu trúc quy trình nổi tiếng được áp dụng trong các ngành công nghiệp để theo kịp quản lý tác vụ tốt.
Cho đến bây giờ chúng ta đã tìm hiểu Microservice là gì và những nhu cầu cơ bản của nó bên trên kiến trúc MVC hiện đại là gì. Trong chương này, chúng ta sẽ tìm hiểu các yếu tố khác nhau của kiến trúc này quan trọng như nhau đối với một dịch vụ.
Các hạng mục dịch vụ
Với tên Microservice, chúng tôi giả định rằng nó sẽ là một dịch vụ có thể được sử dụng qua các giao thức HTTP, tuy nhiên chúng tôi cần biết loại dịch vụ nào có thể được xây dựng bằng cách sử dụng kiến trúc này. Sau đây là danh sách các dịch vụ có thể được triển khai bằng kiến trúc Microservice.
Platform as a Service [PaaS]- Trong kiến trúc hướng dịch vụ này, nền tảng được cung cấp như một công cụ có thể được tùy chỉnh theo nhu cầu kinh doanh. PaaS đóng một vai trò quan trọng trong việc phát triển ứng dụng di động. Ví dụ tuyệt vời nhất của PaaS là Google App engine, nơi Google cung cấp nền tảng hữu ích khác nhau để xây dựng ứng dụng của bạn. Ban đầu PaaS phát triển để cung cấp kiến trúc hoặc cơ sở hạ tầng tích hợp sẵn cho các nhà phát triển. Nó làm giảm độ phức tạp của lập trình cấp cao hơn trong thời gian giảm đáng kể. Sau đây là ảnh chụp nhanh về PaaS do Google cung cấp.
Software as a Service [SaaS]- Phần mềm như một Dịch vụ là một doanh nghiệp cấp phép phần mềm, nơi phần mềm được lưu trữ tập trung và được cấp phép trên cơ sở đăng ký. SaaS có thể được truy cập chủ yếu thông qua trình duyệt và nó là một mẫu kiến trúc rất phổ biến trong nhiều ngành dọc kinh doanh như Quản lý Nguồn nhân lực (HRM), Hoạch định Nguồn lực Doanh nghiệp (ERP), Quản lý Quan hệ Khách hàng (CRM), v.v. Ảnh chụp màn hình sau đây cho thấy các ví dụ về các SaaS khác nhau do Oracle cung cấp.
Infrastructure as a Service [IaaS]- Cơ sở hạ tầng đóng vai trò tốt trong các ngành CNTT. Sử dụng điện toán đám mây, một số tổ chức cung cấp cơ sở hạ tầng ảo làm dịch vụ của họ. IaaS rất hữu ích để mang lại sự nhanh nhẹn, hiệu quả về chi phí, bảo mật, hiệu suất, năng suất, v.v. trong phát triển phần mềm. Amazon EC2 và Microsoft Azure là những ví dụ lớn nhất về IaaS. Hình ảnh sau đây mô tả một ví dụ về AWS, nơi trung tâm dữ liệu được cung cấp dưới dạng IaaS.
Data as a Service [DaaS]- Công nghệ thông tin liên quan đến dữ liệu và một số nhà lãnh đạo hàng đầu trong ngành tin rằng dữ liệu sẽ là nguồn dinh dưỡng mới của xã hội. DaaS là một loại dịch vụ mà dữ liệu được chia sẻ với các tập đoàn kinh doanh để nghiên cứu và phân tích. DaaS mang đến sự đơn giản, nhanh nhẹn và bảo mật trong lớp truy cập dữ liệu. Sau đây là một ví dụ về đám mây Dữ liệu Oracle, có thể được truy cập hoặc cấp phép cho nhu cầu kinh doanh của riêng bạn.
Back End as a Service [BaaS]- BaaS còn được gọi là MBaaS, có nghĩa là dịch vụ back-end di động. Trong loại dịch vụ này, phần phụ trợ của ứng dụng sẽ được cung cấp cho các đơn vị kinh doanh cho các dự án kinh doanh của riêng họ. Tất cả các thông báo đẩy, dịch vụ mạng xã hội đều thuộc loại dịch vụ này. Facebook và Twitter là những ví dụ về nhà cung cấp dịch vụ BaaS nổi tiếng.
Bảo vệ
Khi nói đến việc xử lý hàng tấn dữ liệu khách hàng, bảo mật đóng một vai trò quan trọng. Vấn đề bảo mật liên quan đến tất cả các loại dịch vụ hiện có trên thị trường. Dù bạn đang sử dụng đám mây nào - riêng tư, công khai, kết hợp, v.v., bảo mật nên được duy trì ở tất cả các cấp. Toàn bộ vấn đề bảo mật có thể được chia thành các phần sau:
Security issue faced by service providers - Đây là loại vấn đề bảo mật mà các nhà cung cấp dịch vụ như Google, Amazon, ... phải đối mặt. Để đảm bảo bảo vệ an ninh, việc kiểm tra lý lịch của máy khách là cần thiết, đặc biệt là những người có quyền truy cập trực tiếp vào phần lõi của đám mây.
Security issue faced by consumers- Đám mây thân thiện với chi phí, do đó nó được sử dụng rộng rãi trong các ngành công nghiệp. Một số tổ chức lưu trữ chi tiết người dùng trong trung tâm dữ liệu của bên thứ ba và lấy dữ liệu bất cứ khi nào được yêu cầu. Do đó, bắt buộc phải duy trì các mức bảo mật sao cho mọi dữ liệu riêng tư của một khách hàng không được hiển thị cho bất kỳ người dùng nào khác.
Để ngăn chặn các vấn đề bảo mật nêu trên, sau đây là một số cơ chế phòng thủ được các tổ chức sử dụng.
Deterrent Control - Biết bạn tiềm ẩn mối đe dọa để giảm tấn công mạng.
Preventive Control - Duy trì chính sách xác thực cấp cao để truy cập vào đám mây của bạn.
Detective Control - Giám sát người dùng của bạn và phát hiện bất kỳ rủi ro tiềm ẩn nào.
Corrective Control - Làm việc chặt chẽ với các đội khác nhau và khắc phục các vấn đề phát sinh trong giai đoạn kiểm soát thám tử.
Thành phần phần mềm có nghĩa là cách để xây dựng sản phẩm phần mềm của bạn. Về cơ bản, nó xử lý sơ đồ kiến trúc phần mềm cấp cao trong đó các mô-đun khác nhau của phần mềm của bạn sẽ giao tiếp cho các mục tiêu kinh doanh cụ thể. Trong chương này, chúng ta sẽ tìm hiểu về các mẫu cấu thành phần mềm khác nhau được sử dụng rộng rãi trong các tổ chức. Trong microservice, chúng tôi chia từng chức năng thành một quy trình. Mỗi dịch vụ này sẽ độc lập và đầy đủ về bản chất.
Phân rã chức năng đóng một vai trò quan trọng trong việc xây dựng microservices của bạn. Nó cung cấp sự nhanh nhẹn, linh hoạt và khả năng mở rộng cho ứng dụng của bạn.
Mẫu tổng hợp
Mẫu tổng hợp là mẫu web đơn giản nhất có thể được triển khai trong khi phát triển một dịch vụ nhỏ. Trong mẫu thành phần này, một mô-đun web đơn giản sẽ hoạt động như một bộ cân bằng tải, có nghĩa là nó sẽ gọi các dịch vụ khác nhau theo yêu cầu. Sau đây là sơ đồ mô tả một ứng dụng web microservice đơn giản với thiết kế tập hợp. Như được thấy trong hình sau, "Aggregator" chịu trách nhiệm gọi từng dịch vụ khác nhau. Nếu chúng ta cần áp dụng bất kỳ logic nghiệp vụ nào trên kết quả của dịch vụ A, B và C, thì chúng ta có thể triển khai logic nghiệp vụ trong chính bộ tổng hợp.
Một công cụ tổng hợp có thể được hiển thị lại như một dịch vụ khác cho thế giới bên ngoài, có thể được những người khác sử dụng bất cứ khi nào có yêu cầu. Trong khi phát triển dịch vụ web mẫu tổng hợp, chúng tôi cần lưu ý rằng mỗi dịch vụ A, B và C của chúng tôi phải có các lớp bộ nhớ đệm riêng và bản chất nó phải là ngăn xếp đầy đủ.
Mẫu proxy
Proxy microservice pattern là một biến thể của mô hình tổng hợp. Trong mô hình này, chúng tôi sẽ sử dụng mô-đun proxy thay vì mô-đun tổng hợp. Dịch vụ proxy có thể gọi từng dịch vụ khác nhau.
Trong mẫu Proxy, chúng ta có thể xây dựng một cấp độ bảo mật bổ sung bằng cách cung cấp một lớp proxy kết xuất. Lớp này hoạt động tương tự như giao diện.
Mẫu chuỗi
Đúng như tên gọi, kiểu bố cục này sẽ tuân theo cấu trúc dây chuyền. Ở đây, chúng tôi sẽ không sử dụng bất kỳ thứ gì ở giữa lớp máy khách và lớp dịch vụ. Thay vào đó, chúng tôi sẽ cho phép khách hàng giao tiếp trực tiếp với các dịch vụ và tất cả các dịch vụ sẽ được xâu chuỗi theo cách mà đầu ra của một dịch vụ sẽ là đầu vào của dịch vụ tiếp theo. Hình ảnh sau đây cho thấy một microservice mẫu chuỗi điển hình.
Một nhược điểm lớn của kiến trúc này là máy khách sẽ bị chặn cho đến khi toàn bộ quá trình hoàn tất. Vì vậy, bạn nên giữ độ dài của chuỗi càng ngắn càng tốt.
Mẫu Microservice nhánh
Branch microservice là phiên bản mở rộng của mô hình tập hợp và mô hình chuỗi. Trong mẫu thiết kế này, khách hàng có thể giao tiếp trực tiếp với dịch vụ. Ngoài ra, một dịch vụ có thể giao tiếp với nhiều dịch vụ cùng một lúc. Sau đây là biểu diễn sơ đồ của Branch Microservice.
Mẫu microservice nhánh cho phép nhà phát triển định cấu hình động các lệnh gọi dịch vụ. Tất cả các cuộc gọi dịch vụ sẽ diễn ra đồng thời, có nghĩa là dịch vụ A có thể gọi dịch vụ B và C đồng thời.
Mẫu tài nguyên được chia sẻ
Mẫu tài nguyên được chia sẻ thực sự là một tập hợp của tất cả các loại mẫu đã đề cập trước đó. Trong mô hình này, máy khách hoặc bộ cân bằng tải sẽ giao tiếp trực tiếp với từng dịch vụ bất cứ khi nào cần thiết. Đây là mô hình thiết kế hiệu quả nhất được áp dụng rộng rãi trong hầu hết các tổ chức. Sau đây là biểu diễn sơ đồ của mẫu thiết kế Tài nguyên được chia sẻ.
Trong chương này, chúng tôi sẽ phát triển một ứng dụng dựa trên CRUD với kiến trúc SOA. Sau đó trong các chương tiếp theo, chúng ta sẽ chia dịch vụ này thành microservice và chúng ta sẽ tìm hiểu sự khác biệt cơ bản giữa kiến trúc SOA và microservice.
Cấu hình và thiết lập hệ thống
Trong phần này, chúng tôi sẽ xây dựng một ứng dụng CRUD mẫu, ứng dụng này sẽ trả về một đối tượng JSON dưới dạng phản hồi bất cứ khi nào chúng tôi gọi dịch vụ của mình. Chúng tôi sẽ sử dụng khuôn khổ Jersey để phát triển tương tự. Sau đây là các bước để thiết lập môi trường hệ thống cục bộ của bạn.
Phát triển ứng dụng CRUD
Step 1- Chúng tôi sẽ sử dụng NetBeans làm IDE phát triển. Vui lòng tải xuống và cài đặt phiên bản mới nhất có sẵn trên trang web chính thức của NetBeanshttps://netbeans.org/downloads/.
Step 2- Mở IDE NetBeans của bạn. Đi tới “Tệp -> Dự án mới”. Ảnh chụp màn hình sau bật lên. Chọn “Maven” làm danh mục và chọn “Dự án từ ArchType” làm dự án và nhấn Tiếp theo.
Thao tác này sẽ tải xuống tất cả các tệp jar cần thiết để tạo dự án Maven đầu tiên của bạn và Dịch vụ Web RESTful.
Step 3- Khi nhấn nút Tiếp theo ở bước trước, ảnh chụp màn hình sau sẽ xuất hiện. Ở đây, bạn sẽ phải chỉ định Maven Archetype.
Trong hộp tìm kiếm, hãy tìm kiếm “Jersey-ArchType-Webapp (2.16)” và chọn hộp kiểm “Hiển thị người lớn tuổi hơn”.
Step 4- Sau khi đã chọn xong, bạn sẽ được chuyển đến màn hình sau. Chọn bình ưa thích từ danh sách và nhấn Tiếp theo để tiếp tục.
Step 5- Trong bước này, bạn cần cung cấp tên dự án của mình và Id nhóm của nó cũng như chi tiết gói. Sau khi cung cấp tất cả thông tin này, hãy nhấn Hoàn tất để tiếp tục.
Step 6- Bạn đã hoàn tất việc thiết lập không gian làm việc của mình. Thư mục dự án sẽ giống như sau.
Kiểm tra thư mục “Phụ thuộc” của bạn và bạn sẽ thấy rằng Maven đã tự động tải xuống tất cả các tệp jar cần thiết cho dự án này.
Step 7- Không gian làm việc của bạn đã được thiết lập và bạn có thể bắt đầu với việc viết mã. Hãy tiếp tục và tạo bốn lớp và gói như được đề cập trong ảnh chụp màn hình sau. Bạn có thể tìm thấy MyResource.java đã được tạo bởi Maven, vì Maven đủ thông minh để phát hiện ra rằng bạn sẽ xây dựng dịch vụ web của riêng mình.
Step 8 - Sau khi thực hiện xong bước trên, chúng ta sẽ xây dựng lớp POJO của mình là UserProfile.java như sau.
package com.tutorialspoint.userprofile.Model;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class UserProfile {
private long ProId;
private String FName;
private String LName;
private String Add;
public UserProfile(){}
public UserProfile(long Proid, String Fname, String Lname,String Add) {
this.ProId = Proid;
this.FName = Fname;
this.LName = Lname;
this.Add = Add;
}
public long getProId() {
return ProId;
}
public void setProId(long ProId) {
this.ProId = ProId;
}
public String getFName() {
return FName;
}
public void setFName(String FName) {
this.FName = FName;
}
public String getLName() {
return LName;
}
public void setLName(String LName) {
this.LName = LName;
}
public String getAdd() {
return Add;
}
public void setAdd(String Add) {
this.Add = Add;
}
}
Step 9- Bây giờ chúng ta sẽ tạo lớp Cơ sở dữ liệu của chúng ta. Vì đây là một phần của tài liệu học tập, chúng tôi sẽ không sử dụng bất kỳ DB nào làm cơ sở dữ liệu của mình. Chúng tôi sẽ sử dụng một bộ nhớ Java có sẵn để hoạt động như bộ nhớ tạm thời của chúng tôi. Như bạn có thể thấy trong bộ mã sau, chúng tôi sẽ sử dụng MAP làm cơ sở dữ liệu của mình. Tất cả các hoạt động dịch vụ web mà chúng tôi thực hiện, chúng tôi sẽ làm việc trên MAP này được xác định trong lớp.
package com.tutorialspoint.userprofile.DAO;
import com.tutorialspoint.userprofile.Model.UserProfile;
import java.util.HashMap;
import java.util.Map;
public class DatabaseClass {
private static Map<Long,UserProfile> messages = new HashMap<Long,UserProfile>();
public static Map<Long,UserProfile> getUsers() {
return messages;
// Each time this method will return entire map as an instance of database
}
}
Step 10- Bây giờ chúng ta hãy xây dựng lớp dịch vụ của mình. Hãy tiếp tục và sao chép, dán bộ mã sau vào lớp “ProfileService.java”. Đây là lớp mà chúng tôi sẽ khai báo tất cả các phương thức dịch vụ web của chúng tôi sẽ được hiển thị cho thế giới bên ngoài. Chúng ta cần tạo một tham chiếu của Lớp cơ sở dữ liệu để cơ sở dữ liệu tạm thời của chúng ta có thể được truy cập trong lớp này.
package com.tutorialspoint.userprofile.service;
import com.tutorialspoint.userprofile.DAO.DatabaseClass;
import com.tutorialspoint.userprofile.Model.UserProfile;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ProfileService {
private Map<Long,UserProfile> Userprofiles = DatabaseClass.getUsers();
// Creating some predefine profile and populating the same in the map
public ProfileService() {
UserProfile m1 = new UserProfile(1L,"Tutorials1","Point1","TutorialsPoint.com");
UserProfile m2 = new UserProfile(2L,"Tutorials2","Point2","TutorialsPoint.com2");
UserProfile m3 = new UserProfile(3L,"Tutorials3","Point3","TutorialsPoint.com3");
UserProfile m4 = new UserProfile(4L,"Tutorials4","Point4","TutorialsPoint.com4");
Userprofiles.put(1L, m1);
Userprofiles.put(2L, m2);
Userprofiles.put(1L, m3);
Userprofiles.put(2L, m4);
}
//Method to fetch all profile
public List<UserProfile> getAllProfile() {
List<UserProfile> list = new ArrayList<UserProfile>(Userprofiles.values());
return list;
} // Method to fetch only one profile depending on the ID provided
public UserProfile getProfile(long id) {
return Userprofiles.get(id);
} //Method to add profile
public UserProfile addProfile(UserProfile UserProfile) {
UserProfile.setProId(Userprofiles.size()+1);
Userprofiles.put(UserProfile.getProId(), UserProfile);
return UserProfile;
} //method to update Profile
public UserProfile UpdateProfile(UserProfile UserProfile) {
if(UserProfile.getProId()<=0) {
return null;
} else {
Userprofiles.put(UserProfile.getProId(), UserProfile);
return UserProfile;
}
} //method to delete profile
public void RemoveProfile(long Id) {
Userprofiles.remove(Id);
}
}
Step 11 - Trong bước này, chúng ta sẽ tạo lớp Resource của mình sẽ được liên kết với URL và dịch vụ tương ứng sẽ được gọi.
package com.tutorialspoint.userprofile.Resource;
import com.tutorialspoint.userprofile.Model.UserProfile;
import com.tutorialspoint.userprofile.service.ProfileService;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/Profile")
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public class ProfileResource {
ProfileService messageService = new ProfileService();
@GET
public List<UserProfile> getProfile() {
return messageService.getAllProfile();
}
@GET
@Path("/{ProID}")
public UserProfile getProfile(@PathParam("ProID")long Id) {
return messageService.getProfile(Id);
}
@POST
public UserProfile addProfile(UserProfile profile) {
return messageService.addProfile(profile);
}
@PUT
@Path("/{proID}")
public UserProfile UpdateProfile(@PathParam("proID")long Id,UserProfile UserProfile) {
UserProfile.setProId(Id);
return messageService.UpdateProfile(UserProfile);
}
@DELETE
@Path("/{ProID}")
public void deleteProfile(@PathParam("ProID")long Id) {
messageService.RemoveProfile(Id);
}
}
Step 12- Làm sạch xây dựng dự án và chạy nó. Nếu mọi thứ suôn sẻ thì bạn sẽ nhận được kết quả sau trong trình duyệt, trong khi truy cậphttp://localhost:8080/UserProfile/webapi/Profile” URL.
Bạn có thể thấy các mục nhập khác nhau được điền bằng cách sử dụng biểu diễn XML.
Phương pháp khác có thể được kiểm tra bằng Postman bằng cách áp dụng URL phương pháp thích hợp.
@GET method - Ảnh chụp màn hình sau đây trình bày cách chúng tôi có thể nhận được kết quả mong muốn cho yêu cầu nhận, trả về tất cả thông tin chi tiết của người dùng.
@POST- Yêu cầu sau có thể được sử dụng để kiểm tra phương pháp Đăng của chúng tôi. Lưu ý cách proId đã được tạo tự động.
@PUT- Phương pháp này sẽ cập nhật các mục nhập. Ảnh chụp màn hình sau đây minh họa cách Jersey lấy proId từ URL yêu cầu và cập nhật câu trả lời hồ sơ người dùng tương tự.
Theo cách tương tự, bạn có thể kiểm tra các phương pháp khác có sẵn trong các dịch vụ web của mình.
Trong phần trước, chúng tôi đã phát triển một dịch vụ sẽ hiển thị chức năng CRUD. Bây giờ bất cứ khi nào chúng tôi cố gắng triển khai dịch vụ này trong ứng dụng của mình, chúng tôi cần tạo một ứng dụng khách của ứng dụng này và đính kèm nó vào ứng dụng của chúng tôi. Trong chương này, chúng ta sẽ học cách xây dựng chức năng này bằng cách sử dụng khái niệm Microservice. Sau đây là biểu diễn sơ đồ của ứng dụng của chúng tôi được xây dựng bằng các bước trên.
Tác nhân phải là đầu vào của dịch vụ của chúng tôi. Trong trường hợp này “ProfileResource.java” thực hiện trách nhiệm của một tác nhân. Lớp này sẽ gọi các phương thức khác nhau để thực hiện các thao tác khác nhau như thêm, cập nhật và xóa.
Phân hủy ứng dụng CRUD
Theo nguyên tắc chính của microservice, chúng ta chỉ cần có một nhiệm vụ nghiệp vụ cho mỗi mô-đun, do đó một tác nhân không nên chịu trách nhiệm cho cả bốn chức năng CRUD. Hãy xem xét ví dụ sau, nơi chúng tôi đã giới thiệu một số vai trò mới để bạn hiểu rõ về mặt khái niệm rằng Microservice là một đại diện kiến trúc của SOA.
“Người dùng chính” là người dùng giao tiếp với “Bộ điều khiển ứng dụng” để phục vụ nhu cầu của một người. “Người điều khiển ứng dụng” là người chỉ gọi các “Người quản lý tài nguyên” khác nhau tùy theo yêu cầu từ người dùng cuối. “Người quản lý tài nguyên” thực hiện công việc bắt buộc phải thực hiện. Chúng ta hãy xem nhanh các vai trò khác nhau của các đơn vị khác nhau của ứng dụng.
End User/Main Users - Yêu cầu một số tài nguyên tới Bộ điều khiển ứng dụng.
Application - Nhận yêu cầu và chuyển tiếp yêu cầu tương tự đến Người quản lý tài nguyên cụ thể.
Resource Manager - Thực hiện công việc cập nhật, xóa và thêm người dùng.
Xem tổng trách nhiệm của một lớp được phân bổ như thế nào giữa các lớp khác.
Trong chương này, chúng tôi sẽ xây dựng một ứng dụng microservice sẽ sử dụng các dịch vụ có sẵn khác nhau. Tất cả chúng ta đều biết rằng microservice không phải là một cách hiệu quả về chi phí để xây dựng một ứng dụng vì mỗi và mọi dịch vụ chúng ta xây dựng sẽ là một ngăn xếp đầy đủ về bản chất. Việc xây dựng một microservice trong môi trường cục bộ sẽ cần cấu hình hệ thống cao cấp, vì bạn cần có bốn phiên bản của một máy chủ để tiếp tục chạy sao cho nó có thể được sử dụng tại một thời điểm. Để xây dựng dịch vụ vi mô đầu tiên của chúng tôi, chúng tôi sẽ sử dụng một số điểm cuối SOA có sẵn và chúng tôi sẽ sử dụng cùng một trong ứng dụng của mình.
Cấu hình và thiết lập hệ thống
Trước khi đi xa hơn đến giai đoạn xây dựng, hãy chuẩn bị hệ thống của bạn cho phù hợp. Bạn sẽ cần một số dịch vụ web công cộng. Bạn có thể dễ dàng google cho điều này. Nếu bạn muốn sử dụng dịch vụ web SOAP, thì bạn sẽ nhận được một tệp WSDL và từ đó bạn cần sử dụng dịch vụ web cụ thể. Đối với dịch vụ REST, bạn sẽ chỉ cần một liên kết để sử dụng cùng một. Trong ví dụ này, bạn sẽ kẹt ba dịch vụ web khác nhau “SOAP”, “REST” và “custom” trong một ứng dụng.
Kiến trúc ứng dụng
Bạn sẽ tạo một ứng dụng Java bằng cách sử dụng kế hoạch triển khai microservice. Bạn sẽ tạo một dịch vụ tùy chỉnh và đầu ra của dịch vụ này sẽ hoạt động như một đầu vào cho các dịch vụ khác.
Sau đây là các bước cần làm để phát triển một ứng dụng microservice.
Step 1: Client creation for SOAP service- Có rất nhiều API web miễn phí có sẵn để tìm hiểu một dịch vụ web. Với mục đích của hướng dẫn này, hãy sử dụng dịch vụ GeoIP của “http://www.webservicex.net/.”Tệp WSDL được cung cấp trong liên kết sau trên trang web của họ “ webservicex.net. Để tạo ứng dụng khách từ tệp WSDL này, tất cả những gì bạn cần làm là chạy lệnh sau trong thiết bị đầu cuối của bạn.
wsimport http://www.webservicex.net/geoipservice.asmx?WSDL
Lệnh này sẽ tạo tất cả các tệp khách hàng được yêu cầu trong một thư mục có tên “SEI”, được đặt tên theo giao diện điểm cuối dịch vụ.
Step 2: Create your custom web service- Thực hiện theo cùng một quy trình đã đề cập ở giai đoạn trước trong hướng dẫn này và xây dựng một api REST dựa trên Maven có tên là “CustomRest”. Sau khi hoàn tất, bạn sẽ tìm thấy một lớp có tên “MyResource.java”. Hãy tiếp tục và cập nhật lớp này bằng cách sử dụng mã sau.
package com.tutorialspoint.customrest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("myresource")
public class MyResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
return "IND|INDIA|27.7.65.215";
}
}
Khi mọi thứ đã hoàn tất, hãy tiếp tục và chạy ứng dụng này trên máy chủ. Bạn sẽ nhận được kết quả sau trong trình duyệt.
Đây là máy chủ web, trả về một đối tượng chuỗi khi nó được gọi. Đây là dịch vụ đầu vào cung cấp các đầu vào có thể được sử dụng bởi ứng dụng khác để tạo bản ghi.
Step 3: Configure another Rest API- Trong bước này, sử dụng một dịch vụ web khác có sẵn tại services.groupkt.com. Điều này sẽ trả về một đối tượng JSON khi được gọi.
Step 4: Create JAVA application - Tạo một ứng dụng Java bình thường bằng cách chọn “Dự án mới” -> “Dự án JAVA” và nhấn Kết thúc như thể hiện trong ảnh chụp màn hình sau.
Step 5: Add the SOAP client- Trong bước 1, bạn đã tạo tệp khách hàng cho dịch vụ web SOAP. Hãy tiếp tục và thêm các tệp khách hàng này vào dự án hiện tại của bạn. Sau khi bổ sung thành công các tệp khách hàng, thư mục ứng dụng của bạn sẽ như sau.
Step 6: Create your main app- Tạo lớp chính của bạn nơi bạn sẽ sử dụng tất cả ba dịch vụ web này. Nhấp chuột phải vào dự án nguồn và tạo một lớp mới có tên “MicroServiceInAction.java”. Nhiệm vụ tiếp theo là gọi các dịch vụ web khác nhau từ đây.
Step 7: Call your custom web service - Đối với điều này, hãy tiếp tục và thêm bộ mã sau để thực hiện gọi dịch vụ của riêng bạn.
try {
url = new URL("http://localhost:8080/CustomRest/webapi/myresource");
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
while ((output = br.readLine()) != null) {
inputToOtherService = output;
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Step 8: Consume SOAP Services- Bạn đã tạo tệp khách hàng của mình nhưng bạn không biết phương thức nào nên được gọi trong toàn bộ gói đó? Đối với điều này, bạn cần tham khảo lại WSDL, mà bạn đã sử dụng để tạo tệp khách hàng của mình. Mỗi tệp WSDL phải có một thẻ tìm kiếm thẻ “wsdl: service” cho thẻ này. Nó phải là điểm vào của bạn của dịch vụ web đó. Sau đây là điểm cuối dịch vụ của ứng dụng này.
Bây giờ bạn cần triển khai dịch vụ này trong ứng dụng của mình. Sau đây là bộ mã Java bạn cần để triển khai dịch vụ web SOAP của mình.
GeoIPService newGeoIPService = new GeoIPService();
GeoIPServiceSoap newGeoIPServiceSoap = newGeoIPService.getGeoIPServiceSoap();
GeoIP newGeoIP = newGeoIPServiceSoap.getGeoIP(Ipaddress);
// Ipaddress is output of our own web service.
System.out.println("Country Name from SOAP Webserivce ---"+newGeoIP.getCountryName());
Step 9: Consume REST web service- Hai trong số các dịch vụ đã được tiêu thụ cho đến nay. Trong bước này, một dịch vụ web REST khác có URL tùy chỉnh sẽ được sử dụng với sự trợ giúp của dịch vụ web tùy chỉnh của bạn. Sử dụng bộ mã sau để làm như vậy.
String url1="http://services.groupkt.com/country/get/iso3code/";//customizing the Url
url1 = url1.concat(countryCode);
try {
URL url = new URL(url1);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Step 10: Consume all services - Xem xét dịch vụ web “CustomRest” của bạn đang chạy và bạn được kết nối với Internet, nếu mọi thứ được hoàn tất thành công thì sau đây sẽ là lớp chính hợp nhất của bạn.
package microserviceinaction;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.StringTokenizer;
import net.webservicex.GeoIP;
import net.webservicex.GeoIPService;
import net.webservicex.GeoIPServiceSoap;
public class MicroServiceInAction {
static URL url;
static HttpURLConnection conn;
static String output;
static String inputToOtherService;
static String countryCode;
static String ipAddress;
static String CountryName;
public static void main(String[] args) {
//consuming of your own web service
try {
url = new URL("http://localhost:8080/CustomRest/webapi/myresource");
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
while ((output = br.readLine()) != null) {
inputToOtherService = output;
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//Fetching IP address from the String and other information
StringTokenizer st = new StringTokenizer(inputToOtherService);
countryCode = st.nextToken("|");
CountryName = st.nextToken("|");
ipAddress = st.nextToken("|");
// Call to SOAP web service with output of your web service---
// getting the location of our given IP address
String Ipaddress = ipAddress;
GeoIPService newGeoIPService = new GeoIPService();
GeoIPServiceSoap newGeoIPServiceSoap = newGeoIPService.getGeoIPServiceSoap();
GeoIP newGeoIP = newGeoIPServiceSoap.getGeoIP(Ipaddress);
System.out.println("Country Name from SOAP Webservice ---"+newGeoIP.getCountryName());
// Call to REST API --to get all the details of our country
String url1 = "http://services.groupkt.com/country/get/iso3code/"; //customizing the Url
url1 = url1.concat(countryCode);
try {
URL url = new URL(url1);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Sau khi chạy tệp này, bạn sẽ thấy kết quả sau trong bảng điều khiển. Bạn đã phát triển thành công ứng dụng microservice đầu tiên của mình.