предисловие
Сегодня я видел, как кто-то говорил о текущей системе с 200 миллионами PV, как ее оптимизировать? Когда я увидел эту тему, я вдруг подумал, что столкнулся со многими сценариями с высоким параллелизмом в своей работе, поэтому я импровизировал, вот краткое резюме и обмен, приветствуются исправления и дополнения.
текст
операция чтения
Что касается чтения, мы обычно придерживаемся следующих приоритетов:
| приоритет | Технические решения | инструкция | Пример |
|---|---|---|---|
| Наибольший | как можно более статично | Для данных, которые не очень актуальны в реальном времени, максимально используйте CDN. | Например, чтобы получить основную информацию о продукте |
| высокий | Ближайшее использование памяти | Память приоритетных серверов, служба удаленной памяти | Например, всплеск, покупка инвентаря (приоритетное распределение инвентаря в память сервера, за которым следуют удаленные службы памяти ) |
| очень низко | База данных (не читайте, если можете) | Пул соединений, оптимизация sql | Общий бизнес |
Писать
Что касается написания, мы обычно смотрим на уровень требований к согласованности данных:
| Требования к согласованности данных | Технические решения |
|---|---|
| невысокий | Сначала запишите память (приоритет от памяти сервера к удаленной службе памяти), а затем сохраните асинхронно |
| высокий | Выполняйте наиболее важные задачи синхронно и убедитесь, что другие задачи в конечном итоге завершатся асинхронно. |
Пиковое бритье и ограничение тока
От простого к сложному:
| простота | Технические решения |
|---|---|
| самый легкий | Отказ от трафика в процентах (случайный, недостаточно честный, если в порядке очереди) |
| Простой | Ограничение атомарной операции (с использованием приоритета памяти сервера, за которым следуют службы удаленной памяти) |
| немного хлопотно | Текущий лимит очереди (первый пришел первый обслужен, честный) |
Стабильность сервиса
В сценариях с высокой степенью параллелизма иногда для обеспечения нормальной работы основного бизнеса нам необходимо понизить уровень служб некоторых второстепенных бизнесов. Простой сценарий понижения выглядит следующим образом:
- Переход на более раннюю версию переключателя конфигурации: вручную выполнить понижение версии переключателя конфигурации
- Понижение переключателя времени: автоматическое понижение времени
структура системы
Про архитектуру системы не думайте слишком сложно, просто отделить это дело можно.
Архитектура эксплуатации и обслуживания
На уровне развертывания развертывайте такие службы отдельно, насколько это возможно.
оружие
«Если вы хотите сделать хорошую работу, вы должны сначала заточить свое оружие.» Конечно, мы не можем обойтись без хорошего оружия при работе с высокой степенью параллелизма. Ниже приведены «Три мушкетера» с высокой степенью параллелизма:
| технический термин | инструкция |
|---|---|
| асинхронный | Асинхронный обратный вызов, послойный обратный вызов похож на катастрофу (Promise также является очень раздутым кодом цепочки) |
| epoll | Мультиплексирование ввода-вывода, схема nginx/redis |
| сопрограмма | Простое планирование в пользовательском режиме с высокой степенью параллелизма |