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

OSCHINA-MIRROR/nageoffer-12306

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

Что такое 12306?

  • 🧐 Почему проект 12306 по продаже железнодорожных билетов лучше всего подходит для стажировки: https://nageoffer.com/12306
  • 🔥 Онлайн-адрес для опыта работы с 12306: http://12306.magestack.cn

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

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

Если вас интересует открытый исходный код, вы можете следить за проектом промежуточного слоя от Маго: динамический пулов задач Hippo4j. 6.2k Star, используется 43 компаниями.

Некоторые студенты, которые приняли участие в проекте Hippo4j, включили этот опыт в свои резюме и получили отличные предложения от крупных компаний.

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

  • Версия SpringBoot с агрегацией сервисов: подходит для тестирования и развертывания, можно запустить агрегирующий сервис aggregation-service и сервис шлюза.

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

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

Техническая архитектура

В проектировании системы используется последняя версия JDK17 + SpringBoot3 & SpringCloud микросервисной архитектуры для создания высоконагруженной и большого объема данных, но все равно обеспечивающей эффективную и надежную службу продажи билетов 12306.

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

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

Присоединяйтесь для общения

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

Если вы хотите следить за обновлениями статей и полезными материалами, подпишитесь на мой公众号: Мартин играет с программированием.

Если у вас возникли вопросы или у вас есть предложения по проекту, добавьте меня в друзья, укажите в комментарии: 12306, чтобы получить материалы для изучения проекта и обсудить их с 2000+ единомышленниками.

Каков уровень качества проекта?

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

Возьмем, к примеру, систему обслуживания пользователей. Системы с низкой конкуренцией и небольшим объемом данных обычно просты, но системы с высокой конкуренцией и огромным объемом данных требуют учета многих дополнительных факторов.1. Когда пользователь регистрируется на сайте 12306 или добавляет пассажиров, система должна проверять точность и достоверность предоставленной информации. Как эффективно предотвратить предоставление ложной информации и обеспечить безопасность покупки билетов? 2. Как разделить базы данных и таблицы для большого количества пользователей и пассажиров 12306? Какой столбец использовать в качестве ключа для шардинга? Как внедрить шардинг в существующие системы без сбоев? Как быстро откатиться в случае проблем? 3. Система поддерживает вход пользователей с помощью имени пользователя, номера телефона и электронной почты. Как решить проблему "распространения запросов на чтение" из-за неизвестного ключа шардинга при входе? 4. В условиях высокой конкуренции при регистрации пользователей, обязательно возникнет проблема пробития кэша. Методы, такие как установка значения кэша в Null для несуществующих ключей и использование фильтра Блума, имеют недостатки. Как решить эту проблему? 5. Существуют много чувствительных данных, таких как имя пользователя, номер телефона, электронная почта, номер документа и адрес. Как защитить эти данные от утечки при атаке на базу данных?Теперь рассмотрим пример с системой покупки билетов. Когда пользователь покупает билеты для двух пассажиров на бизнес-класс поездки без выбора мест, логика распределения мест выглядит следующим образом:

  1. Сначала проверьте, достаточно ли оставшихся мест в купе первого класса на текущем поезде. Если мест недостаточно, верните клиенту ответ о неудаче в покупке билета.

  2. Получите все вагоны, в которых осталось по два места, и пройдитесь по этим вагонам, выполняя следующие шаги.

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

  4. Затем проверьте, есть ли вагоны, в которых есть два непосредственно не соседних места в купе первого класса. Если соседние места в одном вагоне отсутствуют, ищите непосредственно не соседние места в этом же вагоне.

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

6.Следуя вышеуказанным шагам, система покупки билетов может эффективно распределить места при наличии достаточного количества оставшихся мест в купе первого класса, обеспечивая пассажиров хорошим местом для поездки. В случае недостатка мест система будет стремиться удовлетворить потребности пассажиров в успешной покупке билетов. ## Как использовать12306 фронтенд-система реализует бизнес-логику и UI, очень похожие на официальный сайт.

В процессе обучения использование фронтенд-системы, аналогичной официальному сайту, для прямого отладки backend-сервисов позволяет избежать сложностей, связанных с тестированием только через API. Это создает более реалистичную сцену обучения, что делает процесс более плавным и эффективным.

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

1. Функция поиска билетов

2. Страница подтверждения заказа, выбор пассажиров для заказа

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

4. Страница подтверждения заказа

Ошибки при покупке билетов на 12306

Рассмотрим некоторые бизнес-точки, которые люди обычно не учитывают при покупке билетов на 12306, или места, где они могут ошибаться.

Задача: Поиск информации о поездах по станциям- Вы думаете: Использование технологии ElasticSearch для поиска, так как это включает множество условий поиска, таких как номер поезда, номер вагона, станция отправления, станция прибытия, время отправления и т. д.

  • На самом деле: При массовом параллельном поиске, ElasticSearch не является оптимальным решением из-за его способности к параллельному запросу и использованию ресурсов. Кроме того, эти условия поиска могут быть хранены с помощью кэширования, подобного Redis, и собраны в памяти.### Задача: Покупка билета от Пекина до Нанкина

  • Вы думаете: Билет будет списан только для одного пути от Пекина до Нанкина.

  • На самом деле: Билет будет списан для трёх путей: Пекин-Иньчжоу, Пекин-Нанкин, Иньчжоу-Нанкин. Если хотя бы одно из этих условий не выполнено, покупка не будет успешной.

Задача: Покупка билета от Иньчжоу до Нанкина

  • Вы думаете: Если злоумышленник использует программное обеспечение для массового заказа билетов, он может заказать билет только для пути Иньчжоу-Нанкин, что приведёт к невозможности заказа билета для пути Пекин-Ханчжоу.
  • На самом деле: Количество мест между станциями регулируется определёнными правилами. Хотя билеты выпускаются одновременно, приоритет отдается большим станциям, чтобы избежать ситуации, когда большинство пользователей заказывают билеты для промежуточных станций, что затрудняет покупку билетов для начальной и конечной станций. Эта проблема решается динамическим выпуском билетов, например, сначала выпускаются билеты для больших станций, а затем для промежуточных станций. Конечно, технические и организационные сложности и преимущества не ограничиваются только этим, более подробную информацию можно получить, изучая код и используя 12306.

## Часто задаваемые вопросы

В: Направлено ли это на студентов, ведь там столько схем кода, смогут ли студенты разобраться?

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

В: Как правильно включить проект 12306 в резюме?

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

В: Нужно ли изучать систему 12306 тем, кто уже работает несколько лет?

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

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

Всего более 100 ключевых технических документов! Помогут вам глубже понять и быстрее освоить систему 12306.

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

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

Введение

🔥 Официально рекомендовано 🔥 Весенние и осенние наборы в университетах, проекты для выпускников, использующие SpringBoot 3 + Java 17 + SpringCloud Alibaba + Vue3 и другие технические архитектуры. Задачи включают создание высокопроизводительной копии системы железнодорожных билетов 12306, включающей пользовательские функции, бронирование билетов,... Развернуть Свернуть
Apache-2.0
Отмена

Обновления (1)

все

Участники

все

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

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