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

OSCHINA-MIRROR/nageoffer-12306

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 23 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 23.04.2025 17:22 124d91f

Что такое 12306?

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

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

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

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

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

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

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

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

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

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

В проектировании системы используется последняя версия JDK 17 + Spring Boot 3 & Spring Cloud микросервисной архитектуры для создания высоконагруженного и большого по объему данных сервиса продажи железнодорожных билетов 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 )

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

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