Находился ли последний проект в облаке
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Находился ли последний проект в облаке?
Да, полностью на облаке. Это была AWS инфраструктура для e-commerce платформы с масштабом в десятки миллионов запросов в день.
AWS архитектура проекта
Compute
EC2 для приложения
На prod: 3 EC2 instance (m5.2xlarge) в разных AZ
- Auto Scaling Group: 3-20 инстансов
- AMI с Java 17 + Spring Boot + Docker
- EBS volume для логов и локального кеша
Lambda для асинхронных операций
- Order processing (5-10 минут execution time)
- Image resizing (из S3 события)
- Email notifications (SQS → Lambda)
- Scheduled reports (EventBridge CRON)
ECS/Fargate для обработки задач
Сборка отчётов, экспорт данных:
- Task definition: 2GB RAM, 1 CPU
- Fargate запуск: платишь только за время выполнения
- CloudWatch logs для мониторинга
Database
RDS PostgreSQL (Multi-AZ)
db.r5.2xlarge instance
- 16 vCPU, 64 GB RAM
- Multi-AZ для failover
- Automated backups: 30 дней
- Read replica для аналитики
- 200 IOPS, provisioned
ElastiCache Redis (Cluster Mode)
- Session cache: cache.r6g.xlarge × 3
- User preferences
- Rate limiting counters
- Product recommendations cache
- TTL от 5 минут до 1 часа
DynamoDB для high-volume данных
- Product views (analytics)
- User activity log
- On-demand billing
- TTL для автоудаления старых записей
- Global secondary indexes для queries
Storage
S3 для медиа
Bucket structure:
s3://images/products/{id}/
s3://images/users/{id}/profile.jpg
s3://backups/database/{date}/
- CloudFront distribution в front
- Versioning включён
- Lifecycle policy: Glacier после 90 дней
- Bucket encryption (SSE-S3)
Networking
VPC с приватными подсетями
- Public subnets для ALB (2 AZ)
- Private subnets для EC2/RDS (2 AZ)
- NAT Gateway для outbound traffic
- Security Groups: минимальные права
ALB (Application Load Balancer)
- Health check: /health endpoint
- Target groups по URL path:
- /api/v1/products → products-service
- /api/v1/orders → order-service
- Sticky sessions для cart
- SSL/TLS termination
CloudFront CDN
- Origin: S3, ALB
- Cache behaviors:
- /api/* → не кешировать
- /static/* → кешировать 1 год
- /images/* → кешировать 1 неделя
Messaging & Queues
SQS для асинхронности
Queues:
- orders-to-process (delay: 1 min)
- emails-to-send (retention: 14 days)
- notifications (FIFO для порядка)
Consumer: EC2 приложение читает 10 сообщений за раз
DLQ для failed messages
SNS для notifications
Topics:
- order-created (подписаны: email, SMS, push)
- payment-failed (подписаны: alert, support, user)
Monitoring & Logging
CloudWatch
Metrics:
- EC2: CPU, Memory, Disk
- RDS: Connections, Query time, Replication lag
- ALB: Request count, Target health
- Lambda: Invocations, Duration, Errors
Alarms:
- CPU > 70% → scale up
- RDS connections > 80% → alert
- Lambda error rate > 1% → alert
CloudWatch Logs
Log Groups:
- /aws/ec2/application (из приложения)
- /aws/rds/instance (slow query log)
- /aws/lambda/functions
Log retention: 30 дней
Log Insights queries для анализа
X-Ray для distributed tracing
Tracing:
- HTTP requests: ALB → EC2 → RDS
- Async: SQS → Lambda → SNS
- Duration, errors, bottlenecks
Code примеры для AWS
Spring Boot конфиг для AWS
@Configuration
public class AWSConfig {
@Bean
public AmazonSQS amazonSQS() {
return AmazonSQSClientBuilder.standard()
.withRegion(Regions.EU_WEST_1)
.build();
}
@Bean
public AmazonS3 amazonS3() {
return AmazonS3ClientBuilder.standard()
.withRegion(Regions.EU_WEST_1)
.build();
}
@Bean
public AmazonCloudWatch cloudWatch() {
return AmazonCloudWatchClientBuilder.standard()
.withRegion(Regions.EU_WEST_1)
.build();
}
}
Lambda Function (Java)
public class OrderProcessorHandler implements RequestHandler<SQSEvent, Void> {
private final OrderService orderService;
private final Logger logger = LoggerFactory.getLogger(this.class);
@Override
public Void handleRequest(SQSEvent event, Context context) {
for (SQSMessage message : event.getRecords()) {
try {
OrderEvent order = objectMapper.readValue(
message.getBody(),
OrderEvent.class
);
orderService.processOrder(order);
logger.info("Order {} processed", order.getId());
} catch (Exception e) {
logger.error("Failed to process order", e);
// Dead Letter Queue обработает
throw e;
}
}
return null;
}
}
S3 Upload Service
@Service
public class S3Service {
private final AmazonS3 s3Client;
private static final String BUCKET = "my-app-images";
public String uploadFile(String key, InputStream input, long size) {
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(size);
metadata.setContentType("image/jpeg");
s3Client.putObject(
new PutObjectRequest(BUCKET, key, input, metadata)
.withCannedAcl(CannedAccessControlList.PublicRead)
);
return s3Client.getUrl(BUCKET, key).toString();
}
public void deleteFile(String key) {
s3Client.deleteObject(BUCKET, key);
}
}
CloudWatch Metrics
@Service
public class OrderMetrics {
private final AmazonCloudWatch cloudWatch;
public void recordOrderCreated(Order order) {
MetricDatum datum = new MetricDatum()
.withMetricName("OrderCreated")
.withValue(1.0)
.withUnit(StandardUnit.Count)
.withTimestamp(new Date())
.withDimensions(
new Dimension().withName("Environment").withValue("prod")
);
cloudWatch.putMetricData(
new PutMetricDataRequest()
.withNamespace("CustomApp")
.withMetricData(datum)
);
}
}
Deployment Pipeline
1. Git push → CodeCommit
2. CodePipeline triggered
3. CodeBuild:
- mvn clean package
- docker build
- docker push to ECR
4. CodeDeploy:
- Rolling deployment (1 instance at a time)
- Health checks
- Rollback на ошибку
5. CloudWatch monitors
Cost Optimization
1. Reserved Instances: 40% скидка
- 1 year commitment на EC2 m5.2xlarge
- 5 RDS instances reserved
2. Spot Instances для non-critical:
- Batch processing: 70% скидка
- Cache warm-up: 80% скидка
3. S3 Lifecycle:
- Standard (current): $0.023/GB
- Glacier (3 месяца): $0.004/GB
4. Lambda вместо EC2:
- Email sending: на спрос
- Image resizing: по использованию
Плюсы облака
✅ Скалируемость - Auto Scaling, load balancing ✅ Высокая доступность - Multi-AZ, failover автоматический ✅ Мониторинг - CloudWatch из коробки ✅ Безопасность - VPC, IAM, encryption ✅ Отсутствие операций - AWS управляет железом ✅ Бекапы - Automated, versioning
Минусы облака
❌ Cost - Легко потратить больше чем планировал ❌ Complexity - Много сервисов для изучения ❌ Vendor lock-in - Сложно мигрировать ❌ Network latency - Иногда медленнее on-prem
Альтернативы
| Облако | Когда |
|---|---|
| AWS | Нужна enterprise поддержка, огромный ecosystem |
| Google Cloud | BigQuery, Machine Learning |
| Azure | Интеграция с Microsoft stack |
| DigitalOcean | Простота, малые проекты |
| On-Premises | Очень strict compliance, high-speed network |
TL;DR
Да, последний проект был полностью на AWS. E-commerce платформа требовала:
✅ Масштабируемости (Auto Scaling) ✅ Высокой доступности (Multi-AZ, RDS failover) ✅ Асинхронности (SQS, Lambda) ✅ Мониторинга (CloudWatch, X-Ray) ✅ Storage (S3, ElastiCache)
На prod: EC2 + RDS + Redis + S3 + SQS + Lambda + CloudWatch
На staging: Всё то же, но меньше инстансов (cost optimize)
Key skill: Понимание облачной архитектуры, cost optimization, monitoring — обязательные для senior java разработчика в 2024.