© 2026 Laravel

Redis, WebSocket, Microservices (Deep Dive)

4 phút đọc 33 lượt xem
#laravel #redis #websocket #microservices #architecture

Đây là level mà đa số developer không chạm tới.

Nhưng trong production thực tế, bạn sẽ cần:

  • Cache tốc độ cao
  • Real-time system
  • Hệ thống phân tán

Đây là nơi Laravel kết hợp với kiến trúc hiện đại.

#1. Redis Deep Dive

#Redis là gì?

In-memory data store → cực nhanh

#Dùng Redis trong Laravel

#Config

CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis

#1. Cache với Redis

Cache::put('user:1', $user, 60);

$user = Cache::get('user:1');

#2. Cache Pattern (Quan trọng)

#Cache Aside (phổ biến nhất)

$user = Cache::remember("user:$id", 60, function () use ($id) {
    return User::find($id);
});

Flow:

  • Check cache
  • Miss → query DB
  • Save cache

#Cache Invalidation (khó nhất)

Cache::forget("user:$id");

Rule:

  • Update DB → clear cache

#3. Redis Queue

SendEmailJob::dispatch($user);

Redis giúp queue nhanh hơn database rất nhiều

#4. Pub/Sub (Real-time)

Redis::publish('channel', json_encode($data));

Dùng cho WebSocket

#⚠️ Lưu ý

  • Redis không phải DB chính
  • Dữ liệu có thể mất nếu không config persistence

#2. WebSocket & Broadcasting

#Vấn đề

HTTP là stateless → không real-time

#Giải pháp: WebSocket

Kết nối 2 chiều real-time

#Laravel Broadcasting

#Event

class OrderCreated implements ShouldBroadcast
{
    public function broadcastOn()
    {
        return ['orders'];
    }
}

#Frontend (JS)

Echo.channel('orders')
    .listen('OrderCreated', (e) => {
        console.log(e);
    });

#Stack phổ biến

  • Laravel Echo
  • Pusher / Soketi

#Real Case

  • Chat app
  • Notification realtime
  • Live dashboard

#⚠️ Tips

  • Không broadcast quá nhiều event
  • Dùng queue cho broadcast

#3. Microservices với Laravel

#Khi nào cần?

  • System lớn
  • Team nhiều
  • Domain phức tạp

#Kiến trúc cơ bản

API Gateway
User Service
Order Service
Payment Service

#Giao tiếp giữa service

#1. HTTP API

Http::get('http://order-service/api/orders');

#2. Message Queue (advanced)

  • Kafka
  • RabbitMQ

Event-driven

#Ví dụ flow Order

User → API → Order Service → Event → Payment Service

#Thực tế

  • Không nên dùng microservices quá sớm
  • Monolith tốt vẫn scale được

#4. Event-Driven System (Advanced)

#Flow

Event → Queue → Multiple Listener

#Ví dụ

OrderCreated::dispatch($order);

Listeners:

  • SendEmail
  • UpdateInventory
  • PushNotification

#Ưu điểm

  • Decoupled
  • Scalable

#Nhược điểm

  • Khó debug
  • Event chaining phức tạp

#5. Real Architecture (Production)

Một hệ thống thực tế:

  • Laravel (API)
  • Redis (cache + queue)
  • MySQL (DB)
  • WebSocket server
  • Nginx + Load balancer

#6. Anti-pattern (rất quan trọng)

#❌ 1. Lạm dụng Redis

Cache sai → data inconsistency

#❌ 2. Broadcast mọi thứ

Tốn tài nguyên

#❌ 3. Microservices sớm

Over-engineering

#7. Tips & Tricks (thực chiến)

  • Cache theo key rõ ràng: user:{id}
  • Dùng TTL hợp lý
  • Log event để debug
  • Tách domain rõ khi dùng microservices

#8. Mindset Senior

Junior:

“Dùng Redis cho nhanh”

Senior:

“Phải hiểu consistency, trade-off và kiến trúc hệ thống”

#9. Câu hỏi thường gặp (Interview nâng cao)

1. Redis khác gì so với database?

Redis lưu in-memory, nhanh hơn nhưng không đảm bảo persistence như DB

2. Khi nào nên dùng WebSocket?

Khi cần real-time như chat, notification

3. Pub/Sub trong Redis là gì?

Là cơ chế publish message và subscriber nhận message

4. Microservices có nhược điểm gì?

Phức tạp, khó debug, cần infra mạnh

5. Event-driven architecture là gì?

Kiến trúc dựa trên event để tách các thành phần hệ thống

6. Làm sao đảm bảo consistency khi dùng cache?

Dùng cache invalidation hoặc write-through strategy

7. Khi nào không nên dùng Redis?

Khi dữ liệu cần consistency cao hoặc không cần tốc độ cao

#Kết luận

Advanced topics giúp bạn:

  • Xây dựng hệ thống real-time
  • Scale hệ thống lớn
  • Áp dụng kiến trúc hiện đại

Đây là level của Senior → Architect thực thụ.