Разделение системы на независимые сервисы:
// Вместо монолита
class OrderController {
public function create() {
// Логика заказа, оплаты, доставки...
}
}
// Разделяем на сервисы
class OrderService {
public function create() {
$this->paymentService->charge();
$this->deliveryService->schedule();
}
}
# MySQL репликация
CHANGE MASTER TO MASTER_HOST='master', MASTER_USER='repl';
Разделение данных по серверам:
// Определение шарда по user_id
$shard = $userId % 4; // 4 сервера
$connection = getShardConnection($shard);
Пример Redis:
$cache = new RedisCache();
$data = $cache->get('key', function() {
return $this->getExpensiveData();
});
// Вместо синхронной обработки
$order->process();
// Отправляем в очередь
Queue::push(new ProcessOrder($order));
// Stateless аутентификация
$token = JWT::encode(['user_id' => 123], $secret);
$users = User::query()
->where('active', true)
->paginate(20);
query {
users(first: 10) {
edges {
node {
id
name
}
}
}
}
Пример метрик:
# Пользовательская метрика
api_requests_total{endpoint="/orders",status="200"} 42
Пример конфига Kubernetes:
autoscaling:
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 70
// Плохо
foreach ($ids as $id) {
$user = User::find($id);
}
// Хорошо
$users = User::whereIn('id', $ids)->get();
Масштабируемая система требует комплексного подхода - от архитектурных решений до оптимизации кода. Ключевые принципы: горизонтальное масштабирование, разделение ответственности, асинхронность, эффективная работа с данными и постоянный мониторинг. Начинайте с простого, но проектируйте с учетом будущего роста.