Tôi còn khá mới đối với toàn bộ ngăn xếp và triển khai Netflix OSS nói chung. Là nền tảng cho trình độ kiến ​​thức hiện tại của tôi, vai trò chính của tôi là kỹ sư ứng dụng front-end. Tuy nhiên, tôi thích mặt hoạt động của mọi thứ, vì vậy tôi đang cố gắng thiết lập một chiến lược triển khai mới và công cụ cho một dự án mới.

Mục tiêu của chúng tôi

  • Triển khai siêu dễ dàng (chúng tôi muốn nhấn một nút để cập nhật quá trình sản xuất)
  • Triển khai tự động để kiểm tra môi trường (sử dụng Jenkins)
  • Dễ bảo trì (chúng tôi có một ứng dụng để viết, không muốn mất thời gian loay hoay với các vấn đề sản xuất)
  • Khả năng xử lý kiến ​​trúc hướng dịch vụ (nhiều ứng dụng nhỏ, nhiều ngôn ngữ và kho dữ liệu khác nhau)
  • Đủ linh hoạt để đảm bảo chúng tôi sẽ không sớm phải thay đổi chiến lược (chúng tôi đã cố gắng thoát khỏi RightScale)

Chúng tôi không sao với thời gian thiết lập ban đầu nhiều hơn một chút nếu làm như vậy sẽ giúp chúng tôi đỡ đau đầu hơn trong tương lai.

Vì vậy, dọc theo những dòng này, tôi đã nghe podcast, xem các cuộc nói chuyện về Ops và đọc rất nhiều bài đăng trên blog và dựa trên mục tiêu của chúng tôi và những gì tôi đã thực hiện để hình thành một số phương pháp hay nhất, chúng tôi đã bắt đầu hình thành một kế hoạch bằng cách sử dụng Asgard, cuộn gói của chúng tôi vào một cái lọ và cuộn nó vào một AMI.

Chúng tôi đã lên kế hoạch tất cả điều này và thích những ưu điểm của quy trình so với sử dụng máy chủ Chef và các phiên bản hội tụ nhanh chóng (chúng tôi cảm thấy điều này dễ xảy ra lỗi do dòng thời gian hạn chế của chúng tôi và sự thiếu hiểu biết về quy trình làm việc của máy chủ Chef). Tuy nhiên, một đồng nghiệp đã tự mình quan sát xung quanh một chút và cảm thấy như Elastic Beanstalk đã đáp ứng được nhu cầu của chúng tôi.

Tôi đã xem xét nó và tạo ra một môi trường thử nghiệm với tệp WAR và cơ sở dữ liệu RDS đính kèm. Mọi thứ dường như hoạt động và tôi tin rằng chúng tôi có thể tự động triển khai tới môi trường thử nghiệm bằng Jenkins thông qua API AWS. Có vẻ đơn giản đủ ... có lẽ quá đơn giản.

Điều tôi tự hỏi là, bắt được là gì? Nếu Elastic Beanstalk rất đơn giản và hiệu quả, tại sao nó không được nói đến nhiều hơn? Tôi đang gặp khó khăn trong việc tìm kiếm đủ ý kiến ​​và sự thật khách quan về hai chiến lược triển khai khác nhau, vì vậy tôi nghĩ rằng tôi sẽ hỏi xung quanh.

Bạn có sử dụng Elastic Beanstalk? Nếu vậy, tại sao và những yếu tố nào dẫn đến quyết định đó? Bạn thích điều gì và không thích điều gì?

Nếu bạn không sử dụng Elastic Beanstalk mà đã cân nhắc, bạn sẽ sử dụng cái gì và tại sao bạn không sử dụng Elastic Beanstalk?

Ưu điểm và nhược điểm của chiến lược triển khai dựa trên Elastic Beanstalk cho một SOA là gì? Đó là, liệu Elastic Beanstalk có hoạt động tốt với nhiều ứng dụng nhỏ dựa vào nhau để hoạt động hay không?

answer

Tôi đã đánh giá Elastic Beanstalk cùng với các dịch vụ AWS khác trong khi cố gắng cải thiện các phiên bản AWS được cuộn thủ công của chúng tôi. Lý do tôi chọn không sử dụng nó là do các biến chứng sẽ xảy ra khi di chuyển ứng dụng hiện có của tôi chứ không phải với bản thân sản phẩm. Vấn đề là bạn không có nhiều quyền kiểm soát về việc triển khai / cấu hình ứng dụng của các máy chủ. Nếu bạn đang bắt đầu một ứng dụng mới thì có thể hữu ích nếu bạn không xử lý những điều đó ngay bây giờ, nếu bạn có một ứng dụng hiện có thì việc phù hợp với mô hình Beanstalk là một thách thức nhiều hơn.

Beanstalk cung cấp dịch vụ tương tự cho Heroku và các nhà cung cấp PaaS khác nhưng không mang lại nhiều lợi ích cho những người chỉ muốn tập trung vào việc tạo ứng dụng của họ. Ít nhất bạn cũng có thể xác định các tài nguyên ảo hóa ở một mức độ lớn hơn so với các nhà cung cấp PaaS khác.

Các vấn đề mà tôi đang gặp phải với (các) ứng dụng của mình:

  • Triển khai dựa trên Git - Tôi thích chúng nhưng repo của chúng tôi có dung lượng hơn 1 GB. Thay vì lớn để đẩy một cách thường xuyên. Repo này cũng chứa khoảng 40 ứng dụng (thực sự nên được chia nhỏ) nhưng điều đó sẽ mất một khoảng thời gian. Tải lên bất kỳ loại gói nào đều có thể hoạt động nhưng hầu hết các ứng dụng của chúng tôi sẽ mất một lượng lớn công việc để biến nó thành một gói.

  • Tích hợp với các dịch vụ khác - Từ những gì tôi đã thấy Beanstalk, giả định rằng bất cứ thứ gì bạn đang kết nối đều là một dịch vụ duy nhất. Điều này hoạt động tốt nếu các dịch vụ của bạn ở phía sau và ELB nhưng của chúng tôi là các nút riêng biệt mà chúng tôi sử dụng thông qua HAProxy chạy trên mỗi máy chủ ứng dụng. Nếu bạn đang chạy kho dữ liệu và các dịch vụ khác của mình như một điểm cuối duy nhất, bạn sẽ ổn.

Trong đánh giá của tôi, tôi cũng bao gồm OpsWorks và CloudFormation. OpsWorks có các vấn đề tích hợp tương tự với cách tự động hóa hiện có đang hoạt động cho các ứng dụng này. CloudFormation không làm được nhiều hơn những gì một số tập lệnh Python và Chef đã lo cho chúng tôi.

Thay vào đó, tôi đã chọn sử dụng AWS Autoscaling Groups với một số tính năng tự động hóa do Asgard cung cấp . Đây là thay đổi nhỏ nhất đối với mã cấu hình / ứng dụng hiện có và cung cấp cho chúng tôi những lợi ích mà chúng tôi đang tìm kiếm, quản lý đơn giản nhiều máy chủ có sẵn thông qua API AWS.

Các hạn chế do Elastic Beanstalk đưa ra trên ứng dụng của bạn là rất hữu ích. Bạn sẽ phải đảm bảo rằng ứng dụng của mình hầu như không có trạng thái, cung cấp điểm cuối cho một dịch vụ và dựa vào các dịch vụ khác cho trạng thái. Nếu bạn đang cố gắng tạo ra các dịch vụ độc lập có thể tái sử dụng mà nhiều ứng dụng trong Beanstalk là một khởi đầu tuyệt vời.

Nếu / khi bạn muốn có thêm cấu hình, OpsWorks là một bước tuyệt vời tiếp theo. Các vai trò được xác định trước sẽ giúp quá trình chuyển đổi dễ dàng bắt đầu và nó cung cấp một khuôn khổ tự động hóa xung quanh Chef để giúp điều phối việc cung cấp nhiều máy chủ.

Tôi thực sự thấy điểm của sự mất kiểm soát, nhưng tôi không nhất thiết phải nhìn thấy tình trạng vô quốc tịch bắt buộc. Tất cả những gì eb thực sự làm là triển khai tự động hóa, bằng cách này, điều này thật tuyệt vời. Tôi thấy điểm của một kho lưu trữ lớn. Nói chung, tôi nghĩ rằng việc tách các chức năng ứng dụng logic thành các ứng dụng bean riêng biệt và sau đó có các môi trường "staging" và "prod" bên dưới, thực sự rất tốt. Chúng tôi có các môi trường mô-đun như trình tải lên, nó không hoạt động nhiều và về lý thuyết, nó làm tăng thêm rất nhiều chi phí, nhưng sau đó bạn đang sử dụng các phiên bản nhỏ hơn chỉ nhiều hơn. Chúng tôi chạy một nginx tập trung và phải viết rất nhiều xử lý tin nhắn sns tùy chỉnh để thông báo cho ngnix về những thay đổi trong chính sách quy mô tự động. Một vấn đề lớn khác của eb là không thể tắt cân bằng tải, vì chúng tôi sử dụng ngnix, tại sao? elb không hỗ trợ websocket.