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

OSCHINA-MIRROR/gavincfm-architect-all

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 110 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 23:15 08135d9

Последний раз документ обновлялся 9 апреля 2018 года.

Архитектура бэкенда

  • Структуры данных

    • Очередь
    • Множество
    • Списки и массивы
    • Словарь и ассоциативный массив
    • Дерево
      • Двоичное дерево
      • Полное двоичное дерево
      • Сбалансированное двоичное дерево
      • Красно-чёрное дерево
      • B-, B+ и B* деревья
  • Популярные алгоритмы

    • Алгоритмы сортировки и поиска
      • Сортировка выбором
      • Пузырьковая сортировка
      • Вставка сортировки
      • Быстрая сортировка
      • Пирамидальная сортировка (сортировка кучей)
      • Подсчётная сортировка
      • Блочная сортировка
      • Основополагающая сортировка
      • Бинарный поиск
      • Инструменты для сортировки в Java
    • Жадные алгоритмы
    • Рекурсивные алгоритмы
    • Обрезка дерева
    • Динамическое программирование
    • Простой байесовский классификатор
    • Рекомендательные алгоритмы
  • Параллелизм Непрерывная интеграция

  • Jenkins;

  • Разделение сред.

Автоматизация управления

  • Ansible;
  • puppet;
  • chef.

Тестирование

  • теория TDD;
  • модульное тестирование;
  • нагрузочное тестирование;
  • тестирование всей цепочки;
  • A/B-тестирование.

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

  • KVM;
  • Xen;
  • OpenVZ.

Контейнерные технологии

  • Docker.

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

  • OpenStack.

DevOps.

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

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

  • веб-сервер;
    • Nginx;
    • OpenResty;
    • Apache Httpd;
    • Tomcat;
    • Jetty.

Кэширование

  • локальное кэширование;
  • клиентское кэширование:
    • Memcached;
    • Redis;
    • Tair.

Очередь сообщений. Сообщения: RabbitMQ, RocketMQ, ActiveMQ, Kafka, Redis (сообщения), ZeroMQ.

Расписание: однокомпьютерное расписание, распределённое расписание.

RPC: Dubbo, Thrift, gRPC.

Промежуточное ПО базы данных: Sharding Jdbc.

Система журналов: сбор журналов.

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

API-шлюз.

Сеть: протокол, модель сети.

Протокол: TCP/IP, HTTP, HTTP2.0, HTTPS.

Модель сети: Epoll, NIO, kqueue.

Рамки.

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

База данных: MySQL. Принцип

Оптимизация

  • NoSQL
    • MongoDB
    • Hbase

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

Производительность * Методы оптимизации производительности * Оценка ёмкости * CDN-сеть * Пул соединений * Оптимизация производительности

Большие данные * Потоковые вычисления * Storm * Flink * Kafka Stream * Сценарии применения * Hadoop * HDFS * MapReduce * Yarn * Spark

Безопасность * Веб-безопасность * XSS * CSRF * SQL-инъекция * Скрипт-инъекции * Сканеры уязвимостей * CAPTCHA * Защита от DDoS-атак Шифрование и дешифрование

  • Симметричное шифрование.
  • Хеш-алгоритмы.
  • Асимметричное шифрование.

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

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

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

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

  • Разделение внутренней и внешней сети.
  • Брандмауэр-шлюз.

Авторизация

  • RBAC.
  • OAuth 2.0.

Часто используемые открытые исходные коды

  • Открытые лицензии.
  • Фреймворк логирования.
  • Log4j, Log4j2.
  • Logback.
  • ORM.
  • Сетевые фреймворки.
  • Веб-фреймворки.
  • Инструментальные фреймворки.

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

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

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

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

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

Управление сервисами

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

  • Маршрутизация сервисов — процесс направления запросов к определённым сервисам. Маршрутизация обеспечивает балансировку нагрузки и отказоустойчивость системы.

Распределённая согласованность

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

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

  • Алгоритмы обеспечения согласованности — методы, используемые для поддержания согласованного состояния данных в распределённой системе. К ним относятся Paxos, Zab, Raft и Gossip.

    • Paxos — алгоритм консенсуса, который позволяет достичь согласия между участниками распределённой системы.
    • Zab — алгоритм, используемый в Apache ZooKeeper для обеспечения согласованности данных.
    • Raft — ещё один алгоритм консенсуса, похожий на Paxos.
    • Gossip — метод распространения информации в распределённой системе, основанный на обмене сообщениями между узлами.
  • Двухфазная фиксация и многофазная фиксация — подходы к выполнению транзакций в распределённой среде. Двухфазная фиксация предполагает выполнение транзакции в два этапа: подготовка и фиксация. Многофазная фиксация позволяет выполнять транзакции более гибко, разбивая их на несколько этапов.

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

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

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

  • TCC (Try/Confirm/Cancel) — гибкий подход к управлению транзакциями в распределённых системах. TCC позволяет отменить транзакцию, если она не может быть успешно завершена.

Распределённые файловые системы

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

Генерация уникальных идентификаторов

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

  • Глобальные уникальные идентификаторы — идентификаторы, которые уникальны во всей системе. Они могут быть основаны на времени или других параметрах.

Алгоритмы генерации уникальных идентификаторов

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

Проектирование и разработка

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

  • DDD (Domain-driven Design) — подход к проектированию, который фокусируется на моделировании предметной области. DDD помогает создать систему, которая отражает реальные бизнес-процессы и обеспечивает гибкость и расширяемость.

    • CQRS (Command and Query Responsibility Segregation) — принцип разделения операций на команды и запросы. Команды изменяют состояние системы, а запросы возвращают информацию о состоянии. CQRS позволяет оптимизировать обработку команд и запросов.

    • Модели анемичной и богатой предметной области — два подхода к моделированию предметной области в DDD. Анемичная модель использует простые объекты-значения, а богатая модель включает в себя сложные бизнес-правила и логику.

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

Проектный менеджмент:

  • Архитектурный надзор — процесс проверки соответствия системы требованиям к её архитектуре.
  • Рефакторинг — изменение внутренней структуры программы без изменения её внешнего поведения.
  • Стандарты кодирования — набор правил и рекомендаций, которые определяют стиль написания кода в проекте.
  • RUP (Rational Unified Process) — методология разработки программного обеспечения, основанная на итеративном подходе.
  • Доска задач — инструмент для визуализации и управления задачами проекта.
  • SCRUM — методология управления проектами, которая фокусируется на коротких итерациях работы.
  • Экстремальное программирование (XP) — гибкая методология разработки, которая делает упор на простоту, коммуникацию и обратную связь.
  • Гибкая разработка (Agile) — подход к управлению проектами, который фокусируется на гибкости, сотрудничестве и адаптации к изменениям.
  • Парное программирование — метод разработки программного обеспечения, при котором два программиста работают вместе за одним компьютером.

Общие термины бизнеса:

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

Информация:

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

Технические ресурсы:

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

Очередь

  • «Java-очередь — queue подробный анализ».

    • Неблокирующая очередь: ConcurrentLinkedQueue (безграничная потокобезопасная), использует CAS-механизм.
    • Блокирующая очередь: ArrayBlockingQueue, LinkedBlockingQueue, DelayQueue, PriorityBlockingQueue, использует механизм блокировки.
  • «LinkedList, ConcurrentLinkedQueue, LinkedBlockingQueue сравнительный анализ».

Коллекция

  • «Подробное описание Java Set Collection».

Списки и массивы

  • «Детальное объяснение Java Collection — что такое List».

Словари и ассоциативные массивы

  • «Подробное объяснение Java Map — использование, обход, сортировка, часто используемые API и т. д.».

Деревья

Бинарные деревья Каждое звено имеет максимум два конечных звена.

  • «Бинарное дерево».

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

  • «Полное бинарное дерево».

Балансированные бинарные деревья Абсолютное значение разницы высот между двумя поддеревьями не превышает 1, и оба поддерева также являются сбалансированными бинарными деревьями.

  • «Лёгкий разговор о структуре данных — сбалансированное бинарное дерево».

Красные и чёрные деревья Добавление этапа, затем левое или правое вращение для достижения баланса.

  • «Самое лёгкое для понимания красное и чёрное дерево».

B-, B+ и B деревья* MySQL основан на B+-дереве для организации кластеризованных индексов таблиц.

  • «Объяснение B-, B+ и B* деревьев».
  • «Сравнение преимуществ и недостатков B-, B+ и B* деревьев».

Общие алгоритмы

Алгоритмы сортировки и поиска

  • «Общие алгоритмы сортировки и соответствующие им сложность времени и сложность пространства».

Сортировка и поиск

  • «Общий алгоритм сортировки и соответствующий ему сложность времени и сложность пространства».

Выбор сортировки

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

Пузырьковая сортировка

  • «Два способа пузырьковой сортировки». Обмен соседних элементов. Сложность времени O(n²).

Вставка сортировки

  • «Резюме алгоритма сортировки — вставка сортировки».

Быстрая сортировка

  • «Сидя на унитазе и глядя на алгоритм: быстрая сортировка». Разделение на две части, где одна часть больше другой.

Объединение сортировки

  • «Графическое объяснение алгоритмов сортировки (четыре) — объединение сортировки». Разделить и лечить отдельно, а затем объединить.

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

  • «Графическое объяснение алгоритма сортировки (три) — пирамидальная сортировка».

Подсчётная сортировка Аналогично процессу сортировки по сегментам, разница заключается в количестве сегментов.

  • «Подсчётная и сегментная сортировка».

Сегментная сортировка Разделите [0,1) на n одинаковых по размеру поддиапазонов, называемых корзинами. Сортировка каждой корзины отдельно, а затем обход каждой корзины.

  • «[Самый быстрый и простой вид сортировки] — сегментная сортировка».
  • «Алгоритм сортировки (три): подсчётная сортировка и сегментная сортировка».

Радиксная сортировка Сортировка по разрядам, десяткам, сотням и так далее.

  • «Серия алгоритмов сортировки: радиксная сортировка».
  • «Радиксная сортировка».

Двоичный поиск Требуется, чтобы сортируемый список был упорядочен. Сложность по времени O(logN).

  • «Двоичный поиск (реализация Java)».
  • «Реализация двоичного поиска в Java — два метода». Пока + рекурсия.

Инструменты сортировки Java

  • «Анализ реализации Arrays.sort и Collections.sort». На основе слияния.

Жадные алгоритмы

  • «Основы жадных алгоритмов».
  • «Обычные алгоритмы и сценарии проблем — жадные алгоритмы».

Рекурсивные алгоритмы

  • «Пять основных алгоритмов: рекурсивный метод».

Обрезка алгоритма

  • «α-β обрезка алгоритма».

Динамическое программирование

  • «Подробное объяснение динамического программирования — объяснение динамического программирования от Цзоу Бо».
  • «Понимание динамического программирования».

Алгоритм ветвей и границ

  • «Ветвь и граница».

Простой байесовский

  • «Байесовское умозаключение и его применение в Интернете». 推荐算法

  • 《推荐系统综述》 — это статья, в которой рассматриваются различные аспекты рекомендательных систем. В ней обсуждаются основные принципы работы рекомендательных алгоритмов, их классификация и применение.

  • «TOP 10 открытых рекомендательных систем» — статья о десяти популярных открытых рекомендательных системах. В статье описываются их особенности, преимущества и недостатки.

并发

Многопоточность

В статье «40 проблем многопоточности Java» рассматриваются 40 распространённых проблем, связанных с использованием многопоточности в Java. В статье приводятся примеры кода, иллюстрирующие эти проблемы, и предлагаются способы их решения.

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

Статья «Параллельное программирование на Java: безопасность потоков и механизмы её обеспечения» посвящена безопасности потоков в параллельном программировании на Java. В статье рассматриваются основные концепции безопасности потоков, а также механизмы, которые используются для её обеспечения в Java.

Согласованность, транзакции

«Свойства транзакций ACID» — это статья о свойствах транзакций в базах данных. В статье подробно рассматриваются свойства атомарности, согласованности, изолированности и долговечности (ACID) и их значение для обеспечения надёжности и целостности данных.

«Уровни изоляции транзакций» — статья об уровнях изоляции транзакций в базах данных. В статье обсуждаются четыре уровня изоляции транзакций, их характеристики и влияние на производительность и целостность данных.

Блокировка

Типы блокировок в Java

В статье «Классификация блокировок в Java» приводится классификация блокировок, используемых в Java для управления доступом к ресурсам. Описываются различные типы блокировок и их применение.

Синхронизация и AQS

Статья «Синхронизация в Java и AQS» рассматривает синхронизацию как механизм обеспечения взаимного исключения доступа к общим ресурсам в Java. Также описывается структура AbstractQueuedSynchronizer (AQS), которая используется для реализации синхронизации.

Семафоры

Статья «Семафор в Java» описывает семафоры как средство управления доступом к ограниченным ресурсам. Рассматриваются методы acquire() и release(), используемые для получения и освобождения ресурсов.

Сравнение Mutex и Semaphore

В статье «Mutex vs Semaphore в Java» проводится сравнение этих двух механизмов синхронизации. Описывается разница между ними и области применения каждого из них.

Справедливые и несправедливые блокировки

Статья «Справедливые и несправедливые блокировки» объясняет разницу между этими двумя типами блокировок. Справедливая блокировка обеспечивает последовательное выполнение запросов от разных потоков, в то время как несправедливая блокировка может привести к неравномерному распределению ресурсов между потоками.

Оптимистическая и пессимистическая блокировки

В статье «Оптимистические и пессимистические блокировки в MySQL» рассматривается использование оптимистических и пессимистических блокировок при работе с данными в MySQL. Описываются преимущества и недостатки каждого подхода.

Проблема ABA

Статьи «Проблема ABA в Java CAS» и «Решение проблемы ABA в Java» рассматривают проблему ABA, которая может возникнуть при использовании алгоритма Compare-and-Swap (CAS) в Java. Предлагаются способы решения этой проблемы.

Copy-on-Write контейнеры

В статьях «Контейнеры Copy-On-Write в Java» и «Использование контейнеров Copy-On-Write для оптимизации производительности» описывается концепция Copy-on-Write и её применение для создания эффективных структур данных в Java. Объясняется, как эта техника позволяет избежать копирования данных при изменении объектов.

RingBuffer

В статье «Реализация RingBuffer без использования блокировок» предлагается реализация кольцевого буфера без использования явных блокировок. Это позволяет повысить производительность за счёт уменьшения накладных расходов на синхронизацию.

Реентерабельные и нереентерабельные блокировки

В статье «Реентерабельные и нереентерабельные блокировки в Java» объясняется разница между этими типами блокировок. Реентерабельная блокировка позволяет одному и тому же потоку повторно получать блокировку после её освобождения, что может быть полезно в некоторых ситуациях.

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

Основы операционных систем

В статье «Основы операционных систем» даётся обзор основных концепций и принципов работы операционных систем. Обсуждаются такие темы, как управление процессами, памятью, устройствами и ресурсами.

Процессы

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

Потоки

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

Сопрограммы

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

Linux

В статье «Linux команды» представлен обзор основных команд Linux. Описаны их функции и способы использования для управления системой.

Проектирование

23 шаблона проектирования

В статье «23 шаблона проектирования» приводится обзор 23 наиболее распространённых шаблонов проектирования. Описываются их цели, принципы и примеры использования.

Цепочка обязанностей

В статье «Шаблон проектирования «Цепочка обязанностей»» описывается этот шаблон, который позволяет передавать запросы по цепочке обработчиков. Описываются его преимущества и ограничения.

MVC

В статье «MVC-архитектура» обсуждается модель-представление-контроллер (MVC) как популярный архитектурный паттерн. Описываются роли модели, представления и контроллера и их взаимодействие.

IoC

В статье «Инверсия управления (IoC)» объясняется концепция инверсии управления и её роль в разработке программного обеспечения. Описываются принципы IoC и его применение в различных контекстах.

AOP

В статье «Аспектно-ориентированное программирование (AOP)» рассматривается AOP как метод разделения логики приложения на отдельные аспекты. Описываются основные понятия AOP и его реализация в Spring Framework. Применение

Spring AOP — это структура аспектно-ориентированного программирования (АОП) для платформы Java. Spring AOP определяет принципы обработки АОП-агентов: если целевой объект реализует интерфейс, Spring AOP будет использовать динамический прокси JDK для создания АОП-агента; если целевой объект не реализует интерфейс, Spring AOP использует CGLIB для создания агента АОП.

UML

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

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

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

Закон Конвея

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

Операции, мониторинг и техническая поддержка

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

Регулярный мониторинг

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

Мониторинг и оповещение

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

Инструменты мониторинга командной строки

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

APM — Application Performance Management — управление производительностью приложений. Это набор методов, инструментов и практик, используемых для мониторинга, анализа и оптимизации производительности приложений и сервисов.

Dapper — система отслеживания, разработанная Google для управления производительностью больших распределённых систем. Dapper предоставляет информацию о состоянии системы, производительности и использовании ресурсов.

Открытые инструменты APM

Существует несколько открытых инструментов APM, таких как Pinpoint, SkyWalking, Zipkin и CAT. Эти инструменты предоставляют аналогичные функции Dapper, но могут иметь некоторые отличия в реализации и функциональности.

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

Непрерывная интеграция (CI) — практика разработки программного обеспечения, при которой изменения кода автоматически собираются, тестируются и развёртываются. Непрерывная интеграция позволяет сократить время на разработку и повысить качество кода.

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

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

Ansible — инструмент автоматизации с открытым исходным кодом, который упрощает настройку и управление серверами. Ansible использует декларативный подход к автоматизации, что делает его простым в изучении и использовании.

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

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

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

TDD (Test-Driven Development) — методология разработки программного обеспечения, основанная на написании тестов перед написанием кода. TDD помогает обеспечить качество кода и упростить процесс рефакторинга.

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

TestNG — фреймворк для тестирования Java-кода, который является альтернативой JUnit. TestNG предоставляет расширенные функции, такие как параллельное выполнение тестов, группировка тестов и параметризация тестов.

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

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

Apache AB — инструмент для нагрузочного тестирования веб-серверов и других сетевых служб. Apache AB позволяет имитировать одновременное обращение большого количества клиентов к серверу и измерять его производительность.

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

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

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

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

  • Виртуальные технологии: OpenVZ, Xen, KVM. Преимущества и недостатки.
    • KVM
      • Подробное объяснение KVM, очень подробное и глубокое, классика.
      • Установка виртуальной машины с помощью KVM: инструкция.
    • Xen
      • Подробное описание основных принципов виртуализации Xen.
    • OpenVZ
      • Руководство по быстрому старту работы с OpenVZ — открытым Linux-контейнером.

Контейнеры

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

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

  • OpenStack
    • Структурный анализ OpenStack.

DevOps

  • Что такое DevOps? Объясняем за одну минуту.
  • Подробный разбор DevOps.

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

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

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

Веб-сервер

  • Nginx
    • Основы обучения Nginx: сравнение многопроцессорной обработки и Apache.
    • Сравнение Nginx и Apache, а также их преимущества и недостатки.
    • Nginx использует асинхронный неблокирующий механизм обработки событий для обеспечения высокой параллельной обработки. Apache выделяет отдельный поток для каждого запроса, что сильно загружает системные ресурсы.
    • События подходят для сервисов с интенсивным использованием ввода-вывода (Nginx), в то время как несколько процессов или потоков лучше подходят для сервисов, интенсивно использующих процессор (Apache). Поэтому Nginx подходит для обратного проксирования, но не для использования в качестве веб-сервера.
  • OpenResty
    • Официальный сайт.
    • Введение в OpenResty.
    • Благодаря модулям Lua можно разрабатывать на Nginx.
  • Apache Httpd
    • Официальный сайт.
  • Tomcat
    • Принцип работы и процесс запроса в Tomcat.
    • Архитектура сервера Tomcat: подробное объяснение.
    • Выбор между JBoss и Tomcat для Java-приложений.
    • Tomcat — это облегчённый контейнер Serverlet без полной реализации спецификаций JEE (например, персистентность и обработка транзакций), но эти функции могут быть заменены другими компонентами, такими как Spring.
    • Jboss реализует все функции JEE, является открытым исходным кодом и бесплатным, но документация платная.
    • Варианты оптимизации Tomcat.
    • Запуск NIO или APR; настройка пула потоков; отключение AJP-соединения (архитектура Nginx + Tomcat не требует AJP).
    • AJP и HTTP: сравнение и анализ.
    • Соединение через порт 8009 используется для снижения нагрузки на передний сервер (например, Apache) и повышения производительности за счёт длительного соединения.
    • При высокой параллельности AJP предпочтительнее HTTP.
  • Jetty
    • Как работает Jetty и сравнение с Tomcat.
    • Преимущества Jetty перед Tomcat.
    • В архитектуре Jetty проще, чем Tomcat.
    • Производительность Jetty и Tomcat схожа, но Jetty по умолчанию использует NIO для завершения обработки запросов ввода-вывода, что даёт преимущество перед Tomcat, который по умолчанию использует BIO. Tomcat подходит для обработки небольшого количества очень загруженных соединений, но имеет низкую производительность при обработке статических ресурсов.

Кэш

  • Стратегии истечения срока действия кэша (различия между FIFO, LRU и LFU).

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

  • HashMap как локальный кэш.

  • EhCache как локальный кэш.

    • Кэширование в куче, вне кучи и на диске (трёхуровневое кэширование).
    • Настройка размера кэша.
    • Истечение срока действия на основе времени, частоты и других стратегий.
  • Guava Cache как локальный кэш.

    • Простой и лёгкий, без кэширования вне кучи и на диске. Клиентский кэш
  • Браузерный кэш. В основном используется параметр Cache-Control.

  • H5 и мобильный WebView: анализ и практика механизмов кэширования.

Memcached

  • Memcached: учебное пособие.
  • Глубокое понимание принципов работы Memcached. Используется технология мультиплексирования для повышения параллелизма. Slab-алгоритм распределения памяти: по умолчанию размер блока памяти, выделяемого под Slab, составляет 1 МБ. После выделения Slab делится на блоки одинакового размера (chunk), которые используются для хранения записей в кэше. Размер chunk по умолчанию увеличивается в 1,25 раза. Преимущество заключается в том, что не требуется часто запрашивать память, повышается эффективность ввода-вывода, а недостаток — в некотором расходе памяти.
  • Принцип работы программного обеспечения Memcached.
  • Технология Memcache: введение, использование, хранение, алгоритм, оптимизация, коэффициент попадания.
  • Всесторонний анализ Memcached.

Redis

  • Redis: учебное пособие.
  • Принципы работы Redis на нижнем уровне. Используются ziplist для хранения списков и skiplist (пропускаемые списки) для хранения упорядоченных наборов объектов. Поиск начинается с верхнего уровня. Сложность времени и красно-чёрные деревья сопоставимы, реализация проста, без блокировки, хорошая параллельность.
  • Способы сохранения данных Redis. RDB (RDB): резервное копирование снимков через определённые промежутки времени, обычно используется для аварийного восстановления. Преимущества: резервное копирование выполняется через процесс fork, не влияет на основной процесс, скорость восстановления больших наборов данных при использовании RDB выше, чем при использовании AOF. Недостатки: потеря данных. AOF (AOF): сохранение журнала операций. Преимущества: меньше потери данных при восстановлении, недостатки: большой файл, медленное восстановление. Можно использовать оба метода одновременно.

Tair

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

Типы хранилищ:

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

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

  • Очередь сообщений: изучение push/pull модели и ActiveMQ и JMS. RabbitMQ по умолчанию использует push-модель (также поддерживает pull-модель). Kafka по умолчанию использует pull-модель. Push-режим: преимущество заключается в том, чтобы максимально быстро отправлять сообщения потребителям, недостаток — если потребитель обрабатывает медленнее, буфер потребителя может переполниться. Pull-режим: преимущество состоит в том, что потребитель может получать сообщения в соответствии со своей способностью обработки, недостаток — увеличение задержки сообщений.
  • Сравнение Kafka, RabbitMQ, RocketMQ и других систем обмена сообщениями — производительность отправки сообщений и различия.

Шина сообщений

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

  • Шина сообщений против очереди сообщений.

RabbitMQ

Поддерживает транзакции, обе модели push и pull поддерживаются, подходит для сценариев, требующих надёжной передачи сообщений.

  • Применение и основные принципы RabbitMQ.
  • Очередь сообщений RabbitMQ.
  • Механизм подтверждения сообщений RabbitMQ (транзакция + подтверждение).

RocketMQ

Реализация на Java, поддерживает обе модели push и pull, пропускная способность ниже, чем у Kafka. Может гарантировать порядок сообщений.

  • RocketMQ: быстрое начало работы.

ActiveMQ

Чистая реализация Java, совместимая с JMS, может быть встроена в приложения Java.

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

Kafka

Высокая пропускная способность, использует модель pull. Подходит для сценариев ввода-вывода, таких как синхронизация журналов.

  • Официальный веб-сайт.
  • Сравнительный анализ различных систем очередей сообщений, рекомендуемый многими людьми, отличный текст!
  • Механизмы разделов Kafka.

Использование Redis для отправки сообщений

Производитель, потребитель полностью клиентское поведение, список и реализация модели pull, блокировка ожидания с использованием команды blpop.

  • Изучение Redis: использование Redis в качестве очереди сообщений.

ZeroMQ

TODO 触发器按时启动原理

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

Разъяснение принципа работы Quartz и разбор исходного кода

Статья посвящена разбору принципа работы Quartz. Quartz — это система планирования заданий, которая широко используется в Java-проектах. Автор статьи подробно разбирает исходный код Quartz, объясняет принцип работы системы и отвечает на часто задаваемые вопросы.

Распределённое планирование задач

Автор статьи рассказывает о распределённых системах планирования задач. Он приводит список популярных систем, таких как OpenCron, LTS, XXL-JOB, Elastic-Job, Uncode-Schedule и Antares. Также автор описывает принципы работы этих систем и их особенности.

RPC

В этой статье описывается концепция RPC (Remote Procedure Call) и её реализация. Автор рассказывает о роли сервера, клиента и реестра в системе RPC. Также он приводит примеры популярных фреймворков для реализации RPC, таких как gRPC, Thrift и Dubbo.

Dubbo

На официальном сайте Apache Dubbo можно найти информацию о проекте. В статье на китайском языке приводится краткое описание принципов работы Dubbo.

Thrift

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

gRPC

Сайт gRPC содержит информацию о фреймворке. Статья на русском языке рассказывает об основных принципах работы gRPC.

Sharding Jdbc

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

Сбор журналов

Статьи рассказывают о различных подходах к сбору и анализу журналов. Авторы описывают свои проекты и решения, которые они использовали.

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

Apollo — это конфигурационный центр от Ctrip. Проект написан на Spring Boot и Spring Cloud. Apollo поддерживает режимы push и pull для обновления конфигурации. Проект также поддерживает несколько языков программирования.

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

Третья статья описывает использование Spring Cloud Config для создания распределённого конфигурационного центра.

Четвёртая статья рассказывает о новых функциях Servlet 3.0, которые можно использовать для разработки конфигурационных центров.

API-шлюзы

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

Первая статья рассматривает различные аспекты API-шлюзов. Вторая статья рассказывает о предпосылках появления API-шлюзов и их архитектуре. Третья статья описывает, как использовать Zuul для создания API-шлюза. Четвёртая статья представляет Kong — ещё один популярный API-шлюз.

Сетевые протоколы

TCP/IP — это набор протоколов для обмена данными между компьютерами. Первая статья подробно описывает работу TCP/IP.

HTTP — это протокол передачи гипертекста. Вторая статья подробно объясняет работу HTTP.

HTTP/2 — это обновлённая версия HTTP, которая обеспечивает более быструю передачу данных. Третья статья подробно анализирует работу HTTP/2.

HTTPS — это защищённая версия HTTP. Четвёртая и пятая статьи объясняют работу HTTPS и предоставляют информацию о бесплатных SSL-сертификатах.

Модели ввода-вывода

Существует пять моделей ввода-вывода: блокирующая, неблокирующая, мультиплексирование ввода-вывода, управляемая событиями и асинхронная. Первые четыре модели являются синхронными, а последняя — асинхронной.

Три режима работы веб-сервера: prefork (многопроцессный), worker (поточный) и event (управляемый событиями).

Сравнение select, poll и epoll

Select, poll и epoll — это методы ожидания событий ввода-вывода. У каждого из них есть свои преимущества и недостатки. Select имеет ограничение на количество открытых файловых дескрипторов. Poll использует связанный список, поэтому у него нет ограничения на количество дескрипторов. Epoll использует красно-чёрные деревья, что обеспечивает лучшую производительность при большом количестве соединений.

NIO и Reactor/Proactor

NIO (New Input/Output) — это модель ввода-вывода в Java, которая позволяет работать с несколькими каналами одновременно. Reactor и Proactor — это две модели обработки событий, которые используются в NIO. Reactor основан на событиях, а Proactor — на потоках. Инструменты и их использование

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

Ссылка

Google Guava: китайское учебное пособие

Ссылка

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

  • Расширяемость архитектуры

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

    • Горизонтальное разделение + вертикальное разделение.
    • Использование промежуточного программного обеспечения для разделения, например MySQL Proxy.
    • Применение стратегии разделения для разделения данных, например, с использованием идентификатора по модулю.
  • Как реализовать расширяемость в большой веб-архитектуре

    • Распределённые сервисы + очереди сообщений.
  • Большая веб-архитектура (7): веб-архитектура с расширяемостью

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

  • Системный дизайн: некоторые технические решения для высокодоступных систем

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

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

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

  • Сравнение балансировщиков нагрузки Nginx и F5

    • Основное сравнение проводится с F5.
  • Программно-аппаратные балансировщики нагрузки: что вы знаете?

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

  • Несколько алгоритмов балансировки нагрузки

    • Круговое обслуживание, взвешенное обслуживание, распределение нагрузки, минимальное соединение, качество обслуживания.
  • DNS-балансировка нагрузки

    • Простота настройки, медленное обновление.
  • Nginx-балансировщик нагрузки

    • Лёгкий и компактный, низкая стоимость обучения; подходит в основном для веб-приложений.
  • Использование LVS+Keepalived для балансировки нагрузки

    • Сложная настройка, поддерживает только до 4 уровней, высокая производительность.
  • HAProxy: подробное руководство

    • Поддерживает до семи уровней (например, HTTP), имеет широкий спектр функций и хорошую производительность.
  • Haproxy+Keepalived+MySQL для реализации балансировки чтения

    • Основная цель — сбалансировать нагрузку запросов на чтение пользователей.
  • RabbitMQ+Haproxy+Keepalived для создания высокодоступного кластера

Ограничение потока

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

Аварийное восстановление на уровне приложений

  • Предохранительные меры против лавины: Hystrix, инструмент для аварийного отключения

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

    • Основные стратегии: мгновенный сбой при истечении срока действия: использование блокировки на одном компьютере; использование распределённой блокировки; отсутствие истечения срока действия;
    • Горячие данные: отдельное хранение горячих данных; использование локального кеша; разделение на несколько под-ключей;

Аварийное восстановление между центрами обработки данных

  • «Иное местоположение, двойная активность»: опыт развёртывания между центрами обработки данных

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

    • Обратите внимание на проблему задержки, многократные вызовы между центрами обработки данных могут значительно увеличить задержку.
    • Строительство выделенных линий между центрами обработки данных часто приводит к проблемам, уделяйте внимание вопросам эксплуатации и программирования.
    • Не полагайтесь исключительно на программирование для двойной записи данных, разработайте план автоматической синхронизации.
    • Данные никогда не должны находиться в условиях высокой задержки и плохой сети, учитывайте проблемы качества синхронизации данных.
    • Нельзя полагаться на данные программы для двойной записи, необходимо иметь план автоматической синхронизации.
    • Если позволяет бизнес, рассмотрите возможность разделения на зоны, особенно в играх и почтовых службах.
    • Контролируйте размер сообщения между центрами обработки данных, чем меньше, тем лучше.
    • Подумайте об использовании технологии виртуализации контейнеров Docker для повышения динамической способности планирования.
  • Аварийное восстановление и построение опыта

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

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

Процесс аварийного восстановления

  • Управление зависимостями, серое развёртывание, аварийное восстановление, система аварийного восстановления электронной коммерции Alibaba: проектирование и практика
    • Общие сценарии отказов.
    • Примеры: планирование, реализация, воспроизведение отказов, система аварийного восстановления для электронной коммерции, оптимизация параметров, оптимизация параметров, аварийные ситуации, совместные учения.

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

  • Идея плавного запуска: сначала поток VIP-уровня, затем очистка данных (если есть), наконец, перезапуск приложения.

  • JVM безопасное завершение работы (как изящно закрыть java-сервис)

    • Рекомендуется использовать System.exit и Kill SIGTERM; не рекомендуется kill-9; зарегистрировать хук завершения работы с помощью Runtime.addShutdownHook. 《常见Java应用如何优雅关闭》

Базы данных: расширение

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

    • В статье «Mysql主从方案的实现» рассказывается о реализации основного и дополнительного серверов MySQL.

    • Статья «搭建MySQL主从复制经典架构» описывает классическую архитектуру репликации MySQL с основным и дополнительным серверами.

    • «Haproxy+多台MySQL从服务器(Slave) 实现负载均衡» — статья о том, как реализовать балансировку нагрузки с помощью Haproxy и нескольких дополнительных серверов MySQL.

    • «DRBD+Heartbeat+Mysql高可用读写分离架构» — в статье описывается архитектура с высокой доступностью для разделения чтения и записи с использованием DRBD, Heartbeat и MySQL. DRBD обеспечивает репликацию дисков, предотвращая проблемы с единственной точкой отказа.

    • «MySQL Cluster 方式» — статья об архитектуре высокой доступности MySQL с использованием кластера MySQL.

  • Секционирование

    • «分库分表需要考虑的问题及方案» — статья рассматривает проблемы, которые необходимо учитывать при секционировании баз данных, такие как транзакции, объединения, миграция, масштабирование, идентификаторы и разбиение на страницы. Также обсуждаются методы компенсации транзакций, стратегии секционирования по диапазонам значений, хешированию или датам, а также количество секций в зависимости от размера базы данных.

    • «MySql分表和表分区详解» — статья подробно объясняет разделение таблиц и секций MySQL. Разделение секций является внутренним механизмом MySQL, который прозрачен для клиента, данные хранятся в разных файлах, но внешне это выглядит как одна таблица. Разделение таблиц подразумевает создание отдельных физических таблиц, и клиент должен управлять маршрутизацией между ними.

Управление сервисами

  • Регистрация и обнаружение сервисов

    • «永不失联!如何实现微服务架构中的服务发现?» — статья описывает, как обеспечить непрерывное соединение в микросервисной архитектуре. Рассматриваются два режима обнаружения сервисов: клиент напрямую запрашивает реестр и самостоятельно выполняет балансировку нагрузки (например, Eureka использует этот подход), и серверный режим, где клиент обращается к балансировщику нагрузки для поиска экземпляров сервисов.

    • «SpringCloud服务注册中心比较:Consul vs Zookeeper vs Etcd vs Eureka» — сравнение различных сервисов регистрации и обнаружения SpringCloud, включая Consul (CA), Zookeeper (CP), Etcd (CP) и Eureka (AP). Автор считает, что Consul лучше всего поддерживает Spring Cloud.

    • «基于Zookeeper的服务注册与发现» — статья рассказывает о преимуществах использования Zookeeper для регистрации и обнаружения сервисов, таких как простота API, использование в Pinterest и Airbnb, поддержка многоязычности и возможность быстрой реакции на изменения конфигурации через механизм Watcher.

  • Маршрутизация сервисов

    • «分布式服务框架学习笔记4 服务路由» — статья представляет принципы маршрутизации сервисов, включая прозрачность, балансировку нагрузки по случайному выбору, циклическому опросу, задержке вызовов сервисов или согласованности хэшей, а также стратегии локального маршрутизации, такие как injvm (предпочтение вызовам внутренних сервисов JVM), innative (использование сервисов на том же физическом устройстве) и поиск ближайших доступных сервисов. Описываются три способа настройки маршрутизации: через единый реестр, локальную конфигурацию и динамическое обновление.

Распределённая согласованность

  • CAP и BASE теории

    • «从分布式一致性谈到CAP理论、BASE理论» — статья объясняет классификацию согласованности как сильную (мгновенную), слабую (достижимую в течение определённого времени) и окончательную (слабая согласованность, достигаемая в конечном итоге). CAP обозначает согласованность, доступность и устойчивость к разделению сети. BASE представляет собой концепцию, согласно которой даже если невозможно достичь строгой согласованности, каждый сервис может выбрать подходящий способ достижения окончательной согласованности в соответствии со своими бизнес-требованиями.
  • Распределённые блокировки

    • «分布式锁的几种实现方式» — статья обсуждает различные подходы к реализации распределённых блокировок, включая основанные на базах данных (простые в использовании, но с проблемами единой точки отказа, производительности и невозможности снятия блокировки), на кэше (неблокирующие и с хорошей производительностью, но могут привести к проблемам с блокировкой) и на Zookeeper (использует упорядоченные временные узлы для реализации блокировок).

    • «基于Zookeeper的分布式锁» — статья предоставляет подробное описание и примеры кода на Java для реализации распределённой блокировки с использованием Zookeeper.

  • Алгоритмы распределённой согласованности

    • Paxos — статьи описывают принципы и применение алгоритма Paxos, его производных (Fast Paxos) и анализ использования в Zookeeper.

    • Zab — статья знакомит с Zab, протоколом согласованности в Zookeeper, обеспечивающим надёжность и доступность данных.

    • Raft — статья исследует Raft как более понятный алгоритм распределённой согласованности.

    • Gossip — статья даёт обзор алгоритма Gossip.

    • Двухфазная и многофазная фиксация — статья сравнивает двухфазную и многофазную фиксацию в контексте распределённых транзакций.

  • Идемпотентность

    • «Разделенные системы — идемпотентный дизайн» — статья раскрывает роль идемпотентности в распределенных системах, обеспечивая, что повторные вызовы не приведут к ошибкам. Обсуждаются методы обеспечения идемпотентности, такие как управление версиями (MVCC), уникальные индексы, пессимистические блокировки, одноразовые токены и порядковые номера.

Решения для распределённой согласованности

  • «Распределенные системные транзакции — решения для согласованности» — статья предлагает шесть подходов к обеспечению согласованности данных в распределённых системах.

Выборы лидера в распределённой системе

  • «Использование Zookeeper для выборов лидера в распределенной системе» — статья демонстрирует, как использовать Zookeeper для выбора лидера в распределённой среде.

Гибкие транзакции TCC (Try/Confirm/Cancel)

  • «Традиционные транзакции и гибкие транзакции» — статья сравнивает традиционные и гибкие транзакции на основе BASE (базовая доступность, гибкое состояние и окончательная согласованность). Предлагаются решения, такие как ведение журнала и компенсация (позитивная или негативная), а также «безблокировочные» подходы и использование оптимистичных блокировок. О том, что архитекторы должны знать об оптимизации и проектировании

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

  • Комплексный учёт инфраструктуры, конфигурации, тестирования, разработки и эксплуатации.

  • Влияние людей, команд и организаций.

Как действительно улучшить себя и стать выдающимся архитектором?

Обязательные качества и пути развития архитектора

  • Качества: понимание бизнеса, широта технических знаний, глубина технических знаний, богатый опыт, коммуникативные навыки, умение работать руками, эстетическое воспитание.
  • Пути развития: 2 года накопления знаний, 4 года накопления навыков и влияния внутри организации, 7 лет накопления влияния внутри отдела, 7 и более лет накопления межотделенного влияния.

Архитекторы-проектировщики — на каком этаже вы находитесь?

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

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

TODO

Информация

Отраслевая информация

  • 36kr
  • Techweb

Список публичных аккаунтов

TODO

Блоги

Корпоративные блоги

  • Блог промежуточного программного обеспечения Alibaba
  • Блог команды Meituan Dianping по оценке технологий

Личные блоги

  • Сетевой журнал Руань Ифэна
  • COOLSHELL-Чэнь Хао
  • HelloJava-Али Би Сюань

Комплексные порталы и сообщества

В Китае:

  • CSDN — старое техническое сообщество, не требует пояснений.
  • 51cto.com
  • Iteye — с уклоном в Java.
  • Blog Garden
  • ChinaUnix — с уклоном в Linux.
  • Сообщество открытого исходного кода
  • Глубокий открытый исходный код
  • Jobbole — охватывает IT-сцену, веб-интерфейс, серверную часть, мобильную сторону, базу данных и другие области, с уклоном в технологии.
  • ITPUB
  • Tencent Cloud — облако + сообщество
  • Alibaba Cloud — сообщество Yunqi
  • IBM DeveloperWorks
  • Разработчик Туи Тоу
  • LinkedKeeper

За рубежом:

  • DZone
  • Reddit

Сообщества вопросов и обсуждений

  • Segmentfault — вопросы и ответы + колонки
  • Zhihu
  • Stack Overflow

Анализ отраслевых данных

  • Aier Web

Специализированные веб-сайты

  • Тестирование:

    • Ltesting International
    • Testing Wo
    • TesterHome
  • Эксплуатация:

    • Yunweipai
  • Java:

    • ImportNew — сосредоточьтесь на обмене технологиями Java.
  • Безопасность

    • Альянс красного и чёрного
  • Большие данные

    • Китайские большие данные
  • Другие специализированные веб-сайты:

    • DockerInfo — сосредоточьтесь на применении Docker и консультациях, учебниках и т. д.
    • Linux Public Society — общество Linux.

Прочее

  • Навыки программирования (Skill Map)

Рекомендуемые справочные книги

  • Gitbook.com
  • Gitbook.cn — платные электронные книги.

Онлайн-электронные книги

  • «Глубокое понимание Spring Cloud и микросервисной архитектуры»

Печатные книги

Архитектура

  • «12 практик архитектора: технические навыки»
  • «Красота архитектуры»
  • «Распределённая сервисная архитектура»
  • «Разговор об архитектуре»
  • «Практика облачной нативной архитектуры приложений»
  • «Архитектура для миллиардов трафика»
  • «Десятилетие технологий Taobao»
  • «Путь трансформации корпоративной ИТ-архитектуры: стратегия среднего уровня и практика архитектуры»

Управление технологиями

  • «CTO говорит»
  • «На вершине управления технологиями»

Инструменты

TODO

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

Технические ресурсы

Ресурсы с открытым исходным кодом

  • GitHub

Руководства

  • W3Cschool
  • Runoob.com — вводные руководства по HTML, CSS, XML, Java, Python, PHP, шаблонам проектирования и т.д.

Онлайн-классы

Конференции

Инструменты

  • Geekbang (https://s.geekbang.org/) — поисковая система для поиска технических статей.

Хостинг кода

Файловые сервисы

  • QiNiu
  • YouPaiYun

Комплексные облачные сервисы

  • Alibaba Cloud
  • Tencent Cloud
  • Baidu Cloud
  • Sina Cloud
  • Jinshan Cloud

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/gavincfm-architect-all.git
git@api.gitlife.ru:oschina-mirror/gavincfm-architect-all.git
oschina-mirror
gavincfm-architect-all
gavincfm-architect-all
master