1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo môn học hệ phân tán Đề tài tìm hiểu về grpc

19 2 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm Hiểu Về gRPC
Tác giả Nguyễn Tiến Quý, Hồ Đình Minh Đức, Nguyễn Văn Toàn, Nguyễn Tuấn Phi, Trần Đình Lương, Nguyễn Đức Bình, Trần Đỗ Hoàng, Trần Minh Hiếu
Người hướng dẫn ThS. Ngô Văn Nam
Trường học Trường Đại Học Điện Lực
Chuyên ngành Công Nghệ Thông Tin
Thể loại báo cáo
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 19
Dung lượng 1,26 MB

Nội dung

Việc thiết kế và triển khai một hệ thống giao tiếp hiệu quả giữa các dịch vụ là một thách thức quan trọng trong quá trình phát triển ứng dụng phân tán.. gRPC cung cấp một cách thức nhanh

Trang 1

BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO MÔN HỌC HỆ PHÂN TÁN

ĐỀ TÀI: TÌM HIỂU VỀ gRPC

Sinh viên thực hiện : NGUYỄN TIẾN QUÝ, HỒ ĐÌNH MINH ĐỨC,

NGUYỄN VĂN TOÀN, NGUYỄN TUẤN PHI, TRẦN ĐÌNH LƯƠNG, NGUYỄN ĐỨC BÌNH, TRẦN ĐỖ HOÀNG, TRẦN MINH HIẾU.

Trang 2

LỜI MỞ ĐẦU

Sự phát triển của công nghệ thông tin đã dẫn đến sự gia tăng đáng kể nhu cầu xây dựng các ứng dụng phân tán Các ứng dụng này thường bao gồm nhiều dịch vụ độc lập, hoạt động song song và kết nối với nhau để cung cấp chức năng tổng thể Việc thiết kế và triển khai một hệ thống giao tiếp hiệu quả giữa các dịch vụ là một thách thức quan trọng trong quá trình phát triển ứng dụng phân tán

gRPC (Remote Procedure Call) là một khung giao tiếp hiện đại được thiết kế để giải quyết những thách thức này gRPC cung cấp một cách thức nhanh chóng, hiệu quả và đáng tin cậy để kết nối các dịch vụ, bất kể ngôn ngữ lập trình hoặc nền tảng mà chúng được xây dựng

Bài viết này sẽ phân tích chi tiết gRPC, bao gồm các khái niệm cơ bản, ưu điểm,

cơ chế hoạt động, cũng như những ứng dụng thực tế của nó Bằng cách hiểu rõ các khía cạnh của gRPC, độc giả có thể nắm vững kiến thức cần thiết để phát triển các hệ thống phân tán mạnh mẽ, hiệu quả và dễ dàng bảo trì

2

Trang 3

MỤC LỤC

1.Tổng quan gRPC 4

1.1 Khái niệm 4

1.2 Những ai đang sử dụng gRPC? 4

1.3 Những ngôn ngữ lập trình hỗ trợ gRPC 5

2 Triển khai gRPC 6

2.1 Thiết lập môi trường gRPC 6

2.2 Hướng dẫn triển khai gRPC trong java 7

2.4 Các thư viện phổ biến trong gRPC 11

3 Kiến trúc gRPC 11

HTTP 1.1 so với HTTP 2 16

Trang 4

1.Tổng quan gRPC

1.1 Khái niệm

gRPC (gRPC Remote Procedure Calls) là một khung làm việc gọi thủ tục từ xa (RPC) hiệu suất cao, đa nền tảng gRPC ban đầu được tạo ra bởi Google, nhưng là mã nguồn mở và được sử dụng trong nhiều tổ chức Các trường hợp sử dụng bao gồm từ vi dịch vụ đến "khâu cuối cùng" của tính toán (di động, web và Internet vạn vật) gRPC sử dụng HTTP/2 để truyền tải, Protocol Buffers làm ngôn ngữ mô tả giao diện và cung cấp các tính năng như xác thực, luồng hai chiều và kiểm soát luồng, ràng buộc chặn hoặc không chặn, và hủy bỏ và thời gian chờ Nó tạo ra các ràng buộc máy khách và máy chủ

đa nền tảng cho nhiều ngôn ngữ Các kịch bản sử dụng phổ biến nhất bao gồm kết nối các dịch vụ trong kiến trúc vi dịch vụ hoặc kết nối các máy khách thiết bị di động với các dịch vụ back-end

Việc gRPC sử dụng HTTP/2 được coi là phức tạp Điều này khiến việc triển khai máy khách gRPC trong trình duyệt trở nên không thể, thay vào đó yêu cầu một máy chủ trung gian

1.2 Những ai đang sử dụng gRPC?

Nhiều công ty đã sử dụng gRPC để kết nối nhiều dịch vụ trong môi trường của họ Trường hợp sử dụng thay đổi từ việc kết nối một số dịch vụ đến hàng trăm dịch vụ trên nhiều ngôn ngữ trong các môi trường nội bộ hoặc đám mây Dưới đây là một số nền tảng đang sử dụng

họ Đội ngũ phát triển tại Square đánh giá cao tính năng API phát trực tuyến của gRPC và đang xem xét khả năng triển khai gRPC đến các thiết bị biên để tích hợp với các ứng dụng di động và API của bên thứ ba trong tương lai

Trong quá trình triển khai gRPC ban đầu, công ty đã dễ dàng mở rộng quy mô để phù hợp với hệ sinh thái hiện có của họ Họ cũng đạt được những thành công đáng kể khi trực tiếp đóng góp vào sự phát triển của gRPC thông qua việc gửi yêu cầu và hợp tác với nhóm Google chịu trách nhiệm quản lý dự án Họ kỳ vọng gRPC sẽ mang lại nhiều cải

4

Trang 5

thiện về năng suất cho các nhà phát triển và tạo điều kiện

thuận lợi cho việc phát triển các ngôn ngữ không phải

JVM trong tương lai

Với sự hỗ trợ cho phát trực tuyến hai chiều hiệu suất cao, bảo mật dựa trên TLS và nhiều ngôn ngữ lập trình, gRPC là một giao thức vận chuyển hợp nhất lý tưởng cho cấu hình điều khiển mô hình và đo từ xa

Việc gRPC được xây dựng trên giao thức HTTP/2

mang lại khả năng truyền phát hai chiều tự nhiên và hỗ

trợ siêu dữ liệu tùy chỉnh linh hoạt trong các tiêu đề

yêu cầu Tính năng truyền phát hai chiều là rất quan

trọng đối với các trường hợp sử dụng xử lý tải trọng lớn và giám sát mạng, trong khi tính năng siêu dữ liệu cho phép mở rộng và bao gồm các khả năng như các cơ chế xác thực mạng thành phần khác nhau

Hơn nữa, sự hỗ trợ đa ngôn ngữ rộng rãi của gRPC/proto3 cho phép tạo ra một môi trường phát triển linh hoạt và nhanh chóng cho cả người dùng nội bộ và bên ngoài Cuối cùng, trong khi có nhiều giao thức truyền thông mạng khác nhau để cấu hình, truy xuất trạng thái hoạt động và giám sát mạng từ xa, gRPC cung cấp một giao thức thống nhất và linh hoạt để tương tác dễ dàng giữa máy khách và máy chủ

1.3 Những ngôn ngữ lập trình hỗ trợ gRPC

Dưới đây là một số ngôn ngữ lập trình được hỗ trợ gRPC:

Trang 6

Các ngôn ngữ được hỗ trọ gRPC

2 Triển khai gRPC

2.1 Thiết lập môi trường gRPC

Bước 1: Chọn ngôn ngữ lập trình.

- gRPC hỗ trợ nhiều ngôn ngữ lập trình, bao gồm Go, Python, Java, C++, JavaScript, Ruby, v.v

Bước 2: Cài đặt thư viện gRPC.

- Tùy thuộc vào ngôn ngữ lập trình mà bạn chọn, bạn cần cài đặt thư viện gRPC tương ứng

Bước 3: Thiết lập môi trường phát triển

- Cài đặt các công cụ cần thiết để biên dịch, chạy và gỡ lỗi ứng dụng gRPC

6

Trang 7

Bước 4: Thiết lập hệ thống quản lý gói.

- Sử dụng các công cụ như pip (Python), npm (JavaScript) hoặc go get (Go) để quản

lý các phụ thuộc trong dự án gRPC

2.2 Hướng dẫn triển khai gRPC trong java

Bước 1: Cài đặt môi trường Java

Java Development Kit (JDK): Đảm bảo bạn đã cài đặt JDK trên máy tính Nếu

chưa, bạn có thể tải xuống và cài đặt từ trang web chính thức của Oracle: https://www.oracle.com/java/technologies/javase-downloads.html

Apache Maven (hoặc Gradle): Bạn cần một công cụ quản lý build như Maven

hoặc Gradle

o Maven: https://maven.apache.org/

o Gradle: https://gradle.org/

Bước 2: Tạo một dự án Maven (hoặc Gradle)

Maven:

1 Sử dụng dòng lệnh:

mvn archetype: generate -DgroupId=com.example

-DinteractiveMode=false

2 Hoặc sử dụng IDE như IntelliJ IDEA hoặc Eclipse để tạo dự án Maven

Gradle:

1 Tạo một thư mục mới cho dự án của bạn

2 Tạo file build gradle trong thư mục dự án

Bước 3: Thêm gRPC dependencies vào file pom.xml (Maven)

hoặc build.gradle (Gradle)

Maven (pom.xml):

<dependencies>

<dependency>

<groupId>io.grpc</groupId>

Trang 8

<artifactId>grpc-netty-shaded</artifactId>

<version>1.55.1</version> </dependency>

<dependency>

<groupId>io.grpc</groupId>

<artifactId>grpc-protobuf</artifactId>

<version>1.55.1</version>

</dependency>

<dependency>

<groupId>io.grpc</groupId>

<artifactId>grpc-stub</artifactId>

<version>1.55.1</version>

</dependency>

<dependency> <groupId>javax.annotation</groupId>

<artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency>

</dependencies>

<build>

<extensions>

<extension>

<groupId>kr.motd.maven</groupId>

<artifactId>os-maven-plugin</artifactId>

<version>1.7.0</version>

</extension>

</extensions>

<plugins>

<plugin>

<groupId>org.xolstice.maven.plugins</groupId>

8

Trang 9

<artifactId>protobuf-maven-plugin</artifactId>

<version>0.6.1</version>

<configuration>

<protocArtifact>com.google.protobuf:protoc:3.21.7:exe:${os.detected.classifier}</ protocArtifact>

<pluginId>grpc-java</pluginId>

<pluginArtifact>io.grpc:protoc-gen-grpc-java:1.55.1:exe:$ {os.detected.classifier}</pluginArtifact>

</configuration>

<executions>

<execution>

<goals>

<goal>compile</goal>

<goal>compile-custom</goal>

</goals>

</execution>

</executions>

</plugin>

</plugins>

</build>

Gradle (build.gradle):

plugins {

id 'java'

id 'com.google.protobuf' version '0.8.18'

}

repositories {

mavenCentral()

Trang 10

dependencies {

implementation 'io.grpc:grpc-netty-shaded:1.55.1'

implementation 'io.grpc:grpc-protobuf:1.55.1'

implementation 'io.grpc:grpc-stub:1.55.1'

compileOnly 'javax.annotation:javax.annotation-api:1.3.2'

// For protoc

implementation 'com.google.protobuf:protobuf-java:3.21.7'

}

protobuf {

protoc {

artifact = "com.google.protobuf:protoc:3.21.7"

}

plugins {

grpc {

artifact = 'io.grpc:protoc-gen-grpc-java:1.55.1'

}

}

generateProtoTasks {

all()*.plugins {

grpc {}

}

}

}

Bước 4: Tạo file định nghĩa Protobuf (.proto)

 File proto định nghĩa cấu trúc dữ liệu và các dịch vụ gRPC của bạn Ví dụ: syntax = "proto3";

10

Trang 11

option java_multiple_files = true;

option java_package = "io.grpc.examples.helloworld";

option java_outer_classname = "HelloWorldProto";

package helloworld;

// The greeting service definition

service Greeter {

// Sends a greeting

rpc SayHello (HelloRequest) returns (HelloReply) {}

}

// The request message containing the user's name

message HelloRequest {

2.4 Các thư viện phổ biến trong gRPC

gRPC-go: Thư viện gRPC cho ngôn ngữ Go.

gRPC-python: Thư viện gRPC cho ngôn ngữ Python.

gRPC-java: Thư viện gRPC cho ngôn ngữ Java.

gRPC-c++: Thư viện gRPC cho ngôn ngữ C++.

gRPC-node: Thư viện gRPC cho ngôn ngữ JavaScript.

gRPC-ruby: Thư viện gRPC cho ngôn ngữ Ruby

3 Kiến trúc gRPC

3.1 Thành phần của kiến trúc gRPC:

Client: Gửi các yêu cầu đến server thông qua các hàm RPC được định nghĩa trong

tệp proto Phía client sử dụng stub để tuần tự hóa (serialize) dữ liệu và gửi qua HTTP/2

Server: Xử lý các yêu cầu từ client, giải mã dữ liệu, thực thi hàm RPC và trả lại

kết quả thông qua stub và HTTP/2

Trang 12

3.2 Quy trình hoạt động:

Stub tại Client:

Stub là một lớp tự động được sinh ra từ file proto dùng để gọi hàm RPC từ client Nó chuyển đổi các tham số từ client thành dạng nhị phân sử dụng Protobuf

Client Runtime: Xử lý yêu cầu từ stub và gửi nó tới OS qua HTTP/2.

OS và HTTP/2: OS của client gửi các gói dữ liệu qua giao thức HTTP/2 tới

server

Server Runtime: Ở phía server, gRPC nhận gói HTTP/2, giải mã dữ liệu qua

Protobuf, và gọi phương thức tương ứng

Stub tại Server: Sau khi server xử lý xong, stub sẽ mã hóa dữ liệu và gửi lại phản

hồi qua HTTP/2

Client nhận phản hồi: Phản hồi từ server được client nhận và giải mã để trả về

kết quả cuối cùng cho người dùng

3.3 Mô hình truyền thông trong gRPC:

Unary RPC: Client gửi một yêu cầu và nhận lại một phản hồi duy nhất từ server.

Server streaming RPC: Client gửi một yêu cầu, và server trả về nhiều phản hồi

dưới dạng luồng

Client streaming RPC: Client gửi một luồng yêu cầu, và server trả lại một phản

hồi duy nhất

Bidirectional streaming RPC: Cả client và server đều có thể gửi và nhận luồng

dữ liệu song song

4 Ưu điểm của gRPC:

12

Trang 13

Với kiến trúc và các thức mã hoá, giải mã các parameter khác biệt Cộng với HTTP/2, rõ ràng gRPC đem tới một số ưu điểm khác biệt

 Hiệu suất cao:

HTTP/2: gRPC sử dụng giao thức HTTP/2, cho phép multiplexing(nhiều luồng trên một kết nối TCP duy nhất), nén tiêu đề (header compression), và giảm độ trễ (latency)

Protobuf (Protocol Buffers): gRPC sử dụng Protobuf để tuần tự hóa (serialize) dữ liệu, làm giảm kích thước dữ liệu truyền tải so với JSON hoặc XML, giúp tốc độ truyền nhanh hơn

 Streaming hiệu quả

Với HTTP/2 và gRPC, việc streaming bây giờ có thể thực hiện nhanh chóng theo nhiều cách khác nhau:

Unary (no streaming) – không streaming

Client-to-server streaming – từ client tới server

Server-to-client streaming – từ server tới client

Bi-directional streaming – streaming 2 chiều

 Đa ngôn ngữ

gRPC hỗ trợ nhiều ngôn ngữ lập trình khác nhau như C++, Java, Python, Go, Ruby, Node.js, C và nhiều ngôn ngữ khác Điều này giúp việc phát triển dịch vụ trên#,

các nền tảng khác nhau dễ dàng hơn, đảm bảo tính tương thích giữa các dịch vụ

 Bảo mật

HTTP/2 luôn đi kèm với TLS giúp đảm bảo tính bảo mật của API gRPC cũng được khuyến khích để sử dụng với SSL/TLS để mã hoá dữ liệu, giúp việc truyền dữ liệu

từ Client tới Server trở nên an toàn hơn Ngoài ra, gRPC có thể dễ dàng tích hợp với các

cơ chế xác thực mạnh mẽ như OAuth

 Khả năng mở rộng và tương thích với microservices

gRPC được thiết kế để phù hợp với kiến trúc microservices, nơi các dịch vụ nhỏ cần giao tiếp với nhau hiệu quả Khả năng truyền tải nhanh, kết nối an toàn và tương thích với nhiều ngôn ngữ giúp gRPC là lựa chọn lý tưởng trong các hệ thống phân tán và microservices

Trang 14

5 Điểm yếu của rGPC

Mặc dù chúng ta có thể hy vọng rằng các nhược điểm gRPC cuối cùng sẽ được giải quyết, nhưng hiện tại chúng gây ra một số vấn đề đối với việc sử dụng nó Một số nhược điểm tiêu biểu của gRPC là:

 Thiếu trưởng thành:

Sự phát triển của một công nghệ có thể là một rào cản đáng kể đối với việc áp dụng Điều đó cũng rõ ràng khi sử dụng gRPC GraphQL, một trong những đồng nghiệp của gRPC, có hơn 14k truy vấn trên StackOverflow, trong khi gRPC chỉ có dưới 4k một chút vào lúc này Cộng đồng gRPC thiếu kiến thức về các phương pháp hay nhất, giải pháp và thành công vì không có nhiều hỗ trợ lập trình viên cho HTTP/2, cũng như bộ đệm giao thức bên ngoài Google Tuy nhiên, khi cộng đồng gRPC mở rộng và thu hút các nhà phát triển mới, điều này cuối cùng sẽ phát triển

 Hỗ trợ trình duyệt hạn chế:

Vì không có trình duyệt web gRPC hiện tại nào có thể xử lý các khung HTTP/2, nên bạn không thể gọi dịch vụ gRPC từ trình duyệt một cách hiệu quả vì Web gRPC chủ yếu phụ thuộc vào HTTP/2 Do đó, bạn phải sử dụng proxy có gRPC, điều này có một số nhược điểm

 Con người không thể đọc được:

Không giống như XML và JSON, các tệp Protobuf không thể đọc được vì dữ liệu được nén thành định dạng nhị phân Các nhà phát triển phải tận dụng các công cụ

bổ sung, chẳng hạn như giao thức phản chiếu máy chủ và dấu nhắc lệnh gRPC để đánh giá tải trọng, tiến hành khắc phục sự cố và tạo các truy vấn thủ công

 Không có bộ nhớ đệm cạnh:

gRPC sử dụng phương thức POST, một mối đe dọa với bảo mật API

 Độ khó:

14

Trang 15

Sẽ mất một khoảng thời gian để làm quen với bộ đệm giao thức và khám phá các phương pháp đối phó với xung đột HTTP/2, trái ngược với REST và GraphQL,

cả hai đều sử dụng JSON chủ yếu

6 Kết luận

Mặc dù các dịch vụ gRPC có một số lợi ích khiến chúng trở nên hấp dẫn đối với các doanh nghiệp và nhà phát triển, nhưng cuối cùng, quyết định sử dụng các dịch vụ gRPC các dịch vụ khác như REST hoặc SOAP tùy thuộc vào ứng dụng của bạn Mặc dù một số phần mềm sẽ có lợi ích hiệu suất cao với gRPC, nhưng những phần mềm khác có thể phù hợp hơn với các lựa chọn thay thế của nó Bạn nên hiểu những nhược điểm và ưu điểm của các dịch vụ gRPC và quyết định xem nó có phù hợp với bạn hay không

7 Tìm hiểu thêm về gRPC

So sánh giữa gRPC và REST:

REST API đã bắt đầu cuộc cách mạng về kiến trúc API Nhưng nhược điểm của nó được gRPC khắc phục Một nhà phát triển dày dạn kinh nghiệm là người chú

ý chặt chẽ đến hiệu suất của gRPC so với REST và đưa ra quyết định phù hợp

 Mô hình làm việc:

Tiêu chí so sánh đầu tiên là mô hình hoạt động của cả hai API này Trong trường hợp của REST API, mô hình hoạt động chính là xác định trước các nguyên tắc của API web và tuân theo mà không có bất kỳ quy định nào Nó thiếu một tiện ích tạo mã tích hợp và buộc các nhà phát triển phải nhờ đến sự trợ giúp của các nguồn lực của bên thứ 3 để có thể tạo mã dựa trên yêu cầu API

Mặt khác, mô hình làm việc của gRPC dựa trên việc sử dụng tệp proto được xác định trước Tệp này cung cấp các hướng dẫn trao đổi dữ liệu chuẩn mà máy khách và máy chủ phải tuân thủ Mặc dù REST không tạo được mã tích hợp, nhưng gRPC cung cấp mã này theo mặc định gRPC có thể hỗ trợ nhiều ngôn ngữ và mở cho tích hợp của bên thứ 3

Ngày đăng: 22/01/2025, 15:13

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN