2015-02-23 16 views
5

Có thể, và nếu có, làm thế nào? Tôi muốn có thể tiếp cận nó từ cơ sở hạ tầng Heroku hiện có của tôi.Làm thế nào để chạy InfluxDB trên Heroku?

Tôi có cần Procfile không? Từ những gì tôi hiểu nó chỉ là một nhị phân độc lập được viết bằng Go! vì vậy nó không phải là khó khăn để triển khai nó, tôi chỉ tò mò làm thế nào để triển khai nó bởi vì tôi không nghĩ rằng tôi hiểu được ins and outs của Heroku triển khai.

Trả lời

1

Tôi thích suy nghĩ bất cứ điều gì là có thể trên một nút Heroku khi sử dụng một tùy chỉnh buildpack, nhưng có một số lưu ý khi lưu trữ với Heroku:

  • ops, ví dụ sao lưu, giám sát (nó đòi hỏi phải cài đặt thêm dịch vụ, mở thêm cổng, vv - Heroku có thể bị cản đường)
  • hiệu suất, xem xét dyno size
  • và nếu bạn cần một dyno lớn hơn, chi phí trở thành vấn đề. Bạn sẽ nhận được nhiều bang cho buck của bạn khi bạn đi các tuyến đường IaaS.
  • "các tính năng" khác của dyno, ví dụ: disk ephemerality

Tôi khuyên bạn nên hosted InfluxDB hoặc quay lên của riêng bạn trên VPS, tất cả những gì bạn có thể trỏ các ứng dụng dựa trên Heroku hiện có của bạn. Sau đó, nó sẽ giúp để có được những trường hợp gần nhất có thể (tức là cùng một khu vực, hoặc đồng vị trí nếu có thể), giả sử nhu cầu về độ trễ thấp giữa DB và ngăn xếp ứng dụng.

+0

Có nhưng với nhiều truy vấn, điều gì sẽ xảy ra với hiệu suất? Không có gì tốt, tôi tưởng tượng, trừ khi VPS xảy ra được trên cùng một cụm như heroku aka trên Amazon. Liệu tôi có sai? –

+0

Một số thử nghiệm sẽ đủ. Ví dụ. làm thế nào một giọt kỹ thuật số đại dương trong cùng một khu vực so sánh với một trường hợp Amazon trong một khu vực khác nhau. Ngoài ra, [kích thước dyno] (https://devcenter.heroku.com/articles/dyno-size) có thể được xem xét, ví dụ: bao nhiêu RAM bạn nghĩ rằng bạn sẽ cần cho trường hợp InfluxDB của bạn? Nếu câu trả lời là nhiều hơn bạn nghĩ, tôi sẽ đi với một trường hợp Amazon (trong cùng khu vực với các trường hợp Heroku của bạn) hoàn toàn là để tiết kiệm chi phí. Tôi sẽ cập nhật câu trả lời để phản ánh những cân nhắc bổ sung này. – opyate

4

Heroku Dynos nên không được sử dụng để triển khai một ứng dụng cơ sở dữ liệu như InfluxDB.

Dynos là máy chủ tạm thời. Dữ liệu không tồn tại giữa khởi động lại dyno và không thể chia sẻ với các dynos khác. Thực tế, bất kỳ ứng dụng cơ sở dữ liệu nào được triển khai trên dyno đều là vô dụng. Đây là lý do tại sao cơ sở dữ liệu trên Heroku (ví dụ: Postgres) là tất cả Tiện ích bổ sung. Nên cài đặt InfluxDB trên một nền tảng khác (như AWS EC2 hoặc VPS) vì Tiện ích bổ sung Heroku không khả dụng.


Điều đó nói rằng, nó là thể để triển khai InfluxDB đến một Dyno Heroku.

Để bắt đầu, điều quan trọng là hiểu khái niệm về 'sên'. Sên là các thùng chứa (tương tự như hình ảnh Docker) chứa mọi thứ cần thiết để chạy chương trình trên cơ sở hạ tầng của Heroku. Để triển khai InfluxDB, một sên InfluxDB cần phải được tạo * Có hai cách để tạo ra một sên cho Go thư viện:..

  1. Tạo sên trực tiếp từ một Go thực thi như mô tả here **
  2. Xây dựng slug từ nguồn bằng cách sử dụng gói xây dựng Heroku Go (được giải thích bên dưới).

Xây dựng sên từ nguồn sử dụng một buildpack, tạo bản sao đầu tiên trên repo InfluxDB Github. Sau đó, thêm một Procfile tại thư mục gốc của repo, cho Heroku lệnh để chạy khi dyno khởi động.

echo 'web: ./influxd' > Procfile 

Gói dựng sẵn yêu cầu tất cả các phụ thuộc phải được bao gồm trong thư mục. Sử dụng công cụ phụ thuộc godep để cung cấp tất cả các phụ thuộc vào thư mục.

go get github.com/tools/godep 
godep save 

Tiếp theo, cam kết các thay đổi được thực hiện ở trên cho repo git.

git add -A . 
git commit -m dependencies 

Cuối cùng, hãy tạo ứng dụng mới và yêu cầu ứng dụng biên dịch bằng gói dựng sẵn.

heroku create -b https://github.com/kr/heroku-buildpack-go.git 
git push heroku master 
heroku open // Open the newly created InfluxDB instance in the browser. 

Heroku sẽ hiển thị trang lỗi. Lỗi sẽ được hiển thị vì loại quá trình 'web' của Heroku yêu cầu ứng dụng nghe các yêu cầu đến trên cổng được mô tả bằng biến môi trường $PORT, nếu không nó sẽ giết dyno. API của API và bảng quản trị của InfluxDB chạy trên các cổng 80868083, tương ứng.

Thật không may, InfluxDB không cho phép các cổng đó được đặt từ biến môi trường, chỉ thông qua tệp cấu hình (/etc/config.toml). Một tập lệnh bash nhỏ được thực thi trước khi khởi động InfluxDB có thể thiết lập đúng cổng trong tệp cấu hình trước khi khởi động InfluxDB.

Một vấn đề khác, Heroku chỉ hiển thị một cổng cho mỗi dyno để API và bảng điều khiển quản trị không thể được hiển thị với internet cùng một lúc. Một proxy ngược thông minh có thể giải quyết vấn đề đó bằng cách sử dụng số X-Forwarded-Port request header của Heroku.

Dòng dưới cùng, không sử dụng Heroku dynos để chạy InfluxDB.


* Điều này có nghĩa là lợi ích của thực thi Go độc lập bị mất khi triển khai cho Heroku, vì nó cần được biên dịch lại cho ngăn xếp của Heroku.

** Tạo một con sên trực tiếp từ tệp thi hành InfluxDB không hoạt động vì không có cách tích hợp để nghe đúng cổng do Heroku đưa ra trong biến môi trường $PORT.

Các vấn đề liên quan