Quay lại

6 cách tốt nhất để mở rộng quy mô hệ thống của bạn Chuyên mục Bài Viết Hay    2023-03-23    280 Lượt xem    31 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

6 cách tốt nhất để mở rộng quy mô hệ thống của bạn

Hi xin chào các bạn lại là mình đây hôm nay mình sẽ hướng dẫn các bạn 6 cách để mở rộng quy mô hệ thống hay còn gọi là system high scale. Các bạn có bao giờ đặt câu hỏi tại sao mình lại nên mở rộng hệ thống không? Bởi vì khi mở rộng hệ thống sẽ đáp ứng nhu cầu ngày càng tăng của khách hàng. Dưới đây là 6 cách để làm điều đó :

1. Splitting services (Tách dịch vụ)

Việc chia nhỏ các dự án phần mềm nguyên khối lớn thành các dự án nhỏ hơn không phải là một khái niệm mới. Nó được giới thiệu là SOA Kiến trúc hướng dịch vụ (Service-Oriented Architecture) và sau đó phát triển thành kiến ​​trúc được gọi là Microservices. Việc chia nhỏ chức năng thành nhiều dịch vụ có thể cải thiện đáng kể hiệu suất, khả năng mở rộng và giảm chi phí. Thay vì mở rộng toàn bộ hệ thống, chúng ta có thể mở rộng và tập trung vào những service chưa thực sự phát huy hết tiềm năng và còn nhiều vấn đề. Mỗi dịch vụ có thể sử dụng tối ưu nhất cho kiến ​​trúc công việc, ngôn ngữ lập trình và kho dữ liệu (data stores). Hơn nữa, chúng ta có thể lưu trữ các dịch vụ đó trên các máy chủ riêng biệt vừa đủ thay vì lưu trữ trên một máy chủ duy nhất có xu hướng làm cho mọi thứ rẻ hơn. Những lợi ích này, cùng với việc giảm độ phức tạp của mã nguồn, việc tách các lỗi và xử lý lỗi dễ dàng và triển khai nhanh hơn, thường làm cho các dịch vụ phân tách trở nên dễ dàng đối với các tổ chức lớn.

Có một số điều cần xem xét trước khi bắt đầu với Microservices. Kiến trúc dựa trên microservice giới thiệu một loạt vấn đề mới. Hiện nay thì có rất nhiều công ty đang sự dụng theo kiến trúc này , nhưng bạn nên cân nhắc xem nó có phù hợp với doanh nghiệp hay không . Đối với các dự án phần mềm nhỏ , Microservices có quá nhiều thứ để đảm nhận. Tốt hơn hết, bạn nên bắt đầu với kiến ​​trúc nguyên khối mô-đun và chỉ chuyển sang dạng microservices nếu thực sự cần thiết.

2. Horizontal scaling (Mở rộng theo chiều ngang)

Một cách tiếp cận cực kỳ phổ biến trong quá khứ được gọi là mở rộng theo chiều dọc. Về bản chất, nếu máy tính của chúng ta quá chậm, chúng ta có thể mua một cái tốt hơn. Trong khi giải pháp này, nó thường không kéo dài lâu. Phần cứng ngày càng trở nên đắt đỏ hơn và thậm chí những chiếc máy đắt tiền nhất, cuối cùng cũng không thể xử lý tải. Mở rộng theo chiều ngang là cách ngược lại để giải quyết cùng một vấn đề. Thay vì thêm nhiều RAM và CPU vào một máy hiện có, chúng ta có thể mở rộng quy mô bằng cách mở rộng các máy chủ bổ sung. Nếu chúng ta cần giảm chi phí, chúng ta có thể loại bỏ 1 số máy chủ bổ sung.

Các ứng dụng web mở rộng theo chiều ngang thường yêu cầu bộ cân bằng tải (balancers). Bộ cân bằng tải là một dịch vụ nằm giữa máy khách (client) và máy chủ (server), định tuyến (routing) client request để tối đa hóa hiệu suất. Đồng thời, bộ cân bằng tải có thể quản lý sessions (phiên làm việc), memory (bộ nhớ), cache và thực hiện nhiều những thứ khác nữa.

Mở rộng quy mô các dịch vụ web theo chiều ngang thường không quá phức tạp. Nhiều messaging queues hoặc nền tảng phát trực tuyến được xây dựng có thế tính đến vấn đề này. Chẳng hạn, nền tảng phát trực tuyến được xếp hạng cao nhất Apache Kafka cho phép phân vùng các chủ đề của nó và chạy tối đa một dịch vụ người tiêu dùng trên mỗi phân vùng cho mỗi nhóm người tiêu dùng. Một số thứ được sử dụng rộng rãi messaging broker, RabbitMQ...

3. Separate databases for reading and writing (Cơ sở dữ liệu riêng biệt để đọc và viết)

Trong hầu hết các hệ thống hướng tới người dùng, số lần đọc dữ liệu cao hơn số lần ghi dữ liệu. Chúng ta có thể cải thiện đáng kể các hệ thống như thế này bằng cách sao chép dữ liệu của mình sang cơ sở dữ liệu chỉ đọc riêng biệt và sử dụng nó để phục vụ các yêu cầu dữ liệu. Để thực hiện công việc này, chúng ta phải đồng bộ hóa hai cơ sở dữ liệu. Một trong những cách phổ biến nhất để đồng bộ hóa dữ liệu dựa trên mô hình thống nhất (độc lập, không phụ thuộc) cuối cùng (eventual consistency). Mô hình này không đảm bảo rằng dữ liệu được đồng bộ hóa ngay lập tức. Tuy nhiên, nó đảm bảo rằng dữ liệu sớm hay muộn sẽ thống nhất. Thống nhất cuối cùng là một mức giá hợp lý phải trả cho khả năng mở rộng quy mô và thường được hầu hết các doanh nghiệp chấp nhận (mặc dù lúc đầu một số người có thể không thấy như vậy). Nếu mô hình này bạn thấy không được thích hợp, bạn luôn có thể đọc dữ liệu từ cơ sở dữ liệu chính, nơi dữ liệu phải thống nhất ngay lập tức.

CQRS (Command Query Responsibility Segregation) - (Phân chia trách nhiệm truy vấn lệnh) - đây là nơi nó trở nên thú vị. Chúng ta chia các data models riêng biệt để writes (commands) nghĩa là ghi (lệnh) và reads (queries) nghĩa là đọc (truy vấn). Thay vì đồng bộ hóa vào cùng models (data), chúng ta có thể gộp lại và chuyển đổi chúng vào các models data đã được thiết kế để đọc dữ liệu nhanh hơn. Hơn nữa, chúng ta có thể chọn database providers khác nhau và sử dụng để đọc nhiều databases cho các truy vấn cụ thể.

4. Database sharding (Phân nhỏ cơ sở dữ liệu)

Phân nhỏ cơ sở dữ liệu là một kỹ thuật mở rộng quy mô được sử dụng rộng rãi khác. Nói tóm lại, đó là phân vùng dữ liệu logic dựa trên một tập hợp các giá trị đã chọn, thường được gọi là khóa phân vùng hoặc khóa phân đoạn. Các giá trị này sẽ cho phép chúng ta chia dữ liệu thành nhiều phân vùng. Chẳng hạn, chúng ta có thể sử dụng các giá trị hàng của bảng cơ sở dữ liệu như customer ID, position, price, v.v. Việc đặt các  table shards (phân đoạn data table ) vào các cơ sở dữ liệu riêng chạy trên các máy chủ khác nhau cho phép chúng ta thu được lợi ích của việc chia tỷ lệ theo chiều ngang (như mình đã đề cập ở phần số 2). Hơn nữa, nó làm tăng thời gian phản hồi truy vấn vì chúng ta chỉ phải tìm kiếm dữ liệu trong một phân đoạn duy nhất thay vì toàn bộ. Để tận dụng tối đa database sharding, chúng ta nên thận trọng khi chọn sharding keys. Các phân vùng được chia nhỏ phải có phân phối dữ liệu đồng đều. Nếu không, các phân đoạn không cân bằng lớn nhất sẽ làm chậm các ứng dụng của chúng ta.

 

5. Memory caching (Bộ nhớ đệm)

Bộ nhớ đệm có lẽ là cách nổi tiếng nhất để tăng hiệu suất. Memory cache là : In-memory cache sử dụng bộ nhớ(RAM) của máy server để lưu trữ data. Những data nào thường được lưu cache thỏa mãn 2 yếu tố: data được truy cập thường xuyên và ít thay đổi. Mục đích của sử dụng memory cache hay bất kỳ loại cache nào là đều muốn cải thiện hiệu suất chương trình.Các sản phẩm caching như Redis hoặc Memcached làm cho việc caching tương đối dễ sử dụng và đồng thời cực kỳ mạnh mẽ.

6. Going to the cloud

Về mặt kỹ thuật, truy cập vào đám mây (cloud) không phải là một phương pháp mở rộng quy mô. Mặt khác, nó là một công cụ thay đổi kế hoạch về quy mô và tiết kiệm tiền. Trước khi có cloud, các chuyên gia phải đoán nhu cầu dung lượng của họ và mua mọi thứ trước để tránh nhiều sai sót. Các nhà cung cấp cloud hiện tại sử dụng mô hình trả tiền theo mức sử dụng tự động mở rộng các ứng dụng của chúng ta khi chúng ta cần. Họ có thể thêm hoặc bớt các ứng dụng mở rộng RAM và CPU lên và xuống theo chiều dọc. Hơn nữa, họ có thể cung cấp các ứng dụng mở rộng quy mô máy chủ bổ sung theo chiều ngang. Hiện tại, các nhà cung cấp đám mây nổi tiếng nhất là Amazon Web Services, Google Cloud Platform và Microsoft Azure.

Kết luận

Khả năng mở rộng là một chủ đề cực kỳ quan trọng. Bạn có thể không phải đối phó với nó ngay bây giờ, nhưng ít nhất bạn nên biết bắt đầu từ đâu. Các cách tốt nhất để mở rộng quy mô là chia nhỏ dịch vụ, chia tỷ lệ theo chiều ngang, cơ sở dữ liệu riêng biệt để đọc và ghi, phân đoạn cơ sở dữ liệu, bộ nhớ đệm và truy cập vào đám mây. Mặc dù mỗi một trong những phương pháp đó đều tuyệt vời, nhưng việc kết hợp chúng sẽ đưa bạn lên cấp độ tiếp theo. Cảm ơn bạn đã đọc.

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday