Что такое РПС ?
Спросят с вероятностью 8%
РПС (Remote Procedure Call, удаленный вызов процедуры) — это протокол или технология, позволяющая программе вызвать процедуру или функцию, которая выполняется на удаленном сервере, так, как если бы она выполнялась локально. Абстрагирует детали сетевого взаимодействия, предоставляя разработчикам простой способ взаимодействия с удаленными сервисами и обмена данными между различными системами.
Основные компоненты
1️⃣Клиент:
✅Инициатор вызова удаленной процедуры. Клиент отправляет запрос серверу, который содержит имя процедуры и необходимые параметры.
2️⃣Сервер:
✅Исполнитель удаленной процедуры. Сервер принимает запрос, выполняет указанную процедуру и возвращает результат клиенту.
3️⃣Сетевой транспорт:
✅Среда, через которую передаются запросы и ответы между клиентом и сервером. Обычно это TCP/IP, но могут использоваться и другие протоколы.
Принцип работы
1️⃣Клиент вызывает процедуру:
✅Клиент вызывает локальную процедуру, которая на самом деле является прокси (stub) для удаленной процедуры.
2️⃣Прокси (stub) клиента:
✅Прокси берет параметры вызова, сериализует их (преобразует в формат, подходящий для передачи по сети), и отправляет на сервер.
3️⃣Серверный прокси (stub):
✅Прокси на стороне сервера получает запрос, десериализует параметры, вызывает соответствующую процедуру на сервере и получает результат.
4️⃣Выполнение процедуры на сервере:
✅Сервер выполняет указанную процедуру с переданными параметрами и возвращает результат прокси сервера.
5️⃣Возврат результата клиенту:
✅Серверный прокси сериализует результат и отправляет его обратно клиентскому прокси.
6️⃣Получение результата клиентом:
✅Клиентский прокси получает ответ, десериализует результат и возвращает его исходной процедуре, вызвавшей РПС.
Преимущества
✅Прозрачность: Можно вызывать удаленные процедуры так же, как локальные, не задумываясь о сетевом взаимодействии.
✅Многоязыковая поддержка: РПС можно использовать для взаимодействия между программами, написанными на разных языках программирования.
✅Модульность: Позволяет разделять системы на модули и вызывать функции одного модуля из другого через сеть.
Недостатки
✅Задержки: Вызовы через сеть могут быть медленнее, чем локальные вызовы из-за сетевых задержек.
✅Надежность: Сеть может быть ненадежной, и необходимо учитывать возможность сбоев при передаче данных.
✅Безопасность: Взаимодействие через сеть требует дополнительных мер безопасности для защиты данных.
gRPC (Google Remote Procedure Call)
Современная реализация РПС от Google, которая использует HTTP/2 для транспортного уровня и Protocol Buffers для сериализации данных.
РПС (Remote Procedure Call) — это технология, позволяющая вызывать процедуры, выполняемые на удаленном сервере, так же, как если бы они выполнялись локально. Это упрощает разработку распределенных систем, обеспечивая прозрачное взаимодействие между различными компонентами через сеть.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 8%
РПС (Remote Procedure Call, удаленный вызов процедуры) — это протокол или технология, позволяющая программе вызвать процедуру или функцию, которая выполняется на удаленном сервере, так, как если бы она выполнялась локально. Абстрагирует детали сетевого взаимодействия, предоставляя разработчикам простой способ взаимодействия с удаленными сервисами и обмена данными между различными системами.
Основные компоненты
1️⃣Клиент:
✅Инициатор вызова удаленной процедуры. Клиент отправляет запрос серверу, который содержит имя процедуры и необходимые параметры.
2️⃣Сервер:
✅Исполнитель удаленной процедуры. Сервер принимает запрос, выполняет указанную процедуру и возвращает результат клиенту.
3️⃣Сетевой транспорт:
✅Среда, через которую передаются запросы и ответы между клиентом и сервером. Обычно это TCP/IP, но могут использоваться и другие протоколы.
Принцип работы
1️⃣Клиент вызывает процедуру:
✅Клиент вызывает локальную процедуру, которая на самом деле является прокси (stub) для удаленной процедуры.
2️⃣Прокси (stub) клиента:
✅Прокси берет параметры вызова, сериализует их (преобразует в формат, подходящий для передачи по сети), и отправляет на сервер.
3️⃣Серверный прокси (stub):
✅Прокси на стороне сервера получает запрос, десериализует параметры, вызывает соответствующую процедуру на сервере и получает результат.
4️⃣Выполнение процедуры на сервере:
✅Сервер выполняет указанную процедуру с переданными параметрами и возвращает результат прокси сервера.
5️⃣Возврат результата клиенту:
✅Серверный прокси сериализует результат и отправляет его обратно клиентскому прокси.
6️⃣Получение результата клиентом:
✅Клиентский прокси получает ответ, десериализует результат и возвращает его исходной процедуре, вызвавшей РПС.
Преимущества
✅Прозрачность: Можно вызывать удаленные процедуры так же, как локальные, не задумываясь о сетевом взаимодействии.
✅Многоязыковая поддержка: РПС можно использовать для взаимодействия между программами, написанными на разных языках программирования.
✅Модульность: Позволяет разделять системы на модули и вызывать функции одного модуля из другого через сеть.
Недостатки
✅Задержки: Вызовы через сеть могут быть медленнее, чем локальные вызовы из-за сетевых задержек.
✅Надежность: Сеть может быть ненадежной, и необходимо учитывать возможность сбоев при передаче данных.
✅Безопасность: Взаимодействие через сеть требует дополнительных мер безопасности для защиты данных.
gRPC (Google Remote Procedure Call)
Современная реализация РПС от Google, которая использует HTTP/2 для транспортного уровня и Protocol Buffers для сериализации данных.
// Пример использования gRPC в Go
// Определение службы в .proto файле
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
// Сгенерированный серверный код
package main
import (
"context"
"log"
"net"
"google.golang.org/grpc"
pb "path/to/your/protobuf/generated/code"
)
type server struct {
pb.UnimplementedGreeterServer
}
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil
}
func main() {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
РПС (Remote Procedure Call) — это технология, позволяющая вызывать процедуры, выполняемые на удаленном сервере, так же, как если бы они выполнялись локально. Это упрощает разработку распределенных систем, обеспечивая прозрачное взаимодействие между различными компонентами через сеть.
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 349 вопроса на Golang разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых