Tại sao sử dụng Django trên Google App Engine?


88

Khi nghiên cứu Google App Engine (GAE), rõ ràng rằng việc sử dụng Django rất phổ biến để phát triển bằng Python trên GAE. Tôi đã lùng sục trên web để tìm thông tin về chi phí và lợi ích của việc sử dụng Django, để tìm hiểu tại sao nó lại phổ biến như vậy. Mặc dù tôi đã có thể tìm thấy nhiều nguồn về cách chạy Django trên GAE và các phương pháp khác nhau để làm như vậy, nhưng tôi chưa tìm thấy bất kỳ phân tích so sánh nào về lý do Django thích sử dụng webapp framework do Google cung cấp.

Để rõ ràng hơn, rõ ràng ngay lập tức tại sao việc sử dụng Django trên GAE lại hữu ích cho các nhà phát triển có bộ kỹ năng hiện có trong Django (phần lớn các nhà phát triển web Python, không nghi ngờ gì) hoặc mã hiện có trong Django (nơi sử dụng GAE là một bài tập chuyển tải nhiều hơn). Tuy nhiên, nhóm của tôi đang đánh giá GAE để sử dụng cho một dự án hoàn toàn mới và trải nghiệm hiện có của chúng tôi là với TurboGears, không phải Django.

Khá khó khăn để xác định lý do tại sao Django lại có lợi cho nhóm phát triển khi các thư viện BigTable đã thay thế ORM của Django, các phiên và xác thực nhất thiết phải thay đổi và việc tạo mẫu của Django (nếu muốn) có sẵn mà không cần sử dụng toàn bộ ngăn xếp Django.

Cuối cùng, rõ ràng rằng việc sử dụng Django có lợi thế là cung cấp "chiến lược rút lui" nếu sau này chúng tôi muốn rời khỏi GAE và cần một nền tảng để nhắm mục tiêu cho cuộc di cư.

Tôi cực kỳ đánh giá cao sự giúp đỡ trong việc chỉ ra lý do tại sao sử dụng Django tốt hơn sử dụng ứng dụng web trên GAE. Tôi cũng hoàn toàn không có kinh nghiệm với Django, vì vậy việc trau dồi thêm các tính năng và / hoặc tiện ích nhỏ hơn hoạt động trên GAE cũng có giá trị đối với tôi.


thánh tào lao terry bradshaw viết mã?
Woot4Moo

4
Django có lợi vì nó tuyệt vời. Đó thực sự là nó. :)
jathanism

Tôi cũng là người mới đối với công cụ ứng dụng của Google và đây là một câu hỏi được hình thành cực kỳ tốt ngay cả cho năm 2018 (mặc dù Django ORM có vẻ như được hỗ trợ tốt hơn trên GAE bây giờ). :)
Divij Sehgal

Câu trả lời:


19

Chúng tôi sử dụng django trên các phiên bản appengine của mình chủ yếu khi chúng tôi phải cung cấp các trang web thực tế cho người dùng. Nó có một công cụ mẫu tuyệt vời, định tuyến url và tất cả các yêu cầu / phản hồi / xử lý lỗi được tích hợp sẵn. Vì vậy, ngay cả khi chúng tôi không thể sử dụng công cụ orm / admin kỳ diệu, nó vẫn có rất nhiều thứ.

Đối với các dịch vụ api, chúng tôi đã xây dựng một thứ rất đơn giản webob. Nó nhẹ hơn rất nhiều vì nó không cần mọi thứ mà django cung cấp và do đó nhanh hơn một chút trong một số tình huống.


1
Cảm ơn Koen. Một phần trong sự nhầm lẫn của tôi về sự hấp dẫn của Django xuất phát từ ý tưởng rằng định tuyến url và xử lý yêu cầu / phản hồi / lỗi cũng là các tính năng của ứng dụng web được cung cấp và công cụ mẫu có thể được sử dụng mà không cần Django cũng như với ứng dụng web. Tôi có nhầm không? Django có cung cấp các dịch vụ này tốt hơn khung ứng dụng web không?
Travis Bradshaw

Tôi sẽ nói rằng chúng mở rộng và linh hoạt hơn trong django. Vì vậy, nó là tốt hơn nếu bạn thực sự cần điều đó :-)
Koen Bok

2
Tôi nghĩ rằng đây là câu trả lời mà tôi đang tìm kiếm! Django đó phần lớn là thừa đối với ứng dụng web, nhưng trong chức năng mà họ chia sẻ, Django hoạt động theo cách linh hoạt và mạnh mẽ hơn. Có vẻ như đó chắc chắn là một quyết định "ngoài lề", nhưng tôi nghĩ rằng tất cả các đề xuất khác, cộng với đề xuất của bạn, đều tạo ra một câu trả lời thuyết phục. Cảm ơn.
Travis Bradshaw

1
Các mô-đun Python được viết bằng C cũng không được hỗ trợ.
Ryu_hayabusa

51

Django có lẽ không phải là lựa chọn phù hợp với bạn, nếu bạn chắc chắn rằng GAE phù hợp với mình. Điểm mạnh của hai công nghệ không phù hợp lắm - bạn hoàn toàn mất đi rất nhiều orm tuyệt vời của Django trên GAE và nếu bạn sử dụng nó, bạn viết mã không thực sự phù hợp trực tiếp với bigtable và cách GAE hoạt động.

Vấn đề về GAE là nó có khả năng mở rộng tuyệt vời bằng cách buộc bạn viết mã có quy mô dễ dàng từ đầu. Bạn chỉ không thể làm một số thứ có quy mô kém (tất nhiên, bạn vẫn có thể viết mã mở rộng quy mô kém, nhưng bạn tránh được một số cạm bẫy). Sự cân bằng là bạn thực sự phải viết mã xung quanh khuôn khổ, nếu bạn sử dụng thứ gì đó như Django được thiết kế cho một môi trường khác.

Nếu bạn thấy mình đã từng rời GAE vì bất kỳ lý do gì, thì việc đầu tư vào cơ sở hạ tầng là một vấn đề đối với bạn. Viết mã cho bigtable có nghĩa là sẽ khó chuyển sang một kiến ​​trúc khác (mặc dù dự án apache đang làm việc để giải quyết vấn đề này cho bạn với thành phần HBase của dự án Hadoop). Sẽ còn rất nhiều việc để chuyển đổi GAE.

Động lực thúc đẩy đằng sau việc sử dụng GAE, ngoài việc là một sản phẩm của Google và một từ thông dụng thú vị là gì? Có lý do gì khiến việc mở rộng quy mô bằng cách sử dụng thứ gì đó như sản phẩm của mediatemple không thể hoạt động tốt cho bạn không? Bạn có chắc chắn rằng các cách phân chia thang đo GAE phù hợp với ứng dụng của bạn không? Làm thế nào chi phí so với các máy chủ chuyên dụng, nếu bạn đang mong đợi để đạt được lĩnh vực hiệu suất đó? Bạn có thể giải quyết tốt vấn đề của mình bằng cách sử dụng các công cụ mà GAE cung cấp, so với thiết lập máy chủ cân bằng tải truyền thống hơn không?

Tất cả những điều này đã nói, trừ khi bạn hoàn toàn thực sự cần tỷ lệ mở rộng quá mức vô lý mà GAE cung cấp, cá nhân tôi khuyên bạn không nên để dịch vụ cụ thể đó cấu trúc lựa chọn khung của bạn. Tôi thích Django, vì vậy tôi muốn nói bạn nên sử dụng nó, nhưng không phải trên GAE.

Chỉnh sửa (tháng 6 năm 2010): Là bản cập nhật cho nhận xét này một thời gian sau: Google đã công bố các tính năng giống sql cho GAE không miễn phí, nhưng sẽ cho phép bạn dễ dàng thực hiện những việc như chạy các lệnh kiểu SQL để tạo báo cáo về dữ liệu của bạn.

Ngoài ra, có những thay đổi sắp tới đối với ngôn ngữ truy vấn GAE sẽ cho phép các truy vấn phức tạp theo cách dễ dàng hơn nhiều. Xem các video từ Google I / O 2010.

Hơn nữa, có nhiều công việc đang được thực hiện trong dự án Summer of Code 2010 sẽ mang lại hỗ trợ no-sql cho lõi django và bằng cách mở rộng, giúp làm việc với GAE dễ dàng hơn đáng kể.

GAE đang trở nên hấp dẫn hơn với tư cách là một nền tảng lưu trữ.

Chỉnh sửa (tháng 8 năm 2011):

Và Google vừa tăng đáng kể chi phí cho hầu hết người dùng nền tảng bằng cách thay đổi cấu trúc giá cả. Vấn đề lockin đã trở nên tốt hơn (nếu ứng dụng của bạn đủ lớn, bạn có thể triển khai các giải pháp thay thế apache), nhưng đối với hầu hết các ứng dụng, việc triển khai máy chủ hoặc VPS đang chạy sẽ rẻ hơn.

Rất ít người thực sự gặp vấn đề với bigdata. "Ôi công ty khởi nghiệp của tôi có thể mở rộng quy mô vào một ngày nào đó" không phải là vấn đề bigdata. Xây dựng công cụ ngay bây giờ và đưa nó ra khỏi cửa bằng các công cụ tiêu chuẩn.


Cảm ơn vì đã trả lời chu đáo, Paul. Chúng tôi đánh giá GAE phần lớn là do mô hình chi phí phù hợp tốt với kế hoạch kinh doanh được đề xuất của chúng tôi. Khả năng bắt đầu miễn phí và sau đó mở rộng quy mô tăng dần với một mô hình chi phí rất chi tiết là rất hấp dẫn. Ngoài ra, chúng tôi không có kỳ vọng cần phải di chuyển hoặc di chuyển khỏi GAE trong tương lai và việc khóa nền tảng cho dự án này có thể chấp nhận được. Tôi đã bao gồm nhận xét "chiến lược thoát" trong câu hỏi của mình chủ yếu với nỗ lực khá toàn diện về những gì tôi đã học được thông qua việc đọc và nghiên cứu trước khi đăng câu hỏi này. Cảm ơn một lần nữa!
Travis Bradshaw

Bạn đánh giá thế nào về chi phí của thời gian phát triển? Một trong những điều thú vị về Django là bạn dành ít thời gian hơn để lo lắng về việc xác định mô hình dữ liệu của mình so với khi sử dụng Bigtable. Bigtable buộc bạn phải rõ ràng hơn nhiều về cách sử dụng của mình trước khi có thể sử dụng nó. Một số truy vấn dễ dàng hơn đáng kể với sql "bình thường".
Paul McMillan

3
Hãy cẩn thận đừng kẹp các đồng xu quá mức. Miễn phí là tốt, nhưng dịch vụ nhanh chóng không tốn tiền thật. Nếu bạn đang ở mức dịch vụ "miễn phí", hãy lưu trữ nó trên một số máy chủ / máy chủ lưu trữ khác mà bạn đã trả tiền. Nếu bạn đang tham gia vào mức độ dịch vụ không miễn phí, $ 20 / tháng cho một VPS mà bạn có thể dễ dàng mở rộng quy mô sau này là khá ồn ào về chi phí.
Paul McMillan

11
tbradshaw, đừng quên xem xét tần suất bạn sẽ cần các báo cáo đặc biệt chạy trên tập dữ liệu của mình. Tôi đang tham gia vào một ứng dụng xã hội đang phát triển và GAE đang trở thành ... Tôi không nói là ác mộng, nhưng việc thu thập kiến ​​thức từ dữ liệu của chúng tôi là vô cùng tốn nhiều tài nguyên. Giữa việc Google xóa các nhật ký cũ và độ dài cực kỳ cần thiết để quét qua tất cả dữ liệu, nó làm cho cách báo cáo đắt hơn một db SQL. Đó là một chi phí tôi đã không tính đến khi bắt đầu. Thứ hai, nếu bạn thực sự phát triển và bắt đầu kiếm tiền, thì sự kiểm soát mà bạn mất liên quan đến các bản sao lưu là một yếu tố.
JasonSmith

2
Đối với các mối quan tâm về khóa, hãy xem AppScale, đây là một bản sao Google App Engine. Chúng tôi đã làm việc trên nền tảng này kể từ lần đầu tiên GAE ra mắt và có nhiều người dùng trên nền tảng này cho các ứng dụng java và python sản xuất của họ. Bạn có quyền truy cập trực tiếp vào các máy mà nó chạy để bạn có nhiều quyền kiểm soát hơn đối với cơ sở hạ tầng. github.com/AppScale/appscale.git
Navraj Chohan

16

Tôi đã thực hiện rất nhiều dự án trên GAE. Một số trong django, một số trong khuôn khổ bình thường của họ.

Đối với những việc nhỏ, tôi thường sử dụng khuôn khổ thông thường của họ để đơn giản và nhanh chóng. Như http://stdicon.com , http://yaml-online-parser.appspot.com/ hoặc http://text-twist.appspot.com/ .

Đối với những thứ lớn, tôi sử dụng django để tận dụng tất cả các phần mềm trung gian và plugin tốt đẹp. Giống như http://metaward.com .

Về cơ bản bài kiểm tra quỳ của tôi là Tôi sẽ mất hơn 2 tuần để viết và trở thành một dự án phần mềm THỰC SỰ ? Nếu vậy, hãy sử dụng django để biết các addon.

Nó có thêm lợi ích là, nếu dự án của bạn không phù hợp với BigTable thì bạn nhanh chóng rời khỏi (giống như tôi đã làm. BigTable chậm hay tôi đơ? )


+1, bigtable chỉ có hại cho một số loại dự án và truy vấn. Thật tuyệt vời cho những gì Google làm và có thể thật tồi tệ cho những gì bạn muốn làm.
Paul McMillan

Cảm ơn Paul! Bạn có thể liên kết tôi với bất kỳ tài nguyên nào mô tả phần mềm trung gian và plugin Django hoạt động trên GAE không? Nếu có các tiện ích bổ sung hữu ích cho dự án của chúng tôi, đó chắc chắn sẽ là lý do để sử dụng Django hơn là ứng dụng web. Những cái rõ ràng hữu ích hơn (như phiên và xác thực) dường như có sự phụ thuộc Django ORM rõ ràng.
Travis Bradshaw

2
Về cơ bản, bất kỳ addon nào không có models.py sẽ hoạt động hoàn hảo. Và nếu họ có một models.py bạn có thể thực hiện chuyển đổi 1-1 sang bigtable và vẫn sử dụng nó nếu bạn muốn. Một số tôi sử dụng là django_annoying, django_debug_toolbar, và từ phần đóng góp csrf, humanze, và tất nhiên là quản trị viên.
Paul Tarjan

11

Tôi nghĩ rằng tất cả các câu trả lời này là một chút lỗi thời.

Bây giờ bạn có thể sử dụng Google Cloud SQL

Django là một khung công tác web Python của bên thứ ba phổ biến. Khi kết hợp với Google Cloud SQL, tất cả các chức năng của nó có thể được hỗ trợ đầy đủ bởi các ứng dụng chạy trên App Engine . Hỗ trợ sử dụng Google Cloud SQL với Django được cung cấp bởi chương trình phụ trợ cơ sở dữ liệu Django tùy chỉnh bao bọc phần phụ trợ MySQL của Django.

https://cloud.google.com/python/django/appengine

một tin mới nữa là có hỗ trợ BETA cho PostgreSQL


3

Tôi có kinh nghiệm sử dụng Django chứ không phải GAE. Theo kinh nghiệm của tôi với Django, đó là một thiết lập rất đơn giản và quá trình triển khai cực kỳ dễ dàng đối với các dự án web. Cứ cho là tôi phải học Python để thực sự nắm bắt tốt mọi thứ, nhưng vào cuối ngày, tôi sẽ sử dụng lại nó trong một dự án. Cái này cách đây gần 2 năm trước khi nó đạt 1.0 nên kiến ​​thức của tôi hơi lạc hậu.

Nếu bạn lo lắng về việc thay đổi nền tảng, thì đây sẽ là sự lựa chọn tốt hơn tôi cho rằng.


1
Cảm ơn cho phản ứng nhanh chóng của bạn! Mặc dù tôi đồng ý rằng Django là một framework có tốc độ bắt đầu nhanh chóng, nhưng đó không thực sự là mối quan tâm đối với chúng tôi. Chúng tôi có bốn nhà phát triển Python khá có kinh nghiệm với nền tảng phát triển web, vì vậy việc bắt đầu với bất kỳ khung công tác nào sẽ nhanh chóng và không đau. Nhưng câu hỏi vẫn còn, khi lựa chọn giữa Django và ứng dụng web trên GAE, lựa chọn nào tốt hơn và tại sao ?
Travis Bradshaw

@ Woot4Moo nếu không có kinh nghiệm với GAE thì bạn có triển khai nó không, tôi mới sử dụng GAE nhưng giá cả khiến tôi bối rối khá nhiều, phí ôm quá ngẫu nhiên, tôi đang nghĩ ở đâu đó, bạn có thể cho tôi một số đề xuất được không?
Manza

0

Tôi không thể trả lời câu hỏi nhưng bạn có thể muốn xem xét web2py. Nó tương tự như Django ở nhiều khía cạnh nhưng lớp trừu tượng cơ sở dữ liệu của nó hoạt động trên GAE và hỗ trợ hầu hết các chức năng của GAE (không phải tất cả nhưng chúng tôi cố gắng bắt kịp). Theo cách này, nếu GAE phù hợp với bạn, nếu không, bạn có thể di chuyển mã của mình sang một db khác (SQLite, MySQL, PostgreSQL, Oracle, MSSQL, FireBird, DB2, Informix, Ingres và - sắp tới - Sybase và MongoDB ).


0

Nếu bạn quyết định chạy ứng dụng của mình bên ngoài GAE, bạn vẫn có thể sử dụng Django. Bạn sẽ không thực sự gặp nhiều may mắn với ứng dụng web GAE


Cảm ơn bạn, mặc dù tôi đã đề cập chính xác điều đó trong câu hỏi ban đầu: "Cuối cùng, rõ ràng là sử dụng Django có lợi thế là cung cấp" chiến lược thoát "nếu sau này chúng tôi muốn rời khỏi GAE và cần một nền tảng để nhắm mục tiêu cho việc di cư. "
Travis Bradshaw

0

Tôi vẫn còn rất mới đối với việc phát triển công cụ ứng dụng của Google, nhưng các giao diện mà Django cung cấp có vẻ đẹp hơn nhiều so với mặc định. Lợi ích sẽ phụ thuộc vào những gì bạn đang sử dụng để chạy Django trên công cụ ứng dụng. Google App Engine Helper dành cho Django cho phép bạn sử dụng toàn bộ sức mạnh của Google App Engine với một số chức năng Django ở bên cạnh.

Django non-rel cố gắng cung cấp càng nhiều sức mạnh của Django càng tốt, nhưng chạy trên app-engine để có thêm khả năng mở rộng. Đặc biệt, nó bao gồm các mô hình Django (một trong những tính năng cốt lõi của Django), nhưng đây là một sự trừu tượng bị rò rỉ do sự khác biệt giữa cơ sở dữ liệu quan hệ và bigtable. Rất có thể sẽ có sự đánh đổi về chức năng và hiệu quả, cũng như số lượng lỗi và lỗi gia tăng. Tất nhiên, điều này có thể đáng giá trong các trường hợp như được mô tả trong câu hỏi, nhưng nếu không, bạn thực sự khuyên bạn nên sử dụng trình trợ giúp ngay từ đầu vì sau đó bạn có tùy chọn chuyển sang sử dụng app-engine thuần túy hoặc Django non-rel sau này. Ngoài ra, nếu bạn chuyển sang Django non-rel,

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.