Skip to content

Instantly share code, notes, and snippets.

@itssomething
Created October 5, 2018 01:43
Show Gist options
  • Save itssomething/086b5844cda0de1c65d58c3eca92dec5 to your computer and use it in GitHub Desktop.
Save itssomething/086b5844cda0de1c65d58c3eca92dec5 to your computer and use it in GitHub Desktop.
các hệ thống phân tán vagina :)
1. Áp dụng kĩ thuật xử lí đa luồng
Khi gửi một request đến server, server sẽ phải xử lí request đó và cpu sẽ được sử dụng. Nếu chỉ sử dụng đơn luồng thì trong thời gian cpu đang xử lí, ta không thể thực hiện một request khác. Ta có thể sử dụng đa luồng ở đây, request được gửi đến sẽ được xử lí bởi một thread riêng biệt, các request tiếp theo cũng sẽ được xử lí bằng các thread khác.
Tuy nhiên khi dùng nhiều thread thì cũng có thể gây tốn bộ nhớ và thời gian. Vì vậy ta có thể xác định xem request nào sử dụng thread nào, khi đó request mới sẽ chờ cho đến khi request trên thread được chạy xong rồi mới thực thi trên chính thread đó.
Ví dụ:
Ta cần cập nhật 10.000 bản khi cùng một lúc, nếu chỉ sử dụng đơn luồng thì việc này có thể tốn nhiều thời gian, tùy thuộc vào dữ liệu cần thay đổi. Ta có thể dùng nhiều thread để xử lí các bản ghi này, từ đó tăng tốc độ thực hiện request và trả về response.
Ta có thể dùng bất đồng bộ để xử lí các request nhanh hơn.
2. Đảm bảo khả năng tương tranh
Để có thể điều khiển tuơng tranh ta có thể dùng các cách sau:
- Sử dụng nhãn thời gian: ta gán nhãn thời gian cho các giao tác. Sử dụng giải thuật gán nhãn thời gian Lamport giúp cho mỗi giao tác có một nhãn thời gian duy nhất, từ đó sẽ không có hiện tượng tuơng tranh. Tuy nhiên cần có một thành phần điều phối để đảm bảo hoạt động của các giao tác Một số thuật toán giúp thực hiện được điều này: thuật toán tập trung, phi tập trung, phân tán, thẻ bài, các thuật toán bầu chọn
3. Để đảm bảo khả năng chịu lỗi ta có thể dùng cách sau:
- Phuơng pháp dư thừa: ta kết nối 2 máy tính với nhau. Một máy tính phục vụ các tác phụ, một máy tính duy trì ở trạng thái stand by. Khi xuất hiện sự cố trên một máy nào đó, ứng dụng khách được tự động chuyển sang máy còn lại
- Sử dụng unicast hoặc multicast để xử lí các lỗi về truyền thông
- Sử dụng cam kết phân tán
- Có thể tự phục hồi khi gặp lỗi, có thể phục hồi lùi hoặc phục hồi tiến. Tư tưởng của phương pháp phục hồi lùi là đưa trạng thái của hệ thống ở thời điểm hiện tại về trạng thái tại thời điểm trước khi lỗi xảy ra. Giải pháp phục hồi tiến không đưa hệ thống trở lại trạng thái trước khi lỗi như phục hồi lùi mà chuyển hệ thống sang trạng thái mới để có thể hoạt động bình thường
- Tăng tính bảo mật của hệ thống bằng các cách như: dùng tường lửa, vpn, hệ thống chống tấn công, xác thực truy cập, kiểm soát bảo mật
4. Tự động nhân bản đảm bảo tính nhất quán
Có 2 cách để nhân bản cơ sở dữ liệu:
- Nhân bản chủ động: vơi cách này thì server nào cũng có thể phản hồi các requests với dữ liệu được cập nhật. Tuy nhiên, cách này gây tốn tài nguyên vì các nhân bản đều thực hiện các hành động giống nhau
- Nhân bản bị động: một server đóng vai trò chính. Nó sẽ thực hiện các thay đổi, cập nhật, và có thể thông báo đến các máy phụ để cập nhật tùy ý. Nó cũng có trạng thái cập nhất mới nhất so với các máy còn lại. Có thể cài đặt được mà không cần máy quyết định. Dùng ít băng thông mạng hơn nhưng sẽ tốn nhiều thời gian hơn để khôi phục sau mất dữ liệu
Nhân bản bị động gồm một số scheme nhỏ hơn như:
- Cold backup: chỉ có máy chính hoạt động, nó sẽ gửi trạng thái của mình đến các máy backup theo chu kì thời gian. Khi máy chủ có vấn đề, quá trình sao lưu sẽ họat động, load backup từ máy backup. Cách này tối ưu tài nguyên nhất, tuy nhiên có thể bị mất một số cập nhật sau lần gửi cuối cùng từ máy chủ
- Ngoài ra còn có warm backup, hot standby,...
5. Đảm bảo khả năng chống SQL injection
- Validate dữ liệu nhập vào từ người dùng bằng cách ngăn các kí tự đặc biệt, hoặc dùng regex nếu input phức tạp
- Parameterize câu truy vấn sql (sử dụng các parameters khi làm việc với câu lệnh sql): việc này sẽ loại bỏ khả năng trong input có các kí tự không phù hợp làm thay đổi ý nghĩa của câu truy vấn. Với câu truy vấn đã được param hóa, ta còn có thể xử lí các kiểu dữ liệu
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment