Giới thiệu về RPC và gRPC

RPC (Remote Procedure Call)

Remote Procedure Call (RPC) là một giao thức cho phép một chương trình (client) gọi một hàm hoặc thủ tục trên một máy chủ từ xa như thể nó đang gọi hàm cục bộ. RPC ẩn giấu các chi tiết của giao tiếp mạng, giúp các nhà phát triển dễ dàng tích hợp và sử dụng các dịch vụ từ xa.

Cách hoạt động của RPC

  1. Gọi hàm: Client gọi một hàm từ xa bằng cách sử dụng một API giống như gọi hàm cục bộ.
  2. Gửi yêu cầu: RPC client đóng gói các tham số của hàm vào một yêu cầu và gửi nó đến server qua mạng.
  3. Xử lý yêu cầu: Server nhận yêu cầu, giải nén các tham số, và gọi hàm tương ứng.
  4. Gửi phản hồi: Sau khi thực hiện xong, server gửi kết quả về cho client.

Ví dụ minh họa về RPC

Giả sử bạn có một dịch vụ tính toán trên server và bạn muốn sử dụng nó từ client.

Server (Python):

add
  1. Tạo mã nguồn cho server và client:

Chạy lệnh sau để tạo mã nguồn cho Python (cần cài đặt gRPC):

python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. calculator.proto
  1. Server (Python):
import grpc
from concurrent import futures
import calculator_pb2
import calculator_pb2_grpc

class Calculator(calculator_pb2_grpc.CalculatorServicer):
    def Add(self, request, context):
        result = request.x + request.y
        return calculator_pb2.AddResponse(result=result)

def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    calculator_pb2_grpc.add_CalculatorServicer_to_server(Calculator(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    print("Server đang chạy trên cổng 50051...")
    server.wait_for_termination()

if __name__ == '__main__':
    serve()
  1. Client (Python):
import grpc
import calculator_pb2
import calculator_pb2_grpc

def run():
    with grpc.insecure_channel('localhost:50051') as channel:
        stub = calculator_pb2_grpc.CalculatorStub(channel)
        response = stub.Add(calculator_pb2.AddRequest(x=5, y=3))
        print(f"Kết quả là: {response.result}")

if __name__ == '__main__':
    run()

Kết luận

RPC và gRPC đều là những công nghệ mạnh mẽ cho việc phát triển các ứng dụng phân tán. RPC cung cấp cách tiếp cận đơn giản để gọi các hàm từ xa, trong khi gRPC mang đến hiệu suất cao hơn và khả năng mở rộng tốt hơn. gRPC, với sự hỗ trợ của HTTP/2 và Protocol Buffers, giúp tối ưu hóa hiệu suất và trải nghiệm lập trình viên.

Việc lựa chọn giữa hai công nghệ này phụ thuộc vào nhu cầu cụ thể của ứng dụng, yêu cầu về hiệu suất và khả năng tương tác giữa các dịch vụ.