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

OSCHINA-MIRROR/ljy_open-seckill

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

Высоконагруженная система для проведения акций «секундных» распродаж

Среда разработки: IDEA, Tomcat, MySQL, Redis.

Сборка проекта: Maven.

Программное окружение: SSM (SpringMVC, Spring, MyBatis).

Описание проекта: Система создана для организации и проведения акций по продаже товаров со скидками. Позволяет пользователям совершать покупки по сниженным ценам в течение ограниченного времени.

Техническая реализация: Система основана на использовании технологий SpringMVC, Spring и MyBatis. Разработана с применением подхода RESTful. В качестве пула соединений используется c3p0. Для обеспечения высокой производительности применяется база данных Redis. Все операции с данными, включая операции DAO и Service, снабжены тестами JUnit.

Документация по разработке

Бизнес-анализ

  1. Процесс работы системы:

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

    • Проверка наличия товара на складе перед покупкой.
    • Запись информации о покупке после успешной транзакции.
  3. Анализ операций с товарами:

    • Транзакции с учётом уменьшения количества товара на складе.
    • Регистрация покупок.
  4. Регистрация информации об успешной акции:

    • Объект покупки.
    • Время успешной покупки и срок действия скидки.
    • Платёжная информация.

Анализ исключений

  1. Уменьшение количества товара на складе не зарегистрировано.
  2. Зарегистрирована покупка, но количество товара на складе не уменьшено.
  3. Перепродажа или недопродажа товара.

Сложности реализации

  1. MySQL: транзакции и блокировки строк.
  2. Многопользовательские покупки — обновление количества товаров на складе.

Функциональные модули

  1. Экспозиция интерфейса для секундных распродаж (Exposer, упакованные DTO).
  2. Выполнение акции.
  3. Связанные запросы.

Процесс разработки

  1. Проектирование и кодирование DAO.
  2. Проектирование и кодирование Service.
  3. Кодирование веб-интерфейса (RESTful API и взаимодействие с фронтендом).
  4. Оптимизация и анализ высоконагруженной системы.

(1) Проектирование и кодирование DAO

Пакеты:

  • org.seckill.dao;
  • org.seckill.entity.
  1. Разработка интерфейсов и SQL-кода. Примечание: слой DAO не должен содержать информацию из слоя Service. Сервисный слой отвечает за объединение данных из DAO.

  2. Создание таблиц базы данных:

  • seckill — таблица для хранения информации о количестве товаров для распродажи;
  • success_killed — таблица для регистрации успешных покупок.
  1. Реализация DAO и интерфейсов:
  • SeckillDao;
  • SuccesskilledDao.
  1. Интеграция Mybatis с Spring:
  • Написание файла конфигурации mybatis-config.xml (глобальные настройки);
  • Написание файла spring-dao.xml (настройка dataSource, sqlSessionFactory и т. д.).
  1. Завершение интеграции DAO-слоя (с использованием JUnit4).

(2) Проектирование и кодирование Service

Пакеты:

  • Org.seckill.service — размещение сервисов, объединяющих логику;
  • Org. seckill.exception — размещение исключений, необходимых для интерфейсов сервиса, таких как повторные попытки проведения акции или завершение акции;
  • Org. seckill.dto — передача данных между слоями, аналогично entity, для передачи данных между веб-сервисом и сервисом.
  • Org. seckill.enums — упаковка перечислений, представляющих постоянные значения (например, «успешная акция», «завершение акции» и т.д.).
  1. Определение интерфейсов и их реализация:

    • Бизнес-интерфейсы: определение интерфейсов с точки зрения пользователя.
    • Три аспекта: определение методов, параметров и возвращаемых типов (возвращаемые типы/исключения).
  2. Использование Spring для управления зависимостями сервисов (Spring IOC):

    • Диаграмма объектов зависимостей:
      • Бизнес-объекты и зависимости.
    • Написание spring-service.xml.
    • Расширение:
      • Spring IOC:
        • Создание унифицированного управления объектами.
        • Управление жизненным циклом объектов.
        • Гибкое внедрение зависимостей.
        • Унифицированный доступ к объектам.
      • Способы внедрения зависимостей Spring IOC и сценарии использования:
        • XML:
          • Реализация класса происходит из сторонней библиотеки, такой как DataSource.
          • Требуется конфигурация пространства имён, такого как context, aop, mvc и т. д.
        • Аннотации:
          • Классы, используемые в проекте, могут быть аннотированы напрямую, например, @Service, @Controller.
        • Java-конфигурация:
          • Необходимо контролировать создание объектов через код, например, при настройке пользовательских библиотек.
  3. Настройка и использование декларативных транзакций Spring:

    • ProxyFactoryBean + XML — старый способ (2.0).
    • tx:advice + aop — однократная настройка с постоянным эффектом.
    • @Transactional — предпочтительный способ использования аннотаций для контроля транзакций методов.
    • Когда откатить транзакцию?
      • Возникновение исключения во время выполнения.
      • Избегание неправильного использования try...catch...
    • Преимущества использования аннотаций для управления транзакциями методов:
      • Команда разработчиков достигает консенсуса в отношении стиля программирования для методов транзакций.
      • Гарантируется, что время выполнения метода транзакции будет максимально коротким, и другие сетевые операции, RPC/HTTP-запросы или операции, отделённые от метода транзакции, не будут выполняться.
      • Не все методы требуют транзакционного управления, например, если есть только одна операция обновления, а операции только для чтения не требуют управления транзакциями.
  4. Завершение интеграции Service-слоя (используя JUnit4).

(3) Веб-дизайн и кодирование

  1. Логика взаимодействия с фронтендом:

    • Поток страниц переднего плана системы секундных распродаж:
      • Страница списка секундных распродаж.
      • Детальная страница.
  2. Основываясь на RestFul API:

    • Дизайн URL секундной распродажи:
      • GET /seckill/list — список секундных распродаж;
      • GET /seckill/{id}/detail — детальная страница;
      • GET /seckill/time/now — системное время;
      • POST /seckill/{id}/exposer — экспозиция секундной распродажи;
      • POST /seckill/{id}/{md5}/execution — выполнение секундной распродажи.
  3. Интеграция Spring MVC и соответствующая конфигурация:

    • Написание web.xml.
    • Добавление spring-web.xml.
  4. Реализация соответствующих Restful API для секундных распродаж:

    • Создание SeckillController.
    • Создание класса DTO SeckillResult для инкапсуляции всех ответов ajax (json).
  5. Разработка страниц с использованием Bootstrap:

    • Выделение общих компонентов и разработка common пакета.
    • Разработка list.jsp — страницы списка товаров.
    • Разработка detail.jsp — детальной страницы товара.
  6. Логин на основе Cookie:

    • Написать код JavaScript (модульный код) для завершения процесса аутентификации (основное внимание уделяется проверке номера мобильного телефона).
    • Завершить разработку всплывающего компонента.
  7. Взаимодействие таймера:

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

    • Привязать событие нажатия кнопки (одно нажатие), чтобы предотвратить непрерывное нажатие пользователем.
    • Учитывать разницу во времени браузера.
    • Показать результаты распродажи.

(4) Оптимизация и анализ для высокой нагрузки

Продолжение следует...

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

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

Введение

На основе SpringMVC, Spring, MyBatis реализована высококонкурентная система секундных распродаж. Стиль проектирования кода основан на RESTful, в качестве пула подключений используется Druid, а Redis выступает в роли базы данных для реализации конкурентных технологий. Для соответствующих DAO и сервисных операций добавлены примеры модульного тес... Развернуть Свернуть
Отмена

Обновления

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

Участники

все

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

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