Эффективные исследования и разработки — исследования и практика Xianyu в области агрегации данных

база данных GraphQL
Эффективные исследования и разработки — исследования и практика Xianyu в области агрегации данных

Обзор

С непрерывным расширением бизнеса и все более и более разнообразными операционными действиями, первоначальный метод разработки интерфейсов для обеспечения бизнес-интерфейсов является дорогостоящим для деятельности, жизненный цикл которой может составлять всего несколько дней. Xianyu предпринял некоторые попытки и практики для снижения затрат на разработку и повышения общей эффективности. В этой статье представлены исследования и попытки Xianyu с точки зрения агрегации данных, а внедрение Graphql повысило эффективность исследований и разработок Xianyu.

задний план

В течение долгого времени front-end и back-end разработка сталкивались с противоречием: front-end надеется, что страница получает только структурированные данные и может напрямую отображать компоненты страницы; back-end надеется только на предоставление возможностей API-сервиса в бизнес-поле, а сборка и обработка данных выполняются интерфейсом. Малоценная работа, такая как имитация данных и совместная отладка, будет стоить дорого, а исходная модель разработки уже не сможет поспевать за ритмом быстрого развития бизнеса. Поэтому мы надеемся, что фронтенд сможет напрямую получать данные, а бэкэнд сможет освободиться от повторяющихся малоценных потребительских разработок.

Агрегация данных — это идея, которую мы решаем.

1. Решения для агрегации данных

агрегация данныхОн заключается в объединении нескольких служебных запросов на сервер, и сервер одновременно возвращает результат соответствующего запроса.Этот метод может сократить время сети и сделать обработку данных более удобной. Существует также возможность расширения синтаксиса входных параметров, таких как зависимые вызовы и т. д., что является более гибким и эффективным методом запроса, чем RESTFul.

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

Принципы дизайна

  • Сервер предоставляет службы данных для распространенных сценариев, то есть стандартные бизнес-API, включая запрос данных и запись;

  • Взаимодействуйте с интерфейсом как можно меньше, получайте все необходимые данные за один вызов

  • Параллельные/асинхронные вызовы сокращают затраты времени

2. Агрегация данных 1.0

Сервер Xianyu разработал первую службу агрегации данных. Предоставляя доступ к базовым службам и вызывая определенные интерфейсы служб одновременно из общей записи запроса, несколько запросов службы на странице могут возвращать все данные во внешний интерфейс одновременно. Процесс вызова выглядит следующим образом:

Эта структура имеет следующие характеристики:

  • очень легкий, около 1000 строк основного кода

  • децентрализацияРазвертывание непосредственно в системе приложений, не полагаясь на другие сторонние пакеты и сервисные системы,

  • взлом без кода, не нужно модифицировать и адаптировать существующие системные сервисы и коды, достаточно зарегистрировать сервис в реестре

  • Все одновременные вызовы, несколько вызываемых сервисных API вызываются одновременно, что занимает меньше времени. Кроме того, мы расширили его синтаксическую структуру и функции: поддержка выбора полей, вызов зависимостей, циклическая проверка зависимостей, псевдонимы и другие функции:

2.1 Онлайн-эффект

В течение полугода после запуска служба агрегации данных поддержала запуск более 30 страниц, что составляет более 80 % аналогичных потребностей, сократив затраты на разработку с обеих сторон более чем на 50 %.

2.2 После запуска службы агрегации Xianyu в сети возникают следующие проблемы:

  • Структура ответа данных недостаточно удобна для вызывающей стороны. Хотя она поддерживает зависимые вызовы, возвращаемые данные представляются в плоской форме представления. Для некоторых пакетных интерфейсов возвращаемая структура часто является структурой Map, которая требует дальнейшей обработки вызывающей стороной и увеличивает сложность. ;

  • проблемы с безопасностью. Строка запроса многозапроса не зашифрована, некоторые незаконные запросы могут изменить оператор запроса и привести к системным рискам, а для некоторых конфиденциальных данных, которые необходимо зашифровать или сделать нечувствительными, в структуре синтаксиса многозапроса отсутствуют точки расширения обработки данных.

  • Система R&D несовершенна: отсутствие метаинформации об услугах, так что вызывающий абонент не знает, какую услугу использовать, каковы входные и выходные данные, и существует определенная стоимость связи между двумя сторонами. Без поддержки IDE писать сложнее.

3. GraphQL — собирать данные как писать sql

3.1 Что такое Graphql

Graphql (https://graphql.org) — это язык запросов данных, запущенный facebook. Его цель разработки — отделить нестабильную часть сборки данных от стабильной логики бизнес-данных, продвинуть вперед логику управления данными и разработать Режим изменен от «отправки данных» к «получению данных».

Преимущества Graphql:

  • Четкая структура: то, что вы видите, это то, что вы получаете, структуры ввода и вывода согласованы, и какие поля данных необходимы во внешнем интерфейсе, просто заполните поля в ql и поддержите многоуровневую структуру, а также может быть отображается горизонтально, и вызывающий абонент выбирает соответствующий вывод в соответствии с бизнес-формой.

  • Уточнение управления сценами: даже в похожих сценах требуемые данные могут не совпадать, и никакие данные в graphql не являются избыточными.

  • Сильная масштабируемость обработки данных: graphql предоставляет множество директив для удовлетворения повседневных потребностей разработки и даже поддерживает код js, разработчики также могут настраивать набор библиотек инструментов для расширения

3.2 Преобразование приложения доступа GraphQL

Xianyu выбрал TQL в качестве серверной реализации Graphql. Tql — это Java-реализация GraphQL, предоставленная Taobao, которая устраняет многие ограничения и болевые точки версии graphql с открытым исходным кодом и предоставляет множество функций, так что graphql можно развертывать в приложениях по низкой цене.

  • Легкий доступ и низкий уровень вторжения кода: Децентрализованный дизайн, не полагается на сторонние сервисы, система приложений напрямую вводит доступные

  • Поддержка системы НИОКР: Предоставляет онлайн-среду IDE, написанную QL, которая может отображать метаинформацию о каждой службе, повышать эффективность разработки, писать подсказки, выполнять трудоемкие журналы, отслеживать сцены вызовов и другие функции для облегчения оптимизации производительности службы.

  • Несколько стратегий исполнения:Предоставляет стратегии параллельного выполнения и стратегии асинхронного выполнения для обеспечения эффективной работы ql в сценариях мультисервисного вызова и иерархического вызова;

  • Объединить вызовы:Элементы в зависимых восходящих наборах данных объединяются перед выполнением, так что мы можем в полной мере использовать запросы пакетного интерфейса, а не одиночные множественные вызовы, производительность значительно повышается.

  • Улучшение безопасности: оператор graphql запрашивается из внешнего интерфейса на сервер, а подпись используется для предотвращения подделки строки запроса.

3.2.1 Трансформация сервера

  • Унифицированный интерфейс запросов graphql

  • Оригинальная служба бизнес-домена обертывает функцию GraphQL. 

Преобразование входных параметров функции: параметры службы в фоновом режиме могут отличаться от внешнего интерфейса (слишком много параметров, параметры, влияющие на данные и т. д.).

Непакетный вывод функции: как правило, модификация не требуется, как указано выше.

Поддержка преобразования пакетной функции, возвращаемая структура должна быть упорядоченным списком

Нестандартные параметры DO: поскольку вывод представляет собой JSON, произойдет переполнение стека, когда объект java с циклическими зависимостями выводится с использованием fastjson.

Разработка API-интерфейсов GraphQL 

В следующем примере может быть предоставлен Graphql API. Аннотация @GraphQLDataFetcher указывает, что этот метод можно использовать в качестве источника данных Graphql, supportBatch = true указывает, что поддерживаются вызовы слияния, а результаты зависимых данных будут объединены в список в качестве входных параметров перед выполнением;

  1.    @GraphQLDataFetcher(supportBatch = true)

  2.    @GraphQLDescription("查询用户信息")

  3.    public List<BaseUserDO> userInfos(List<Long> userIds){

  4.        ResultDO<List<BaseUserDO>> users = readServiceClient.getBaseUserListByUserIds(StringUtils.join(userIds,","));

  5.        List<BaseUserDO> userDOList = users.getModule();

  6.        //按入参userId的顺序排序

  7.        return ObjectUtils.collectionOrder(userIds,users.getModule(),BaseUserDO::getUserId);

  8.    }

скопировать код

Поддержка вызовов слияния требует от нас гарантировать две вещи:

  • Длина входных идентификаторов пользователей такая же, как и длина возвращаемого списка, в противном случае он не может быть заполнен обратно в соответствующее поле;

  • Порядок возвращаемых данных должен соответствовать порядку входных параметров, иначе это приведет к ошибкам данных.

Единый API шлюза graphql

  1. //requestString 查询ql语句,ql参数arguments,declaredVariables声明变量,context包含执行策略等

  2. public ExecutionResult execute(String requestString, Map<String, Object> arguments, Set<String> declaredVariables, Object context) {

  3.    return execute(requestString, arguments, declaredVariables, context,false);

  4. }

скопировать код

При выполнении будет автоматически введена глобальная информация текущего запроса, такая как пользователь для входа в систему, идентификатор устройства, модель устройства и т. д. Например, UserAgent может получить модель пользователя, систему и другую информацию и может использоваться напрямую без дополнительная внешняя и внутренняя обработка.

3.2.2 Преобразование вызовов во внешнем интерфейсе

  • Интерфейс вызова изменен на унифицированный интерфейс graphql, предоставляемый серверной частью.

  • Используйте синтаксис graphql для выражения необходимых данных в соответствии с бизнес-требованиями.

Вызов API шлюза graphql:

  1. //graphqlAPI调用接口,query:ql查询语句,param ql参数

  2. request(graphqlAPI,query,param);

скопировать код

Напишите запрос GraphQL для получения структурированных данных:

С увеличением количества интерфейсных команд и потока персонала мы выдвинули более высокие требования к стоимости обучения Graphql, повторному использованию и управлению ql.

4. Платформа управления GraphqlQL

Платформа управления предоставляет разработчикам множество удобств. Онлайн-редактирование и сохранение ql, онлайн-отладка, мгновенный выпуск, несколько человек могут видеть, есть примеры ссылок, что снижает стоимость обучения graphql.

  1. public Result<Map<String, Object>> getDataById(Long id, String arguments) {

  2.        return this.getAppDataById(this.chordProperties.getApp(), id, arguments);

  3. }

скопировать код

Внешнему интерфейсу нужно только передать соответствующий идентификатор при запросе страницы, и оператор запроса graphql больше не требуется.

  1. //graphqlAPI调用接口,id:ql语句id,param ql参数

  2. request(graphqlAPI,id,param);

скопировать код

Изменения, внесенные GraphQL в Xianyu

Снижение затрат на НИОКР 

После внедрения Graphql затраты на исследования и разработки с обеих сторон значительно сокращаются, а общее время запуска операционных сценариев значительно сокращается.В большинстве случаев стоимость сервера равна нулю. Внешний интерфейс может занять всего 10 минут, чтобы написать оператор graphql + самопроверка.

GraphqlQL можно прекрасно комбинировать с платформами для построения страниц, такими как TMS. Многие компоненты страницы были выполнены на основе GraphqlQL. С помощью graphql можно легко создавать различные компоненты страницы, что также полезно в направлении беспилотных исследования и разработки положительные эффекты. 

кропотливый 

При анализе журнала выполнения graphql основное время занимает время фактически вызываемого интерфейса.Время, затрачиваемое самим graphql, как правило, составляет менее 20 мс, а в некоторых случаях занимает много времени. К трудоемким моментам Graphql относятся:

  • ql сложность

  • Инструкция @js Выполнение скрипта js в фоновом режиме приведет к увеличению затрат времени

  • Обработка входных данных и заполнение вызова слияния также имеют определенное влияние.

5. Резюме

В этой статье представлены некоторые исследования и попытки Xianyu в области агрегации данных, а также введение и преобразование приложений Graphql. От самостоятельно разработанного сервиса до внедрения Graphql эффективность исследований и разработок постоянно повышалась, и были достигнуты хорошие результаты. В настоящее время graphql используется только в сценариях weex/h5, и мы будем использовать его в нативном режиме и постепенно расширять в будущем.

Внедрение GraphqlQL сильно изменило парадигмы клиентского и серверного программирования.

  • Отныне серверу нужно сосредоточиться только на построении стабильной бизнес-модели домена, больше не поддерживать нестабильный и легко изменяемый уровень VO, и ему не нужно повторно связываться с внешним интерфейсом для определения структуры.

  • Фронтенд/клиент больше не полагается на конкретный интерфейс сервера, а предоставляет различные сервисы данных, свободно комбинируя сервер через graphql, а также может более удобно строить страницы, и сервер в принципе не нуждается в участии.

  • Интерфейсный клиент/клиент также будет иметь более глубокое понимание бизнес-модели.

связаться с нами

Если у вас есть какие-либо вопросы или исправления по содержанию текста, пожалуйста, сообщите нам об этом.

Техническая команда Xianyu — это небольшая и мощная инженерно-техническая команда. Мы не только фокусируемся на эффективном решении бизнес-задач, но в то же время продвигаем передовую практику разрушения разделения труда в стеке технологий (унификация моделей и языков программирования android/iOS/Html5/Server) и технология компьютерного зрения на мобильных терминалах. В качестве инженера-программиста в технической команде Xianyu у вас есть возможность продемонстрировать все свои таланты и мужество, доказав, что развитие технологий является движущей силой изменения образа жизни во всей эволюции продукта и решении проблем пользователей.

Доставка резюме: guicai.gxy@alibaba-inc.com

Распознавайте QR-код и осваивайте передовые технологии