Конфигурация для масштабирования Grpc-сервера для блокировки вызовов

#java #netty #grpc #grpc-java

#java #netty #grpc #grpc-java

Вопрос:

Я изучал GRPC, поскольку мы планируем предоставить сервер GRPC (вместо конечной точки Rest) в микросервисе spring boot, который будет прослушивать выделенный порт. Я использую следующий фрагмент кода для создания сервера GRPC.

 io.grpc.Server server = ServerBuilder.forPort(port)
        .addService(new MyServiceImpl())
        .build()
        .start();

  

Здесь объект сервера, который инкапсулирует объект NettyServerBuilder, инициализируется значениями по умолчанию. Мы планируем развернуть его в рабочей среде (мощное оборудование), где мы ожидаем огромного трафика (приблизительно 10 тыс. вызовов в секунду) от клиентов grpc. Мой вопрос похож на масштабирование, как мне настроить базовый NettyServerBuilder. Какие важные конфигурации мне нужно настроить? Любые предложения и рекомендации приветствуются

Ответ №1:

Вы должны:

  1. Используйте serverBuilder.executor() и установите a ForkJoinPool в качестве исполнителя. Именно в этом исполнителе вызываются обратные вызовы gRPC (т. Е. Методы on ServerCall.Listener ). ForkJoinPool — это сильно оптимизированный, более параллельный исполнитель, который позволяет сетевым потокам возвращаться к обработке таких вещей, как HTTP / 2 и SSL.
  2. Используйте nettyServerBuilder.workerEventLoopGroup() и предоставляйте EpollEventLoopGroup . Это позволяет использовать оптимизированную реализацию сетевого потока, которая более эффективна, чем реализация Nio Java network по умолчанию. Количество потоков, которые вы предоставляете группе, будет зависеть от ваших тестов, но хорошее эмпирическое правило — 2-4 рабочих. gRPC использует EventLoops несколько иначе, чем netty, поэтому обычно вам не требуется 1 на ядро.
  3. Используйте netty-tcnative для вашей реализации SSL. Это чрезвычайно быстрая реализация SSL, которая включает OpenSSL и BoringSSL.

Мы прилагаем все усилия, чтобы реализация сервера gRPC по умолчанию была быстрой без каких-либо дополнительных настроек, поэтому, даже если вы не используете их, это все равно будет довольно быстро.