Từ quan điểm của nhà phát triển, bạn sẽ xem xét nền tảng nào cho một ứng dụng web xã hội lớn? Nếu bạn có thể cung cấp một số chi tiết về những gì bạn coi là điểm mạnh của sự thay thế thì nó sẽ rất tuyệt.
Từ quan điểm của nhà phát triển, bạn sẽ xem xét nền tảng nào cho một ứng dụng web xã hội lớn? Nếu bạn có thể cung cấp một số chi tiết về những gì bạn coi là điểm mạnh của sự thay thế thì nó sẽ rất tuyệt.
Câu trả lời:
Tôi đã viết cùng một ứng dụng trên GAE (Python và giờ là Java) và Azure. Có lẽ tôi sẽ tiếp tục sử dụng cả hai, cho những thứ khác nhau. Dưới đây là một vài suy nghĩ mà tôi sẽ tiếp tục cập nhật:
Lý do nên sử dụng GAE:
Lý do nên sử dụng Azure:
Tôi thiên vị rõ ràng - Tôi làm việc trong nhóm App Engine thực hiện quan hệ nhà phát triển - nhưng đây là việc của tôi:
Họ không thể so sánh trực tiếp. Có một bộ ứng dụng bạn có thể viết cho bất kỳ ứng dụng nào, nhưng bạn sẽ viết một thứ khác nhau trong mỗi trường hợp. Máy ứng dụng cung cấp môi trường thời gian chạy hạn chế - không ghi vào tệp, không có ổ cắm, v.v. - và DBMS không liên quan. Nhưng bù lại, bạn có được một môi trường thời gian chạy quy mô vô hạn và một mức độ đảm bảo hợp lý rằng ứng dụng của bạn sẽ mở rộng quy mô như bạn muốn.
Azure, mặt khác, cung cấp một môi trường ít ràng buộc hơn, cho phép bạn viết một mảng ứng dụng rộng hơn, nhưng yêu cầu bạn phải viết nhiều hơn - vì bạn tự thực hiện nhiều ngăn xếp hơn - và cung cấp sự đảm bảo về khả năng mở rộng lỏng lẻo hơn .
Cuối cùng, AWS cung cấp giải pháp tự làm cuối cùng. Họ cung cấp phần cứng, và lưu trữ, và không nhiều thứ khác. Bạn xây dựng ngăn xếp của mình từ mặt đất lên, duy trì nó, nâng cấp nó, v.v. Ứng dụng của bạn chia tỷ lệ nếu và chỉ khi bạn viết nó lên tỷ lệ, đó là một thách thức không nhỏ. Nhưng, bạn có thể kiểm soát hoàn toàn phần cứng của bạn.
Lời khuyên của tôi sẽ là: Nếu ứng dụng của bạn phù hợp với mô hình Máy ứng dụng - và ứng dụng mạng xã hội có thể là một ví dụ khá hay về ứng dụng đó - hãy viết ứng dụng của bạn trên Máy ứng dụng (Java hoặc Python, lựa chọn của bạn). Nó rẻ hơn, và viết một ứng dụng có tỷ lệ dễ dàng hơn nhiều.
Nếu ứng dụng của bạn không phù hợp với mô hình GAE, hãy chọn Azure hoặc AWS, tùy thuộc vào việc bạn có viết cho ngăn xếp MS hay không và mức độ kiểm soát mà bạn muốn đối với môi trường thực thi. Nếu hầu hết ứng dụng của bạn phù hợp với GAE, nhưng các phần nhỏ thì không, bạn có thể xem xét kết hợp - ví dụ: phục vụ trực tiếp trên GAE, nhưng lưu trữ trên S3 hoặc xử lý hàng loạt trên EC2.
Đối với tôi, khóa là yếu tố quyết định.
Nếu bạn chọn cho Google, ứng dụng của bạn sẽ chỉ hoạt động trên Google. Nếu bạn thấy mình không hài lòng sau một thời gian, bạn sẽ bị mắc kẹt.
Nếu bạn chọn cho MS, ứng dụng của bạn sẽ chỉ hoạt động trên Azure. Điều tương tự.
Tại Amazon, bạn có (a) máy chủ ảo hoạt động chính xác như các máy bạn đã từng sử dụng. Không hài lòng? Chọn ứng dụng của bạn, cài đặt trên phần cứng thực, đã xong.
Lựa chọn cá nhân của tôi ngay bây giờ sẽ là Google với Java (ngay cả khi tôi là .NET hầu hết thời gian). Hãy suy nghĩ về chi phí - lược đồ của họ rất khó để so sánh.
Kiểm tra bài viết này - http://www.infoq.com/news/2008/11/Compared-EC2-App-Engine-Azure
Giống như Arachnid, tôi có thể bị thiên vị, là một người làm việc. Tuy nhiên, tôi cũng là một cổ đông của Amazon, do đó sự thiên vị có thể bù đắp một phần cho lần đầu tiên ;-). Không có kinh nghiệm Azure (mặc dù tôi cũng nắm giữ cổ phiếu MSFT, vì vậy tôi hy vọng họ cũng làm tốt - một thiên vị khác ;-).
Điều rất đơn giản của tôi là App Engine dễ dàng cung cấp cho bạn khả năng làm việc (trong giới hạn của nó) chỉ bằng mã hóa - không cần thực hiện các tác vụ quản trị hệ thống. AWS linh hoạt hơn nhiều, nhưng bạn sẽ cần công việc quản trị hệ thống đáng kể (và không thực sự tầm thường chút nào) để tận dụng sự linh hoạt đó. Vì vậy, cuối cùng tôi sẽ gợi ý thứ hai của Arachnid: nếu App Engine có thể đáp ứng nhu cầu của bạn, hoàn toàn phù hợp với nó; nếu bạn cần linh hoạt hơn, AWS dường như là hướng đi (trừ khi các khả năng không xác định của Azure sẽ phù hợp hơn - nhưng tôi nghĩ AWS sẽ linh hoạt hơn bất kể Azure có thể làm gì, ví dụ như với AWS bạn thậm chí có thể chọn hệ điều hành nào để sử dụng, nếu bạn cần điều đó).
Tôi mới bắt đầu làm việc với Azure và tôi đã rất ấn tượng, bạn có thể làm điều đó trong F #: http://code.msdn.microsoft.com/fsharpazure! Cho đến nay, đó là nền tảng đám mây duy nhất cho phép một người sử dụng lập trình chức năng theo cách được quản lý (tất nhiên bạn có thể thực hiện Haskell trong EC2 ... hoặc Algol 68 cho vấn đề đó). Tôi rất ấn tượng với chất lượng tích hợp Visual Studio - bạn có thể kiểm tra "đám mây" cục bộ, DevFoven, với bộ lưu trữ là Máy chủ SQL thực, do đó bạn có thể phát trước khi tải lên. GAE có thể làm điều đó? Nhìn vào Azure, học VS với F # (đến từ Linux và OCaml), tôi ước mình đã chuyển sang MS stack từ lâu cho nó. Thật dễ dàng để tạo bộ lưu trữ SQL và kiểm tra nó trong VS - rất tiện dụng. Nguồn mở không có bộ công cụ phù hợp và mọi người đã dành thời gian cho MS xem xét công bằng - họ đã thực hiện một công việc tuyệt vời ở đây. Tôi chắc chắn gắn bó với cơ sở Mac OSX của mình (khởi động kép vào Vista) và linh cảm của tôi là, với khả năng Azure được phát triển cục bộ, tôi sẽ nhận được một hộp Vista riêng để phát triển Azure. .NET thực sự áp đảo khi bạn đến từ thế giới ống Unix - PowerShell, SQL và LINQ, C # và F # (đó là lý do chính của tôi) - nhưng hóa ra tất cả đều bổ sung và đáng để học hỏi, thay vào đó của, Linux; và trong mọi trường hợp, Azure sẽ mở rộng tầm nhìn của bạn.
Tôi yêu GAE rất nhiều, một lý do chính khiến tôi tham gia EC2 qua GAE cho dự án hiện tại của tôi là tôi cần có khả năng ứng dụng của mình được phục vụ từ các trung tâm dữ liệu ở các khu vực khác nhau trên thế giới. GAE chạy trong một trung tâm dữ liệu tại một thời điểm. Ví dụ: tôi cần người dùng ở Châu Á truy cập các máy chủ ở Châu Á để có thời gian phản hồi nhanh nhất có thể cho ứng dụng của tôi. Thêm vào khả năng quản lý dns, cân bằng tải, cơ sở dữ liệu lựa chọn, đẩy vào S3 để xử lý dữ liệu, v.v ... và EC2 trở thành một giải pháp thực sự hấp dẫn.
Một số điều cần xem xét:
Bắt kịp tốc độ: bạn có thể làm việc nhanh như thế nào với môi trường đã chọn, loại tài liệu nào tồn tại và chúng có rõ ràng và các mẫu được hỗ trợ rõ ràng và hữu ích không
Chi phí: chi phí là một yếu tố, nhưng nếu bạn đang tạo một Ứng dụng thương mại thực sự sẽ có khách hàng, đây đều là những lựa chọn khả thi. Nếu bạn cho rằng Azure, với một Proc trên một ví dụ "nhỏ" sẽ có giá khoảng 90 đô la một tháng cho việc sử dụng 24x7 ... bạn có thể phục vụ bao nhiêu người dùng trong thời gian đó? Thêm một ví dụ thứ hai để dự phòng ... vẫn không tốn kém nếu lưu lượng truy cập của bạn đảm bảo nó. Nếu không, tại sao bạn ở trên đám mây thay vì ở nhà cung cấp dịch vụ lưu trữ giá rẻ? Các yếu tố chi phí lớn hơn đến trong thời gian của bạn để thực hiện điều này. AWS là một giải pháp của riêng bạn. Đó là rất nhiều để xử lý để có được một giải pháp sẽ ổn định và được quản lý tốt. Azure và GAE có điều đó ra khỏi hộp. Trong suy nghĩ của tôi AWS là đắt nhất do công việc bạn phải đưa vào nó. Bạn có thực sự cần kiểm soát nó ở mức độ chi tiết tốt không? Nếu vậy,
Khả năng làm những gì bạn muốn: AWS tất cả các cách. Azure là thứ hai, GAE là thứ ba. Không có gì to tát nếu thứ bạn muốn là Java và Python. Biggie nếu bạn muốn thực hiện DB quan hệ hoặc xử lý dữ liệu đa luồng mở rộng trong C ++ (không chắc bây giờ có ai trong số này thực hiện việc này không?).
Còn tính di động thì sao? Bạn có thể đưa nó trở lại trang trại của riêng bạn sau đó hoặc chuyển nó đến một trang trại đám mây khác không? Chúng đều có thể cầm tay ở một mức độ nào đó.
Rất nhiều điều để suy nghĩ về ... vẫn đang tìm hiểu về điều này bản thân mình.
Nếu bạn cần bắt đầu các trường hợp thủ công để đáp ứng nhu cầu thì đó không phải là một đám mây.
Azure và EC2 chỉ là các máy chủ ảo với một số dịch vụ ở bên cạnh.
Cập nhật:
EC2 và Azure cung cấp cho bạn các tùy chọn để tự động quản lý các phiên bản mới khi tải, nhưng bạn vẫn phải quản lý việc này. Và bạn trả tiền cho các trường hợp đang lên và nhàn rỗi.
GAE tự động xử lý việc này ngay lập tức và nó chỉ tính phí cho bạn khi mã của bạn đang chạy trong khi yêu cầu.
Đây là một số cân nhắc khác.
GAE - Xuất hiện cao hơn trên nền tảng dưới dạng ngăn xếp dịch vụ sau đó là AWS và Azure, tất cả lưu lượng truy cập được chuyển qua DNS ghs.google.com của họ, tải động phục vụ trang của bạn thông qua một trong các máy của họ, cho phép họ giữ giá thấp. tỉ lệ là tốt với cách tiếp cận này, Nhược điểm là không có ip tĩnh, dễ bị lọc hoặc chặn. Từ giới hạn ip tĩnh, bạn sẽ không thể thiết lập bất kỳ chứng chỉ https cụ thể nào của trang web.
AWS và Azure cung cấp cho bạn khá nhiều IP tĩnh và VM chuyên dụng, cho phép các yêu cầu cơ bản như chứng chỉ https. bạn cũng sẽ nhận được hỗ trợ lưu trữ quan hệ. Chi phí cũng cao hơn để phản ánh thực tế VM chuyên dụng này và bạn sẽ mở rộng quy mô cho mỗi VM trong 40 đô la / tháng. lợi thế là vì bạn có một VM cho chính mình, bạn không bị giới hạn trong giới hạn xử lý cpu 30 giây trên GAE và có thể chạy các tác vụ lớn hơn.
Vì vậy, nếu bạn xem xét cơ sở khách hàng của mình ở các quốc gia được lọc hoặc muốn IP tĩnh thực hiện thiết lập DNS của riêng bạn hoặc có các yêu cầu cần db quan hệ hoặc hơn 30 nhiệm vụ thứ hai. AWS, Azure sẽ thân thiện hơn khi làm việc.
Nhìn vào các giải pháp mà mỗi dịch vụ đám mây cung cấp và đi theo mô hình lai. Một số vấn đề đòi hỏi một cái búa và những cái khác một tuốc nơ vít. Nhận biết các công cụ của bạn và áp dụng nó cho đúng vấn đề.
Tôi không đủ danh tiếng để để lại nhận xét cho một trong những câu trả lời ở trên. Sự phù hợp của bất kỳ giải pháp đám mây nào phụ thuộc vào nhiều yếu tố bao gồm nhu cầu và bộ kỹ năng của bạn.
Tôi có một dự án mạng xã hội yêu cầu cơ sở dữ liệu nosql. AppEngine sẽ là một giải pháp tốt nếu nó có sự hỗ trợ tốt hơn cho các khung khác nhau. Django với bộ điều hợp không liên quan hoạt động trên Python GAE, nhưng tôi thích Rails vì nhiều lý do. Rails3 đã ra mắt được vài tháng và không ai trong cộng đồng hoặc nhóm GAE đã viết một công thức để hỗ trợ nó. Trừ khi bạn có bộ kỹ năng - biết nội bộ của ruby và rails, jruby và GAE - để viết công thức của riêng bạn, bạn sẽ cảm thấy xót xa cho người khác chỉ để lên nền tảng.
AWS là công việc nhiều hơn nhưng ít nhất bạn có thể có được trên nền tảng với bất kỳ công cụ nào và xử lý nhiều vấn đề về mặt hành chính thay vì là nhà phát triển nội bộ hoặc thay thế cho các quyền lực cao hơn.
Khiếu nại của tôi về Heroku và EngineYard, đối với các nhà phát triển Ruby, là bí ẩn về quy mô cơ sở dữ liệu. Làm thế nào để họ quy mô?
Trong trường hợp của tôi, tôi đang chọn giải pháp NoQuery và Mongo dường như là một lựa chọn tốt. MongoMachine dường như là giải pháp được đề xuất cho những người như Heroku hoặc EY nhưng nó rất tốn kém. $ 2,50 / GB lưu trữ? Dung lượng lưu trữ chỉ $ 0,10 GB / tháng trên GAE hoặc EBS.
Gần đây tôi đã bắt đầu thử nghiệm với Google App Engine và đối với mạng xã hội web tôi tin rằng nó sẽ phục vụ mọi nhu cầu của bạn. Thật dễ dàng để hiểu rõ về nó và có thể được sử dụng với Python hoặc Java. Đúng là nó không cung cấp cho bạn quyền truy cập vào các tệp, nhưng đối với ứng dụng của bạn, GQL (giao diện giống như SQL với cơ sở dữ liệu mà họ cung cấp) có thể sẽ là quá đủ (và nó khá mạnh mẽ).
Một điều bạn có thể muốn xem xét, đó là một ứng dụng trên GAE có thể sử dụng giao diện cho phép người dùng có Tài khoản Google hoặc tài khoản trên một tên miền sử dụng Google Apps đăng nhập (một phím tắt). Bạn chọn một trong hai. Vì vậy, nếu bạn đã sử dụng Trang web Google Apps, Google App Engine sẽ là một lựa chọn tuyệt vời cho bạn, vì người dùng của bạn sẽ không phải đăng ký tài khoản mới.
EDIT: Như Arachnid đã chỉ ra, không phải là bạn không thể mã hóa hệ thống đăng nhập của riêng mình. Xin lỗi, nếu tôi làm bạn lo lắng ở đó.
Đối với hai lựa chọn thay thế khác, tôi chỉ đọc về chúng và không thử nghiệm chúng. Nhưng tôi tin GAE cung cấp một khuôn khổ dễ dàng hơn, từ nghiên cứu của tôi, và như bạn đã đề cập đến giá cả tuyệt vời.
Trong mọi trường hợp, bạn có thể thử GAE bằng cách sử dụng hạn ngạch miễn phí về không gian và băng thông và xem nó có phù hợp với nhu cầu của bạn không.
May mắn nhất.
Azure có Windows / SQL là máy chủ "Nền tảng là dịch vụ" và bạn chắc chắn KHÔNG bị mắc kẹt, chỉ cần quay lại Windows / SQL trong trung tâm dữ liệu của riêng bạn (Không có linux, nhưng có, chúng hỗ trợ Java, Python, PHP, Ruby, Tomcat , Apache, v.v.). Giống như Amazon, họ cũng sẽ cung cấp tùy chọn Máy ảo có thể truy cập đầy đủ, vì vậy bạn có thể cài đặt / chạy bất cứ thứ gì bạn muốn.
Amazon chỉ có Virtual Machine, vì vậy theo tôi, bạn vẫn phải loay hoay, vá lỗi, cấp phép, bảo mật, v.v ... Loại đánh bại lợi ích của việc chuyển sang đám mây theo ý kiến của tôi. Bạn vừa chuyển một cái gì đó từ trung tâm dữ liệu của bạn sang một trung tâm khác.
Google không có cơ sở dữ liệu quan hệ và bạn sẽ bị mắc kẹt. Chúng thực sự chỉ phục vụ cho các nhà phát triển Python và một số hỗ trợ hạn chế cho Java. Theo tôi, họ thực sự không phải là người chơi trong không gian đám mây.
Một điều không được đề cập ở đây, đó là những gì mà bất cứ ai cũng xem xét về "Bus dịch vụ Windows Azure AppFoven & ACS" bên cạnh cái tên khủng khiếp ...?
Nó dường như là một chồng các tính năng tích hợp thực sự mạnh mẽ sẽ khiến Azure trở nên hấp dẫn từ góc độ của bất kỳ doanh nghiệp nào khi đầu tư vào cơ sở hạ tầng.
Sau khi thử nghiệm Amazon EC2 một thời gian và gặp một số chậm trễ, tôi đã bắt đầu nghiên cứu Google Apps trong khi thử nghiệm do chi phí. Tôi thích Erlang là ngôn ngữ phát triển nhưng có thể giao dịch với Python, vì vậy đó không phải là yếu tố quyết định. Khi tôi thấy không có IP tĩnh, đó là. Ngoài ra, toàn bộ phần về việc nó được nâng lên trên stack khiến tôi hơi lo lắng về hiệu suất.
Tôi ước AWS rẻ hơn, nhưng cho đến khi Google cung cấp IP tĩnh và tốt nhất là các ngôn ngữ bổ sung như Scala, JRuby và Erlang, sự lựa chọn rõ ràng đối với tôi: AWS . Hai ngôn ngữ đầu tiên cũng phải đơn giản, cả hai đều dựa trên JVM. Thậm chí có thể đã được thực hiện thông qua các công việc xung quanh, vì tôi dường như nhớ đọc một cái gì đó về điều đó.
Các bạn tôi nghĩ ngoài việc chỉ nghĩ về nền tảng mà nó hỗ trợ so sánh nên dựa trên Khả năng mở rộng, Dễ truy cập, Đa năng (về mặt triển khai), có thể phù hợp với các nền tảng lưu trữ khác nhau, có hiệu quả kinh tế tương đương cho trường hợp kinh doanh, có nhiều giải pháp cho doanh nghiệp các ứng dụng (viz. lưu trữ, phân phối, băng thông, chính sách cấp phép, v.v.), theo dõi độ tin cậy của hồ sơ về chất lượng dịch vụ, Kiểm toán bảo mật, Tính minh bạch trong thanh toán cũng như chi phí, v.v. Nếu bạn nhìn vào tất cả các số liệu trên tôi cảm thấy điểm AWS ở trên . Tôi đang quản lý 10 tài khoản sản xuất trên AWS kể từ 2 năm và đồng thời, công ty / đơn vị kinh doanh có thể đáp ứng nhu cầu về khả năng mở rộng rất lớn của khách hàng .... Không nghi ngờ gì về AWS, người ta cần duy trì cơ sở hạ tầng, Cập nhật (nếu có / nếu yêu cầu), bảo mật, vv Nhưng bạn có tất cả các công cụ có sẵn trên thị trường / mạng một cách tự do. Các tài nguyên CNTT hiện có cũng có thể duy trì tất cả các cơ sở hạ tầng trên AWS.
Azure chắc chắn có IDE tích hợp với VS 2010, nhưng chi phí thực tế của bất kỳ đám mây nào sẽ bắt đầu sau khi triển khai thành công ứng dụng (nền tảng để triển khai). Vẫn còn một chặng đường dài để trưởng thành để giải quyết các kịch bản sản xuất có thể mở rộng / triển khai theo thời gian thực ....... Như mọi người đều biết MS đóng nhiều chương trình nghị sự ẩn về chi phí .. rất khó để đưa ra các chi phí phát sinh hoặc sẽ phát sinh (trong khi gửi đi ước tính).
GAE rất cụ thể cho các ứng dụng Python / Java. Nỗ lực rất lớn (cả về tài nguyên + chi phí) trong việc đưa ứng dụng viết lại (hiện có), thử nghiệm, triển khai, v.v.