Giới thiệu
Laravel là một framework PHP phổ biến để xây dựng ứng dụng web có khả năng mở rộng, hiệu suất cao.
Trong bài viết này, chúng ta sẽ học cách sử dụng serverless Redis để mở rộng ứng dụng Laravel bằng cách lưu trữ session và dữ liệu cache của Laravel trong một instance Redis serverless.
Điều kiện tiên quyết
Trước khi bắt đầu, bạn sẽ cần những thứ sau:
- Tài khoản Upstash: Nếu bạn chưa có, bạn có thể đăng ký miễn phí, không cần thẻ tín dụng.
- Nếu bạn chưa cài Laravel, bạn có thể làm theo các bước tại đây: Cài đặt Laravel 1-click
Tổng quan kiến trúc
Thay vì chạy Laravel trên một máy chủ đơn lẻ, hãy xem xét kịch bản sau:
- Một ứng dụng Laravel chạy trên hai máy chủ web.
- Một Load Balancer đơn lẻ chịu trách nhiệm định tuyến request đến hai máy chủ web.
- Một máy chủ cơ sở dữ liệu MySQL, dùng để lưu trữ dữ liệu ứng dụng.
- Cụm Upstash Serverless Redis chịu trách nhiệm cache dữ liệu và lưu trữ session người dùng.
Sơ đồ:

Serverless Redis là gì?
Serverless Redis là sản phẩm cơ sở dữ liệu hoàn toàn được quản lý như một dịch vụ, nơi giá cả dựa trên mỗi lệnh, nên bạn chỉ bị tính phí cho những gì bạn thực sự sử dụng.
Cách đó bạn không phải over-provision máy chủ của mình, và có thể mở rộng ứng dụng khi cần.
Tại sao dùng Serverless Redis?
Mặc định, Laravel sẽ lưu session người dùng trong file trên ổ đĩa của máy chủ web. Cách đó nếu load balancer chuyển request người dùng sang một máy chủ khác, session người dùng sẽ bị mất.
Đây là lý do quan trọng phải có một nơi tập trung để lưu session người dùng và cache ứng dụng, để chúng có thể được chia sẻ giữa các request và trên nhiều máy chủ, và không bị mất mỗi khi load balancer chuyển request sang máy chủ khác.
Tất nhiên, bạn cũng có thể dùng cơ sở dữ liệu của mình để lưu session và cache, nhưng để hiệu suất tốt hơn, khuyến nghị dùng Redis. Nếu muốn tìm hiểu thêm về lợi ích hiệu suất của các tùy chọn khác nhau, xem bài viết hay này: Driver cache Laravel nào tốt nhất cho hiệu suất?.
Mở rộng ngang vs Mở rộng dọc
Chỉ vài từ về sự khác biệt giữa mở rộng ngang và dọc:
- Khi bạn có một máy chủ đơn lẻ, bạn có thể mở rộng nó theo chiều dọc bằng cách thêm tài nguyên cho nó. Ví dụ, bạn có thể thêm lõi CPU, RAM, hoặc dung lượng ổ cứng để scale-up.
- Mở rộng ngang ngược lại, là khi bạn thêm nhiều máy chủ hơn chịu trách nhiệm phục vụ request để scale-out.
Đây là ví dụ đơn giản về mở rộng ngang so với dọc:

Khi mở rộng ngang một ứng dụng, quan trọng là xử lý session người dùng và dữ liệu cache theo cách có khả năng mở rộng.
Tạo cụm Serverless Redis
Với Upstash, bạn có thể tạo cụm Serverless Redis trong 30 giây bằng cách làm theo các bước sau:
- Đăng nhập vào tài khoản Upstash.
- Nhấn nút Create Database.
- Nhập tên cụm Redis của bạn và chọn khu vực.
- Nhấn nút Create.
Đó là tất cả! Bây giờ bạn có một cụm Serverless Redis sẵn sàng sử dụng.
Hãy ghi nhớ endpoint của cụm Redis cùng với mật khẩu và cổng.
Cấu hình Laravel với Serverless Redis
Bây giờ bạn đã có cụm Serverless Redis, bạn có thể cấu hình Laravel để sử dụng nó như bất kỳ instance Redis nào khác.
Cài đặt gói Predis
Trước đây, bạn sẽ dùng extension PHP Redis để kết nối với cụm Redis. Tuy nhiên, giờ bạn có thể dùng gói Predis thay thế.
Để cài đặt gói Predis, chạy lệnh sau:
composer require predis/predisTiếp theo, vào file .env của dự án Laravel và cập nhật các dòng sau:
REDIS_HOST=your_upstash_redis_endpoint
REDIS_PASSWORD=your_upstash_redis_password
REDIS_PORT=your_upstash_redis_portKhi thay đổi chi tiết Redis, hãy chắc chắn cũng thay đổi cache driver và session driver thành redis:
CACHE_DRIVER=redis
SESSION_DRIVER=redisCuối cùng, xóa config cache bằng lệnh sau:
php artisan config:clearCách đó ứng dụng Laravel của bạn sẽ dùng cụm Serverless Redis để lưu cache và dữ liệu session.
Kết luận
Sử dụng Laravel với Serverless Redis là cách tuyệt vời để mở rộng ứng dụng. Ngay cả khi bạn chạy Laravel trên cụm Kubernetes, bạn vẫn có thể dùng cụm Serverless Redis để lưu session người dùng và dữ liệu cache theo cách có khả năng mở rộng.
Để biết thêm thông tin về Upstash, xem tài liệu.
Để biết thêm về cách mở rộng ứng dụng Laravel, xem bài viết sau:
- Cách thiết lập ứng dụng Laravel 6 có khả năng mở rộng sử dụng Managed Databases và Object Storage