دسترسی نامحدود
برای کاربرانی که ثبت نام کرده اند
برای ارتباط با ما می توانید از طریق شماره موبایل زیر از طریق تماس و پیامک با ما در ارتباط باشید
در صورت عدم پاسخ گویی از طریق پیامک با پشتیبان در ارتباط باشید
برای کاربرانی که ثبت نام کرده اند
درصورت عدم همخوانی توضیحات با کتاب
از ساعت 7 صبح تا 10 شب
ویرایش:
نویسندگان: Matthew A. Titmus
سری:
ISBN (شابک) : 9781492076339, 9781492076261
ناشر: O'Reilly Media, Inc.
سال نشر: 2021
تعداد صفحات:
زبان: English
فرمت فایل : EPUB (درصورت درخواست کاربر به PDF، EPUB یا AZW3 تبدیل می شود)
حجم فایل: 6 Mb
در صورت تبدیل فایل کتاب Cloud Native Go به فرمت های PDF، EPUB، AZW3، MOBI و یا DJVU می توانید به پشتیبان اطلاع دهید تا فایل مورد نظر را تبدیل نمایند.
توجه داشته باشید کتاب Cloud Native Go نسخه زبان اصلی می باشد و کتاب ترجمه شده به فارسی نمی باشد. وبسایت اینترنشنال لایبرری ارائه دهنده کتاب های زبان اصلی می باشد و هیچ گونه کتاب ترجمه شده یا نوشته شده به فارسی را ارائه نمی دهد.
От издательства Об авторе Об иллюстрации на обложке Предисловие Часть I. Облачное окружение Глава 1. Что такое «облачное» приложение? История развития до настоящего времени Что значит быть «облачным»? Масштабируемость Слабая связанность Устойчивость Управляемость Наблюдаемость Что особенного в облачном окружении? Итоги Глава 2. Почему Go правит облачным миром Как появился Go Особенности облачного мира Композиция и структурная типизация Понятность Модель взаимодействия последовательных процессов Быстрая сборка Стабильность языка Безопасность памяти Производительность Статическая компоновка Статическая типизация Итоги Часть II. Облачные конструкции в Go Глава 3. Основы языка Go Базовые типы данных Логические значения Простые числа Комплексные числа Строки Переменные Сокращенная форма объявления переменных Нулевые значения Пустой идентификатор Константы Контейнеры: массивы, срезы и ассоциативные массивы Массивы Срезы Работа со срезами Оператор извлечения среза Строки и срезы Ассоциативные массивы Проверка наличия в ассоциативном массиве Указатели Управляющие структуры Забавный цикл for Универсальная инструкция for Обход в цикле элементов массивов и срезов Обход в цикле элементов ассоциативных массивов Инструкция if Инструкция switch Обработка ошибок Создание ошибки Необычные особенности функций: переменное число параметров и замыкания Функции Несколько возвращаемых значений Рекурсия Отложенные вычисления Указатели как параметры Функции с переменным числом аргументов Передача срезов в параметре с переменным числом значений Анонимные функции и замыкания Структуры, методы и интерфейсы Структуры Методы Интерфейсы Проверка типа Пустой интерфейс Композиция путем встраивания типов Встраивание интерфейсов Встраивание структур Продвижение Прямой доступ к встроенным полям Самое интересное: конкуренция Сопрограммы Каналы Блокировка канала Буферизация каналов Закрытие каналов Прием значений из канала в цикле select Реализация тайм-аутов для каналов Итоги Глава 4. Шаблоны программирования облачных приложений Пакет context Что может дать контекст Создание контекста Определение крайних сроков и тайм-аутов контекста Определение значений в контексте запроса Использование контекста Структура этой главы Шаблоны стабильности Circuit Breaker (Размыкатель цепи) Применимость Реализация Пример кода Debounce (Антидребезг) Применимость Компоненты Реализация Пример кода Retry (Повтор) Применимость Компоненты Реализация Пример кода Throttle (Дроссельная заслонка) Применимость Компоненты Реализация Пример кода Timeout (Тайм-аут) Применимость Компоненты Реализация Пример кода Шаблоны конкуренции Fan-In (Мультиплексор) Применимость Компоненты Реализация Пример кода Fan-Out (Демультиплексор) Применимость Компоненты Реализация Пример кода Future (В будущем) Применимость Компоненты Реализация Пример кода Sharding (Сегментирование) Применимость Компоненты Реализация Пример кода Итоги Глава 5. Конструирование облачной службы Давайте создадим службу! Что такое хранилище пар ключ/значение? Требования Что такое идемпотентность, и почему это важно? Конечная цель Итерация 0: базовая функциональность Наш суперпростой API Итерация 1: монолит Создание HTTP-сервера с использованием net/http Создание HTTP-сервера с использованием gorilla/mux Создание минимальной службы Инициализация проекта с помощью модулей Go Переменные в путях URI Множество сопоставлений Создание службы RESTful Методы RESTful Реализация функции создания Реализация функции чтения Добавление в структуру данных поддержки использования в конкурентном окружении Интеграция мьютекса чтения/записи в приложение Итерация 2: долговременное хранение ресурса Что такое журнал транзакций? Формат журнала транзакций Интерфейс регистратора транзакций Сохранение состояния в журнале транзакций Создание прототипа регистратора транзакций Определение типа события Реализация FileTransactionLogger Создание экземпляра FileTransactionLogger Добавление записей в конец журнала транзакций Использование bufio.Scanner для воспроизведения транзакций из журнала Интерфейс регистратора транзакций (еще раз) Инициализация FileTransactionLogger в веб-службе Интеграция FileTransactionLogger в веб-службу Будущие улучшения Сохранение состояния во внешней базе данных Работа с базами данных в Go Импортирование драйвера базы данных Реализация PostgresTransactionLogger Создание экземпляра PostgresTransactionLogger Выполнение SQL-запроса INSERT с помощью db.Exec Использование db.Query для воспроизведения транзакций из журнала Инициализация PostgresTransactionLogger в веб-службе Будущие улучшения Итерация 3: реализация безопасности транспортного уровня Transport Layer Security Сертификаты, центры сертификации и доверие Закрытый ключ и файлы сертификатов Формат Privacy Enhanced Mail (PEM) Защита веб-службы с помощью HTTPS В заключение о транспортном уровне Контейнеризация хранилища пар ключ/значение Основы Docker Dockerfile Сборка образа контейнера Запуск образа контейнера Проверка запущенного образа контейнера Отправка запроса в опубликованный порт контейнера Запуск нескольких контейнеров Остановка и удаление контейнеров Сборка контейнера для службы хранилища пар ключ/значение Итерация 1: добавление двоичного файла в пустой образ Итерация 2: многоэтапная сборка Сохранение данных контейнера вовне Итоги Часть III. Облачные атрибуты Глава 6. Все дело в надежности В чем суть облачных вычислений? Все дело в надежности Что такое надежность, и почему она так важна? Надежность обеспечивается не только операторами Достижение надежности Предотвращение неисправностей Рекомендуемые практики программирования Особенности языка Масштабируемость Слабая связанность Отказоустойчивость Устранение неисправностей Проверка и тестирование Управляемость Прогнозирование неисправностей Непреходящая актуальность методологии «Двенадцать факторов» I. Кодовая база II. Зависимости III. Конфигурация IV. Сторонние службы V. Сборка, выпуск, выполнение VI. Процессы VII. Изоляция данных VIII. Масштабируемость IX. Живучесть X. Сходство окружений разработки/эксплуатации XI. Журналирование XII. Задачи администрирования Итоги Глава 7. Масштабируемость Что такое масштабируемость? Различные формы масштабирования Четыре основных узких места С состоянием и без состояния Состояние приложения и состояние ресурса Преимущества отсутствия состояния Отложенное масштабирование: эффективность Эффективное кеширование с использованием кеша LRU Эффективная синхронизация Разделяйте память, общаясь Уменьшение простоев на блокировках с помощью буферизованных каналов Уменьшение простоев на блокировках с помощью сегментирования Утечки памяти могут вызвать... фатальную ошибку исчерпания памяти во время выполнения Утечки сопрограмм Вечно тикающие таймеры В заключение об эффективности Архитектуры служб Архитектура монолитной системы Архитектура системы микросервисов Бессерверные архитектуры Достоинства и недостатки бессерверных вычислений Бессерверные службы Итоги Глава 8. Слабая связанность Тесная связанность Множество форм тесной связанности Хрупкие протоколы обмена Общие зависимости Общий момент времени Фиксированные адреса Взаимодействия между службами Шаблон обмена сообщениями запрос/ответ Распространенные реализации шаблона запрос/ответ Отправка HTTP-запросов с использованием net/http Вызов удаленных процедур с использованием gRPC Определение интерфейса с использованием протокола буферов Установка компилятора протокола буферов Определение структуры сообщения Структура сообщений для взаимодействий с хранилищем пар ключ/значение Определение методов службы Компиляция протокола буферов Реализация службы gRPC Реализация клиента gRPC Слабое связывание локальных ресурсов с помощью плагинов Подключение плагинов с помощью пакета plugin Словарь плагинов Пример плагина Интерфейс Sayer Код плагина Сборка плагинов Использование плагинов Go Запуск примера Система плагинов HashiCorp для Go, доступных через RPC Еще один пример плагина Общий код Реализация плагина Процесс-потребитель Гексагональная архитектура Архитектура Реализация гексагональной службы Реорганизация компонентов Наш первый разъем Основное приложение Адаптеры TransactionLogger Порт FrontEnd Все вместе Итоги Глава 9. Устойчивость Почему устойчивость важна Что подразумевается под сбоем системы? Обеспечение устойчивости Каскадные сбои Предотвращение перегрузки Дросселирование Сброс нагрузки Постепенное ухудшение качества обслуживания Повтори еще раз: повторные запросы Алгоритмы увеличения задержки Размыкание цепи Тайм-ауты Использование контекста Context для реализации тайм-аутов на стороне службы Прерывание ожидания обработки клиентских запросов HTTP/REST Прерывание ожидания обработки клиентских запросов gRPC Идемпотентность Как сделать службу идемпотентной? А как насчет скалярных операций? Избыточность служб Проектирование избыточности Автоматическое масштабирование Проверка работоспособности Что подразумевается под «работоспособностью» экземпляра? Три типа проверок работоспособности Проверка жизнеспособности Поверхностная проверка работоспособности Глубокая проверка работоспособности Открытие при отказе Итоги Глава 10. Управляемость Что такое управляемость, и почему она важна? Настройка приложения Рекомендуемые приемы организации конфигураций Настройка с использованием переменных окружения Настройка с использованием аргументов командной строки Стандартный пакет flag Парсер командной строки Cobra Настройка с использованием файлов Наша структура конфигурационных данных Формат JSON Формат YAML Наблюдение за изменениями в конфигурационных файлах Viper: швейцарский армейский нож конфигурационных пакетов Явно устанавливаемые значения в Viper Работа с флагами командной строки в Viper Работа с переменными окружения в Viper Работа с конфигурационными файлами в Viper Использование удаленных хранилищ пар ключ/значение в Viper Значения по умолчанию в Viper Управление функциональными возможностями с помощью флагов Разработка флага для управления функциональной возможностью Итерация 0: начальная реализация Итерация 1: жестко запрограммированный флаг Итерация 2: настраиваемый флаг Итерация 3: динамический флаг Динамические флаги как функции Реализация функции динамического флага Поиск функции флага Функция маршрутизации Итоги Глава 11. Наблюдаемость Что такое наблюдаемость? Зачем нужна наблюдаемость? Чем наблюдаемость отличается от «традиционного» мониторинга? «Три столпа наблюдаемости» OpenTelemetry Компоненты OpenTelemetry Трассировка Концепции трассировки Трассировка с использованием OpenTelemetry Создание экспортеров трассировки Создание провайдера трассировки Настройка глобального провайдера трассировки Получение экземпляра трассировщика Начальная и конечная операции Установка метаданных операции Автоматическое инструментирование Собираем все вместе: трассировка API-службы вычисления чисел Фибоначчи Функция-обработчик службы вычисления чисел Фибоначчи Функция main службы Запуск служб Вывод консольного экспортера Просмотр результатов в Jaeger Метрики Два способа передачи метрик: принудительная и по запросу Принудительная отправка метрик Передача метрик по запросу Какой подход лучше? Метрики в OpenTelemetry Создание экспортеров метрик Установка глобального провайдера метрик Экспортирование конечной точки метрик Получение экземпляра Meter Инструменты метрик Собираем все вместе: метрики Запуск служб Вывод конечной точки метрик Просмотр результатов в Prometheus Журналирование Рекомендуемые методы журналирования Интерпретируйте журналы как потоки событий Структурируйте события для последующего анализа Лучше меньше, да лучше Динамически фильтруйте журналируемые данные Журналирование с использованием стандартного пакета log Специальные функции журналирования Журналирование в нестандартный объект записи Флаги журналирования Пакет журналирования Zap Создание регистратора Zap Журналирование с использованием Zap Динамическая фильтрация журналируемых данных в Zap Итоги Предметный указатель