Какие проблемы решают инструменты статического анализа. Обзор фич и как они помогают писать код быстрее и лучше. Рассказ о перспективах развития Решарпера и разработки в целом.
Uso De Métodos Estadísticos En Campañas De AdwordsJuan Damia
Este documento describe el uso de métodos estadísticos como la regresión lineal múltiple para analizar los factores que afectan el costo por adquisición (CPA) de una campaña de Adwords dirigida a generar suscripciones a un boletín deportivo. Se propone un modelo inicial basado solo en clics, y luego un modelo mejorado de dos etapas que considera también el costo por clic promedio. Los resultados muestran que el segundo modelo explica mejor la varianza del CPA y permite estimar este valor bajo diferentes escenarios.
The document discusses optimizing OAuth 2.0 requests when using the Google AdWords API. It recommends sharing access tokens across threads and servers to minimize requests. Handling access token expiration is key, including proactively refreshing tokens before expiration. A shared storage like a cache can store credentials to avoid duplicate requests. A token management server can further centralize OAuth handling. Security best practices like securely storing refresh and access tokens are also covered.
Какие проблемы решают инструменты статического анализа. Обзор фич и как они помогают писать код быстрее и лучше. Рассказ о перспективах развития Решарпера и разработки в целом.
Uso De Métodos Estadísticos En Campañas De AdwordsJuan Damia
Este documento describe el uso de métodos estadísticos como la regresión lineal múltiple para analizar los factores que afectan el costo por adquisición (CPA) de una campaña de Adwords dirigida a generar suscripciones a un boletín deportivo. Se propone un modelo inicial basado solo en clics, y luego un modelo mejorado de dos etapas que considera también el costo por clic promedio. Los resultados muestran que el segundo modelo explica mejor la varianza del CPA y permite estimar este valor bajo diferentes escenarios.
The document discusses optimizing OAuth 2.0 requests when using the Google AdWords API. It recommends sharing access tokens across threads and servers to minimize requests. Handling access token expiration is key, including proactively refreshing tokens before expiration. A shared storage like a cache can store credentials to avoid duplicate requests. A token management server can further centralize OAuth handling. Security best practices like securely storing refresh and access tokens are also covered.
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Ontico
Взглянем ещё раз на концепцию изоморфных приложений. На первый взгляд, всё красиво — полный порядок, высокая организованность, быстрая выдача результата. Но так ли всё оптимистично? Что случится после того, как мы развернём приложение на сервере? Почему при росте нагрузки наше React-приложение начинает тормозить? Как масштабироваться? Купить ещё несколько серверов? Потом ещё немного? Есть способ лучше.
В рамках доклада рассмотрим следующие темы:
1. Что представляют собой изоморфные приложения?
2. Зачем они на самом деле нужны?
3. Рассмотрим варианты архитектуры.
4. Найдём слабые места (bottleneck).
5. Посмотрим на способы решения и оценим их эффективность.
6. Обсудим возможности масштабирования изоморфных приложений.
7. И, самое главное, ответим на вопрос — стоит ли игра свеч?
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
Ни один современный продукт не обходится без API. Этот API может быть внешним, для публичного использования, а может быть сугубо внутренним, но требования к созданию расширяемого, версионируемого, тестируемого, документированного программного интерфейса очень похоже. В этом докладе мы поговорим о том, как создавать подобные API на основе REST, какие существуют best-practices, чего следует избегать, на что обращать внимание при проектировании.
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
Сергей Коржнев
Архитектор версии 1.4 2ГИС Web API
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Тезисы:
● Как организован код в старой версии.
● Вдумчиво смотрим, как мы используем Yii, хватаемся за голову и клавиатуру. Там отрезаем, тут пришиваем, и вуаля!
● Ну и делаем выводы, как мы забороли две классические проблемы программирования: борьба с дублированием кода и сложностью системы.
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Badoo Development
Доклад о том, как выжить в условиях двух релизов в день, не понижая планку
качества проекта и дать разработчикам и QA-инженерам больше времени на
полезные дела.
Подробно:
Прослушав доклад, вы узнаете:
1. Что НА САМОМ ДЕЛЕ называется непрерывной интеграцией;
2. Кому и зачем нужно переходить на Continious Integration;
3. Почему процесс контроля качества начинается ещё до написания кода;
4. Как программисты учавствуют в процессе тестирования;
5. Как устроен наш поток тестирования с пятью (!) уровнями контроля;
6. Как наши QA-инженеры тестируют задачи до релиза в максимально
реалистичных условиях;
7. Как помогает тестированию плотная интеграция Git, Jira и TeamCity;
8. Зачем нужны более 20 тысяч автоматических тестов и кто их должен
разрабатывать и поддерживать;
9. Чем непрерывно занимаются более 10 агентов-тестировщиков в нашей
TeamCity;
10. Какими средствами мы добились того, чтобы пункты 8 и 9 не превращал
QA-процесс в долгое и унылое действо.
По традиции приглашаем вас на встречу с кратким обзором новых функций обновленной версии среды разработки Visual Studio 2015. Мы также поговорим о кроссплатформенной разработке для мобильных платформ, изменениях в веб-стеке, новой версии языка C# и open source инициативах Microsoft
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
Доклад осветит вопросы устройства REST API для веб-приложений и мобильных клиентов, от которых требуется высокая производительность.
Проектирование высокопроизводительных REST API.
- Кто должен участвовать в проектировании.
- Как узнать, что оптимизировать.
- Как измерять производительность REST API.
Паттерны и антипаттерны.
- Почему pagination - это плохо, и на что лучше заменить.
- Проблема N+1 и как с ней бороться.
- Бесполезные данные - как обнаружить и уничтожить.
- Как не ломать кэширование на клиенте.
- Эффективная работа с интерфейсами "мастер-детали".
Кэширование.
- Три слоя кэширования.
- Самый быстрый запрос - тот, которого не было. Как увеличить их количество.
- Экономия трафика.
- Исключение ненужных вычислений.
- Подходы к инвалидации кэша.
Приемы оптимизации работы с API на клиенте.
- Параллельные запросы.
- Эффективный разбор данных.
- In-memory DB на клиенте.
- Стратегии кэширования на клиенте.
Поплоухина Елена, Руководитель отдела тестирования в Usetech
https://vk.com/lena_flower
Расскажу об опыте организации процесса внутреннего тестирования проекта со строго формализованным техническим заданием от момента получения технического задания для тестирования требований до момента передачи релиза на приемочное тестирование.
Getting started with Google Analytics and the AdWords APImarcwan
Google Analytics is a platform that allows companies to measure user acquisition, behavior, and conversions on their websites. It provides insights into how to improve marketing initiatives and the user experience. The Google Analytics platform includes APIs and SDKs that allow developers to integrate analytics data into their applications. Google Analytics data can be linked with Google AdWords to help optimize advertising campaigns and prove the value of various marketing services by measuring user engagement and conversions after clicks from ads.
Изоморфные React-приложения производительность и масштабирование / Денис Изма...Ontico
Взглянем ещё раз на концепцию изоморфных приложений. На первый взгляд, всё красиво — полный порядок, высокая организованность, быстрая выдача результата. Но так ли всё оптимистично? Что случится после того, как мы развернём приложение на сервере? Почему при росте нагрузки наше React-приложение начинает тормозить? Как масштабироваться? Купить ещё несколько серверов? Потом ещё немного? Есть способ лучше.
В рамках доклада рассмотрим следующие темы:
1. Что представляют собой изоморфные приложения?
2. Зачем они на самом деле нужны?
3. Рассмотрим варианты архитектуры.
4. Найдём слабые места (bottleneck).
5. Посмотрим на способы решения и оценим их эффективность.
6. Обсудим возможности масштабирования изоморфных приложений.
7. И, самое главное, ответим на вопрос — стоит ли игра свеч?
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
Ни один современный продукт не обходится без API. Этот API может быть внешним, для публичного использования, а может быть сугубо внутренним, но требования к созданию расширяемого, версионируемого, тестируемого, документированного программного интерфейса очень похоже. В этом докладе мы поговорим о том, как создавать подобные API на основе REST, какие существуют best-practices, чего следует избегать, на что обращать внимание при проектировании.
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
Сергей Коржнев
Архитектор версии 1.4 2ГИС Web API
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Тезисы:
● Как организован код в старой версии.
● Вдумчиво смотрим, как мы используем Yii, хватаемся за голову и клавиатуру. Там отрезаем, тут пришиваем, и вуаля!
● Ну и делаем выводы, как мы забороли две классические проблемы программирования: борьба с дублированием кода и сложностью системы.
Доклад Ильи Кудинова на DevConf 2013. "Организация автоматизированного тестир...Badoo Development
Доклад о том, как выжить в условиях двух релизов в день, не понижая планку
качества проекта и дать разработчикам и QA-инженерам больше времени на
полезные дела.
Подробно:
Прослушав доклад, вы узнаете:
1. Что НА САМОМ ДЕЛЕ называется непрерывной интеграцией;
2. Кому и зачем нужно переходить на Continious Integration;
3. Почему процесс контроля качества начинается ещё до написания кода;
4. Как программисты учавствуют в процессе тестирования;
5. Как устроен наш поток тестирования с пятью (!) уровнями контроля;
6. Как наши QA-инженеры тестируют задачи до релиза в максимально
реалистичных условиях;
7. Как помогает тестированию плотная интеграция Git, Jira и TeamCity;
8. Зачем нужны более 20 тысяч автоматических тестов и кто их должен
разрабатывать и поддерживать;
9. Чем непрерывно занимаются более 10 агентов-тестировщиков в нашей
TeamCity;
10. Какими средствами мы добились того, чтобы пункты 8 и 9 не превращал
QA-процесс в долгое и унылое действо.
По традиции приглашаем вас на встречу с кратким обзором новых функций обновленной версии среды разработки Visual Studio 2015. Мы также поговорим о кроссплатформенной разработке для мобильных платформ, изменениях в веб-стеке, новой версии языка C# и open source инициативах Microsoft
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
Доклад осветит вопросы устройства REST API для веб-приложений и мобильных клиентов, от которых требуется высокая производительность.
Проектирование высокопроизводительных REST API.
- Кто должен участвовать в проектировании.
- Как узнать, что оптимизировать.
- Как измерять производительность REST API.
Паттерны и антипаттерны.
- Почему pagination - это плохо, и на что лучше заменить.
- Проблема N+1 и как с ней бороться.
- Бесполезные данные - как обнаружить и уничтожить.
- Как не ломать кэширование на клиенте.
- Эффективная работа с интерфейсами "мастер-детали".
Кэширование.
- Три слоя кэширования.
- Самый быстрый запрос - тот, которого не было. Как увеличить их количество.
- Экономия трафика.
- Исключение ненужных вычислений.
- Подходы к инвалидации кэша.
Приемы оптимизации работы с API на клиенте.
- Параллельные запросы.
- Эффективный разбор данных.
- In-memory DB на клиенте.
- Стратегии кэширования на клиенте.
Поплоухина Елена, Руководитель отдела тестирования в Usetech
https://vk.com/lena_flower
Расскажу об опыте организации процесса внутреннего тестирования проекта со строго формализованным техническим заданием от момента получения технического задания для тестирования требований до момента передачи релиза на приемочное тестирование.
Similar to Rate limits and performance (russian) (20)
Getting started with Google Analytics and the AdWords APImarcwan
Google Analytics is a platform that allows companies to measure user acquisition, behavior, and conversions on their websites. It provides insights into how to improve marketing initiatives and the user experience. The Google Analytics platform includes APIs and SDKs that allow developers to integrate analytics data into their applications. Google Analytics data can be linked with Google AdWords to help optimize advertising campaigns and prove the value of various marketing services by measuring user engagement and conversions after clicks from ads.
The document discusses using Google's API and services to optimize AdWords campaigns. It covers using the TargetingIdeaService to generate keyword ideas and get statistics on existing keywords. It also discusses using the TrafficEstimatorService to estimate traffic and costs for new campaigns. Finally, it discusses how to optimize existing campaigns by analyzing report data and replacing underperforming keywords.
The document discusses optimization of online advertising accounts at scale. It introduces several Google services for keyword research and traffic estimation. It then demonstrates Kratu, an open-source tool for discovering optimization opportunities in accounts by analyzing performance data. Kratu uses a push model to surface issues for account managers to address, rather than managers manually reviewing all accounts. The document includes a demo of Kratu analyzing a sample advertising account and ends by discussing upcoming improvements to Kratu.
This document discusses tools and services for optimizing Google Ads accounts, including Kratu for discovering optimization opportunities. It describes profiling accounts, using services like Targeting Idea and Traffic Estimator for keyword research and estimates, and optimizing through an iterative process. The document demonstrates Kratu for analyzing account data and displaying issues and opportunities, and provides resources for using Kratu with a backend like AwReporting.
The presentation provided an overview of Google AdWords feeds including what's new, location feeds, reporting, and best practices. Key updates included feed name uniqueness, new call extension metrics, and three new feed types for apps, reviews, and locations based on Google Places data. Location feeds are associated with a Places account and have attributes and items managed automatically. Reporting on feed item performance is available, and best practices include using built-in versus custom feeds and the proper order for deleting feed components.
The document discusses AdWords scripts for managing multiple AdWords accounts from a central MCC account using JavaScript. It provides an overview of MCC scripts, how to get started with them, and examples of common tasks like accessing child accounts, selecting a specific account, processing accounts in parallel, and returning results.
This document summarizes a presentation about new features in the AwReporting tool. AwReporting is an open source Java tool that allows users to download AdWords reports via the API and generate PDF and HTML reports from the data. The presentation covers how to get reports from AwReporting, generate custom reports, do math with report data, and other new features like Google Drive support and performance improvements. It also provides resources for using AwReporting and lists types of reports that can be generated.
Getting Started with AdWords API and Google Analyticsmarcwan
Google Analytics is a platform that allows businesses to measure user interactions across devices to gain insights and optimize performance. It offers various analysis tools and APIs that developers can use to build applications that integrate with Google Analytics. The Google Analytics developer program provides benefits like quota increases and promotional opportunities to help developers build successful analytics integrations and applications.
This document discusses Google Shopping and Merchant Center. It provides an overview of how to set up and manage Shopping campaigns, including uploading product data through feeds or the Content API, using product dimensions for bidding and filtering, and creating product partitions to organize product inventory. The presenter provides code examples in Java for common tasks like setting up a Shopping campaign, defining product dimensions, and applying filters.
The document summarizes the new features, changes, and deprecations in version 201402 of the Google AdWords API. Key updates include support for shopping campaigns and new ad extensions in the API, new report types, and a new bidding strategy. ClientLogin authentication has been deprecated and replaced with OAuth2.0. Several campaign features have also moved out of beta testing.
This document discusses various options for targeting online advertising campaigns through Google, including targeting by location, location demographics, mobile criteria, and dynamic search ads. It provides examples of how to target specific locations, location groups combining places of interest and income levels, mobile devices and apps, and automatically generate ads based on website content. Resources for each targeting method are also listed.
El documento presenta consejos y trucos sobre el uso de reportes en la API de AdWords. Explica conceptos clave como la atribución simple vs múltiple y cómo se registran las estadísticas. Además, clasifica los diferentes tipos de reportes y ofrece ejemplos de cómo obtener la estructura de una cuenta y desarrollar aplicaciones que usen reportes.
El documento presenta buenas prácticas y estrategias para manejar los límites de frecuencia (rate limits) de la API de AdWords. Se recomienda agrupar operaciones en pocas solicitudes y actualizar solo los campos necesarios. También se discuten tres enfoques para manejar rate limits usando colas de mensajes, incluyendo una sola cola, colas con selectores y múltiples colas.
Este documento presenta una introducción a OAuth 2.0 y cómo obtener tokens de acceso para acceder a los servicios de AdWords API. Explica los pasos para crear una ID de cliente y secreto de cliente, obtener un token de acceso mediante la aprobación del propietario de la cuenta, y luego acceder a los servicios de AdWords API con ese token. También describe los diferentes flujos de OAuth 2.0 y los recursos disponibles para obtener más información.
End to-end how to build a platform (Spanish)marcwan
El documento describe un enfoque paso a paso para que las empresas asociadas desarrollen una plataforma para administrar campañas de AdWords de clientes utilizando la API de AdWords. Se proponen tres fases tecnológicas principales: generación de informes, creación y administración de cuentas, y optimización automatizada. Cada fase agrega más funcionalidad y permite administrar más cuentas por gerente de cuenta a medida que la plataforma se vuelve más sofisticada.
La herramienta AwReporting permite descargar informes de AdWords de forma automatizada y almacenarlos en una base de datos local. Esto reduce la curva de aprendizaje para trabajar con la API de AdWords y proporciona un punto de partida para la automatización y optimización de campañas. La herramienta es de código abierto y puede extenderse fácilmente para crear informes personalizados y integrarse con otros sistemas.
El documento resume las últimas actualizaciones de la API de AdWords, incluyendo nuevas funcionalidades como la importación de conversiones fuera de línea, cambios en los nombres obligatorios de campañas y grupos de anuncios, y cinco funcionalidades que ya no están en beta como los modificadores de ofertas de criterios de visualización y anuncios de búsqueda dinámica. También proporciona ejemplos de código para utilizar estas nuevas características a través de la API.
El documento proporciona una introducción a AdWords Scripts, que permite automatizar AdWords mediante el uso de JavaScript. Explica cómo acceder a la información de la cuenta de AdWords, los principales casos de uso, requisitos y capacidades de los scripts como acceder a entidades, informes y actualizaciones. También cubre la demostración de cómo crear el primer script para obtener campañas y obtener ayuda a través de la documentación y foros.
El documento presenta una capacitación sobre cómo mejorar las páginas móviles y las conversiones a través de la API de AdWords. Cubre temas como la creación de anuncios y ajuste de precios para dispositivos móviles, los 8 fundamentos esenciales de una página móvil efectiva, y herramientas útiles como HTML5 Rocks, depuración remota y emulación móvil.
2. API SERVER
Эффектиные API запросы
и ограничения скорости
Danial Klimkin, Google, Inc.
AdWords API Workshops – All rights reserved
3. План
● Эффективное использование API
● Ограничения скорости по
запросам (rate limiting)
● Примеры реализации очередей
запросов для API
AdWords API Workshops – All rights reserved
5. Объединение операций
AdWords API Workshops – All rights reserved
● Все запросы к API имеют издержки
● Передача по сети, сериализация, авторизация, etc.
● Группировка операция уменьшает издержки
● Метод mutate принимает массив операций
● MutateJobService для асинхронной обработки
AdWords API Workshops – All rights reserved
6. Объединение по целям
● Несколько операций над одной кампанией
выполняются быстре, чем над разными
● Обращение к одной кампании может вызвать ошибки
типа CONCURRENT_MODIFICATION
● Работайте с одной кампанией только из одного потока
● Фоновые сервисы так же работают с объектами
AdWords API Workshops – All rights reserved
7. Отправляйте только изменения
● Изменяете объект?
● Отпарвляйте только изменения!
● Отправка объекта целиком замедляет
процесс
●
Происходит проверка значений, сохранение в БД...
AdWords API Workshops – All rights reserved
8. Кроме того…
● Используйте сжатие gzip для
запросов и ответов.
● Включите в User-Agent “gzip”
● Accept-Encoding: gzip
● Используйте “partial failure”
● Выполяет все операции без ошибок
● Возвращает ошибки для остальных
AdWords API Workshops – All rights reserved
10. Ограничения скорости запросов
● Не фиксированы
● Зависят от нагрузки на сервер
● Различны для разных сервисов
● Меняются во времени
● Разнятся для разных запросов
AdWords API Workshops – All rights reserved
Defining Rate Limits
11. Ошибки “ограничения скорости”
● RATE_EXCEEDED
○ пауза на retryAfterSeconds секунд
● CONCURRENT_MODIFICATIONS
○ увеличивающаяся пауза, повтор
● UNEXPECTED_INTERNAL_API_ERROR
○ 1-2 попытки повторить
○ свяжитесь с нами, сообщите об ошибке
AdWords API Workshops – All rights reserved
Defining Rate Limits
12. Что делать при ограничении?
Careful coding...
AdWords API Workshops – All rights reserved
13. Простой пример
Java
ApiError[] errorArray = apiException.getErrors();
for (ApiError apiError : errorArray) {
if (apiError instanceof RateExceededError) {
int seconds = ((RateExceededError) apiError)
.getRetryAfterSeconds();
// wait the amount of seconds the server asked
Thread.sleep(seconds * 1000);
}
}
AdWords API Workshops – All rights reserved
How to handle Rate Limits
14. Простой пример -- описание
● Ошибка RateExceededError может возникнуть
при выполнении любого запроса
● Важно обрабатывать эту ошибку
● Подождать и повторить -- простейшая
стратегия в этом случае
● Особенно важно при выполнении
нескольких связанных запросов
AdWords API Workshops – All rights reserved
15. Важные замечания по примеру
● Решение -- синхронное
● Вызывающий поток заблокирован
● Нет контроля за скоростью выполнения
● Сложно группировать операции
AdWords API Workshops – All rights reserved
16. Решение на основе очередей
● Очереди сообщений (Message queues)
● Решения для распределения и
управление скоростью (throttling) запросов
● Много готовых решений на рынке
●
ActiveMQ, RabbitMQ, … etc.
● Существуют решения для большинства
платформ / языков
AdWords API Workshops – All rights reserved
17. 1. Одна очередь
Producer
Производитель создает задачи
для выполнения и добавляет из
в очередь
Producer
Consumers
Consumers
Consumers
X
Queue
Throttling
Producer
Logging
Error
Потребитель достает задания из очереди
с заданной скоростью
AdWords API Workshops – All rights reserved
How to handle Rate Limits
18. Первое решение -- за и против
● За:
● Простота реализации
● Одна точка управления скоростью запросов
● Легко обрабатывать ошибки
● Против:
●
●
●
●
Только одна точка управления скоростью запросов
Сложно группировать операции
Некоторые задачи будут долго выполняться
Нужна приоритезация и не везде она эффективна
AdWords API Workshops – All rights reserved
19. 2. Одна очередь с селекторами
Producers
Producers
Производители создают задачи
разных типов и добавляют в
очередь
Producers
Producers
Каждая группа потребителей
обрабатывает задачи ее типа,
со своей скоростью
X
X
X
X
Producers
Producers
Queue
Throttling
Producers
Producers
Producers
Consumer
AdWords API Workshops – All rights reserved
Producers
Consumer
Producers
Consumer
Producers
Consumer
Error
How to handle Rate Limits
20. Второе решение -- за и против
● За:
● Группировка заданий по типу
● Частичный контроль за скоростью выполнения по
сервисам
● Хорошая эффективность -- параллельность запросов
● Против:
●
●
●
●
Только одна очередь -- управление ограничено
Нет общего контроля скорости выполнения
Больше движущихся частей -- сложнее
Протоколирование усложняется
AdWords API Workshops – All rights reserved
21. 3. Несколько очередей
Исполнители выполняют
запрос
Producers
Consumer
Producers
Producers
Producers
Consumer
Throttling
Producers
Producers
Producers
Producers
Producers
Producers
Producers
Consumer
Producers
Executors
Executors
Executors
Producers
Consumer
Queues
Потребители получают задачи
Error
Logging
X
X
X
X
Производители
создают задачи
Throttling
AdWords API Workshops – All rights reserved
How to handle Rate Limits
22. Третье решение -- за и против
● За:
●
●
●
●
●
Полный контроль за скоростью выполнения
Модульность и расширяемость
Возможность управления разными очередями
Масштабируемость
Максимальные параллелизм и эффективность
● Против:
● Сложность реализации
AdWords API Workshops – All rights reserved
23. Очереди сообщений: итого
● Решение зависит от масштаба задачи
● Внедрение -- инвестиция
● Следите за логами, очередями, ошибками
● Нет одного идеального решения
AdWords API Workshops – All rights reserved
24. Полезные ресурсы
API Best Practices - https://developers.google.
com/adwords/api/docs/guides/bestpractices
ActiveMQ - http://activemq.apache.org/
RabbitMQ - http://www.rabbitmq.com/
AdWords API Workshops – All rights reserved