Giải pháp Deep Dive: Xây dựng một ứng dụng web khả dụng cao với khả năng xử lý và lưu trữ web bằng cách sử dụng MongoDB và Elk Stack
Cài đặt ứng dụng web có tính khả dụng cao mang lại lợi thế cho các nhà phát triển đang tìm cách loại bỏ các điểm lỗi đơn lẻ và giảm thiểu thời gian chết. Tuy nhiên, trong khuôn khổ chung này, có một số biến thể có thể xảy ra. Các nhà phát triển sẽ đưa ra lựa chọn dựa trên nhu cầu cụ thể của ứng dụng và mục tiêu hiệu suất của họ.Cài đặt ứng dụng có tính khả dụng cao này được thiết kế như một giải pháp giả định để cung cấp khả năng:
- Giải pháp xử lý hình ảnh, tài liệu và video, tập trung vào lưu trữ, truy xuất và nối.
- Giải pháp duy trì điểm số, bảng thành tích hoặc giải pháp mua hàng có thể được thay đổi quy mô, sửa đổi hoặc tích hợp với giải pháp thương mại điện tử.
- Một giải pháp viết blog cũng có thể được tích hợp với một giải pháp thương mại điện tử.
Trong bài viết này, ta sẽ xem xét các tính năng cụ thể của cài đặt này và thảo luận về các thành phần của nó ở mức tổng quát hơn. Ở cuối mỗi phần, ta sẽ liên kết đến các tài nguyên bổ sung về chủ đề để hỗ trợ bạn khi bạn xem xét các phương pháp luận và phương pháp hay nhất.
Bước 1: Tạo server Front-End với mạng riêng
Cài đặt nhiều lớp điển hình tách lớp trình bày khỏi logic ứng dụng của ta . Việc tách các chức năng ứng dụng thành các lớp giúp quá trình khắc phục sự cố và mở rộng quy mô dễ dàng hơn trong dài hạn.
Khi ta chọn server và tài nguyên, ta có thể xem xét các yếu tố sau:
- Loại công việc nào ta sẽ làm với nội dung truyền thông và hình ảnh?
- Yêu cầu máy tính của ta sẽ như thế nào?
- Ta dự đoán loại và lưu lượng truy cập nào?
- Kế hoạch của ta để giám sát nó là gì?
Các công cụ giám sát của ta sẽ giúp ta mở rộng quy mô ứng dụng và xây dựng các nguồn lực ở cấp độ này và cấp độ khác. Một bước bổ sung mà ta có thể thực hiện để tiết kiệm chi phí và các biện pháp bảo mật là gán các tài nguyên của ứng dụng, bao gồm cả các server front-end của ta , cho một mạng riêng được chia sẻ. Sau đó, dữ liệu có thể được chuyển giữa các server mà không phải chịu thêm chi phí băng thông hoặc rời khỏi một trung tâm dữ liệu duy nhất.
Bước 2: Tạo Cân bằng tải cho Server Front-End
Để đảm bảo các tài nguyên của ứng dụng của ta luôn có sẵn và hoạt động hiệu quả, ta có thể tạo bộ cân bằng tải để quản lý dung lượng công việc front-end của ta . Các bộ cân bằng tải này sẽ chuyển hướng lưu lượng đến, sử dụng các cơ chế kiểm tra sức khỏe và chuyển đổi dự phòng thường xuyên để quản lý sự cố hoặc trục trặc của server . Chúng cũng sẽ cân bằng lưu lượng truy cập tổng thể hơn, đảm bảo các server riêng lẻ không bị quá tải.
Để tối ưu hóa cấu hình của chúng, ta có thể xem xét các yếu tố sau:
- Ta sẽ lưu trữ thông tin trạng thái về yêu cầu và user ?
- Ta có cần chuyển hướng yêu cầu dựa trên tải CPU không?
Những yếu tố này sẽ cho phép ta chọn thuật toán tối ưu cho cấu hình của ta . Có một thành phần bảo mật bổ sung cho công việc của bộ cân bằng tải: ta có thể cấu hình chúng để lắng nghe trên các cổng cụ thể và chuyển hướng lưu lượng giữa các cổng. Cũng có thể sử dụng chúng để giải mã thông báo cho các server back-end của ta .
- Giới thiệu về Bộ cân bằng tải DigitalOcean .
- Cân bằng tải là gì? .
- 5 Trường hợp sử dụng DigitalOcean Load Balancer .
Bước 3: Tạo Server Back-End với Mạng Riêng
Tạo chương trình backend của ứng dụng của ta liên quan đến một tập hợp các tính toán tài nguyên khác. , bản chất công việc của ứng dụng sẽ quyết định kích thước và tài nguyên của các server của ta . Các yếu tố cần xem xét bao gồm loại và dung lượng công việc xử lý mà server của ta sẽ thực hiện ở cấp độ này. Đây là nơi phát huy sự khác biệt giữa các kiểu dữ liệu và các việc xử lý. Ví dụ: nếu ta đang làm việc với nội dung hình ảnh và dữ liệu người tiêu dùng, ta có thể xem xét các yêu cầu về tải và độ trễ khi chúng áp dụng cho từng nội dung.
Việc giám sát cũng sẽ rất quan trọng ở cấp độ này để giải quyết các vấn đề như:
- Ta đang thực hiện loại xử lý nào với nội dung hình ảnh và phương tiện?
- Ta đang lấy thông tin từ những nội dung này hay chỉ đơn giản là truy xuất hoặc kết hợp chúng lại?
- Ta có dung lượng và loại giao dịch tiêu dùng nào?
Ta có thể đặt các tài nguyên ở cấp độ này trong mạng riêng được chia sẻ của ta để tính phí băng thông tiềm năng.
- Cách cài đặt database từ xa để tối ưu hóa hiệu suất trang web với MySQL trên Ubuntu 16.04 .
- Cách tạo ứng dụng Django và kết nối nó với database .
Bước 4: Cài đặt HAProxy
Tương tự như cách bộ cân bằng tải của ta xử lý các yêu cầu bên ngoài, HAProxy quản lý stream giao tiếp giữa các lớp ứng dụng và giao diện user của ta . Trong chức năng của nó như một bộ cân bằng tải, HAProxy có thể được cấu hình để lắng nghe và chuyển hướng lưu lượng truy cập từ các cổng cụ thể. Điều này có thể thêm một lớp bảo mật khác vào các hoạt động nội bộ của ứng dụng của ta . Khi cần mở rộng quy mô, ta có thể cấu hình HAProxy để thêm và xóa các node tự động.
- Giới thiệu về HAProxy và các khái niệm cân bằng tải .
- Cách tạo cài đặt HAProxy khả dụng cao với Corosync, Pacemaker và IP nổi trên Ubuntu 14.04 .
Bước 5: Tạo database SQL
Đối với một phân đoạn nhất định của dữ liệu ứng dụng của ta , ta sẽ sử dụng database SQL. Điều này dành cho dữ liệu cần phải cập nhật, chính xác và nhất quán. Những thứ như giao dịch bán hàng, thông tin đăng nhập / đăng xuất và thay đổi password , có cấu trúc thống nhất và cần được bảo mật, là một trường hợp hợp lý cho việc sử dụng database SQL.
, ta sẽ muốn xem xét các chỉ số của bạn : Ta đang xử lý bao nhiêu yêu cầu giao dịch hoặc bảo mật? Nếu tải của ta cao, ta có thể cần xem xét sử dụng các công cụ như ProxySQL để cân bằng các yêu cầu đến. Ta có thể thực hiện một bước bổ sung để cải thiện hiệu suất và đảm bảo tính sẵn sàng cao nếu ta cài đặt nhân rộng giữa các database SQL của bạn . Điều này cũng sẽ hữu ích nếu ta cần mở rộng quy mô xử lý dữ liệu của bạn .
- Cách cài đặt MySQL mới nhất trên Ubuntu 16.04 .
- Cách cấu hình MySQL Group Replication trên Ubuntu 16.04 .
Bước 6: Tạo database NoSQL
Với dữ liệu ít đồng nhất hoặc sơ đồ, ta có thể sử dụng database NoSQL. Ví dụ: đối với hình ảnh, video hoặc bài đăng trên blog, database NoSQL cung cấp khả năng lưu trữ metadata mục theo cách phi giản đồ.Khi sử dụng loại giải pháp này, dữ liệu của ta sẽ có tính khả dụng cao và tính nhất quán của nó sau cùng. Khi ta nghĩ về hiệu suất, ta muốn xem xét loại và dung lượng yêu cầu mà ta dự đoán đối với các database này.
Các yếu tố có thể tối ưu hóa hiệu suất, tùy thuộc vào tải và loại yêu cầu, bao gồm: sử dụng giải pháp cân bằng tải để quản lý lưu lượng giữa các database , phân phối dữ liệu giữa các database và các giải pháp lưu trữ cũng như thêm hoặc phá hủy database (thay vì sao chép chúng).
- Cách cài đặt và bảo mật MongoDB trên Ubuntu 16.04 .
- Cách cài đặt và cấu hình OrientDB trên Ubuntu 16.04 .
Bước 7: Thêm bộ nhớ khối
Cài đặt của ta tách chức năng lưu trữ database khỏi các hoạt động khác của ứng dụng của ta . Mục tiêu là tăng cường bảo mật cho dữ liệu của ta và hiệu suất tổng thể của ứng dụng của ta . Là một phần khác của quá trình cách ly này, ta có thể tạo giải pháp backup cho các file database SQL của bạn . Các giải pháp lưu trữ khối như Dung lượng lưu trữ khối của DigitalOcean có thể thực hiện tốt công việc này, nhờ vào I / O có độ trễ thấp và cấu trúc hệ thống file sơ đồ. Họ cũng cung cấp các tùy chọn để mở rộng quy mô, vì chúng có thể dễ dàng bị phá hủy, thay đổi kích thước hoặc nhân lên.
Bước 8: Tạo một ngăn xếp elastic / ELK
Theo dõi hiệu suất ứng dụng của ta sẽ thông báo các quyết định ta đưa ra khi ta mở rộng quy mô và tinh chỉnh cài đặt của bạn . Để thực hiện công việc này, ta có thể sử dụng giải pháp ghi log tập trung như ngăn xếp Elastic / ELK. Ngăn xếp của ta bao gồm các thành phần thu thập và trực quan hóa log : Logstash, xử lý log ; Elasticsearch, nơi lưu trữ chúng; và Kibana, cho phép chúng được tìm kiếm và tổ chức trực quan. Nếu ta sắp xếp ngăn xếp này sau một IP nổi, ta sẽ có thể truy cập nó từ xa bằng IP tĩnh. Ngoài ra, nếu ta đưa ngăn xếp của bạn vào mạng riêng được chia sẻ, ta sẽ có một lợi thế bảo mật khác: các nhân viên báo cáo của ta sẽ không cần chuyển thông tin đến ngăn xếp qua internet.
- Giới thiệu về Chỉ số, Giám sát và Cảnh báo .
- Cách cài đặt Elasticsearch, Logstash và Kibana (ELK Stack) trên Ubuntu 16.04 .
- Cách tạo IP nổi trên DigitalOcean .
- Cách sử dụng IP nổi trên DigitalOcean .
Bước 9: Tạo object stores
Khi lưu trữ các tài sản tĩnh của ứng dụng, ta muốn đảm bảo tính khả dụng của chúng trong khi duy trì hiệu suất cao. Các giải pháp lưu trữ đối tượng như DigitalOcean Spaces có thể đáp ứng nhu cầu này. Cụ thể, nếu ta quyết định lưu trữ các đối tượng lớn trong database của bạn , chúng có thể gặp vấn đề về hiệu suất với dòng dữ liệu, khiến cho các bản backup của ta rất lớn. Trong trường hợp này, ta có thể di chuyển dữ liệu của bạn sang bộ nhớ đối tượng. Bằng cách lưu trữ một URL trong database của bạn , ta có thể trỏ đến các tài nguyên của bạn từ database mà không ảnh hưởng đến dung lượng lưu trữ của nó.Đây là một giải pháp tối ưu cho dữ liệu mà ta dự đoán sẽ vẫn ở trạng thái tĩnh và cung cấp các tùy chọn bổ sung để mở rộng quy mô.
Bước 10: Cấu hình bản ghi DNS
Sau khi cài đặt tính khả dụng cao của ta được thực hiện, ta có thể trỏ domain của ứng dụng đến các bộ cân bằng tải bằng DNS. Với thuật toán tổng hợp, ta có thể cân bằng các phản hồi truy vấn giữa các tài nguyên được phân phối của ứng dụng của ta . Điều này sẽ tối đa hóa sự sẵn có của các tài nguyên này, đồng thời phân phối dung lượng công việc trên các cụm tài nguyên. Ngoài ra, ta có thể sử dụng định tuyến địa lý để so khớp các yêu cầu đến tài nguyên gần nhau.
- Cách cài đặt tên server với DigitalOcean .
- Giới thiệu về Thuật ngữ, Thành phần và Khái niệm DNS .
- Cách tạo cài đặt tính khả dụng cao với Heartbeat và IP nổi trên Ubuntu 16.04 .
Bước 11: Lập kế hoạch cho Chiến lược phục hồi
Chiến lược khôi phục của ta sẽ bao gồm các công cụ và chức năng để backup và khôi phục dữ liệu của ta trong trường hợp quản trị hoặc các lỗi khác. Đối với mỗi server của ta , ta có thể tận dụng và tự động hóa Ảnh chụp nhanh DigitalOcean để sao chép và lưu trữ hình ảnh của các server trên server DigitalOcean. Ngoài ra, ta có thể sử dụng các công cụ và dịch vụ chuyên dụng như Percona, Restic hoặc Bacula, cùng với các thiết bị lưu trữ như DigitalOcean Backups và Spaces để sao chép dữ liệu của ta . Khi ta đánh giá các công cụ này và tạo chiến lược của bạn , ta sẽ suy nghĩ về dữ liệu ở mỗi lớp trong ứng dụng của bạn và tần suất nó cần được backup để ta có điểm hợp lý để khôi phục chức năng ứng dụng của bạn .
- Cách sử dụng ảnh chụp nhanh DigitalOcean để tự động backup các server của bạn
- Hiểu về backup server DigitalOcean
- Xây dựng cho Sản xuất: Ứng dụng Web - Lập kế hoạch phục hồi .
- Cách Chọn Chiến lược Backup Hiệu quả cho VPS của bạn .
Kết luận
Trong bài viết này, ta đã thảo luận về cách cài đặt tiềm năng cho một ứng dụng web có tính khả dụng cao phụ thuộc vào các thành phần cơ sở hạ tầng như Server, Load Balancers, Spaces và Block Storage để mang lại hiệu suất hoạt động cao. Cài đặt này có thể hỗ trợ giải pháp xử lý hình ảnh và các phương tiện khác, tập trung vào lưu trữ và truy xuất, cũng như khả năng mua, lưu giữ điểm hoặc viết blog có thể được tích hợp với các giải pháp thương mại điện tử.
Cuối cùng, có nhiều hướng mà các nhà phát triển có thể thực hiện để đáp ứng các nhu cầu và trường hợp sử dụng cụ thể trong khi vẫn duy trì tính khả dụng cao và mỗi cài đặt ứng dụng sẽ phản ánh những khác biệt này về tính đặc thù của kiến trúc.
Các tin liên quan
Các bước đầu tiên của bạn với API âm thanh web2018-01-09
Gói ứng dụng web của bạn bằng bưu kiện
2017-12-09
Tích hợp các thành phần web với ứng dụng Vue.js của bạn
2017-09-25
Cách làm việc với dữ liệu web bằng cách sử dụng yêu cầu và món súp đẹp mắt với Python 3
2017-07-14
Sử dụng Web worker một cách dễ dàng trong Vue.js với vue-worker
2017-05-16
Cách cài đặt Icinga và Icinga Web trên Ubuntu 16.04
2017-05-05
Cách lưu trữ nhiều trang web với Nginx và HAProxy bằng LXD trên Ubuntu 16.04
2017-04-19
Cách bảo mật ứng dụng web nông dân của bạn bằng Let's Encrypt trên Ubuntu 16.04
2017-03-29
Xây dựng các thành phần web gốc với Vue.js
2017-03-16
Cách sử dụng OpenResty Web Framework cho Nginx trên Ubuntu 16.04
2017-02-28