Google App Engine (GAE) là một trong những dịch vụ nổi bật trên nền tảng Google Cloud. Trong những năm gần đây, GAE ngày càng được nhiều doanh nghiệp biết đến và sử dụng, đặc biệt là các startup – nơi cần phát triển ứng dụng của mình một cách nhanh nhất. Với những ưu điểm của mình như hệ thống service phong phú, thời gian deploy nhanh, server tự động scale khi lượng truy cập tăng đột biến… có thể nói, GAE là dịch vụ thể hiện rõ ràng nhất triết lí của Google Cloud: Bạn chỉ việc phát triển sản phẩm, hạ tầng hãy để chúng tôi lo!
Để phát triển ứng dụng trên GAE, bạn có thể tham khảo document trên website của Google – vô cùng chi tiết. Tuy nhiên, khi mới bắt đầu, có rất nhiều tình huống mà bạn “không biết hỏi ai” – dĩ nhiên hiện cũng đang có rất nhiều issue chưa được các kĩ sư Google giải quyết! Trong seri “Làm quen với Google App Engine”, chúng ta sẽ lần lượt cùng tìm hiểu các service trên GAE và cách phát triển ứng dụng trên GAE một cách nhanh nhất và hiệu quả nhất!
Đầu tiên, hãy bắt đầu với việc chạy thử ứng dụng ở local – một việc gần như bắt buộc đối với developer chúng ta. Hiện tại, 90% những service của GAE đều có thể giả lập và chạy được ở môi trường local: bạn có thể gọi API locahost, connect tới database (MySQL, …), show kết quả… Trong quá trình này, có 2 tình huống thường gặp phải như sau:
Application runtime không nhận đưọc project_id
Một trong những lỗi phổ biến nhất và đau đầu nhất! Trong quá trình config local, có thể có một bước nào đó bạn làm sai hoặc local của bạn có vấn đề về cài đặt, dẫn đến trình giả lập không thể đọc đưọc project_id. Để giải quyết vấn đề này, đầu tiên bạn cần thật bình tĩnh! Tại sao lại như vậy? Bởi vì phần lớn trong trường hợp này lỗi không phải tại bạn, cho dù bạn làm lại từ đầu: cài đặt sdk. đăng kí lại, build lại project…
Cách giải quyết rất đơn giản: Hãy xem lại file cấu hình và bổ sung project_id! Thông thường nếu bạn đã cấu hình để app tự động xác định đưọc project_id, nhưng khi bị lỗi này ở local thì bạn nên khai báo cụ thể để có thể test được. (môi trường production thì không cần).
Làm sao để test query với database hiệu quả nhất
Một trong những thói quen “không tốt” của developer là muốn mọi thứ rõ ràng, ngay từ local test. Bạn muốn có dữ liệu trong database ở local, query lên kết quả sẽ như thế nào… Trong phần lớn trường hợp bạn sẽ làm được tuy nhiên một số trường hợp sẽ mất rất nhiều thời gian. Ví dụ như việc giải lập Datastore ở local khá phức tạp và mất thời gian, nhất là khi bạn mới làm quen với cấu trúc data mới. Vậy phải làm thế nào? Câu trả lời là unit test. Hãy thiết lập unit test bất kể độ phức tạp của project!
Ví dụ khi bạn muốn test query tới Datastore trong Java:
private void setUpQueryTests() {
Key taskKey = datastore.newKeyFactory()
.setKind("Task")
.addAncestors(PathElement.of("TaskList", "default"))
.newKey("someTask");
datastore.put(Entity.newBuilder(taskKey)
.set("category", "Personal")
.set("done", false)
.set("completed", false)
.set("priority", 4)
.set("created", includedDate)
.set("percent_complete", 10.0)
.set("description",
StringValue.newBuilder("Learn Cloud Datastore").setExcludeFromIndexes(true).build())
.set("tag", "fun", "l", "programming")
.build());
}
@Test
public void testRunQuery() {
setUpQueryTests();
Query<Entity> query = Query.newEntityQueryBuilder().setKind("Task").build();
// [START datastore_run_query]
QueryResults<Entity> tasks = datastore.run(query);
// [END datastore_run_query]
assertNotNull(tasks.next());
assertFalse(tasks.hasNext());
}
Ở local nếu bạn viết unit test đủ tốt thì đã handle đưọc tới 80 – 90% lỗi, 5 – 10% lỗi còn lại sẽ được phát hiện khi test staging và 0-1% lỗi khi chạy production! Hãy định hướng application của mình theo 3 giai đoạn: local -> staging -> production:
- local: test logic
- staging: test với data thật nhưng ở môi trường staging (trên GAE)
- production: kiểm tra lại lần nữa
Trên đây là một số kinh nghiệm trong quá trình phát triển ứng dụng trên GAE, hi vọng sẽ hữu ích với bạn. Nếu có bất kì vấn đề nào về GAE hay cần tư vấn hỗ trợ, hãy liên hệ với chúng tôi – Cloud Ace Vietnam – với đội ngũ hùng hậu luôn sẵn sàng giúp bạn!