Thứ năm, 15/03/2018 | 00:00 GMT+7

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ọ.

Sơ đồ đầy đủ ứng dụng web khả dụng cao

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

Sơ đồ Bước 1:  Server  Front-End

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

Sơ đồ Bước 2: Cân bằng tải

Để đả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 .

Bước 3: Tạo Server Back-End với Mạng Riêng

Sơ đồ Bước 3:  Server  Back-End

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.

Bước 4: Cài đặt HAProxy

Sơ đồ Bước 4: 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.

Bước 5: Tạo database SQL

Sơ đồ Bước 5:  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 .

Bước 6: Tạo database NoSQL

Sơ đồ Bước 6:  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).

Bước 7: Thêm bộ nhớ khối

Sơ đồ bước 7: Lưu trữ 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

Sơ đồ bước 8: Ngăn xếp 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.

Bước 9: Tạo object stores

Sơ đồ Bước 9: Lưu trữ Đối tượng

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

Sơ đồ bước 10: 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.

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 .

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.


Tags:

Các tin liên quan

Các bước đầu tiên của bạn với API âm thanh web
2018-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