05 · AWS 进阶 & 博彩专项¶
官方文档:https://docs.aws.amazon.com/ 博彩架构参考:https://docs.aws.amazon.com/architecture-diagrams/latest/sports-betting-architecture/ iGaming 重点:数据驻留合规 · 多地区低延迟 · Kafka 实时流 · EKS 容器化
1. Route 53 高级路由¶
官方文档:https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/¶
路由策略对比¶
简单路由 → 单一后端,无特殊逻辑
加权路由 → A/B 测试,流量按比例分(weight=70/30)
延迟路由 → 自动路由到最近 AWS Region(博彩多地区必用)
地理路由 → 按用户地理位置路由(合规封锁)
地理邻近路由 → 按物理距离,可手动偏移
故障转移 → Primary/Secondary,健康检查失败自动切换
多值回答 → 返回多个 IP,客户端选择
延迟路由(低延迟投注)¶
# 在 ap-southeast-1(新加坡)和 eu-west-1(爱尔兰)各部署一套
# 东南亚用户自动路由到新加坡,欧洲用户到爱尔兰
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID \
--change-batch '{
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "api.example.com",
"Type": "A",
"SetIdentifier": "singapore",
"Region": "ap-southeast-1",
"AliasTarget": {
"HostedZoneId": "Z1LMS91P8CMLE5",
"DNSName": "alb-sg.ap-southeast-1.elb.amazonaws.com",
"EvaluateTargetHealth": true
}
}
}]
}'
2. AWS WAF(应用层防护)¶
官方文档:https://docs.aws.amazon.com/waf/latest/developerguide/¶
# Terraform 配置 AWS WAF v2
resource "aws_wafv2_web_acl" "igaming_waf" {
name = "igaming-waf"
scope = "REGIONAL" # 或 CLOUDFRONT
default_action { allow {} }
# AWS 托管规则(推荐启用)
rule {
name = "AWSManagedRulesCommonRuleSet"
priority = 10
override_action { none {} }
statement {
managed_rule_group_statement {
name = "AWSManagedRulesCommonRuleSet"
vendor_name = "AWS"
}
}
visibility_config {
cloudwatch_metrics_enabled = true
metric_name = "CommonRuleSet"
sampled_requests_enabled = true
}
}
# 自定义速率限制规则
rule {
name = "LoginRateLimit"
priority = 20
action { block {} }
statement {
rate_based_statement {
limit = 100 # 5分钟内100次
aggregate_key_type = "IP"
scope_down_statement {
byte_match_statement {
field_to_match { uri_path {} }
positional_constraint = "STARTS_WITH"
search_string = "/auth/login"
text_transformation { priority = 0; type = "NONE" }
}
}
}
}
visibility_config {
cloudwatch_metrics_enabled = true
metric_name = "LoginRateLimit"
sampled_requests_enabled = true
}
}
}
3. Amazon MSK(托管 Kafka)¶
官方文档:https://docs.aws.amazon.com/msk/latest/developerguide/¶
博彩场景使用¶
赔率引擎 → Kafka Topic: odds-updates → WebSocket 服务 → 客户端
结算系统 → Kafka Topic: bet-results → 账户服务(扣款/加款)
用户行为 → Kafka Topic: user-events → 风控系统 · 分析系统
创建 MSK 集群¶
aws kafka create-cluster \
--cluster-name "igaming-kafka" \
--broker-node-group-info '{
"InstanceType": "kafka.m5.xlarge",
"ClientSubnets": ["subnet-a", "subnet-b", "subnet-c"],
"SecurityGroups": ["sg-kafka"],
"StorageInfo": {"EbsStorageInfo": {"VolumeSize": 1000}}
}' \
--kafka-version "3.5.1" \
--number-of-broker-nodes 3 \
--encryption-info '{
"EncryptionInTransit": {"ClientBroker": "TLS", "InCluster": true}
}'
Python 生产者/消费者¶
from kafka import KafkaProducer, KafkaConsumer
import json
# 生产者(赔率引擎推送)
producer = KafkaProducer(
bootstrap_servers=['b-1.kafka.region.amazonaws.com:9092'],
security_protocol='SSL',
value_serializer=lambda v: json.dumps(v).encode()
)
producer.send('odds-updates', {
'match_id': '12345',
'market': 'match_winner',
'home': 1.85,
'away': 3.20,
'draw': 3.50,
'timestamp': time.time()
})
# 消费者(WebSocket 服务订阅)
consumer = KafkaConsumer(
'odds-updates',
bootstrap_servers=['b-1.kafka.region.amazonaws.com:9092'],
group_id='websocket-service',
auto_offset_reset='latest',
value_deserializer=lambda m: json.loads(m.decode())
)
for message in consumer:
odds = message.value
await broadcast_to_subscribers(odds['match_id'], odds)
4. AWS Outposts & Local Zones(合规数据驻留)¶
官方文档¶
- Outposts:https://docs.aws.amazon.com/outposts/latest/userguide/
- Local Zones:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-local-zones
使用场景¶
Local Zones(推荐大多数场景):
AWS 在主要城市部署的小型基础设施扩展
延迟 < 10ms 到最终用户
支持:EC2、EBS、VPC、ALB
适合:低延迟投注处理、地理合规
Outposts(严格合规场景):
AWS 机架放在你的数据中心
完全本地运行,数据不离境
适合:对数据出境有严格要求的市场(印度、中国等)
5. EKS(托管 Kubernetes)¶
官方文档:https://docs.aws.amazon.com/eks/latest/userguide/¶
创建 EKS 集群¶
# 使用 eksctl(推荐)
# 安装:https://eksctl.io/installation/
eksctl create cluster \
--name igaming-prod \
--region ap-southeast-1 \
--nodegroup-name standard-workers \
--node-type m7i.xlarge \
--nodes 3 \
--nodes-min 2 \
--nodes-max 20 \
--managed
# 更新 kubeconfig
aws eks update-kubeconfig --name igaming-prod --region ap-southeast-1
# 验证
kubectl get nodes
Node Group 自动扩容¶
# Cluster Autoscaler(官方文档:https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
6. CloudFront CDN¶
官方文档:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/¶
# Terraform 配置 CloudFront
resource "aws_cloudfront_distribution" "igaming" {
origin {
domain_name = aws_s3_bucket.assets.bucket_regional_domain_name
origin_id = "S3-assets"
}
origin {
domain_name = aws_alb.main.dns_name
origin_id = "ALB-api"
custom_origin_config {
http_port = 80
https_port = 443
origin_protocol_policy = "https-only"
}
}
enabled = true
default_root_object = "index.html"
aliases = ["www.example.com"]
# 静态资源(长期缓存)
default_cache_behavior {
target_origin_id = "S3-assets"
viewer_protocol_policy = "redirect-to-https"
compress = true
min_ttl = 0
default_ttl = 86400
max_ttl = 31536000
allowed_methods = ["GET", "HEAD"]
cached_methods = ["GET", "HEAD"]
forwarded_values {
query_string = false
cookies { forward = "none" }
}
}
# API(不缓存)
ordered_cache_behavior {
path_pattern = "/api/*"
target_origin_id = "ALB-api"
viewer_protocol_policy = "https-only"
min_ttl = 0
default_ttl = 0
max_ttl = 0
allowed_methods = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
cached_methods = ["GET", "HEAD"]
forwarded_values {
query_string = true
headers = ["Authorization", "Origin", "Host"]
cookies { forward = "all" }
}
}
viewer_certificate {
acm_certificate_arn = aws_acm_certificate.main.arn
ssl_support_method = "sni-only"
minimum_protocol_version = "TLSv1.2_2021"
}
}
官方文档汇总¶
| 服务 | 官方文档链接 |
|---|---|
| Route 53 | https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ |
| AWS WAF v2 | https://docs.aws.amazon.com/waf/latest/developerguide/ |
| Amazon MSK | https://docs.aws.amazon.com/msk/latest/developerguide/ |
| EKS | https://docs.aws.amazon.com/eks/latest/userguide/ |
| CloudFront | https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ |
| Local Zones | https://aws.amazon.com/about-aws/global-infrastructure/localzones/ |
| AWS 博彩架构 | https://docs.aws.amazon.com/architecture-diagrams/latest/sports-betting-architecture/ |
最后更新:2025-04