| 问题 | 关键词/关键概念 |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------- |
| 什么是专线?| **网络专线**:点对点专用网络连接<br>**云专线**:本地IDC到云VPC的专用通道<br>**特点**:低延迟、高带宽、安全可靠、SLA保障<br>**对比VPN**:物理隔离、性能稳定、成本高 |
| 为什么云原生对应用启动速度要求高?| **弹性伸缩**:快速扩容应对流量<br>**按需计费**:启动快省钱<br>**容器调度**:频繁创建销毁<br>**故障恢复**:快速替换故障实例<br>**滚动更新**:减少更新时间窗口 |
| | |
| 什么是IaaS、PaaS、SaaS?| **IaaS**:基础设施即服务、虚拟机/存储/网络、AWS EC2<br>**PaaS**:平台即服务、运行环境/中间件、Heroku/GAE<br>**SaaS**:软件即服务、完整应用、Office365/Salesforce |
| 什么是Serverless?| **无服务器架构**:无需管理服务器<br>**FaaS**:函数即服务、事件驱动<br>**按需付费**:按调用次数和执行时间<br>**自动伸缩**:0到N的弹性<br>**AWS Lambda/阿里云FC** |
| 什么是云计算?| **定义**:通过网络提供可伸缩的IT资源<br>**特征**:按需自助、弹性伸缩、资源池化、按量付费、网络访问<br>**服务模式**:IaaS/PaaS/SaaS/FaaS |
| 什么是公有云、私有云、混合云?| **公有云**:多租户共享、AWS/阿里云、成本低灵活<br>**私有云**:单一组织专用、OpenStack、安全可控<br>**混合云**:公有+私有结合、数据本地敏感应用上云 |
| 什么是无状态?为啥Serverless无状态?| **无状态**:不保存客户端会话、请求独立、可任意扩缩容<br>**Serverless无状态**:函数执行完即销毁、无持久存储、状态外置到数据库/缓存、保证横向扩展 |
# 云原生核心概念详解
## **云原生应用启动速度要求原因**
### **1. 弹性伸缩需求**
```yaml
# K8s HPA示例
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
minReplicas: 2
maxReplicas: 100
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 50
# 流量突增时需要快速扩容
# 启动慢会导致:
# - 扩容延迟
# - 用户请求失败
# - 雪崩效应
```
### **2. 成本优化**
```Java
传统应用启动:2-3分钟
├── JVM预热
├── 连接池初始化
├── 缓存加载
└── 依赖注入
云原生优化:5-10秒
├── GraalVM原生镜像
├── 懒加载
├── 并行初始化
└── 预热容器池
```
### **3. 容器编排效率**
- **Pod调度**:快速启动减少Pending时间
- **滚动更新**:缩短发布窗口
- **故障转移**:快速恢复服务
- **Spot实例**:抢占式实例需快速迁移
## **云服务模型对比**
|层级|IaaS|PaaS|SaaS|FaaS|
|---|---|---|---|---|
|**用户管理**|OS以上|应用+数据|仅数据|仅函数代码|
|**提供商管理**|硬件+虚拟化|硬件到运行时|全栈|除函数外全部|
|**示例**|EC2、ECS|App Engine、Heroku|Gmail、Slack|Lambda、FC|
|**灵活性**|高|中|低|中|
|**复杂度**|高|中|低|低|
|**成本**|按资源|按使用|按订阅|按调用|
## **Serverless架构**
### **核心特征**
```javascript
// 传统服务器应用
class UserService {
constructor() {
this.db = new Database(); // 持久连接
this.cache = new Cache(); // 状态保持
}
async getUser(id) {
return await this.db.query(id);
}
}
// Serverless函数
exports.handler = async (event) => {
// 每次执行都是全新环境
const db = await getDBConnection(); // 从连接池获取
const user = await db.query(event.userId);
// 函数执行完毕,所有资源释放
return {
statusCode: 200,
body: JSON.stringify(user)
};
};
```
### **Serverless优势**
1. **零运维**:无需管理服务器
2. **自动扩缩**:0到无限扩展
3. **按需付费**:精确到毫秒级
4. **事件驱动**:完美契合事件模型
### **Serverless限制**
- **冷启动**:首次调用延迟高
- **执行时限**:通常15分钟内
- **无状态**:不能保存会话
- **调试困难**:本地环境差异
## **云部署模型详解**
```Java
公有云(Public Cloud)
├── 优点:成本低、弹性强、免运维
├── 缺点:安全性、合规性、vendor lock-in
└── 场景:互联网应用、临时资源
私有云(Private Cloud)
├── 优点:安全可控、定制化、合规
├── 缺点:成本高、运维复杂、弹性受限
└── 场景:金融、政府、敏感数据
混合云(Hybrid Cloud)
├── 优点:灵活性、成本平衡、风险分散
├── 缺点:架构复杂、网络延迟、管理难
└── 场景:数据本地+计算上云、灾备
多云(Multi-Cloud)
├── 优点:避免厂商锁定、最佳服务选择
├── 缺点:管理复杂、成本控制难
└── 场景:跨国企业、高可用要求
```
## **无状态设计原则**
### **有状态 vs 无状态**
```java
// 有状态服务
@Service
public class ShoppingCart {
private Map<String, List<Item>> userCarts = new HashMap<>();
public void addItem(String userId, Item item) {
userCarts.get(userId).add(item); // 内存中保存状态
}
}
// 无状态服务
@Service
public class ShoppingCart {
@Autowired
private RedisTemplate redis; // 状态外置
public void addItem(String userId, Item item) {
redis.opsForList().rightPush("cart:" + userId, item);
}
}
```
### **无状态优势**
1. **水平扩展**:任意增减实例
2. **故障恢复**:实例可随意替换
3. **负载均衡**:请求可路由到任意实例
4. **简化部署**:无需考虑状态迁移
## **专线(Direct Connect)详解**
### **网络连接方式对比**
|连接方式|公网|VPN|专线|
|---|---|---|---|
|**安全性**|低|中|高|
|**稳定性**|低|中|高|
|**延迟**|高(20-100ms)|中(10-50ms)|低(2-10ms)|
|**带宽**|受限|受限|1G-100G|
|**成本**|低|中|高|
|**SLA**|无|部分|99.95%+|
### **专线架构**
```Java
企业数据中心
↓ (路由器)
专线接入点(POP)
↓ (物理专线)
云服务商接入点
↓ (虚拟接口)
VPC私有网络
```
### **专线使用场景**
1. **混合云部署**:本地IDC与云VPC互通
2. **大数据传输**:TB级数据迁移
3. **实时同步**:数据库主从同步
4. **低延迟要求**:金融交易、游戏
## **云原生最佳实践**
### **应用优化**
```dockerfile
# 多阶段构建减小镜像
FROM maven:3.8 AS builder
COPY . /app
RUN mvn package
# 使用精简基础镜像
FROM openjdk:17-jdk-alpine
COPY --from=builder /app/target/app.jar /app.jar
# JVM优化启动
ENTRYPOINT ["java",
"-XX:+UseContainerSupport",
"-XX:MaxRAMPercentage=75.0",
"-XX:InitialRAMPercentage=50.0",
"-Xss256k",
"-jar", "/app.jar"]
```
### **12-Factor原则**
1. **基准代码**:一份代码多处部署
2. **依赖**:显式声明依赖
3. **配置**:存储在环境中
4. **后端服务**:当作附加资源
5. **构建发布运行**:严格分离
6. **进程**:无状态无共享
7. **端口绑定**:通过端口提供服务
8. **并发**:进程模型扩展
9. **易处理**:快速启动优雅终止
10. **环境等价**:开发生产一致
11. **日志**:事件流
12. **管理进程**:一次性进程