Skip to content

Commit 6600b62

Browse files
author
LIANGLINJIANG888
committed
feat: 更新12306专栏文章
1 parent 79eec01 commit 6600b62

4 files changed

Lines changed: 146 additions & 14 deletions

File tree

247 KB
Loading
Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,45 @@
1-
# 如何生成分布式ID
1+
# **分布式ID选型**
2+
3+
随着12306开源项目的不断发展,后端服务需要处理来自全国乃至全球的海量请求。在这样的分布式系统中,生成全局唯一且高效的ID是保障数据一致性和服务可靠性的关键。以下是针对12306开源项目的分布式ID选型分析与实践。
4+
5+
**项目需求分析**
6+
7+
首先,我们需要明确12306项目对分布式ID的基本要求:
8+
- **全局唯一性**:确保每个交易、订单或记录都有一个独一无二的标识符。
9+
- **高并发支持**:系统需能够支撑极高的并发请求,特别是在购票高峰期。
10+
- **可排序性**:ID最好能反映时间信息,便于数据库索引和数据分片。
11+
- **易扩展性**:随着业务的增长,ID生成系统应易于水平扩展。
12+
- **兼容性**:ID生成方案不应依赖于特定的技术栈或存储系统。
13+
14+
**可选方案对比**
15+
16+
基于以上需求,我们评估了几种常见的分布式ID生成策略:
17+
18+
- **UUID**:虽然UUID可以保证全局唯一性和高并发性能,但其长度过长且无法排序,不适合作为数据库主键,因此被排除。
19+
20+
- **数据库自增ID**:这种方法实现简单,但显然不适合分布式环境,因为多个节点间难以协调,容易产生冲突。
21+
22+
- **雪花算法(Snowflake)**:Twitter的雪花算法在分布式系统中得到了广泛应用。它生成的ID有序且高效,但依赖于系统时钟,并且当单个数据中心内的节点数量超过最大序列号时,需要进行微调。
23+
24+
- **Leaf**:美团点评开源的Leaf提供了高度的灵活性和可扩展性,支持自定义比特位分配,适合大型分布式系统。
25+
26+
**选型决策**
27+
28+
综合考虑项目的具体需求和各方案的优缺点,我们决定在12306开源项目中采用改进型的雪花算法或Leaf作为分布式ID的生成策略。
29+
30+
**实施细节**
31+
32+
- **时间戳精度**:考虑到票务系统的特点,我们可以将时间戳的精度从毫秒级调整到秒级,以减少ID冲突的可能性。
33+
34+
- **数据中心和机器ID分配**:根据12306的服务器部署情况,合理规划数据中心和机器ID的分配,确保ID的唯一性和高效生成。
35+
36+
- **序列号设计**:为了避免同一毫秒内生成的ID冲突,序列号的范围应该足够大,同时考虑未来可能的水平扩展需求。
37+
38+
- **容错机制**:建立监控和报警机制,确保在系统时钟不同步或其他异常情况下,ID生成服务仍能正常工作。
39+
40+
- **测试验证**:在实际投入使用前,进行充分的性能测试和压力测试,确保在不同的负载条件下ID生成系统的稳定性和可靠性。
41+
42+
**结语**
43+
44+
通过精心的设计和选型,12306开源项目的分布式ID生成方案将为整个系统的稳定运行提供坚实的基础。无论是日常运营还是高峰时段的压力,一个可靠的ID生成策略都是保障数据完整性和服务可用性的关键。随着项目的不断进化,我们也将持续优化ID生成方案,以满足业务的持续发展需求。
245

docs/md/12306/环境搭建.md

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,70 @@
1-
# 环境搭建
1+
# **环境搭建指南**
2+
3+
随着12306项目的开源,越来越多的开发者和企业有机会研究、使用乃至改进这一国民级应用。
4+
本文旨在提供一份详细的运行环境搭建指南,帮助开发者快速搭建起12306开源项目的本地开发和测试环境。
5+
6+
**一、系统要求**
7+
8+
在开始之前,请确保你的系统满足以下要求:
9+
- 操作系统:推荐使用Linux(如Ubuntu 18.04 LTS或更高版本),也可以使用Windows 10或更高版本,macOS Catalina或更高版本。
10+
- 内存:至少4GB RAM,推荐8GB或以上。
11+
- 存储空间:至少20GB的可用硬盘空间。
12+
- 网络:稳定的网络连接以便下载必要的软件包和依赖。
13+
14+
**二、开发环境准备**
15+
16+
以下是搭建开发环境的基本步骤:
17+
18+
1. **安装Docker**
19+
- Docker是用于自动部署应用程序的开源平台,可以方便地创建和管理容器。
20+
- 根据你使用的操作系统,从Docker官网下载并安装适合的Docker版本。
21+
22+
2. **安装Docker Compose**
23+
- Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。
24+
- 使用以下命令安装Docker Compose:
25+
```
26+
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
27+
sudo chmod +x /usr/local/bin/docker-compose
28+
```
29+
30+
3. **安装Git**
31+
- Git是一个分布式版本控制系统,用于源代码管理。
32+
- 根据操作系统的指令完成Git的安装。
33+
34+
4. **克隆12306项目代码仓库**
35+
- 使用以下命令将12306项目的代码仓库克隆到本地:
36+
```
37+
git https://gitee.com/nageoffer/12306.git
38+
cd 12306
39+
```
40+
41+
5. **配置环境变量**
42+
- 根据项目文档,设置必要的环境变量,这些变量可能包括数据库地址、端口号、API密钥等。
43+
44+
**三、启动项目**
45+
46+
在确保所有依赖和环境变量配置正确后,可以使用以下命令启动项目:
47+
48+
1. **构建Docker镜像**
49+
```
50+
docker-compose build
51+
```
52+
53+
2. **启动Docker容器**
54+
```
55+
docker-compose up -d
56+
```
57+
58+
此时,所有的服务将以容器的形式在后台运行。如果需要停止服务,可以使用`docker-compose down`命令。
59+
60+
**四、验证安装**
61+
62+
要验证项目是否成功运行,可以在浏览器中访问项目的Web界面(通常是`http://localhost:端口号`),或通过API接口发送请求并检查响应。
63+
64+
**五、常见错误处理**
65+
66+
在环境搭建过程中可能会遇到一些常见问题,如端口冲突、权限不足等。这时应检查日志文件和系统消息,根据具体错误信息进行调整和修复。
67+
68+
**结语**
69+
70+
以上步骤为12306开源项目运行环境的搭建提供了基本指导。请注意,实际项目中可能需要根据具体情况调整配置和步骤。搭建完成后,你可以自由地进行代码开发、功能测试和性能优化等工作。祝你在12306开源项目的探索和学习之旅中收获满满!

docs/md/12306/项目介绍.md

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,35 @@
1-
# 项目介绍
1+
# **12306开源项目介绍**
22

3-
## 项目描述
4-
5-
12306项目是一个关键的系统,与广大民众的生活和出行息息相关,它不仅包括列车时刻表查询、火车票购买、车票订单管理、车票改签和退票、预约抢票、会员服务、支付、用户管理等多个方面,还涉及到了缓存、消息队列、分库分表等技术在背后支撑着整个系统的高效运行。
3+
## **项目背景:**
4+
12306项目是一个关键的系统,与广大民众的生活和出行息息相关,它不仅包括列车时刻表查询、车票购买、订单管理、改签和退票、预约抢票、会员服务、支付管理、用户管理等多个方面,还涉及到了缓存、消息队列、分库分表等技术在背后支撑着整个系统的高效运行。
65

76
此外,12306的售票服务时间也有所调整,以更好地满足旅客的需求。同时,12306也是学习分布式系统设计的好案例,尤其适合对高并发、分布式系统感兴趣的学习者。通过研究12306项目的架构和技术实现,可以深入理解分布式系统设计的原则和核心知识点。
87

9-
该项目提供了如下2种版本,学习者根据自身使用需求和实际场景需要,可选择合适的版本学习。
10-
11-
- SpringBoot版本:可以直接启动,适合学习springBoot的学习者用于测试和部署。
8+
## **项目优势:**
9+
与其他开源项目相比,12306开源项目具有以下显著优势:
1210

13-
- SpringCloud版本:适合学习者学习微服务架构设计,了解微服务的常用组件,如注册中心、配置中心、熔断限流、服务声明式调用、链路追踪等组件。
11+
- **实战验证**:该项目基于实际运营的12306平台,已经过多年春运等极端场景的考验。
12+
- **高并发处理能力**:能够有效应对亿级用户的并发访问,保证系统稳定性。
13+
- **数据安全保障**:采用了先进的数据加密技术和安全防护措施,确保用户信息安全。
14+
- **用户体验优化**:持续根据用户反馈调整功能设计,提供极致的用户体验。
1415

15-
## 业务功能
16+
## **项目功能业务架构:**
17+
12306开源项目主要包括以下几大功能模块:
1618

19+
1. **车票预订**:包括车次查询、余票信息、座位选择、订单生成等。
20+
2. **支付结算**:集成多种支付方式,提供安全便捷的在线支付解决方案。
21+
3. **用户中心**:管理个人信息、订单历史、常用联系人等用户相关数据。
22+
4. **智能推荐**:根据用户行为和偏好,提供个性化的出行建议。
1723

24+
## **技术架构:**
25+
本项目采用了模块化的设计理念,构建了多层次的技术架构体系:
1826

19-
## 技术架构选型
27+
1. **前端展示层**:采用Vue.js/React等现代JavaScript框架,实现响应式Web界面。
28+
2. **业务逻辑层**:使用Spring Boot等后端框架处理业务逻辑,保障系统的灵活性和扩展性。
29+
3. **数据持久层**:结合MySQL、Redis等数据库技术,实现数据的高效存取和缓存策略。
30+
4. **分布式计算层**:利用Kubernetes等容器编排工具,实现服务的快速部署和自动伸缩。
2031

32+
## **技术栈:**
2133
### 后端技术栈:
2234
| 技术 | 名称 | 版本 | 网址 |
2335
|:--------------------------|:---------------:|---------------:|-------------------------------------------------|
@@ -38,7 +50,6 @@
3850
| TTL | 增强版 ThreadLocal | 2.14.3 | https://github.com/alibaba/transmittable-thread-local|
3951
| Hippo4j | 动态线程池框架 | 1.5.0 | https://hippo4j.cn |
4052

41-
4253
### 前端技术栈:
4354

4455
| 技术 | 名称 | 版本 | 网址 |
@@ -49,6 +60,15 @@
4960
| 路由 | Vue-router | 4.0.3 | https://router.vuejs.org/ |
5061
| 脚手架 | Vue-cli| 5.0.8 | https://cli.vuejs.org/|
5162

52-
5363
## 项目文档
64+
![这是图片](/images/12306/12306项目文档.png "Magic Gardens")
65+
66+
## **常见问题:**
67+
1. **Q**: 项目如何处理高并发情况下的性能瓶颈?
68+
**A**: 通过分布式架构设计、负载均衡、数据库读写分离等技术手段确保系统稳定运行。
69+
70+
2. **Q**: 项目在数据安全方面有哪些措施?
71+
**A**: 实施SSL加密传输、XSS防护、CSRF防护等多层安全机制保护用户数据。
5472

73+
3. **Q**: 如何参与到12306开源项目的代码贡献中?
74+
**A**: 可以通过GitHub等代码托管平台提交Pull Request,参与到代码的编写和审查中。

0 commit comments

Comments
 (0)