2010-06-20 36 views
5

Tôi không có kinh nghiệm xử lý các trang web giao dịch khối lượng lớn và gần đây đã xem qua câu hỏi thú vị này. Tôi quan tâm đến việc biết nơi mà các nút cổ chai trong một ứng dụng web Java sẽ xảy ra dưới tải cao (hàng ngàn yêu cầu mỗi giây). Nếu ai đó có thể cho tôi một cách tiếp cận cấp cao để suy nghĩ về câu hỏi sau, điều đó sẽ rất tuyệt vời!Ứng dụng web giao dịch số lượng lớn dựa trên Java

Điều duy nhất tôi tìm ra là sử dụng memcached để lưu trữ bộ nhớ cache nhưng tôi không biết cách tính lượng thời gian mà mỗi yêu cầu sẽ thực hiện và do đó có bao nhiêu yêu cầu trên giây có thể xử lý.

Câu hỏi: Ứng dụng quy mô Internet phải được thiết kế để xử lý khối lượng giao dịch lớn. Mô tả thiết kế cho hệ thống phải xử lý trung bình 30.000 yêu cầu HTTP mỗi giây. Đối với mỗi yêu cầu, hệ thống phải thực hiện tra cứu từ điển 50 triệu từ, sử dụng từ khóa được chuyển qua chuỗi truy vấn URL. Mỗi câu trả lời sẽ bao gồm một chuỗi chứa định nghĩa của từ (100 byte trở xuống).

Mô tả các thành phần chính của hệ thống và lưu ý thành phần nào phải là được tạo tùy chỉnh và thành phần nào có thể tận dụng các ứng dụng của bên thứ ba. Bao gồm các ước tính phần cứng cho mỗi thành phần. Xin lưu ý rằng thiết kế phải bao gồm hiệu suất tối đa với chi phí cấp phép phần cứng/phần mềm tối thiểu.

Ghi lại lý do trong việc đưa ra các ước tính.

Mô tả cách thiết kế sẽ thay đổi nếu định nghĩa là 10 kilobyte.

Trả lời

2

Làm nền, bạn có thể lưu ý các dấu phẩy như specmarks. So với kịch bản của bạn, có quá trình xử lý đáng kể hơn, nhưng bạn sẽ thấy rằng 30.000 req/giây của bạn là một con số tương đối cao, nhưng không quá cao.

Bạn cũng có thể tìm thấy Joines et al hữu ích. (Disclaimer: họ là đồng nghiệp.)

Trong kịch bản của bạn tôi mong chờ theo thứ tự giảm dần chi phí:

  1. Cơ sở dữ liệu thu hồi
  2. hoạt động Mạng đọc và yêu cầu quay trở lại
  3. đơn giản chế biến

Bạn không thực hiện xử lý phức tạp (Ví dụ: hiển thị đồ họa hoặc toán học loại khoa học tên lửa). Vì vậy, đầu tiên đoán: nếu từ điển của bạn là một cơ sở dữ liệu thì chi phí thực hiện truy vấn sẽ thống trị mọi thứ khác. Theo truyền thống, khi chúng tôi nhấn nút cổ chai trong tầng máy chủ Web/ứng dụng, chúng tôi mở rộng quy mô bằng cách thêm nhiều phiên bản khác, nhưng nếu cơ sở dữ liệu là nút cổ chai gây ra nhiều vấn đề hơn. Vì vậy, một hướng: những gì hiệu suất bạn có thể mong đợi từ một cơ sở dữ liệu động cơ 30k tps dường như khả thi?

Quan sát đầu tiên của bạn: bộ nhớ cache là một danh mục thường được sử dụng. Ở đây bạn có (có lẽ) các lượt truy cập ngẫu nhiên trên toàn bộ từ điển, do đó việc lưu vào bộ nhớ đệm gần đây trong chính nó có lẽ sẽ không giúp được gì, trừ khi ... bạn có thể lưu toàn bộ bộ nhớ không?

50,000,000 * (100 + trên cao) == ??

Trên JVM 64 bit trên hệ điều hành 64 bit có thể nó phù hợp?

Nếu không (và khi dữ liệu trở nên thực sự lớn, thì có thể không) thì chúng ta cần phải mở rộng. Do đó một chiến lược cắt bộ nhớ cache có thể được sử dụng. Có (ví dụ) 4 máy chủ, phục vụ A-F, G-M, N-P, T-Z tương ứng (và, lưu ý, 4 bộ đệm riêng biệt hoặc 4 cơ sở dữ liệu riêng biệt). Có một điều phối viên chỉ đạo các yêu cầu.

1

Điều đầu tiên tôi sẽ làm là đặt câu hỏi cho các con số. Tiếng Anh có khoảng 170.000 từ được sử dụng phổ biến. Thêm tất cả các ngôn ngữ phổ biến khác và bạn sẽ không có nhiều hơn một vài triệu. Nếu đây không phải là trường hợp bạn có thể cache các từ phổ biến nhất trong bộ nhớ cache nhanh và các từ ít phổ biến hơn trong bộ nhớ cache chậm hơn. Ngay cả với yêu cầu 30K mỗi giây, sẽ mất khoảng 30 phút để nhận được mọi từ không rõ ràng.

Về cơ bản, không có điểm thiết kế hệ thống lớn nếu các số không thực.

Trên JVM 64 bit, tính năng này phù hợp dễ dàng. 50 triệu * (100 + trên không) là khoảng 10 GB (trên cao là như cao như bạn cần phải có chìa khóa và chỉ số dữ liệu) Một máy chủ 12 GB chi phí khoảng $ 2,500.

Vấn đề giống như số lượng yêu cầu. Bạn sẽ cần phải có nhiều máy nhưng như các áp phích khác đã gợi ý các con số này rất khó có thể là thực. Tôi không hình ảnh dịch vụ này sẽ đắt như facebook, nhưng bạn có thể cần hàng chục đến hàng trăm máy chủ để hỗ trợ nhiều yêu cầu này.

Các vấn đề liên quan