Последний раз документ обновлялся 9 апреля 2018 года.
Архитектура бэкенда
Структуры данных
Популярные алгоритмы
Параллелизм Непрерывная интеграция
Jenkins;
Разделение сред.
Автоматизация управления
Тестирование
Виртуализация
Контейнерные технологии
Облачные технологии
DevOps.
Управление документацией.
Промежуточное ПО
Кэширование
Очередь сообщений. Сообщения: 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. Принцип
Оптимизация
Поисковая система * Принцип работы поисковой системы * Lucene * Elasticsearch * Solr * Sphinx
Производительность * Методы оптимизации производительности * Оценка ёмкости * CDN-сеть * Пул соединений * Оптимизация производительности
Большие данные * Потоковые вычисления * Storm * Flink * Kafka Stream * Сценарии применения * Hadoop * HDFS * MapReduce * Yarn * Spark
Безопасность * Веб-безопасность * XSS * CSRF * SQL-инъекция * Скрипт-инъекции * Сканеры уязвимостей * CAPTCHA * Защита от DDoS-атак Шифрование и дешифрование
Безопасность сервера
Безопасность данных
Сетевая изоляция
Авторизация
Часто используемые открытые исходные коды
Распределённая архитектура
Масштабируемость.
Стабильность и высокая доступность.
Разделение операций чтения и записи — подход, при котором операции чтения выполняются на одном сервере, а операции записи — на другом. Это позволяет повысить производительность системы и обеспечить её надёжность.
Секционирование (или сегментирование) — разделение базы данных на отдельные фрагменты, которые могут храниться на разных серверах. Секционирование позволяет масштабировать систему и обеспечивать её отказоустойчивость.
Управление сервисами
Регистрация и обнаружение сервисов — механизмы, позволяющие сервисам регистрироваться в системе и обнаруживать друг друга. Регистрация и обнаружение обеспечивают гибкость и масштабируемость системы.
Маршрутизация сервисов — процесс направления запросов к определённым сервисам. Маршрутизация обеспечивает балансировку нагрузки и отказоустойчивость системы.
Распределённая согласованность
CAP-теорема и теорема BASE — фундаментальные принципы, определяющие свойства распределённых систем. CAP-теорема утверждает, что система может быть только консистентной, доступной и устойчивой к разделению, или же она может быть доступна и устойчива к разделению за счёт потери консистентности. Теорема BASE утверждает, что распределённые системы должны быть в первую очередь доступными и устойчивыми к разделению.
Распределённые блокировки — механизм, обеспечивающий синхронизацию доступа к общим ресурсам в распределённой системе. Блокировки позволяют избежать конфликтов и обеспечить целостность данных.
Алгоритмы обеспечения согласованности — методы, используемые для поддержания согласованного состояния данных в распределённой системе. К ним относятся Paxos, Zab, Raft и Gossip.
Двухфазная фиксация и многофазная фиксация — подходы к выполнению транзакций в распределённой среде. Двухфазная фиксация предполагает выполнение транзакции в два этапа: подготовка и фиксация. Многофазная фиксация позволяет выполнять транзакции более гибко, разбивая их на несколько этапов.
Идемпотентность — свойство операций, которое позволяет повторять их без изменения конечного результата. Идемпотентные операции полезны в распределённых системах, где возможны повторные попытки выполнения операций.
Стратегии обеспечения согласованности — общие подходы к обеспечению согласованности в распределённых системах. Они включают в себя реплицирование данных, использование журналов и другие методы.
Выбор лидера в распределённой системе — процесс определения узла, который будет координировать работу других узлов. Лидер может использоваться для управления транзакциями, синхронизации данных и других задач.
TCC (Try/Confirm/Cancel) — гибкий подход к управлению транзакциями в распределённых системах. TCC позволяет отменить транзакцию, если она не может быть успешно завершена.
Распределённые файловые системы
Распределённые файловые системы обеспечивают доступ к файлам и каталогам в распределённой среде. Они позволяют хранить данные на нескольких серверах и обеспечивают высокую доступность и надёжность системы.
Генерация уникальных идентификаторов
Генерация уникальных идентификаторов — задача, которая возникает во многих распределённых системах. Уникальные идентификаторы используются для идентификации объектов, таких как пользователи, документы и т. д.
Алгоритмы генерации уникальных идентификаторов
Алгоритмы генерации уникальных идентификаторов обеспечивают создание уникальных значений в распределённой среде. Эти алгоритмы могут использовать различные подходы, такие как хеширование, последовательное увеличение и другие.
Проектирование и разработка
Проектирование и разработка — ключевые этапы создания программного обеспечения. Они определяют структуру и функциональность системы, а также способы её реализации.
DDD (Domain-driven Design) — подход к проектированию, который фокусируется на моделировании предметной области. DDD помогает создать систему, которая отражает реальные бизнес-процессы и обеспечивает гибкость и расширяемость.
CQRS (Command and Query Responsibility Segregation) — принцип разделения операций на команды и запросы. Команды изменяют состояние системы, а запросы возвращают информацию о состоянии. CQRS позволяет оптимизировать обработку команд и запросов.
Модели анемичной и богатой предметной области — два подхода к моделированию предметной области в DDD. Анемичная модель использует простые объекты-значения, а богатая модель включает в себя сложные бизнес-правила и логику.
Actor-модель — подход к разработке, основанный на концепции акторов. Актор — это объект, который может получать сообщения, обрабатывать их и отправлять новые сообщения. Actor-модель обеспечивает параллелизм и асинхронную обработку сообщений. Реактивное программирование — парадигма программирования, ориентированная на потоки данных и распространение изменений.
Проектный менеджмент:
Общие термины бизнеса:
Информация:
Технические ресурсы:
Очередь
«Java-очередь — queue подробный анализ».
«LinkedList, ConcurrentLinkedQueue, LinkedBlockingQueue сравнительный анализ».
Коллекция
Списки и массивы
Словари и ассоциативные массивы
Деревья
Бинарные деревья Каждое звено имеет максимум два конечных звена.
Полные бинарные деревья Все листья находятся на самом нижнем и следующем слое, а все узлы самого нижнего слоя расположены в крайних левых позициях дерева.
Балансированные бинарные деревья Абсолютное значение разницы высот между двумя поддеревьями не превышает 1, и оба поддерева также являются сбалансированными бинарными деревьями.
Красные и чёрные деревья Добавление этапа, затем левое или правое вращение для достижения баланса.
B-, B+ и B деревья* MySQL основан на B+-дереве для организации кластеризованных индексов таблиц.
Общие алгоритмы
Алгоритмы сортировки и поиска
Сортировка и поиск
Выбор сортировки
Пузырьковая сортировка
Вставка сортировки
Быстрая сортировка
Объединение сортировки
Пирамидальная сортировка Процесс построения максимальной кучи является процессом сортировки, максимальная куча: значение каждого узла больше или равно значению его левого и правого дочерних узлов.
Подсчётная сортировка Аналогично процессу сортировки по сегментам, разница заключается в количестве сегментов.
Сегментная сортировка Разделите [0,1) на n одинаковых по размеру поддиапазонов, называемых корзинами. Сортировка каждой корзины отдельно, а затем обход каждой корзины.
Радиксная сортировка Сортировка по разрядам, десяткам, сотням и так далее.
Двоичный поиск Требуется, чтобы сортируемый список был упорядочен. Сложность по времени O(logN).
Инструменты сортировки Java
Жадные алгоритмы
Рекурсивные алгоритмы
Обрезка алгоритма
Динамическое программирование
Алгоритм ветвей и границ
Простой байесовский
«Байесовское умозаключение и его применение в Интернете». 推荐算法
《推荐系统综述》 — это статья, в которой рассматриваются различные аспекты рекомендательных систем. В ней обсуждаются основные принципы работы рекомендательных алгоритмов, их классификация и применение.
«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 позволяет создавать сценарии тестирования, имитирующие одновременное обращение нескольких клиентов к приложению, и анализировать результаты тестирования.
Полное тестирование ссылок — метод тестирования, который проверяет работу всех компонентов системы от начала до конца. Полное тестирование ссылок позволяет убедиться, что все компоненты системы работают корректно и взаимодействуют друг с другом должным образом. Тестирование и серые (или «голубые») выпуски: исследование и практика
Виртуализация
Контейнеры
Облачные технологии
DevOps
Управление документацией
Промежуточное ПО
Веб-сервер
Кэш
Локальный кэш
HashMap как локальный кэш.
EhCache как локальный кэш.
Guava Cache как локальный кэш.
Браузерный кэш. В основном используется параметр Cache-Control.
H5 и мобильный WebView: анализ и практика механизмов кэширования.
Memcached
Redis
Tair
Типы хранилищ:
Очередь сообщений
Шина сообщений
Шина сообщений похожа на слой абстракции над очередью сообщений, обеспечивая унифицированный вход, управление и упрощение подключения.
RabbitMQ
Поддерживает транзакции, обе модели push и pull поддерживаются, подходит для сценариев, требующих надёжной передачи сообщений.
RocketMQ
Реализация на Java, поддерживает обе модели push и pull, пропускная способность ниже, чем у Kafka. Может гарантировать порядок сообщений.
ActiveMQ
Чистая реализация Java, совместимая с JMS, может быть встроена в приложения Java.
Kafka
Высокая пропускная способность, использует модель pull. Подходит для сценариев ввода-вывода, таких как синхронизация журналов.
Использование Redis для отправки сообщений
Производитель, потребитель полностью клиентское поведение, список и реализация модели pull, блокировка ожидания с использованием команды blpop.
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: китайское учебное пособие
Распределённая архитектура
Расширяемость архитектуры
Разделение данных
Как реализовать расширяемость в большой веб-архитектуре
Большая веб-архитектура (7): веб-архитектура с расширяемостью
Стабильность и высокая доступность
Системный дизайн: некоторые технические решения для высокодоступных систем
О высокой доступности систем
Аппаратная балансировка нагрузки
Сравнение балансировщиков нагрузки Nginx и F5
Программно-аппаратные балансировщики нагрузки: что вы знаете?
Программная балансировка нагрузки
Несколько алгоритмов балансировки нагрузки
DNS-балансировка нагрузки
Nginx-балансировщик нагрузки
Использование LVS+Keepalived для балансировки нагрузки
HAProxy: подробное руководство
Haproxy+Keepalived+MySQL для реализации балансировки чтения
RabbitMQ+Haproxy+Keepalived для создания высокодоступного кластера
Ограничение потока
Аварийное восстановление на уровне приложений
Предохранительные меры против лавины: Hystrix, инструмент для аварийного отключения
Кэш-пробои, кэш-промахи и проблемы с горячим ключом
Аварийное восстановление между центрами обработки данных
«Иное местоположение, двойная активность»: опыт развёртывания между центрами обработки данных
Иное местоположение, двойная активность: практический опыт
Аварийное восстановление и построение опыта
Технология аварийного восстановления и опыт построения
Процесс аварийного восстановления
Плавный запуск
Идея плавного запуска: сначала поток VIP-уровня, затем очистка данных (если есть), наконец, перезапуск приложения.
JVM безопасное завершение работы (как изящно закрыть 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.
Маршрутизация сервисов
Распределённая согласованность
CAP и BASE теории
Распределённые блокировки
«分布式锁的几种实现方式» — статья обсуждает различные подходы к реализации распределённых блокировок, включая основанные на базах данных (простые в использовании, но с проблемами единой точки отказа, производительности и невозможности снятия блокировки), на кэше (неблокирующие и с хорошей производительностью, но могут привести к проблемам с блокировкой) и на Zookeeper (использует упорядоченные временные узлы для реализации блокировок).
«基于Zookeeper的分布式锁» — статья предоставляет подробное описание и примеры кода на Java для реализации распределённой блокировки с использованием Zookeeper.
Алгоритмы распределённой согласованности
Paxos — статьи описывают принципы и применение алгоритма Paxos, его производных (Fast Paxos) и анализ использования в Zookeeper.
Zab — статья знакомит с Zab, протоколом согласованности в Zookeeper, обеспечивающим надёжность и доступность данных.
Raft — статья исследует Raft как более понятный алгоритм распределённой согласованности.
Gossip — статья даёт обзор алгоритма Gossip.
Двухфазная и многофазная фиксация — статья сравнивает двухфазную и многофазную фиксацию в контексте распределённых транзакций.
Идемпотентность
Решения для распределённой согласованности
Выборы лидера в распределённой системе
Гибкие транзакции TCC (Try/Confirm/Cancel)
«Традиционные транзакции и гибкие транзакции» — статья сравнивает традиционные и гибкие транзакции на основе BASE (базовая доступность, гибкое состояние и окончательная согласованность). Предлагаются решения, такие как ведение журнала и компенсация (позитивная или негативная), а также «безблокировочные» подходы и использование оптимистичных блокировок. О том, что архитекторы должны знать об оптимизации и проектировании
Детали, которые следует учитывать: модульность, слабая связанность, отсутствие совместного использования архитектуры; сокращение зависимостей между компонентами, внимание к влиянию сервисов друг на друга и связанным с этим сбоям в цепочке и их последствиям.
Комплексный учёт инфраструктуры, конфигурации, тестирования, разработки и эксплуатации.
Влияние людей, команд и организаций.
Как действительно улучшить себя и стать выдающимся архитектором?
Обязательные качества и пути развития архитектора
Архитекторы-проектировщики — на каком этаже вы находитесь?
TODO
TODO
В Китае:
За рубежом:
Тестирование:
Эксплуатация:
Java:
Безопасность
Большие данные
Другие специализированные веб-сайты:
TODO
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )