1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/sogou-workflow

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Русская версия (рекомендуется)

Sogou C++ Workflow

Лицензия Язык Платформа Статус сборки

Как C++ серверный движок компании Sogou, Sogou C++ Workflow поддерживает почти все серверные службы компании Sogou, включая все поисковые сервисы, облачную клавиатуру, онлайн рекламу и т.д., обрабатывая более чем 10 миллиардов запросов каждый день. Это корпоративный программный движок, выполненный в легком и элегантном дизайне, который удовлетворяет большинство требований к разработке серверной части на C++.

Вы можете использовать его:

  • Для быстрого создания HTTP сервера:
#include <stdio.h>
#include "workflow/WFHttpServer.h"

int main()
{
    WFHttpServer server([](WFHttpTask *task) {
        task->get_resp()->append_output_body("<html>Hello World!</html>");
    });

    if (server.start(8888) == 0) { // запустить сервер на порту 8888
        getchar(); // нажмите "Enter", чтобы завершить.
        server.stop();
    }

    return 0;
}
  • В качестве мультифункционального асинхронного клиента, поддерживающего протоколы HTTP, Redis, MySQL и Kafka.
    • Протокол MySQL также поддерживает MariaDB и TiDB.
  • Для реализации клиентского/серверного взаимодействия на пользовательском протоколе и создания своего собственного системы RPC.
    • Проект srpc основан на этом и является самостоятельным открытым проектом, поддерживающим протоколы srpc, brpc, trpc и thrift.
  • Для создания асинхронного рабочего процесса; поддержка общих последовательностей и параллелизма, а также любых DAG структур.
  • В качестве инструмента параллельного вычисления. Кроме сетевых задач, Sogou C++ Workflow также включает планирование вычислительных задач. Все типы задач могут быть помещены в одну последовательность.
  • В качестве инструмента асинхронного ввода-вывода файлов в системе Linux, с высокой производительностью, превышающей любое системное вызов. Дисковая операция ввода-вывода тоже является задачей.
  • Для реализации любого высокопроизводительного и высокоэффективного серверного сервиса с сложными отношениями между вычислениями и сетью.
  • Для создания системы микросервисов.
    • Этот проект имеет встроенные возможности управления службой и балансировки нагрузки.

О компиляции и среде выполнения

  • Проект поддерживает операционные системы Linux, macOS, Windows, Android и другие.
    • Версия для Windows доступна как отдельная ветка, использующая iocp для реализации асинхронной сети. Все пользовательские интерфейсы совместимы с версией для Linux.
  • Поддерживает все платформы ЦПУ, включая 32 или 64-битные x86 процессоры, большие или малые конечные arm процессоры, loongson процессоры.
  • Основная ветка требует SSL и рекомендует использование OpenSSL 1.1 или выше. Совместимо со всеми версиями BoringSSL. Если вам не нужен SSL, вы можете выбрать ветку nossl.
  • Использует стандарт C++11 и поэтому должна компилироваться с компилятором, поддерживающим C++11. Не зависит от библиотек boost или asio.
  • Нет других зависимостей. Однако если вам необходим протокол Kafka, следует установить некоторые библиотеки сжатия, такие как lz4, zstd и snappy.

Начало работы (Linux, macOS):

git clone https://github.com/sogou/workflow
cd workflow
make
cd tutorial
make

С использованием инструмента SRPC (НОВОЕ!):

https://github.com/sogou/srpc/blob/master/tools/README.md

С помощью apt-get на Debian Linux, Ubuntu:

Sogou C++ Workflow упакован для Debian Linux и Ubuntu 22.04. Чтобы установить библиотеку Workflow для целей разработки:

sudo apt-get install libworkflow-dev

Для установки библиотеки Workflow для развертывания:

sudo apt-get install libworkflow1

С помощью dnf на Fedora Linux:

Sogou C++ Workflow упакован для Fedora Linux. Чтобы установить библиотеку Workflow для целей разработки:

sudo dnf install workflow-devel

Для установки библиотеки Workflow для развертывания:

sudo dnf install workflow

С помощью xmake

Если вы хотите использовать xmake для сборки workflow, вы можете посмотреть документацию по xmake

Уроки* Клиент

Программная парадигма

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

  • Протокол
    • В большинстве случаев пользователи используют встроенные общие сетевые протоколы, такие как HTTP, Redis или различные RPC.
    • Пользователи также могут легко создать пользовательский сетевой протокол. При создании они должны предоставить функции сериализации и десериализации для определения своего клиента/сервера.
  • Алгоритм
    • По нашему мнению, алгоритм - это понятие, симметричное протоколу.
      • Если вызов протокола - это RPC, то вызов алгоритма - это APC (Asynchronous Procedure Call).
    • Мы предоставляем несколько общих алгоритмов, таких как сортировка, слияние, psort, reduce, которые можно использовать сразу.
    • В отличие от пользовательского протокола, пользовательский алгоритм гораздо более распространен. Любое сложное вычисление с четко определенными границами должно быть упаковано в виде алгоритма.
  • Рабочий процесс
    • Рабочий процесс - это фактическая бизнес-логика, которая заключается в том, чтобы поместить протоколы и алгоритмы в граф для использования.
    • Типичный рабочий процесс - это замкнутая последовательность-параллельность. Сложная бизнес-логика может быть представлена неконечной DAG.
    • Граф рабочего процесса может быть создан напрямую или динамически генерирован на основе результатов каждого шага. Все задачи выполняются асинхронно.

Основные задачи, фабрика задач и сложные задачи

  • Наша система содержит шесть основных задач: сетевые, файловые, CPU, GPU, таймеры и счетчики.
  • Все задачи создаются фабрикой задач и автоматически удаляются после обратного вызова.
    • Задача сервера - это особый вид сетевой задачи, созданной фреймворком, который вызывает фабрику задач, передавая её пользователю через функцию процесса.
  • В большинстве случаев задача, созданная пользователем через фабрику задач, является сложной задачей, которая остаётся невидимой для пользователя.
    • Например, HTTP запрос может включать много асинхронных процессов (DNS, переадресация), но для пользователя это просто сетевая задача.
    • Сортировка файлов кажется алгоритмом, но она действительно включает множество сложных взаимодействий между файловым вводом-выводом и вычислениями на CPU.
    • Если представить бизнес-логику как сборку электронных компонентов, то каждый компонент может быть сложной схемой.

Асинхронность и упаковка на основе C++11 std::function

  • Не основано на корутине пользователя. Пользователям нужно знать, что они пишут асинхронную программу.
  • Все вызовы выполняются асинхронно, и практически нет операций, которые занимают поток.
    • Хотя мы также предоставляем некоторые средства с полусинхронными интерфейсами, они не являются ключевыми функциями.
  • Мы стараемся избегать выводов пользователей и упаковываем поведение пользователя с помощью std::function, включая:
    • Обратный вызов любой задачи.
    • Любой процесс сервера. Это соответствует идеологии FaaS (Функция как услуга).
    • Реализация алгоритма - это просто std::function. Но алгоритм также может быть реализован путём наследования.

Механизм рециклинга памяти

  • Каждое задание будет автоматически возвращено после обратного вызова. Если задание создано, но пользователь не хочет его выполнять, пользователю следует освободить его с помощью метода dismiss.
  • Любые данные в задании, такие как ответ сетевого запроса, также будут переиспользоваться вместе с заданием. В этот момент пользователь может использовать std::move() для перемещения необходимых данных.
  • SeriesWork и ParallelWork — это два типа объектов фреймворка, которые тоже переиспользуются после обратного вызова.
    • Когда серия является ветвлением параллели, она будет переиспользована после обратного вызова параллели, к которой она принадлежит.
  • Этот проект не использует std::shared_ptr для управления памятью.

Есть ли ещё вопросы?Вы можете проверить список часто задаваемых вопросов (FAQ) и списка проблем (issues), чтобы узнать, нет ли там ответа на ваш вопрос.

Вы всегда можете отправить проблемы, с которыми вы столкнулись при использовании, на страницу проблем (issues), и мы постараемся ответить вам как можно скорее. При этом больше проблем также поможет новым пользователям.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

C++ параллельные вычисления и асинхронные сетевые фреймворки. Развернуть Свернуть
Apache-2.0
Отмена

Обновления (9)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/sogou-workflow.git
git@api.gitlife.ru:oschina-mirror/sogou-workflow.git
oschina-mirror
sogou-workflow
sogou-workflow
master