Trong bài viết 12 Factor về Port Binding http://12factor.net/port-binding, có một yêu cầu rằng mọi ứng dụng đều là khép kín và không có thời gian chạy được tiêm, ví dụ: Tomcat. Đối với lý do nào được thông báo này ... lợi thế của các ứng dụng độc lập dành cho microservices là gì?Tại sao ứng dụng 12 Factor nên tự chứa?
Trả lời
Tôi nghĩ là vì nó mang đến cho bạn sự linh hoạt tuyệt vời khi thời gian mở rộng quy mô ứng dụng của bạn. Nếu bạn sử dụng tomcat bạn sẽ phải sao chép .war của bạn và thả nó bên trong một tomcat và sau đó tải cân bằng các yêu cầu của bạn để một trong hai người trong số họ.
Thay vào đó, nếu ứng dụng của bạn có một máy chủ http khép kín, bạn chỉ cần chạy một phiên bản khác trong một cổng khác và quên tất cả những thứ tomcat đó. Bạn vẫn sẽ phải cân bằng các yêu cầu của mình cho một trong các phiên bản ứng dụng của bạn, nhưng có vẻ thẳng hơn về phía trước.
Để hiểu các quy tắc xung quanh ứng dụng gắn thẻ và ứng dụng độc lập, bạn nên xem mọi thứ từ góc độ nền tảng được thiết kế để chạy các ứng dụng 12 yếu tố như Heroku hoặc Deis.
Các nền tảng này là ứng dụng mở rộng quy mô ở cấp quy trình. Khi các quy trình được mở rộng, nền tảng sẽ cố gắng đặt các công nhân bổ sung này vào lưới định tuyến để chúng có thể bắt đầu phân phối lưu lượng truy cập. Nếu ứng dụng không bị khép kín và, ví dụ, được kết hợp chặt chẽ với máy chủ Apache front-end sử dụng mod_jk
- không thể mở rộng quy mô bằng cách chạy các quy trình công nhân bị cô lập hơn.
Ràng buộc cổng tồn tại để giải quyết vấn đề "môi giới cổng" ở cấp nền tảng. Nếu mọi nhân viên ứng dụng lắng nghe trên cổng 80 thì sẽ có xung đột. Để giải quyết vấn đề này, ràng buộc cổng là một quy ước trong đó ứng dụng lắng nghe trên một cổng mà nền tảng đã cấp phát - và được truyền vào như một biến môi trường $PORT
. Điều này đảm bảo a) nhân viên ứng dụng lắng nghe trên cổng bên phải và b) nền tảng biết nơi định tuyến lưu lượng truy cập được dành cho công nhân đó.
- 1. Tại sao AppDomain.CurrentDomain.BaseDirectory không chứa "bin" trong ứng dụng asp.net?
- 2. Tại sao tôi không nên sử dụng Tự động?
- 3. Xây dựng một ứng dụng web với Factor
- 4. Tại sao nên sử dụng Sự kiện?
- 5. Tại sao nên sử dụng Hibernate/nHibernate?
- 6. Tại sao tôi nên sử dụng glBindAttribLocation?
- 7. (Tại sao) tôi nên sử dụng obfuscation?
- 8. Lớp nào của ứng dụng nên chứa triển khai DTO
- 9. Tại sao hồ bơi ứng dụng tự động dừng lại?
- 10. Tại sao tôi nên sử dụng div vùng chứa trong HTML?
- 11. Tại sao nên sử dụng scala.collection.immutable.Stack
- 12. ReactJS: Tại sao nên sử dụng this.props.children?
- 13. Tại sao tôi nên sử dụng Socket.io?
- 14. Tại sao eax cho số không nếu nó chứa tự?
- 15. Tại sao ngày 1899-12-30 không có ngày tháng trong Access/SQL Server thay vì 12/31?
- 16. Tại sao nên sử dụng các hoạt động bắt đầu?
- 17. Tại sao nên sử dụng trang bị thêm với AsyncTask?
- 18. Tại sao tôi nên tránh sử dụng ClassType trong mã ứng dụng?
- 19. Tại sao tôi nên sử dụng MVVM trong ứng dụng Silverlight?
- 20. Tại sao nên sử dụng ClientLogin cho các ứng dụng web trong API Google?
- 21. Tại sao tôi nên sử dụng lệnh GO trong Sybase?
- 22. MySql Index Fill Factor?
- 23. Cách tạo ứng dụng lõi .Net tự chứa?
- 24. Tại sao các ứng dụng được biên soạn bởi GCC luôn chứa ký hiệu _mcount?
- 25. Tại sao không nên sử dụng attach() trong R, và tôi nên sử dụng cái gì?
- 26. Tại sao tôi nên sử dụng các lớp học ES6?
- 27. Tại sao tôi nên chọn GCD qua NSOperation và chặn cho các ứng dụng cấp cao?
- 28. Tại sao ứng dụng Java WebStart từ chối bắt đầu nếu url JNLP chứa%?
- 29. Tại sao tôi nên sử dụng std :: async?
- 30. Tại sao tôi nên sử dụng 'áp dụng' trong Clojure?
Bạn có thể sử dụng tomcat được nhúng hoặc cầu nối được nhúng để hiển thị dịch vụ của bạn –