Giao thức UDP

Một phần của tài liệu Xây dựng hệ thống tương tác trực tuyến (Trang 36)

UDP (User Datagram Protocol) là giao thức theo phương thức không liên kết

được sử dụng thay thế cho TCP ở trên IP theo yêu cầu của từng ứng dụng. Khác với TCP, UDP không có các chức năng thiết lập và kết thúc liên kết. Tương tự như IP, nó cũng không cung cấp cơ chế báo nhận (ackowledgment), không sắp xếp tuần tự các gói tin (datagram) đến và có thể dẫn đến tình trạng mất hoặc trùng dữ liệu mà

không có cơ chế thông báo lỗi cho người gửi. Qua đó ta thấy UDP cung cấp các dịch vụ vận chuyển không tin cậy như trong TCP. Khuôn dạng UDP datagram được mô tả với các vùng tham sốđơn giản hơn nhiều so với TCP segment.

Sinh viên thực hiện: Lê Văn Thành 20102156 Khóa 55 36 Hình 3.3: Dạng thức gói tin UDP

UDP cũng cung cấp cơ chế gán và quản lý các số hiệu cổng (port number) để định danh duy nhất cho các ứng dụng chạy trên một trạm của mạng. Do ít chức năng

phức tạp nên UDP thường có xu thế hoạt động nhanh hơn so với TCP. Nó thường

Sinh viên thực hiện: Lê Văn Thành 20102156 Khóa 55 37 Hình 3.4: Mô hình quan hệ họ giao thức TCP/IP

3.1.2.Cơ chế NIO Network

Trong tính toán, IO (Input/Output) là hoạt động giao tiếp giữa các hệ thống xử lý thông tin (như máy tính). Trong hệđiều hành các hành động như đóng mở kết nối mạng, truy xuất file, cấp phát tiến trình, truy xuất bộ nhớ, truy xuất các thiết bị ngoại vi… đều được coi là các hoạt động vào ra. Các hoạt động IO thường tiêu tốn tài

Sinh viên thực hiện: Lê Văn Thành 20102156 Khóa 55 38 nguyên và thời gian xử lý của hệ thống. Tài nguyên của hệ thống là hữu hạn, thời gian xử lý 1 công việc IO là xác định, do đó muốn tăng hiệu năng xử lý của hệ thống, ta cần phải có cơ chế xử lý song song. Với cơ chế này hệ thống phải giải quyết bài

toán đồng bộ các công việc IO khi chúng cùng chia sẻ tài nguyên và đảm bảo các công việc này không tác động sai lệnh đến nhau.

Việc đồng bộ các công việc IO phải đáp ứng yêu cầu:

x Yêu cầu độc quyn truy xut (Mutal exclusion): tại một thời điểm, chỉ

có một tiến trình được quyền truy xuất một tài nguyên không thể chia sẻ

x Yêu cu phi hp (Synchronization): các tiến trình cần hợp tác với

nhau để hoàn thành công việc.

Non-blocking IO là một tư tưởng tối ưu hóa việc xử lý IO thông qua:

x Hạn chế các xử lý IO đồng thời chiếm quyền sử dụng tài nguyên chia sẻ giữa các hoạt động này

x Hạn chế cấp phát trên tài nguyên hữu hạn x Chia nhỏ các công việc thành nhiều công đoạn

Ví dụ, để giải quyết bài toán xử lý song song, ta sử dụng multi-threading đáp ứng yêu cầu xử lý sốlượng lớn các công việc và tăng tốc độ xử lý các công việc IO,

do đó hệ thống cần tạo ra nhiều threads thực hiện các yêu cầu trên một cách đồng thời. Bản chất của hành động tạo ra các threads là xin cấp phát tài nguyên hệ thống (không gian địa chỉ tiến trình cha, con trỏ lệnh, tập các thanh ghi và stack) và thực thi

đồng thời bằng cách chia sẻ CPU. NIO được áp dụng bằng việc tạo ra thread pool chứa một số lượng thread xác định. Nhờ đó hệ thống được tối ưu, sử dụng lại các

threads đã được khởi tạo thay vì khởi tạo mới tiêu tốn tài nguyên hệ thống và thời gian tạo ra chúng.

Khác với Blocking, khi hệ thống cần xử lý n công việc song song, hệ thống tạo ra n tiến trình tương ứng để xử lý. Khi số công việc tăng lên, tài nguyên hệ thống

không đủ đểđáp ứng, hệ trống trở nên trì trệ khi phải tạo ra các thread mới. Một hệ

thống blocking hoàn toàn không có khảnăng mở rộng.

Để hạn chế các xửIO đồng thời tác động lên tài nguyên chung, ta áp dụng NIO thông qua việc lưu trữ các công việc trong một hàng đợi, sau đó các công việc này

được một thread chuyên xử lý IO.

Trong các hệ thống lớn, có rất nhiều yêu cầu từ client, mỗi yêu cầu phải thực hiện nghiệp vụ phức tạp tốn nhiều chi phí về thời gian, điều đó đòi hỏi hệ thống cần phải áp dụng cơ chế chia nhỏ công việc thành nhiều công đoạn để xử lý. Hiệu năng

hệ thống được tối ưu khi các công việc được chia nhỏ, mỗi công đoạn lại có một thread pool xử lý, các thread pool này xử lý các công việc trong một hàng đợi.

Sinh viên thực hiện: Lê Văn Thành 20102156 Khóa 55 39 (adsbygoogle = window.adsbygoogle || []).push({});

Như vậy tư tưởng NIO được áp dụng linh hoạt, kết hợp giữa các việc hạn chế

quyền truy cập, hạn chế cấp phát tài nguyên và chia nhỏ công việc xuyên suốt mọi nơi trong hệ thống.

Trong hệ thống PIS, NIO được áp dụng thể hiện trong việc chia nhỏ các công việc thành nhiều công đoạn, mỗi công đoạn lại có 1 thread pool để xử lý.

Decode Message Processor database Encode Message IO B uf fe r read write cl ie nt Wo rk er s request response

Hình 3.5: Các công đoạn xử lý request của hệ thống

Tầng Connection là cổng vào của hệ thống, có vai trò vô cùng quan trọng trong việc mở rộng hệ thống, tại đây các công việc đóng mở kết nối (IO connection) diễn ra thường xuyên, do đó yêu cầu tầng connection phải có có cơ chếNIO để tăng khả năng chịu tải của hệ thống.

Java hỗ trợ rất tốt việc người lập trình tạo ra các ứng dụng NIO network thông qua các gói nằm trong package java.nio.

Gói Hỗ trợ

java.nio Gói này chứa các lớp buffer cung cấp các kỹ thuật để lưu

trữ dữ liệu ở dạng nguyên thủy trong bộ nhớ trong

java.nio.channels Định nghĩa các kênh thay cho các liên kết tới các thực thể

có khả năng thực hiện các thao tác truy xuất. Các thực thể

có thể là các tập tin, socket hay các selector

java.nio.channels.spi Chứa các lớp cung cấp các dịch vụ cho gói java.nio.channels java.nio.channels Chứa các charset, mã hóa, giải mã dữ liệu, các lớp chuyển

Sinh viên thực hiện: Lê Văn Thành 20102156 Khóa 55 40 SERVER Client Client Client S E L E C T O R Socket Channel Socket Channel Socket Channel

Key Key Key Key Key

Key message message message Message Queue Thread Pool pick

Request Handler Threads

Hình 3.6: Mô hình NIO Network

Để cài đặt NIO Networking trong Java, ta khởi tạo 1 Selector (java.nio.chanel.Selector) và một ServerSocketChannel đăng ký mở một kết nối trên một cổng xác định. Selector chờđợi các kết nối trong một vòng lặp vô hạn. Với mỗi client kết nối đến Selector tạo ra 1 key (SelectorKey) cho client, mỗi key đại diện cho cặp ip, port xác định client Trong vòng lặp vô hạn, Selector tìm kiếm trong các selectorKeys, nếu key có trạng thái chấp nhận kết nối thì 1 SocketChannel sẽ được tạo ra nhằm tạo ra một kênh liên lạc client –server độc lập với các client khác. Lớp SocketChannel cung cấp các phương thức đọc, ghi giúp server có thể dễ dàng gửi nhận message với client. Đểđảm bảo các message đến từclient đều được xử lý và không bị thất lạc, ta sử dụng 1 hàng đợi lưu trữ các message gửi đến, hàng đợi này lại được thread pool điều khiển các thread đến xử lý message. Một công việc từ client yêu cầu được chia nhỏ thành nhiều công đoạn như đã nói trên đảm bảo các thread thực hiện các công việc nhỏ nhất, các message được xử lý nhanh, đảm bảo sốlượng message chờ trong queue là nhỏ nhất. Với cơ chế này ta tạo ra được ứng dụng network có khảnăng đáp ứng được sốlượng kết nối đồng thời lớn dựa trên tài nguyên server cấp phát cho ứng dụng.

Với sự phát triển của cộng đồng mã nguồn mở Java, có rất nhiều framework

cài đặt tư tưởng NIO Network để hỗ trợngười phát triển nhanh chóng tạo ra các ứng dụng mạng có hiệu năng cao, dễ dàng mở rộng như Apache Mina, Netty, Grizzly…

Các dựán này đều được chứng minh qua một số giải pháp game server cho thấy áp dụng các dự án này vào hệ thống là hoàn toàn đúng đắn.

Sinh viên thực hiện: Lê Văn Thành 20102156 Khóa 55 41 Hình 3.7: Kiến trúc Apache Mina

Kiến trúc của Mina đóng gói tầng kết nối, cung cấp các interface giúp người phát triển dễ dàng tạo ra NIO network application.

- IOAcceptor: hỗ trợ các phương thức khởi tạo mở cổng TCP, UDP, cài

đặt các handler, filter chain cho server

- IOHandler: nơi xử lý các sự kiện kết nối của client như khởi tạo session, mởsession, đóng session, session idle, gửi message, nhận message. - IOSession: cung cấp các phương thức giúp server truyền gửi message

cho client dễ dàng thông qua session id mà không phải quan tâm tới ip, port của client

- IOFilter: cho phép người phát triển tạo ra các bộ lọc message, mỗi bộ lọc (adsbygoogle = window.adsbygoogle || []).push({});

đi cùng với 2 class xử lý encode, decode message. Giúp người phát triển tùy ý tạo ra tạo ra các bộ encode, decode message khác nhau.

Một phần của tài liệu Xây dựng hệ thống tương tác trực tuyến (Trang 36)