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

OSCHINA-MIRROR/awesome-lib-architect-awesome

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

Сравнение строк

  • Алгоритм KMP
  • Поиск в глубину и поиск в ширину
  • Жадный алгоритм
  • Рекурсивный алгоритм
  • Обрезка ветвей
  • Динамическое программирование
  • Простой байесовский классификатор
  • Рекомендательные алгоритмы
  • Алгоритм построения минимального остовного дерева
  • Алгоритмы поиска кратчайшего пути

Параллелизм

  • Параллелизм в Java
  • Многопоточность
  • Безопасность потоков
  • Согласованность и транзакции
    • Характеристики транзакций ACID
    • Уровни изоляции транзакций
    • Многоверсионное управление конкурентными данными (MVCC)
  • Блокировки
    • Блокировки и классы синхронизации в Java
    • Справедливые и несправедливые блокировки
    • Пессимистическая блокировка
    • Оптимистическая блокировка и CAS
    • Проблема ABA
    • Копирующий контейнер
    • Кольцевой буфер
    • Реентерабельные и нереентерабельные блокировки
    • Взаимоисключающие и разделяемые блокировки
    • Тупик

Операционная система

  • Архитектура компьютера
  • Центральный процессор
    • Иерархическая память
  • Процессы
  • Потоки
  • Сопрограммы
  • Linux

Шаблоны проектирования

  • Шесть принципов шаблонов проектирования

  • 23 распространённых шаблона проектирования

  • Сценарии применения Архитектура

  • Оптимизация конфигурации

  • Jetty Кэширование

    • Локальное кэширование Клиентское кэширование Серверное кэширование
    • Веб-кэширование
    • Memcached
    • Redis
      • Архитектура
      • Стратегия очистки
    • Tair Очередь сообщений
    • Шина сообщений
    • Порядок сообщений
    • RabbitMQ
    • RocketMQ
    • ActiveMQ
    • Kafka
    • Push-уведомления Redis
    • ZeroMQ Планирование задач
    • Одноузловое планирование задач
    • Распределённое планирование задач RPC
    • Dubbo
    • Thrift
    • gRPC Промежуточное ПО для баз данных
    • Sharding Jdbc Система журналов
    • Сбор журналов Центр конфигурации API-шлюз

Сеть

* **Протоколы**
    * **Семиуровневая модель OSI**
    * **TCP/IP**
    * **HTTP**
    * **HTTP 2.0**
    * **HTTPS** **Сетевая модель**
  • Epoll.
  • Java NIO.
  • Kqueue.

Соединение и короткое соединение.

Фреймворк.

Нулевое копирование (Zero-copy).

Сериализация (двоичный протокол): * Hessian. * Protobuf.

База данных: * Основы теории: * Три основные парадигмы проектирования реляционных баз данных. * MySQL: * Принцип работы. * InnoDB. * Оптимизация. * Индексы: * Кластерные индексы, некластерные индексы. * Составные индексы. * Адаптивный хэш-индекс (AHI). * Explain. * NoSQL: * MongoDB. * Hbase.

Поисковая система: * Принцип работы поисковой системы. * Lucene. * Elasticsearch. * Solr. * Sphinx.

Производительность: * Методология оптимизации производительности. * Оценка ёмкости. * Сеть CDN. * Пул соединений. * Настройка производительности.

Большие данные: * Потоковые вычисления: * Storm. * Flink. * Kafka Stream. Actor 模式 — это шаблон проектирования, который используется для создания распределённых систем. Он позволяет разделить систему на отдельные компоненты, которые могут взаимодействовать друг с другом через сообщения.

Реактивное программирование — парадигма программирования, которая фокусируется на обработке событий и потоков данных. Оно отличается от традиционного императивного программирования тем, что не изменяет состояние программы, а реагирует на события и потоки данных.

Reactor — это реализация реактивного программирования в Java. Она предоставляет абстракцию над асинхронными операциями ввода-вывода и позволяет писать код, который легко масштабируется и обрабатывает большое количество запросов.

RxJava — это библиотека для реактивного программирования на Java. Она основана на концепции Observables, которые позволяют создавать потоки данных и обрабатывать их с помощью операторов.

Vert.x — это платформа для разработки высокопроизводительных и масштабируемых приложений на Java и других языках. Она использует концепцию Event Loop для обработки событий и выполнения кода.

DODAF 2.0 (Department of Defense Architecture Framework) — это стандарт для описания архитектуры военных систем. Он определяет набор моделей и методов для анализа, проектирования и управления архитектурой.

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

Service Mesh — это система управления микросервисами, которая обеспечивает связь между ними, безопасность, мониторинг и другие функции. Она работает поверх инфраструктуры и обеспечивает прозрачность для разработчиков.

Проектный менеджмент — это процесс планирования, организации, контроля и завершения проектов. Он включает в себя различные методы и инструменты, такие как Agile, Scrum, Kanban и другие.

Архитектурный обзор — это оценка архитектуры системы с точки зрения её соответствия требованиям, стандартам и лучшим практикам. Он может проводиться на разных этапах жизненного цикла проекта.

Рефакторинг — это изменение структуры кода без изменения его функциональности. Он направлен на улучшение качества кода, его читаемости, тестируемости и сопровождаемости.

Стандарты кодирования — это правила и рекомендации по написанию кода. Они помогают обеспечить единообразие, согласованность и качество кода в команде.

Code Review — это практика проверки кода другими разработчиками перед его фиксацией в репозитории. Это помогает выявить ошибки, улучшить качество кода и обучить новых разработчиков.

RUP (Rational Unified Process) — это методология разработки программного обеспечения, основанная на итеративном подходе. Она включает в себя фазы анализа, проектирования, реализации, тестирования и поддержки.

Канбан-доска — это инструмент визуального управления проектами, основанный на канбан-методе. Он представляет собой доску с карточками, которые перемещаются между столбцами в зависимости от статуса задачи.

Scrum — это фреймворк для управления проектами, который основан на принципах самоорганизации, сотрудничества и гибкости. Он включает роли, артефакты, события и правила.

Agile-разработка — это подход к разработке программного обеспечения, который ориентирован на быстрое создание и поставку ценности для клиентов. Он основан на ценностях, принципах и практиках, таких как короткие итерации, обратная связь и постоянное совершенствование.

XP (Extreme Programming) — это экстремальное программирование, которое является одним из самых ранних и наиболее радикальных подходов к agile-разработке. Оно включает практики, такие как парное программирование, непрерывная интеграция, тестирование и метафоры системы.

Парное программирование — это метод разработки, при котором два разработчика работают вместе за одним компьютером. Один разработчик пишет код, а другой следит за ним и даёт обратную связь.

Цикл PDCA (Plan-Do-Check-Act) — это цикл непрерывного улучшения, который применяется в управлении качеством. Он включает планирование, выполнение, проверку и действие.

FMEA (Failure Mode and Effects Analysis) — это анализ видов и последствий отказов, который используется в управлении рисками. Он помогает идентифицировать потенциальные отказы, оценить их последствия и разработать меры по их предотвращению.

Общие бизнес-термины — это термины, которые используются в бизнесе и управлении проектами. Они могут быть специфичными для отрасли или компании.

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

Политика и законодательство — это нормативные документы, которые регулируют деятельность компаний и разработчиков программного обеспечения. Они могут включать законы, стандарты, лицензии и другие требования.

Закон — это основной источник права в стране. Он устанавливает общие принципы и нормы поведения, которые должны соблюдаться всеми гражданами и организациями.

Строгое соблюдение статьи 253 Уголовного кодекса — это требование соблюдать закон и не нарушать его положения. Статья 253 УК РФ касается экологических преступлений, таких как загрязнение окружающей среды, нарушение правил охраны водных ресурсов и другие.

Навыки архитектора — это знания, умения и способности, которые необходимы для успешной работы в роли архитектора. Они включают технические навыки, аналитические способности, коммуникативные навыки и другие.

Управление командой — это процессы и методы, которые используются для координации и мотивации членов команды. Они включают подбор персонала, организацию работы, разрешение конфликтов и другие аспекты.

Найм — это процесс поиска, отбора и найма сотрудников в компанию. Он включает определение потребностей, поиск кандидатов, проведение собеседований и принятие решений.

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

Отраслевая информация — это информация, которая относится к конкретной отрасли или рынку. Она может включать новости, исследования, статистику и другие данные.

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

Блог — это веб-сайт или раздел сайта, где автор публикует свои мысли, идеи, статьи и другие материалы. Блоги могут быть личными, корпоративными или тематическими.

Корпоративный блог — это блог, который ведётся от имени компании или организации. Он используется для продвижения бренда, информирования аудитории о новостях и событиях, а также для взаимодействия с клиентами и партнёрами.

Личный блог — это блог, который ведёт один человек. Он может быть посвящён различным темам, таким как технологии, искусство, путешествия, еда и другим.

Комплексные порталы и сообщества — это платформы, которые объединяют различные ресурсы и сервисы в одном месте. Они предоставляют доступ к информации, услугам, продуктам и другим возможностям.

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

Анализ отраслевых данных — это исследование и интерпретация данных, связанных с конкретной отраслью или рынком. Он может использоваться для прогнозирования тенденций, оценки рисков, определения возможностей и других целей.

Специализированные сайты — это сайты, которые посвящены определённым темам, продуктам или услугам. Они могут предоставлять информацию, услуги, продукты или другие возможности.

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

Рекомендуемые книги — это книги, которые рекомендуются для чтения по определённой тематике. Они могут быть полезны для обучения, повышения квалификации и расширения кругозора.

Электронные книги онлайн — это электронные версии книг, которые можно читать онлайн или скачать. Они доступны на различных платформах и сервисах.

Печатные книги — это традиционные книги, которые издаются в бумажном формате. Они могут содержать текст, иллюстрации, таблицы и другие элементы. 可重入锁 и不可重入锁

Через простой код приводится пример использования повторной входящей блокировки (reentrant lock) и не повторной входящей блокировки.

Повторная входящая блокировка позволяет одному и тому же потоку повторно получать блокировку, которая уже была получена ранее. Это помогает избежать взаимоблокировки. В Java повторная входящая блокировка реализуется через synchronized и java.util.concurrent.locks.ReentrantLock.

Synchronized — это удобный способ получения блокировки, который обеспечивается компилятором. Эта блокировка является нечестной.

ReentrantLock предоставляет более гибкие возможности для управления блокировкой, включая возможность настройки честности. Рекомендуется использовать synchronized в большинстве случаев.

  • В запросе отсутствует информация о том, какой перевод требуется сделать: прямой или аннотационный. Поэтому в данном ответе представлен прямой перевод.

Взаимоисключающая блокировка (mutex) и разделяемая блокировка (shared lock)

Взаимоисключающая блокировка позволяет только одному потоку получить доступ к ресурсу в определённый момент времени. Примером является ReentrantLock.

Разделяемая блокировка позволяет нескольким потокам одновременно получать доступ к ресурсу. Примеры включают Semaphore и CountDownLatch.

«Тупик» (deadlock): четыре необходимых условия

«Тупик» возникает, когда несколько потоков ожидают друг друга для освобождения ресурсов. Для возникновения «тупика» должны выполняться следующие условия:

  1. Взаимоисключение: ресурсы используются таким образом, что только один поток может иметь доступ к ним в данный момент.
  2. Удержание и ожидание: потоки удерживают ресурсы, которые им необходимы, и ждут освобождения других ресурсов.
  3. Невозможность вытеснения: ресурсы не могут быть принудительно освобождены другими потоками.
  4. Циклическое ожидание: существует цикл ожидания между потоками, где каждый поток ожидает ресурс, удерживаемый другим потоком в цикле.

Для обнаружения «тупиков» в Java можно использовать инструменты, такие как JConsole и jstack.

Операционная система: базовые знания

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

Процессор: многоуровневая кэш-память

Современные процессоры обычно имеют многоуровневую кэш-память для ускорения доступа к данным. Обычно есть три уровня кэша: L1, L2 и L3. L1 обычно имеет размер 32 КБ, L2 — 256 КБ, а L3 — около 12 МБ. Доступ к памяти занимает около 200 процессорных циклов, в то время как доступ к кэшу требует всего одного цикла.

Процесс и поток

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

Взаимное исключение и семафоры

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

Наследование и композиция

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

Linux: команды

Linux предоставляет множество команд для управления системой и выполнения различных задач. Полный список команд можно найти на сайте runoob.com. MVC

  • Модель (model) — представление (view) — контроллер (controller).

IOC

  • Прямая связь: традиционный способ через new.
  • Обратная связь, или инверсия управления: объекты внедряются через контейнер.
  • Назначение: используется для модульного разделения.
  • DI (Dependency Injection), или внедрение зависимостей: фокусируется на использовании ресурсов, не заботясь об их происхождении.

AOP

  • Spring AOP использует динамические прокси, которые могут быть реализованы двумя способами: JDK динамический прокси и CGLIB динамический прокси.
  • Если класс реализации целевого объекта реализует интерфейс, Spring AOP будет использовать JDK динамический прокси для создания прокси-класса AOP. Если класс реализации целевого объекта не реализует интерфейс, Spring AOP будет использовать CGLIB для создания прокси-класса AOP.

UML

Не удалось найти информацию о UML в запросе. Возможно, вы имели в виду Unified Modeling Language (унифицированный язык моделирования), который является стандартным языком моделирования общего назначения для разработки программного обеспечения. Он используется для визуализации, спецификации, конструирования и документирования артефактов программных систем.

Микросервисная архитектура

  • Микросервисная архитектура основана на следующих принципах:
    • Коммуникация между службами осуществляется через чётко определённые интерфейсы.
    • Службы автономны и слабо связаны друг с другом.
    • Каждая служба имеет свою собственную логику и может быть развёрнута независимо от других служб.
  • Преимущества микросервисной архитектуры:
    • Гибкость и масштабируемость: каждая служба может развиваться и масштабироваться независимо от других.
    • Простота разработки и тестирования: небольшие службы легче разрабатывать и тестировать.
    • Устойчивость к сбоям: отказ одной службы не влияет на работу всей системы.
  • Недостатки микросервисной архитектуры:
    • Сложность управления: большое количество служб требует более сложной системы управления.
    • Увеличение нагрузки на сеть: взаимодействие между службами может привести к увеличению нагрузки на сетевую инфраструктуру.

Законы Конвея

Законы Конвея описывают взаимосвязь между структурой организации и архитектурой разрабатываемой системы. Они были сформулированы Майлсом Бёртоном Конвеем в 1967 году. Законы Конвея гласят:

  1. Организация, разрабатывающая систему, создаёт проект системы, который является копией коммуникационной структуры организации.
  2. Любая организация, которая проектирует систему, обречена создать проект, похожий на структуру организации.
  3. Система, разработанная организацией, стремится к усложнению, чтобы поддерживать связь с другими системами этой организации на прежнем уровне.
  4. В любой достаточно сложной системе изменения одного элемента потребуют изменений в других, а также в связях между ними.

Эти законы подчёркивают важность учёта организационных аспектов при разработке системы и необходимость согласования структуры системы с целями и задачами организации.

Мониторинг и управление

В запросе не удалось найти подробную информацию о мониторинге и управлении. Однако можно выделить следующие ключевые аспекты:

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

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

  • Системы мониторинга: Zabbix, Nagios, Ganglia, Zenoss, Open-Falcon, «Мониторинг-Б», 360 Site Service Monitoring, Alibaba Cloud Monitoring, Baidu Cloud Observation и другие.
  • Инструменты командной строки: top, sar, tsar, nload.
  • APM (Application Performance Management): инструменты для мониторинга и анализа производительности приложений. Примеры включают Apache SkyWalking, CAT, CNCF Jaeger, Pinpoint и Zipkin.

Также упоминаются инструменты для статистического анализа и автоматизации управления конфигурацией и сборкой (CI/CD).

Статистика и анализ

Статистический анализ используется для изучения и понимания данных, полученных в результате мониторинга. Основные показатели, используемые в статистике, включают:

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

Инструменты для сбора и анализа статистических данных включают Google Analytics, Яндекс Метрику, Adobe Analytics и другие.

Автоматизация управления конфигурацией и сборкой

CI/CD (Continuous Integration / Continuous Delivery) — это подход к разработке программного обеспечения, при котором изменения кода интегрируются и проверяются автоматически, что позволяет быстро и часто выпускать новые версии продукта.

Основные инструменты CI/CD включают Jenkins, GitLab CI, TeamCity и другие. Тестирование

  • TDD теория

    • Глубокое понимание — TDD (тестирование, управляемое разработкой)
      • Основано на кодировании тестовых случаев для функционального кода. Это ключевая практика XP (экстремального программирования).
      • Преимущества: сосредоточение внимания на одной точке, снижение умственной нагрузки; адаптация к изменениям требований или улучшение дизайна кода; раннее уточнение требований; быстрая обратная связь.
  • Модульное тестирование

    • Java модульное тестирование с JUnit
    • JUnit 4 и сравнение с TestNG
      • TestNG покрывает функции JUnit и подходит для более сложных сценариев.
    • Основные функции модульного тестирования
      • Тестирование интерфейса модуля, тестирование локальных данных, тестирование путей, тестирование обработки ошибок, тестирование граничных условий.
  • Нагрузочное тестирование

    • Руководство по использованию Apache ab для тестирования
    • Крупномасштабное нагрузочное тестирование веб-сайтов и стратегии оптимизации
    • 10 основных инструментов нагрузочного/стресс-тестирования/тестирования производительности
    • Анализ tcpcopy для реального потока нагрузочного тестирования
    • Краткое руководство по использованию nGrinder
  • Полномасштабное нагрузочное тестирование

    • Обновление схемы полномасштабного нагрузочного тестирования JD.com, создание робота ForceBot для военных учений
    • Исследование и практика полномасштабного нагрузочного тестирования Meituan
    • Четыре языка, восемь фреймворков | Путь решения проблем полномасштабного нагрузочного тестирования DIDI
    • Опыт полномасштабного нагрузочного тестирования
  • A/B, серое и зелёное тестирование

    • Техническая информация | Исследование и практика A/B тестирования и серого развёртывания
    • Развёртывание Nginx на основе IP-адресов
    • Серое развёртывание, A/B тестирование и развёртывание

Виртуализация

  • Три технологии виртуализации OpenVZ, Xen и KVM: сравнение преимуществ и недостатков

  • KVM

    • Подробное объяснение KVM, слишком подробное и глубокое
    • Установка KVM подробно
  • Xen

    • Основной принцип виртуализации Xen
  • OpenVZ

    • Быстрый старт с открытым Linux контейнером OpenVZ

Контейнеры

  • Docker
    • Несколько диаграмм помогают понять основной принцип Docker и быстро начать работу
    • Ядро технологии и принципы реализации Docker
    • Учебник Docker

Облачные технологии

  • OpenStack
    • Структурное знание OpenStack

DevOps

  • Что такое DevOps?
    • Подробный анализ DevOps

Управление документами

  • Confluence — платная система управления документами
  • GitLab
  • Wiki

Промежуточное ПО

Веб-сервер

  • Nginx

    • Основное обучение Nginx — многопроцессорность и сравнение с Apache

      • Nginx использует асинхронный неблокирующий механизм обработки событий для достижения высокой параллельной обработки. Каждый запрос Apache занимает отдельный поток, что очень ресурсоёмко.
      • Механизм обработки событий подходит для сервисов с интенсивным использованием ввода-вывода (Nginx), а многопроцессорная обработка или многопоточность подходят для сервисов с интенсивным использованием процессора (Apache), поэтому Nginx подходит в качестве обратного прокси-сервера, но не веб-сервера.
    • Сравнение Nginx и Apache и их преимущества и недостатки

      • Nginx подходит только для статических файлов и обратных прокси, не подходит для обработки динамических запросов.
  • OpenResty

    • Официальный сайт

    • Неглубокий разговор об OpenResty

      • Lua модули могут быть разработаны на Nginx через OpenResty.
    • Агент Zh's Nginx учебник

  • Tengine

    • Официальный сайт
  • Apache Httpd

    • Официальный сайт
  • Tomcat

    • Архитектура

      • Принцип работы и процесс запроса TOMCAT

      • Сервер Tomcat подробно

      • Система Tomcat и архитектура проектирования, часть 1: принцип работы

        • Tomcat — это облегчённый контейнер Servlet, который не реализует все функции JEE (например, постоянство и обработку транзакций), но может быть заменён другими компонентами, такими как Spring.
        • Jboss реализует все функции JEE, программное обеспечение с открытым исходным кодом бесплатно, документация платная.
      • Выбор между JBoss и Tomcat: выбор сервера приложений Java

        • Tomcat — лёгкий контейнер Serverlet без всех функций JEE (таких как постоянство и обработка транзакций), но другие компоненты могут заменить его, например, Spring.
        • JBoss реализует все функции JEE, бесплатное программное обеспечение с открытым исходным кодом, платная документация.
    • Оптимизация конфигурации Tomcat

      • Запуск в режиме NIO (или APR); настройка пула потоков; отключение коннектора AJP (архитектура Nginx + tomcat не требует AJP). AJP 协议 (8009 порт) используется для снижения количества соединений с передним сервером (например, Apache, который должен поддерживать AJP протокол).

За счёт использования длинных соединений повышается производительность. При высокой параллельной нагрузке AJP протокол предпочтительнее HTTP протокола.

Jetty

  • Статья «Принцип работы Jetty и сравнение с Tomcat».
  • Статья «Сравнение преимуществ Jetty и Tomcat».
    • Архитектура Jetty проще, чем у Tomcat.
    • Что касается производительности, то разница между Jetty и Tomcat невелика. По умолчанию Jetty использует NIO, что даёт преимущество при обработке I/O запросов. Tomcat по умолчанию использует BIO для обработки I/O запросов и подходит для обработки небольшого числа очень загруженных соединений, но его производительность при работе с статическими ресурсами ниже.
    • Другие аспекты: Jetty быстрее запускается, проще в модификации и лучше поддерживает новые спецификации Servlet; Tomcat предлагает более полную поддержку JEE и Servlet.

Кэш

Локальный кэш

Клиентский кэш

Серверные кэши

Веб-кэши

  • nuster cache
  • varnish cache
  • squid cache

Memcached

Redis

  • Учебник Redis.

  • Принципы работы Redis.

    • Для хранения списков используется ziplist, который представляет собой сжатый список. Его преимущество заключается в экономии памяти, поскольку он хранит данные в непрерывном блоке памяти.
    • skiplist (список пропуска) используется для хранения упорядоченных наборов объектов и поиска. Поиск начинается с верхнего уровня, сложность времени и пространства аналогична красно-чёрному дереву, реализация проста, без блокировки, с хорошим параллелизмом.
  • Способы сохранения данных в Redis.

    • RDB: периодически создавать резервные копии снимков, обычно используемые для аварийного восстановления. Преимущества: резервное копирование выполняется через процесс fork, не влияя на основной процесс, и скорость резервного копирования RDB выше, чем AOF при восстановлении больших наборов данных. Недостатки: потеря данных.
    • AOF: сохраняет журнал операций. Преимущества: меньше потери данных при восстановлении, недостатки: большой файл, медленное восстановление.
    • Также можно использовать их вместе.
  • Часть 3 серии статей о распределённом кэше: атомарные операции и оптимистичные блокировки CAS.

Архитектура

Стратегия утилизации

Tair

  • Официальный сайт: https://github.com/alibaba/tair
  • Сравнение Tair и Redis.
  • Особенности: можно настроить количество резервных узлов, асинхронно синхронизировать с резервными узлами.
  • Алгоритм согласованности хэшей.
  • Архитектура: похожа на Hadoop, есть Configserver, DataServer, Configserver обнаруживает через сердцебиение, у Configserver также есть главный и резервный узлы.

Несколько типов механизмов хранения:

  • MDB, полностью в памяти, может использоваться для хранения данных сеанса и т. д.
  • Rdb (аналогично Redis), лёгкий, удалено aof и другие операции, поддерживает Restfull операции. LDB (LevelDB) — это механизм хранения данных, который используется в качестве постоянного хранилища для rdb. Он разработан компанией Google и отличается высокой эффективностью. В основе LDB лежит алгоритм LSM (Log-Structured-Merge Tree).

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

Tair использует общую память для хранения данных. Если сервер выходит из строя, данные сохраняются после перезапуска сервера.

Очередь сообщений

  • RabbitMQ — это брокер сообщений, который поддерживает как режим «push», так и режим «pull». В режиме «push» сообщения отправляются потребителям максимально быстро, но если потребители не успевают обрабатывать сообщения, может произойти переполнение буфера. В режиме «pull» потребители сами запрашивают сообщения, что позволяет им контролировать скорость обработки, но увеличивает задержку.

  • Kafka по умолчанию работает в режиме «pull», но также поддерживает режим «push».

  • «Push» и «pull» — это два способа отправки сообщений от производителя к потребителю. «Push» означает, что производитель отправляет сообщения потребителю без запроса, а «pull» — что потребитель запрашивает сообщения у производителя.

  • Сообщения могут быть отправлены в порядке их поступления или в произвольном порядке.

  • Очередь сообщений — это инструмент для организации обмена сообщениями между различными компонентами системы. Она обеспечивает упорядоченную передачу сообщений и упрощает взаимодействие между компонентами.

RabbitMQ

RabbitMQ поддерживает транзакции и оба режима («push» и «pull»). Он подходит для сценариев, где требуется надёжная передача сообщений.

RocketMQ

RocketMQ — это реализация очереди сообщений на Java, которая поддерживает оба режима. По сравнению с Kafka, она имеет меньшую пропускную способность, но гарантирует порядок сообщений.

ActiveMQ

ActiveMQ — это ещё одна реализация очереди сообщений на Java. Она совместима с JMS и может быть интегрирована в Java-приложения.

Kafka

Kafka — это высокопроизводительная очередь сообщений, которая работает в основном в режиме «pull». Она подходит для сценариев с большим объёмом данных, таких как синхронизация журналов.

Redis

Redis также может использоваться в качестве очереди сообщений. Производители и потребители взаимодействуют с ней через клиентские приложения. Список и режим «pull» реализуются с помощью команды blpop.

ZeroMQ

ZeroMQ — это библиотека для разработки распределённых приложений, которая предоставляет абстракцию над сокетами. Она позволяет создавать различные топологии взаимодействия между процессами.

Планировщик задач

Существуют планировщики задач для одного компьютера и для распределённой системы.

Для одного компьютера используются такие инструменты, как cron в Linux и Quartz в Java. Они позволяют выполнять задачи по расписанию.

Распределённые планировщики, такие как opencron, LTS, XXL-JOB, Elastic-Job и Uncode-Schedule, обеспечивают выполнение задач на нескольких узлах.

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

RPC

RPC (Remote Procedure Call) — это технология, позволяющая вызывать процедуры на удалённом сервере. Существует несколько реализаций RPC, включая Dubbo, Thrift и gRPC.

Dubbo — это фреймворк для создания распределённых систем на основе RPC. Он обеспечивает высокую производительность и масштабируемость.

Thrift — это кроссплатформенный фреймворк, который позволяет определять интерфейсы на промежуточном языке и генерировать код для различных языков программирования.

gRPC — это современная реализация RPC, которая обеспечивает безопасность и аутентификацию при работе в сети.

Sharding JDBC

Sharding JDBC — это проект, который обеспечивает горизонтальное масштабирование баз данных путём разделения данных между несколькими серверами.

Сбор и анализ логов

ELK (Elasticsearch, Logstash, Kibana) — это набор инструментов для сбора, анализа и визуализации логов. Он позволяет централизованно собирать логи с разных серверов и анализировать их для выявления проблем и оптимизации работы системы.

Конфигурационный центр

Apollo — это конфигурационный центр, разработанный компанией Ctrip. Он основан на Spring Boot и Spring Cloud и поддерживает режимы «push» и «pull» для обновления конфигураций. 《基于 zookeeper 实现统一配置管理》

《Spring Cloud Config 分布式配置中心使用教程》

Servlet 3.0 异步特性可用于配置中心的客户端.

《API 网关》

Основной задачей API-шлюза является обеспечение безопасности, преобразование протоколов и обработка отказов.

Сетевые технологии

Протоколы

Модели сети

  • 《web优化必须了解的原理之I/o的五种模型和web的三种工作模式》

    • Существует пять моделей ввода-вывода: блокирующий ввод-вывод, неблокирующий ввод-вывод, мультиплексированный ввод-вывод, управляемый событиями ввод-вывод и асинхронный ввод-вывод. Первые четыре модели являются синхронными операциями, а пятая модель — асинхронной.
    • Три режима работы веб-сервера: Prefork (многопроцессный), Worker (потоковый) и Event.
  • 《select、poll、epoll之间的区别总结》

    • select, poll и epoll по сути являются синхронным вводом-выводом, поскольку они требуют, чтобы после возникновения события ввода-вывода выполнялось чтение или запись. Это означает, что процесс чтения или записи блокируется.
    • У select есть ограничение на количество открытых файловых дескрипторов, равное 1024 (2048 для x64), и он может обрабатывать до 100 000 одновременных подключений. Для этого потребуется 1 000 процессов и значительные накладные расходы на переключение контекста.
    • В отличие от select, у poll нет ограничения на количество файловых дескрипторов.
    • По сравнению с select и poll, epoll более эффективен, так как он использует механизм обратного вызова для уведомления о событиях ввода-вывода. Кроме того, epoll использует красно-чёрное дерево для хранения информации о файловых дескрипторах, что обеспечивает более высокую производительность по сравнению с poll.
    • При каждом вызове select должен копировать набор файловых дескрипторов из пользовательского пространства в пространство ядра, в то время как epoll делает это только один раз.
  • 《select,poll,epoll比较 》

    • Когда количество соединений невелико и все соединения активны, производительность select и poll может быть выше, чем у epoll, поскольку epoll требует больше ресурсов для обработки событий ввода-вывода через механизм обратных вызовов.
  • 《深入理解Java NIO》

    • NIO — это синхронная неблокирующая модель ввода-вывода, которая позволяет потоку непрерывно опрашивать события ввода-вывода и выполнять другие задачи во время ожидания.
  • 《BIO与NIO、AIO的区别》

  • 《两种高效的服务器设计模型:Reactor和Proactor模型》

Epoll

Java NIO

kqueue

Соединение и короткое соединение

Фреймворк

  • 《Netty原理剖析》
    • Введение в модель Reactor.
    • Netty — это реализация модели Reactor.

Нулевое копирование (Zero-copy)

Сериализация (двоичный протокол)

Hessian

Protobuf

  • 《Protobuf协议的Java应用例子》 Продукт Google, превосходящий другие библиотеки сериализации, такие как Hessian, с точки зрения эффективности и использования пространства. Требуется написать файл .proto.

  • 《Protocol Buffers序列化协议及应用》

    • Объяснение протокола.
    • Недостаток: плохая читаемость.
  • 《简单的使用 protobuf 和 protostuff》

    • Преимущество protostuff заключается в том, что не нужно писать файл .proto, и объекты Java могут быть сериализованы напрямую. Базы данных: три основные парадигмы и пять основных ограничений

Первая парадигма: каждая колонка в таблице должна быть неделимой минимальной единицей, то есть необходимо обеспечить атомарность каждой колонки.

Вторая парадигма (2NF): после выполнения первой парадигмы требуется, чтобы все колонки таблицы зависели от первичного ключа, и ни одна из них не была связана с первичным ключом. Это означает, что таблица описывает только одно явление.

Третья парадигма: сначала нужно выполнить вторую парадигму (2NF), а затем потребовать, чтобы каждая колонка таблицы была напрямую связана с первичным ключом, а не косвенно. Другими словами, каждая колонка может зависеть только от первичного ключа.

MySQL

Принцип

  • «Подробное объяснение индекса InnoDB MySQL» — статья, которая поможет вам понять принципы работы индексов InnoDB в MySQL.
  • «Сравнение MySQL-хранилищ — MyISAM и InnoDB» — в статье сравниваются два типа хранилищ MySQL: MyISAM и InnoDB. Основное отличие между ними заключается в том, что InnoDB поддерживает транзакции и внешние ключи, а также использует блокировку на уровне строк.
  • «Реализация индексов MyISAM и InnoDB: различия» — статья о различиях в реализации индексов MyISAM и InnoDB.

InnoDB

  • «Статья, которая поможет разобраться в MySQL и InnoDB».

Оптимизация

  • «36 правил армии для MySQL».
  • «Более 20 лучших практик оптимизации производительности MySQL».
  • «Путь к оптимизации SQL».
  • «Причины возникновения тупиковых ситуаций в базах данных MySQL и способы их устранения».
  • «Возможные ситуации, приводящие к неэффективности индексов».
  • «Оптимизация метода разбиения на страницы MySQL LIMIT».

В статье говорится, что основной принцип оптимизации заключается в уменьшении области сканирования.

Индексы

Сводные индексы и несводные индексы

  • «Сводные и несводные индексы MySQL: краткое описание».
  • «Как реализованы индексы MyISAM и InnoDB».

MyISAM является несводным индексом, а InnoDB — сводным.

Составные индексы

  • «Преимущества составных индексов и важные моменты».

Автор статьи указывает на ошибку в тексте: утверждается, что при использовании составного индекса в запросе лучше всего упорядочить условия по порядку следования столбцов в индексе, так как это обеспечивает максимальную эффективность. Однако автор статьи считает, что это неверно, поскольку MySQL автоматически оптимизирует порядок условий WHERE, даже если они указаны в другом порядке.

  • «Влияние порядка условий WHERE на эффективность запросов MySQL».

Самоадаптивный хэш-индекс (AHI)

«InnoDB Storage Engine — Самоадаптивный хеш-индекс».

Объяснение

«Использование инструмента анализа Explain для оптимизации производительности MySQL».

NoSQL

MongoDB

  • MongoDB Tutorial.
  • Сравнение реляционных баз данных и MongoDB.

Преимущества MongoDB включают слабую согласованность (в конечном итоге согласованность), что обеспечивает более высокую скорость доступа для пользователей; встроенную GridFS, поддерживающую большие объёмы хранения; отсутствие необходимости заранее определять структуру данных благодаря Schema-less базе данных; встроенное сегментирование; богатую поддержку со стороны сторонних разработчиков; превосходную производительность;

Недостатки MongoDB включают отсутствие поддержки транзакций; использование большого объёма пространства; отсутствие зрелых инструментов обслуживания, таких как у MySQL, что важно для разработчиков и IT-операторов.

HBase

  • Краткое введение в HBase (начало).
  • Глубокое изучение архитектуры HBase.
  • Разница между традиционным строковым хранением и (HBase) столбцовым хранением.

Разница между HBase и традиционными базами данных.

HBase не хранит пустые данные, что экономит пространство и подходит для параллельной обработки.

  • Как разработать ключ строки в HBase.

Ключ строки сортируется в алфавитном порядке, что удобно для пакетного сканирования. Используя хеширование, можно избежать горячих точек.

Поисковые системы

Принцип работы поисковых систем

  • Статья о принципе работы инвертированных индексов.

Lucene

  • Введение в Lucene.

Elasticsearch

  • Изучение Elasticsearch: начните с этой статьи!
  • Принципы индексации Elasticsearch.

Solr

  • Учебник по Apache Solr.
  • Сравнение Elasticsearch и Solr.

Sphinx

  • Введение и исследование Sphinx.

Производительность

Методы оптимизации производительности

  • 15 дней работы по оптимизации производительности, опыт оптимизации в пяти аспектах.
  • Несколько аспектов оптимизации системы.

Оценка ёмкости

  • Методы и типичные случаи оценки производительности и ёмкости сетевых приложений.
  • Как провести оценку ёмкости системы?

CDN-сети

  • Принцип ускорения CDN.
  • Какие CDN являются хорошими в Китае?

Пулы соединений

[Конец текста запроса] Производительность оптимизации

  • [Девять основных инструментов для отладки производительности Java, необходимо иметь хотя бы один]

Большие данные

Потоковые вычисления

  • Storm

  • Flink

    • [Введение в основные принципы Flink]
  • Kafka Stream

    • [Исследование Kafka Stream: облегчённый режим потоковых вычислений]
  • Сценарии применения

    • Например:
      • Статистика рекламы в реальном времени;
      • Обновление тегов изображений пользователей рекомендательной системы в реальном времени;
      • Мониторинг состояния онлайн-сервисов в реальном времени;
      • Списки лидеров в реальном времени;
      • Статистические данные в реальном времени.

Hadoop

* [Что такое Hadoop и что он может делать, объяснение простыми словами]
* [Подробное руководство по созданию среды Hadoop]
  • HDFS

    • [Основные принципы HDFS]
  • MapReduce

    • [Объяснение принципов Map/Reduce простыми словами]
    • [Простой пример на Java]
  • Yarn

    • [Понимание архитектуры и принципов Yarn]

Spark

* [Spark (1): базовая архитектура и принципы]
* [Начало работы с Spark (Python)]

Безопасность

Веб-безопасность

  • XSS

    • [Принципы и методы решения XSS-атак]
  • CSRF

    • [Принципы CSRF и меры предосторожности]
  • SQL-инъекция

    • [SQL-инъекции]
  • Hash DoS

    • [Злонамеренная атака Java Hash DoS]
    • [Продвинутая DoS-атака — атака столкновения хэшей]
    • [Анализ и решение проблемы уязвимости Hash Collision DoS]
  • Внедрение скриптов

    • [Уязвимость загрузки файлов и меры предотвращения]
  • Инструменты сканирования уязвимостей

    • [DVWA]
    • W3af
    • OpenVAS
  • Проверка подлинности

    • [Анализ принципов проверки подлинности и их реализация]
    • [Детальное объяснение принципа реализации скользящей проверки подлинности]
    • [Исследования скользящей проверки подлинности Taobao]
  • Защита от DDoS-атак

    • [Руководство по изучению: способы атак DDoS и меры защиты]
    • [Бесплатный сборник инструментов DDoS-атаки]
  • Защита конфиденциальной информации пользователей

      1. Хранить пароли пользователей не в открытом виде, а с добавлением динамического salt.
      1. Если необходимо отобразить номер удостоверения личности или номер мобильного телефона, использовать «*» для замены части символов.
      1. Отображение контактной информации контролируется самим пользователем.
      1. TODO
    • [Какие личные данные включают в себя конфиденциальность?]

    • [В чём заключается конфиденциальность в Интернете?]

    • [Сохранение пароля пользователя]

  • Утечка данных сериализации

    • [Java-утечка данных десериализации: общий анализ использования]
  • Шифрование и дешифрование

    • Симметричное шифрование

      • [Общие алгоритмы симметричного шифрования]
      • DES использует 56-битный ключ, Blowfish использует ключ переменной длины от 1 до 448 бит, AES имеет длину ключа 128, 192 и 256 бит. Ключ DES слишком короткий (всего 56 бит), поэтому алгоритм был заменён на AES, который также имеет аппаратное ускорение и хорошую производительность.
    • Хэш-алгоритмы

      • MD5 и SHA-1 больше не являются безопасными и были заменены. В настоящее время SHA-256 является более безопасным.
      • [Использование хэш-сумм для подписи и HMAC]
    • Асимметричное шифрование 《常见非对称加密算法》

  • RSA, DSA, ECDSA (螺旋曲线加密算法).

    • В отличие от DSA, который может использоваться только для цифровой подписи и не подходит для шифрования данных и их дешифровки, RSA и DSA обладают сопоставимой степенью безопасности, но DSA работает быстрее, чем RSA.
  • 256-битный ключ ECC по уровню безопасности сопоставим с 3072-битным ключом RSA.

《Технология шифрования в блокчейне》 — информация отсутствует.

Серверная безопасность

«Linux: усиление безопасности сервера за 15 шагов» — информация отсутствует.

Безопасность данных

Резервное копирование данных

— информация отсутствует.

Сетевая изоляция

Разделение внутренней и внешней сети

— информация отсутствует.

Использование шлюза доступа

Доступ к главному компьютеру осуществляется через шлюз доступа из внутренней или внешней среды.

«Построение простого брандмауэра» — информация отсутствует.

Авторизация и аутентификация

  • Библиотека знаний об авторизации и аутентификации — информация отсутствует.

RBAC

  • «Авторизация на основе организационных ролей» — информация отсутствует.
  • «Обзор модели авторизации на основе ролей» — информация отсутствует.
  • «Интеграция Spring с Shiro для создания модуля контроля доступа» — информация отсутствует.

OAuth 2.0

  • «Понимание OAuth 2.0» — информация отсутствует.
  • «OAuth 2.0 за одну картинку» — информация отсутствует.

OIDC

  • «Понимание OIDC» — информация отсутствует.

SAML

  • «Понимание SAML» — информация отсутствует.

Двухфакторная аутентификация (2FA)

2FA (Two-factor authentication) используется для усиления процесса аутентификации при входе в систему. Обычно это происходит путём сочетания пароля и мобильного кода подтверждения (или токена, подобного USB-ключу, используемому с интернет-банкингом).

«Руководство по двухфакторной аутентификации (2FA)» — информация отсутствует.

Единый вход (SSO)

  • «Принцип единого входа (SSO) и его простая реализация» — информация отсутствует.
  • CAS — единый вход — информация отсутствует.
  • «Реализация единого входа с помощью Authing» — информация отсутствует.

Популярные открытые фреймворки

Открытые лицензии

  • «Выбор открытой лицензии» — информация отсутствует.
  • «Как выбрать лицензию для открытого программного обеспечения» — информация отсутствует.

Фреймворк логирования

Log4j и Log4j2

  • «Подробное объяснение Log4j» — информация отсутствует.
  • «Практическое использование Log4j2» — информация отсутствует.
  • «Сравнение производительности Log4j1, Logback и Log4j2» — Log4J отличается высокой производительностью в асинхронном логировании.

Logback

  • «Полное объяснение LogBack, включая примеры на Java и настройки» — информация отсутствует.

ORM

  • «Преимущества и недостатки использования фреймворков объектно-реляционного отображения (ORM)» — основная цель использования ORM — повышение эффективности разработки.

MyBatis:

  • «Детальное объяснение механизма кэширования MyBatis» — первый уровень кэша — это кэш уровня SqlSession, данные в котором действительны только в рамках текущего сеанса SqlSession.

Второй уровень кэша является общим для всех мапперов в одном пространстве имён и использует механизм LRU для очистки кэша. Его можно включить с помощью параметра cacheEnabled.

  • «Изучение генератора MyBatis Code» — информация отсутствует.

Веб-фреймворк

— информация отсутствует.

Инструменты

  • «Apache Commons: введение и простое использование» — информация отсутствует.
  • «Google guava: китайский учебник» — информация отсутствует.

Распределённая архитектура

Масштабируемость

  • «Десять лучших масштабируемых архитектур, которые должен знать архитектор» — общая стратегия включает разделение, кэширование и асинхронную обработку.

  • «Разделение данных» — горизонтальное разделение и вертикальное разделение. Использование промежуточного ПО для сегментирования, такого как MySQL Proxy. Применение стратегий сегментирования на основе идентификаторов.

  • «Масштабируемая архитектура больших веб-сайтов» — распределённые сервисы и очереди сообщений.

  • «О масштабируемой архитектуре крупных веб-сайтов (7) — масштабируемая архитектура веб-сайта» — информация отсутствует.

Стабильность и высокая доступность

  • «Системный дизайн: некоторые технические решения для высокодоступных систем» — масштабируемость: горизонтальное и вертикальное масштабирование для предотвращения единичных точек отказа. Изоляция: предотвращение монопольного использования ресурсов одним бизнесом и взаимного влияния между бизнесами. Развязка: снижение затрат на обслуживание и риска связывания, уменьшение зависимостей и взаимосвязей. Ограничение потока: скользящее окно, алгоритм ведра со щелями, алгоритм маркера ведра и другие алгоритмы для обеспечения стабильности системы при внезапных всплесках трафика. Снижение: ресурсы, не являющиеся ключевыми, высвобождаются в экстренных случаях. Приоритет отдаётся обеспечению доступности ключевых сервисов.

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

  • Автоматизированное тестирование: тщательное тестирование помогает уменьшить количество сбоев, вызванных выпуском обновлений.

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

Балансировка нагрузки: аппаратная и программная

Аппаратная балансировка нагрузки

  • «О системах с высокой доступностью»
    • Принципы проектирования: сохранение данных (персистентность), обеспечение высокой доступности сервисов (репликация), достижение абсолютной 100% доступности сложно, цель — максимально возможная доступность, например, 99,999%, что означает всего 5 минут простоя в год.

Программная балансировка нагрузки

Алгоритмы балансировки нагрузки

Ограничение трафика

  • «Обсуждение ограничения трафика в высоконагруженных системах»
    • Счётчики: использование скользящего окна для контроля количества запросов за определённый период времени, простой и грубый метод.
    • Алгоритм «дырявого ведра»: ведро фиксированной ёмкости, при переполнении запросы отбрасываются, широко используется.
    • Алгоритм токенов: ведро фиксированной ёмкости заполняется токенами с определённой скоростью, перед обработкой запроса необходимо получить токен, если токены недоступны, запрос отбрасывается или помещается в очередь ожидания, скорость добавления токенов можно контролировать для управления общей скоростью. Guava RateLimiter реализует алгоритм токенов.
    • Ограничение трафика с помощью модулей Nginx, таких как limit_req.

Обеспечение отказоустойчивости на уровне приложений

  • «Инструменты для предотвращения каскадных сбоев: Hystrix»

    • Причины каскадных сбоев включают аппаратные сбои, программные ошибки, повторные попытки, увеличивающие нагрузку, и массовые запросы пользователей.
    • Меры противодействия каскадным сбоям включают ограничение трафика, улучшение стратегий кэширования (предварительная загрузка кэша, переход от синхронных вызовов к асинхронным), автоматическое масштабирование и снижение нагрузки.
    • Основные принципы работы Hystrix:
      • Изоляция ресурсов: Hystrix разделяет каждый зависимый сервис на отдельный пул потоков, предотвращая распространение сбоев между сервисами.
      • Переключатель состояния отказа: состояние сервиса = количество неудачных запросов / общее количество запросов, контролируется порогом и окном скольжения.
      • Шаблон команды: реализация логики вызова сервиса через наследование HystrixCommand.
  • «Проблемы с кэшем: проникновение, поломка и лавины»

  • «Решения для проблем с кэшем» Основные стратегии:

    • Для мгновенной замены: использование блокировок на одном сервере.
    • Использование распределённых блокировок.
    • Отсутствие истечения срока действия.

Отказоустойчивость между дата-центрами

  • «Опыт развёртывания в нескольких дата-центрах»

    • Синхронизация данных осуществляется с помощью собственного промежуточного ПО.
  • «Практика обеспечения отказоустойчивости между дата-центрами»

    • Следует учитывать задержки, вызванные множественными вызовами между дата-центрами, которые могут значительно увеличить время отклика.
    • Не рекомендуется полагаться на двустороннюю запись данных, необходимо иметь автоматическую систему синхронизации.
    • Данные никогда не должны находиться в условиях высоких задержек и плохого сетевого качества, следует уделять внимание вопросам качества синхронизации данных.
    • В зависимости от важности, бизнес-процессы разделяются на основные и второстепенные, а также может рассматриваться только основной процесс.
    • При рассмотрении географического распределения пользователей, особенно в играх и почтовых сервисах, может быть полезно рассмотреть возможность разделения пользователей по регионам.
    • Необходимо контролировать размер сообщений между дата-центрами и стремиться к их уменьшению.
    • Рассмотрите возможность использования контейнеров Docker для виртуализации, что повысит гибкость динамической диспетчеризации.
  • «Технологии обеспечения отказоустойчивости и опыт построения»

Процесс тестирования на отказ

Плавный запуск

  • Плавное перезапуск приложений:
  1. Потоки трафика (например, VIP-уровень),
  2. Очистка данных (если есть),
  3. Перезапуск приложения.

Расширение базы данных

Разделение чтения и записи

Сегментирование

  • «Вопросы, требующие внимания при сегментировании баз данных» Промежуточное ПО: лёгкое (sharding-jdbc, TSharding), тяжёлое (Atlas, MyCAT, Vitess и др.).
    • Проблемы: транзакции, объединения, миграция, расширение, идентификаторы, разбиение на страницы и т. д.
    • Компенсация транзакций: проверка данных на соответствие; сравнение с журналом; периодическое согласование с исходными данными и т. п.
    • Стратегии сегментирования: диапазон значений, модуль, дата и т. п.

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

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

Введение

Отмена

Обновления

Пока нет обновлений

Участники

все

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

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