Giới thiệu
Mùa hè này, tôi muốn thách thức bản thân để thực hành với AWS. Tôi đã làm việc với các dịch vụ đám mây trên nhiều dự án và muốn có hiểu biết sâu sắc hơn về các dịch vụ cốt lõi. Sau một thời gian tìm kiếm, tôi đã tìm thấy một dự án hoàn hảo để bắt đầu - Cloud Resume Challenge. Thử thách này bao gồm các dịch vụ và khái niệm AWS trong nhiều lĩnh vực, bao gồm S3, CloudFront, Route 53, Lambda, DynamoDB, API Gateway và SAM. Qua thử thách này, tôi đã hiểu rõ hơn về cách các dịch vụ này hoạt động.
Cấu Trúc Dự Án
Trong bước này của thử thách, tôi cần tạo một cơ sở dữ liệu backend, một chương trình JavaScript frontend và một hàm Lambda có khả năng gửi dữ liệu giữa chúng. Các yêu cầu của dự án yêu cầu cấu trúc này để đảm bảo tách biệt logic giữa frontend, backend và cơ sở dữ liệu, từ đó tăng cường bảo mật. Nếu tất cả mã và truy cập cơ sở dữ liệu được xử lý trực tiếp trong frontend, trang web sẽ dễ bị tấn công như giả mạo dữ liệu, SQL injection hoặc lộ khóa API.
Thực Hiện Kết Nối
Bước đầu tiên tôi thực hiện là tìm một cách đơn giản để gửi và nhận dữ liệu từ JavaScript frontend đến Lambda và cơ sở dữ liệu backend. Bước này tương đối dễ dàng. Sau khi thực hiện thành công, tôi chỉ cần gửi giá trị lượt truy cập tăng dần và thiết lập nó như một API trong Amazon API Gateway.
Vấn Đề Phát Sinh
Chỉ vài ngày sau, tôi nhận ra một lỗi lớn trong bộ đếm tôi đã tạo. Bộ đếm được thiết kế để tăng lên mỗi khi trang web được truy cập, ngay cả khi tải lại. Điều này rõ ràng không phải là ý định của bộ đếm lượt truy cập và sẽ không phản ánh chính xác số lượng khách truy cập thực sự. Tôi đã vật lộn để tìm ra một cách đáng tin cậy và phổ quát để đảm bảo rằng bộ đếm lượt truy cập chỉ tăng lên cho những khách truy cập mới và duy nhất.
Phương Pháp Đầu Tiên: Ghi Nhận Địa Chỉ IP
Ý tưởng đầu tiên của tôi là ghi lại địa chỉ IP của người dùng trong cơ sở dữ liệu, cũng như giá trị bộ đếm lượt truy cập. Cuối cùng, tôi đã quyết định không thực hiện ý tưởng đó vì hai lý do. Đầu tiên, IP không thể chứng minh một cách đáng tin cậy rằng mỗi người dùng là duy nhất, vì có nhiều trường hợp mà cùng một IP có thể được sử dụng bởi nhiều người dùng khác nhau, hoặc cùng một người dùng có thể sử dụng nhiều IP khác nhau. Thứ hai, tôi cảm thấy rằng đối với một dự án cá nhân đơn giản như thế này, việc thu thập dữ liệu người dùng cá nhân như địa chỉ IP là không cần thiết và đi ngược lại nguyên tắc bảo mật dữ liệu tốt.
Phương Pháp Thứ Hai: Sử Dụng Công Cụ Bên Ngoài
Tôi đã xem xét đến các công cụ bên ngoài, nhưng một lần nữa, tôi cảm thấy điều đó là thừa cho một dự án cá nhân đơn giản như vậy. Tôi cũng cảm thấy rằng tôi nên giới hạn phạm vi dự án trong AWS càng nhiều càng tốt.
Phương Pháp Cuối Cùng: Sử Dụng localStorage
Ý tưởng cuối cùng của tôi là sử dụng localStorage để thiết lập một tham số (visited=true) và chỉ tăng bộ đếm lượt truy cập nếu người dùng chưa truy cập trang web trước đó (tức là nếu tham số này không có). Đây vẫn không phải là một giải pháp hoàn hảo, vì người dùng có thể xóa dữ liệu localStorage và bị đếm lại, nhưng tôi nghĩ rằng đối với một dự án đơn giản như thế này, đây là giải pháp phù hợp nhất.
Kết Luận
Đây là phần khó nhất của thử thách và đã khiến tôi phải suy nghĩ rất nhiều về các giải pháp trong nhiều ngày. Tôi muốn nghiên cứu sâu hơn về vấn đề này và so sánh các phương pháp để đếm lượt truy cập duy nhất cho một trang web. Trong quá trình thực hiện dự án này, tôi nhận thấy rằng đây là một chủ đề thú vị cho nhiều nhà nghiên cứu, vì vậy tôi muốn quay lại và khám phá nó nhiều hơn trong tương lai.
Đây chỉ là một phần trong một thử thách tuyệt vời do Forrest Brazeal tạo ra. Tôi rất khuyến khích bất kỳ ai muốn tìm hiểu thêm về điện toán đám mây tham gia thử thách này. Có các phiên bản cho GCP và Azure, vì vậy ai cũng có thể tham gia.
Hiện tại, tôi đang lưu trữ trang web của mình tại sashalapommeray.com, và tôi khuyến khích bất kỳ ai quan tâm hãy kiểm tra nó. Mã nguồn của tôi nằm trên GitHub cá nhân của tôi.
Các Thực Hành Tốt Nhất
- Tách biệt rõ ràng giữa frontend và backend để bảo mật tốt hơn.
- Tránh thu thập dữ liệu cá nhân không cần thiết trong các dự án nhỏ.
- Sử dụng localStorage cẩn thận và thông minh để quản lý trạng thái người dùng.
Những Cạm Bẫy Thường Gặp
- Dễ bị tấn công nếu không có bảo mật phù hợp giữa frontend và backend.
- Không kiểm tra các tình huống mà người dùng có thể tái truy cập trang web.
Mẹo Tối Ưu Hiệu Suất
- Sử dụng Amazon CloudFront để cải thiện tốc độ truy cập dữ liệu.
- Tối ưu hóa mã JavaScript frontend để tải nhanh hơn.
Giải Quyết Vấn Đề
- Nếu bộ đếm không tăng lên như mong muốn, kiểm tra lại logic trong hàm Lambda và API Gateway.
- Đảm bảo rằng localStorage hoạt động đúng và không bị xóa.
Câu Hỏi Thường Gặp
- Làm thế nào để đảm bảo rằng bộ đếm chỉ tăng cho những người truy cập duy nhất?
- Sử dụng localStorage để kiểm tra xem người dùng đã truy cập trước đó chưa.
- Có cách nào khác để đếm lượt truy cập không?
- Có thể sử dụng cookie hoặc các công cụ phân tích bên ngoài, nhưng cần cân nhắc về quyền riêng tư.