Mạng nội bộ thường sử dụng kết nối 1 Gbps hoặc nhanh hơn. Kết nối hoặc liên kết sợi quang cho phép băng thông cao hơn nhiều giữa các máy chủ. Bây giờ hãy tưởng tượng kích thước trung bình của phản hồi JSON từ API. Bao nhiêu phản hồi như vậy có thể được truyền qua kết nối 1 Gbps trong một giây?
Hãy thực sự làm toán. 1 Gbps là 131 072 KB mỗi giây. Nếu một phản hồi JSON trung bình là 5 KB (khá nhiều!), Bạn có thể gửi 26 214 phản hồi mỗi giây thông qua dây chỉ với một cặp máy . Không tệ lắm phải không?
Đây là lý do tại sao kết nối mạng thường không phải là nút cổ chai.
Một khía cạnh khác của microservice là bạn có thể mở rộng quy mô dễ dàng. Hãy tưởng tượng hai máy chủ, một máy chủ lưu trữ API, một máy chủ khác tiêu thụ nó. Nếu bao giờ kết nối trở thành nút cổ chai, chỉ cần thêm hai máy chủ khác và bạn có thể tăng gấp đôi hiệu suất.
Đây là khi 26 214 phản hồi trước đó của chúng tôi trở nên quá nhỏ so với quy mô của ứng dụng. Bạn thêm chín cặp khác và hiện bạn có thể phục vụ 262 140 phản hồi.
Nhưng hãy quay trở lại cặp máy chủ của chúng tôi và làm một số so sánh.
Nếu một truy vấn không lưu trong bộ nhớ cache trung bình vào cơ sở dữ liệu mất 10 ms, thì bạn bị giới hạn ở 100 truy vấn mỗi giây. 100 truy vấn. 26 214 phản hồi. Để đạt được tốc độ 26 214 phản hồi mỗi giây đòi hỏi một lượng lớn bộ nhớ đệm và tối ưu hóa (nếu phản hồi thực sự cần phải làm điều gì đó hữu ích, như truy vấn cơ sở dữ liệu; phản hồi kiểu "Hello World" không đủ điều kiện).
Trên máy tính của tôi, ngay bây giờ, DOMContentLoaded cho trang chủ của Google đã xảy ra 394 ms. sau khi yêu cầu được gửi đi Đó là ít hơn 3 yêu cầu mỗi giây. Đối với trang chủ Lập trình viên. Nó đã xảy ra 603 ms. sau khi yêu cầu được gửi đi Đó thậm chí không phải là 2 yêu cầu mỗi giây. Nhân tiện, tôi có kết nối internet 100 Mbps và máy tính nhanh: nhiều người dùng sẽ đợi lâu hơn.
Nếu nút cổ chai là tốc độ mạng giữa các máy chủ, hai trang web đó thực sự có thể thực hiện hàng ngàn cuộc gọi đến các API khác nhau trong khi phục vụ trang.
Hai trường hợp đó cho thấy rằng mạng có thể sẽ không phải là nút cổ chai của bạn trên lý thuyết (trong thực tế, bạn nên thực hiện các điểm chuẩn thực tế và định hình để xác định vị trí chính xác của nút cổ chai của hệ thống cụ thể của bạn được lưu trữ trên một phần cứng cụ thể). Thời gian dành cho công việc thực tế (sẽ là các truy vấn SQL, nén, bất cứ điều gì) và gửi kết quả cho người dùng cuối quan trọng hơn nhiều.
Nghĩ về cơ sở dữ liệu
Thông thường, cơ sở dữ liệu được lưu trữ riêng biệt với ứng dụng web sử dụng chúng. Điều này có thể gây lo ngại: tốc độ kết nối giữa máy chủ lưu trữ ứng dụng và máy chủ lưu trữ cơ sở dữ liệu thì sao?
Dường như có những trường hợp thực sự, tốc độ kết nối trở nên có vấn đề, đó là khi bạn lưu trữ một lượng dữ liệu khổng lồ không cần xử lý bởi chính cơ sở dữ liệu và nên có sẵn ngay bây giờ (đó là các tệp nhị phân lớn). Nhưng những tình huống như vậy rất hiếm: trong hầu hết các trường hợp, tốc độ truyền không lớn so với tốc độ xử lý truy vấn của chính nó.
Khi tốc độ truyền thực sự có vấn đề là khi một công ty lưu trữ các tập dữ liệu lớn trên NAS và NAS được nhiều khách hàng truy cập cùng một lúc. Đây là nơi SAN có thể là một giải pháp. Điều này đang được nói, đây không phải là giải pháp duy nhất. Cáp Cat 6 có thể hỗ trợ tốc độ lên tới 10 Gbps; liên kết cũng có thể được sử dụng để tăng tốc độ mà không thay đổi cáp hoặc bộ điều hợp mạng. Các giải pháp khác tồn tại, liên quan đến sao chép dữ liệu trên nhiều NAS.
Hãy quên đi tốc độ; nghĩ về khả năng mở rộng
Một điểm quan trọng của một ứng dụng web là có thể mở rộng quy mô. Mặc dù hiệu suất thực tế quan trọng (vì không ai muốn trả tiền cho các máy chủ mạnh hơn), khả năng mở rộng quan trọng hơn nhiều, vì nó cho phép bạn ném thêm phần cứng khi cần.
Nếu bạn có một ứng dụng không đặc biệt nhanh, bạn sẽ mất tiền vì bạn sẽ cần các máy chủ mạnh hơn.
Nếu bạn có một ứng dụng nhanh không thể mở rộng quy mô, bạn sẽ mất khách hàng vì bạn sẽ không thể đáp ứng nhu cầu ngày càng tăng.
Theo cùng một cách, các máy ảo cách đây một thập kỷ được coi là một vấn đề hiệu năng rất lớn. Thật vậy, lưu trữ một ứng dụng trên máy chủ so với lưu trữ trên máy ảo có tác động hiệu suất quan trọng. Trong khi khoảng cách ngày nay nhỏ hơn nhiều, nó vẫn tồn tại.
Mặc dù mất hiệu năng này, môi trường ảo đã trở nên rất phổ biến vì tính linh hoạt mà chúng mang lại.
Cũng như tốc độ mạng, bạn có thể thấy VM là nút cổ chai thực tế và với quy mô thực tế của bạn, bạn sẽ tiết kiệm hàng tỷ đô la bằng cách lưu trữ ứng dụng của mình trực tiếp mà không cần VM. Nhưng đây không phải là điều xảy ra đối với 99,9% ứng dụng: nút cổ chai của chúng ở một nơi khác và nhược điểm của việc mất vài micro giây vì VM dễ dàng được bù đắp bởi lợi ích của khả năng trừu tượng hóa và khả năng mở rộng.