Serverless Architecture ile Backend Geliştirme
Serverless architecture, infrastructure yönetimi olmadan backend geliştirme sunar.
Serverless Nedir?
Server yönetmeden kod çalıştırma:
- Pay-per-execution
- Auto-scaling
- Zero maintenance
- Event-driven
AWS Lambda Example
// Lambda function
exports.handler = async (event) => {
const { name } = JSON.parse(event.body);
const response = {
statusCode: 200,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
},
body: JSON.stringify({
message: `Hello ${name}!`,
timestamp: new Date().toISOString()
})
};
return response;
};
Cloudflare Workers
// Worker script
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
const url = new URL(request.url);
// Edge caching
const cache = caches.default;
let response = await cache.match(request);
if (!response) {
response = await fetch(request);
// Cache for 1 hour
const headers = new Headers(response.headers);
headers.set('Cache-Control', 'public, max-age=3600');
response = new Response(response.body, {
status: response.status,
headers
});
event.waitUntil(cache.put(request, response.clone()));
}
return response;
}
Vercel Edge Functions
// api/hello.js
export const config = {
runtime: 'edge',
};
export default async function handler(request) {
const { searchParams } = new URL(request.url);
const name = searchParams.get('name') || 'World';
return new Response(
JSON.stringify({ message: `Hello ${name}!` }),
{
headers: { 'Content-Type': 'application/json' }
}
);
}
Database - Serverless
Supabase (PostgreSQL)
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
process.env.SUPABASE_URL,
process.env.SUPABASE_KEY
);
// Query
const { data, error } = await supabase
.from('users')
.select('*')
.eq('status', 'active');
Planetscale (MySQL)
import { connect } from '@planetscale/database';
const conn = connect({
url: process.env.DATABASE_URL
});
const results = await conn.execute(
'SELECT * FROM users WHERE id = ?',
[userId]
);
File Storage - S3
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
const s3 = new S3Client({ region: 'us-east-1' });
async function uploadFile(file) {
const command = new PutObjectCommand({
Bucket: 'my-bucket',
Key: file.name,
Body: file.buffer,
ContentType: file.mimetype
});
await s3.send(command);
return `https://my-bucket.s3.amazonaws.com/${file.name}`;
}
Event-Driven Architecture
// SQS Queue trigger
exports.handler = async (event) => {
for (const record of event.Records) {
const message = JSON.parse(record.body);
// Process message
await processOrder(message);
}
};
// S3 upload trigger
exports.handler = async (event) => {
for (const record of event.Records) {
const bucket = record.s3.bucket.name;
const key = record.s3.object.key;
// Process uploaded file
await processImage(bucket, key);
}
};
Cold Start Optimization
// Keep function warm
let cachedDb = null;
async function getDbConnection() {
if (cachedDb) return cachedDb;
cachedDb = await connectToDatabase();
return cachedDb;
}
exports.handler = async (event) => {
const db = await getDbConnection();
// Use cached connection
};
Cost Optimization
AWS Lambda Pricing:
- First 1M requests: FREE
- $0.20 per 1M requests
- $0.00001667 per GB-second
Example:
- 10M requests/month
- 512 MB memory
- 200ms duration
- Cost: ~$18/month
Serverless ile scale edin, maliyet düşürün!