Horizontal/Vertical Scaling for Application

Jack
Eway Engineering
Published in
5 min readSep 18, 2019

Trước tiên mình muốn làm rõ khái niệm VerticalHorizontal scaling:

Nguồn ảnh: Internet

Ví dụ liên tưởng:

Giả sử bạn đang quản lý việc vận chuyển hàng từ kho TYKY ra xe để giao hàng. Ban đầu, TYKY còn chưa có nhiều đơn nên mỗi xe chỉ có vài kiện hàng, mình thuê một bạn nhỏ con vận chuyển một lát từ kho vào xe là xong.

Một ngày đẹp trời, TYKY cho ra mắt dịch vụ giao hàng 24 giờ, lúc này anh bạn nhỏ con mình thuê bắt đầu kêu mệt vì hàng nhiều quá. Chạy đi chạy lại tới trưa, anh đã vã mồ hôi mà chỉ mới xong 1/3 lượng hàng trong xe, cứ như vậy, mình nhẩm tính tới tối cũng chỉ được 2/3, chưa kể đã thấm mệt, buổi chiều có thể anh sẽ chạy đi chạy lại chậm hơn, mang ít hàng hơn mỗi lần ra vào kho. Vậy nên mình phải chạy ra chợ trời tìm các anh cao to hơn để đảm bảo xong trước tối. Cuối cùng cũng tuyển được một anh cao to đen hôi, tất nhiên anh cũng đòi trả công cao hơn anh cũ, mình đồng ý liền, ít ra còn xong được trong ngày hôm nay.

Một ngày đẹp trời hơn, TYKY cho ra mắt dịch vụ giao hàng 2 giờ . Lúc này mình đối mặt với một thách thức vô cùng lớn là cần chuyển hàng từ kho ra xe trong trong 1 tiếng để shipper kịp đưa hàng tới tay người dùng trong 2 giờ kể từ khi đặt hàng. Anh bạn cao to của mình vẫn cố gắng thử, tuy nhiên đã cố hết sức mà trong nửa tiếng vẫn chưa hết 1/8 số hàng cần chuyển, vậy giả sử có đi thuê một anh bạn khác khoẻ gấp đôi anh này(giá cũng có thể cao gấp đôi hoặc hơn) thì trong một tiếng cũng chỉ vận chuyển được 1/2 số hàng yêu cầu. Trong khi anh bạn này đã thuộc top cao to đen hôi rồi, muốn đáp ứng được yêu cầu này chắc có chạy quanh HN tìm cũng không ra anh khoẻ gấp 4 lần anh bạn này. Phương án thuê các anh to con hơn không còn khả thi nữa!
-> Đây là VERTICAL SCALING

Chán quá mình ra ngồi trà đá, thấy mấy đứa nhỏ kéo nhau đánh một thằng nhỏ khác to hơn. Mình vỗ đùi, “thế mà không nghĩ ra”, chạy về chợ thuê 4 anh cùng sức với anh hiện tại, kết quả vận chuyển sạch bong kho trong 1 tiếng.
-> Đây là HORIZONTAL SCALING

Quay lại mô hình kỹ thuật:

VERTICAL SCALING

  • Cách xử lý khối lượng công việc lớn hơn: nâng cấp cấu hình server
  • Nhược điểm:
    - Chi phí khi nâng cấp cấu hình server lớn hơn có thể cao hơn không tuân theo cấp số cộng.
    - Cấu hình server là hữu hạn, vì vậy cách này không phải giải pháp hiệu quả khi khối lượng công việc lớn hơn nhiều lần.

HORIZONTAL SCALING

  • Cách xử lý khối lượng công việc lớn hơn: tăng số handlers

Với web-service

Giả sử bạn có một website, khi số lượng user tăng lên, chúng ta có thể scale theo 2 cách, scale-up thì đơn giản là tăng cấu hình server, còn với scale-out, chúng ta sẽ tăng số service lên và sử dụng loadbalancer. Hiểu đơn giản loadbalancer là thằng đứng giữa các service và request từ user, khi user request, loadbalaner sẽ tiếp nhận và giao cho một trong các service đang có xử lý request này. Thông thường loadblancer sẽ phân phối request tới các service theo thuật toán Round robin, chúng ta cũng có thể lựa chọn các kịch bản khác như Load Balancer Sticky Session, Weighted Load Balancing, …

Nguồn ảnh: Internet

Với processes

Giả sử chúng ta đang triển khai service tracking click với nghiệp vụ là mỗi khi khách hàng click vào quảng cáo, chúng ta cần thực hiện một số tính toán phức tạp để tính ra giá cho click này sau đó lưu thông tin click vào database. Yêu cầu đặt ra là tốc độ redirect tới link đích dưới X00ms (X tiểu học), và thời gian click lên báo cáo dưới 1 phút.

Trong trường hợp này, chúng ta có thể triển khai theo kiến trúc asynchronous như mô hình bên dưới.

Theo đó, khi khách hàng click vào link quảng cáo, service sẽ tìm trong database link đích, tạo một message lưu các thông tin cần cho việc tính toán sau đó không tính toán ngay mà gửi tới một queue server (message queue broker), và ngay lập tức respond lại cho người dùng — trong trường hợp này là redirect người dùng tới trang đích đã tìm thấy ban nãy.

Mấu chốt của mô hình này là các logic tính toán hoặc thực thi một tác vụ nào đó có thể xảy ra sau khi đã respond lại request và có thể thực thi ở một service khác (handler). Các service này sẽ lấy ra các messages từ queue server, và thực thi sau đó lưu thông tin đã tính toán vào database. Với mô hình này, bằng cách tạo ra nhiều handler services, chúng ta đã có thể tăng tốc độ xử lý lên gấp nhiều lần tương ứng với số handlers được thêm vào. Đây chính là cách scale-out (horizontal scale) với các logic có thể thực thi bất đồng bộ.

Tương tự cách trước đó, để phụ vụ nhiều request hơn, chúng ta cũng có thể sacle-out web-service bằng các tăng số web-service này lên và sử dụng loadbalancer để tiếp nhận sau đó phân phối request tới các web-service đang có.

— Tất Huân from Pushtimize —

--

--