Без Redis также можно обеспечить решение для проведения акций «все в продаже» "Мицухас событие в Индии против Амазона".
Xiaomi установила несколько рекордов в Индии:
- В течение четырёх минут было продано более 250 000 единиц. --- OPS: 1042 покупки/с
- Самый быстрый мобильный телефон Flash Sale.
- Перед началом Flash Sale мы получили 1 миллион "уведомлений о доставке".
- Amazon получал более 5 миллионов кликов в минуту.
- Amazon получала 1500 заказов в секунду во время этого события (это самый высокий показатель среди всех продаж в Индии). --- OPS: 1500 заказов/с
Сначала поговорим о проявлении производительности, так как это интересует многих.
Хардварная среда (Tomcat, Artemis, JMeter, Oracle, backend находится на этом компьютере):
Программная среда:
Дополнительные конфигурации см. в разделе Как подготовить среду
Тестовые сценарии JMeter см. в разделе Как провести benchmark:
Процесс benchmark был проведен дважды, поскольку JIT влияет на производительность.
Результат первого теста
Результат второго теста
Не перезапуская Tomcat и Artemis, восстанавливая данные базы данных и перезапуская бэкэнд-программу,
Количество записей в базе данных меньше из-за того, что очередь Artemis заполнилась, и некоторые сообщения были отброшены.
По топологии развертывания, архитектура состоит из четырёх частей:
ActiveMQ Artemis — это проект, переименованный JBoss после передачи HornetQ Apache Foundation. Сейчас это подпроект ActiveMQ.
HornetQ был известной высокопроизводительной системой для обмена сообщениями, поэтому ActiveMQ Artemis также имеет отличную производительность. Этот проект использует его для сообщений между webapp и бэкендом.
Проверка наличия достаточного количества товара на складе происходит не на уровне базы данных и не с использованием Redis, а также не требует никаких операций ввода/вывода.
Когда backend запускается, он загружает данные о наличии товаров в память, проверка наличия товаров и обновление колич�数字需要翻译成数字形式。
当后端启动时,它将库存数据加载到内存中,商品存在检查和剩余数量更新都在内存中进行。这有助于避免与并行程序相关的内存可见性、同步和锁定问题,从而提高性能。
有些人可能会认为由于担心OOM(内存不足),在内存中存储商品信息是不现实的。然而,这取决于具体的情况。
在这个项目中,商品信息在内存中的表示由Item.java类提供。使用jol-cli(下载此处)查看内存内部结构后发现,对象大小为24字节: me.chanjar.jms.server.memdb.Item object internals: OFFSET SIZE TYPE DESCRIPTION VALUE 0 12 (объектный заголовок) Н/Д 12 4 int Item.amount Н/Д 16 4 long Item.id Н/Д 20 4 (потерянное место из-за выравнивания следующего объекта) Instance size: 24 байта Space losses: 0 байт внутри + 4 байта вне = 4 байта всего
Размер объекта типа Long
также равен 24 байтам:
java.lang.Long object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 12 (объектный заголовок) Н/Д
12 4 (выравнивание/заполнение) Н/Д
16 8 long Long.value Н/Д
Instance size: 24 байта
Space losses: 4 байта внутри + 0 байта вне = 4 байта всего
Если у вас есть 1 миллион товаров, которые нужно продать за секунду, то потребляемая память будет равна 1,000,000 * (24 байта + 4 байта + 24 байта) = 52,000,000 байт = 49 мегабайт. То есть всего лишь 49 мегабайт.
Оптимизация архитектуры:
Оптимизации связанные с JMS:1. Перезапуск JMS Connection, Session, MessageProducer, MessageConsumer вместо создания новых объектов каждый раз (Spring's JmsTemplate работает именно так).
Установка JMS Session как transacted=false, AUTO_ACKNOWLEDGE.
При отправке JMS сообщений установка DeliveryMode=NON_PERSISTENT.
Отключение повторной отправки Artemis и механизма доставки сообщений.Оптимизации связанные с JDBC:
Использование JDBC Batch Update для снижения количества сетевых операций ввода-вывода с базой данных.
Оптимизация операций обновления остатков товаров в базе данных, объединение нескольких update запросов в один при высоконагруженной работе (с использованием Disruptor).
Оптимизации связанные с Tomcat:
Проект предоставляет два интерфейса:
Умные читатели наверняка уже догадались, что весь процесс распродажи является асинхронным.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )