30/09/2018, 17:04
Hỏi về khả năng mở rộng(scalability) trong lập trình
Mình muốn tìm hiểu về việc lập trình cho hệ thống lớn phục vụ cho hàng triệu người dùng thì khác gì so với hệ thống chỉ vài trăm người dùng. Mình nghe nói là nếu không có kĩ thuật thì hệ thống sẽ dễ bị crash khi phục vụ số lượng lớn người dùng. Cao thủ nào có tài liệu nào về phần này thì chỉ giáo với
Bài liên quan
Phụ thuộc vào:
Kĩ thuật nào? Tài liệu nào?
Chả có, chỉ có hiểu biết và kinh nghiệm được sử dụng như thế nào để giải quyết vấn đề.
@laptrinhio ơi vậy làm sao có được phần hiểu biết sâu về lĩnh vực đó vậy. Chẳng lẽ cứ vừa làm vừa đọc thêm hả. Tại vì mình thấy ebook hiện nay không tập trung về vấn đề đó @@
Mình cũng đang quan tâm vấn đề này. Khả năng phục vụ số lượng cực lớn người dùng và cập nhật không đồng bộ không cần khởi động lại hệ thống.
Nếu là lập trình viên, thì chỉ chú tâm vào lập trình một vài mảng là quan trọng nhất. Lập trình viên không phải là người đưa ra giải pháp. OK?
Trong công nghệ thông tin, có nhóm chuyên gia về giải pháp (Solution Architect - SA), đặc thù của họ là nghiên cứu và có hiểu biết rộng về rất nhiều nền tảng công nghệ, và có thể đưa ra giải pháp cho nhiều lĩnh vực. Họ nắm bắt tin tức nhanh, tính bằng giờ, có gì mới là phải biết, đi tìm hiểu các ứng dụng, các hệ điều hành, phương pháp thiết kế, cách thức vận hành, … Nói chung là tất tần tật. Những ông này thường là các lão làng Expert trong lĩnh vực IT, ít nhất cũng 10+ năm; hay các MVP. Ghi chú là: Solution Architect có thể code không giỏi, nhưng họ biết cách sử dụng và điều hướng cho các lập trình viên làm cho đúng.
Cái SA này dựa trên hiểu biết, trình độ và kinh nghiệm. Không đâu có thể dạy được. Hàng trăm, hàng nghìn thứ mới ra từng giờ, phải tự nắm bắt, chứ ko có chỗ nào gọi là dạy dỗ đâu.
Một trang blog đơn thuần để chịu tải 1 triệu người đọc thường xuyên cũng không khó lắm . Nhưng vấn đề ở đây là chức năng có gì? Chả “triệu view” nào vào chỉ để xem vài bài blog cả, những hệ thống mà có nhiều người view thường xuyên thì có data lớn, nhiều chức năng lúc đó mới cần nhiều đến các thiết kế có tính scalability.
Để từ không biết gì về kiến trúc đến có thể tạo ra một hệ thống lớn thì còn vừa học vừa làm dài dài 5-10 năm
Thực ra các hệ thống lớn đều sửa dụng các thiết kế enterprise. Bạn chỉ cần search và tìm hiểu về enterprise architecture là được.
Cơ mà đều hiểu được nó và làm thì phải quay lại học kiến thức cơ bản như UML, design pattern, design …
Mình cũng chỉ mới tìm hiểu sơ về vấn đề này để xây dựng kiến trúc cho server.
Hệ thống lớn thì cần quan tâm tới một số vấn đề:
Khả năng mở rộng Database
Khi xây dựng 1 hệ thống lớn thì thường phải lưu trữ một lượng dữ liệu lớn trong database.
Vấn đề là làm sao để có thể lưu trữ và quản lý một lượng data lớn một cách hiệu quả.
Bạn có thể tham khảo bài viết về quá trình scale database của pinterest (Tiếng anh)
pinterest scaling database
Khả năng chịu tải của server
Như vậy thì cùng 1 lúc server asynchronous có thể nhận được nhiều request hơn so với server synchronous.
Cái quan trọng cuối cùng là hiệu suất của toàn bộ hệ thông. Thời gian để xử lý và đáp ứng 1 request từ client phải nhanh, nó quyết định chất lượng của dịch vụ.
Để tối ưu được tốc độ xử lý có nhiều chỗ cần phải xử lý như truy xuất database lớn, phân bố tải giữa các server(load balancing), phân server xử lý theo khu vực địa lý …
…
Nói chung là cứ học và làm thì sẽ biết mình cần biết cái gì rồi lên google tìm tài liệu thôi bạn.
Mình cũng mới đang tìm hiểu. có gì sai thì mọi người góp ý.