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

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

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

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


person Vinit89    schedule 09.04.2019    source источник


Ответы (1)


Вам следует:

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

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

person Carl Mastrangelo    schedule 10.04.2019