Tôi nên làm gì để nhân rộng một trang web có lưu lượng truy cập cao?


14

Những thực hành tốt nhất nên được thực hiện cho một trang web cần "mở rộng quy mô" để xử lý dung lượng? Điều này đặc biệt có liên quan khi mọi người đang xem xét đám mây, nhưng có thể đang bỏ lỡ các nguyên tắc cơ bản.

Tôi muốn nghe về bất cứ điều gì bạn cho là thực tiễn tốt nhất từ ​​các nhiệm vụ cấp phát triển, đến cơ sở hạ tầng, đến quản lý.



Ai đó có thể biết về Windows Server App Fabric và bộ nhớ đệm có thể đăng một cái gì đó ở đây không? Tôi không phải là một chuyên gia trong lĩnh vực này và muốn tìm hiểu thêm.
goodguys_activate

Bạn muốn biết gì về AppFoven?
Henrik

Có một số lời khuyên về cách để Scale một trang web, check it out Bao gồm: front-end cấp độ máy chủ mức kịch bản Model và DB mức thiết kế máy chủ ngang rộng, sharding Xem thêm: olivetit.blogspot.com/2013/05/...

Câu trả lời:


16

Thiết kế cho đồng thời

Đó là, khi bạn đang viết mã, hãy lên kế hoạch cho việc có nhiều luồng đi. Lập kế hoạch trạng thái chia sẻ (thường chỉ là db). Lập kế hoạch cho nhiều quá trình. Kế hoạch phân phối vật lý.

Điều này cho phép bạn phân phối hệ thống của mình trên nhiều máy và trên nhiều quy trình với cân bằng tải. Nó cho phép bạn có các quy trình dự phòng đang chạy trong trường hợp thất bại và trong trường hợp bạn cần sửa đổi hệ thống tại chỗ, bạn không phải giết tất cả dịch vụ để làm như vậy.


13

Một vài điều bạn có thể cân nhắc:

  • Tách các mặt đọc và ghi của bộ lưu trữ dữ liệu của bạn.
    • CQRS / Tìm nguồn cung ứng sự kiện
    • CQS
    • Truyền tin nhắn / Diễn viên
  • Tránh quá trình chia sẻ và trạng thái luồng
    • Do đó tránh bị khóa
    • Bạn có thể tránh điều này thông qua hệ thống loại bằng cách tạo các lớp, cấu trúc và các loại dữ liệu khác của bạn thành bất biến, tức là không thay đổi sau khi xây dựng. Đặc biệt đối với các loại dữ liệu trừu tượng phức tạp, nó hoạt động tốt một cách đáng ngạc nhiên (ví dụ: triển khai jQuery)
  • Không chặn chủ đề máy chủ web trên IO. Nếu bạn đang sử dụng ASP.Net, hãy sử dụng các trang / hành động không đồng bộ với thư viện song song mẫu / nhiệm vụ APM (TPL)
  • Không lưu vô số trạng thái trong từ điển phiên người dùng
    • Điều này phải được di chuyển qua các luồng khi di chuyển luồng xảy ra trong IIS.
    • Có định tuyến thông minh, sao cho tài nguyên tĩnh / không bảo mật không được phục vụ với cùng một khung ứng dụng (ví dụ: ASP.Net) có thêm chi phí. Nhìn vào việc có các máy chủ web khác nhau, ví dụ.
  • Viết mã chuyển tiếp liên tục với mẫu quy trình công việc không đồng bộ (ví dụ: bind (haskell) /callcc/T task.CContueWith/F#'s async)
  • Sử dụng lý thuyết xếp hàng để tính toán nơi tắc nghẽn của bạn có thể xảy ra
  • Sử dụng các bản cập nhật dựa trên đẩy thay vì kéo cho các mô hình đọc và trạng thái ứng dụng khác. Ví dụ: thông qua RabbitMQ / nServiceBus
  • Sử dụng các tính năng tối thiểu 'trình xử lý http'
  • Đối với các tệp tĩnh, cung cấp các thẻ điện tử và chính sách hết hạn bộ đệm để cho phép cơ sở hạ tầng web hoạt động như bình thường (ví dụ: với proxy mực)
  • (Thuê tôi để giải quyết các vấn đề mở rộng quy mô của bạn và nhận hướng dẫn tại chỗ;))

4

Chia sẻ kiến ​​trúc Không có gì.

Với suy nghĩ đó, và trái với những gì bạn có thể nghĩ, đừng nhảy vào một giải pháp mở rộng ngay lập tức. Chi phí ngoài hệ thống so với cuộc gọi trong hệ thống không nên được cân nhắc quá mức. Chẳng hạn, phải mất rất nhiều thời gian để thực hiện kết nối DB trên bất kỳ giao diện mạng nào so với thực hiện cuộc gọi cục bộ. Ngân sách cần bao nhiêu thời gian trong quản lý, sức mạnh và nỗ lực điều chỉnh trong quy mô so với $ thêm cho một hệ thống lớn thực sự.

Bất kể, tôi vẫn có giá trị lớn trong kiến ​​trúc "không chia sẻ gì" và bạn có thể xếp lớp và nhân rộng các hệ thống của mình khi đến lúc.


0

Song song hóa các yêu cầu qua một số tên máy chủ

Một phần của tiêu chuẩn HTTP là một phần cho biết các khách hàng web sẽ yêu cầu tối đa 2 phiên cho mỗi Máy chủ DNS. Đây là một giải pháp trong đó bạn và bí danh ra www.domain.com của bạn và nhận được yêu cầu đồng thời cao hơn, giúp trang của bạn tải nhanh hơn:

/programming/3653609/how-do-i-code-my-asp-net-page-to-abulize-doads-across-hostnames

Về cơ bản, nó liên quan đến việc chỉnh sửa ASP.NET HTTP Handler của bạn để thay thế các máy chủ đích mà bạn gửi máy khách đến, trong đó mỗi máy chủ là một CNAME thành "www".


1
Câu trả lời này có liên quan nhiều hơn đến hiệu suất phía máy khách và không liên quan gì đến việc nhân rộng ra phía máy chủ.
Ken Liu

Tôi đã suy nghĩ nhiều hơn về các dòng của tầng trung gian tổng hợp các nguồn dữ liệu khác thông qua HTTP. Bảng Azure, OData chỉ là một số ví dụ ... Theo quan điểm của bạn, đó vẫn là máy chủ cho trình duyệt (javascript) phải làm gì.
goodguys_activate

0

DNS an toàn, nhanh chóng, đáng tin cậy

Tôi tìm thấy một vài trang web có dung lượng cao sử dụng máy chủ DNS của nhà đăng ký, không có SLA cho thời gian hoạt động hoặc hiệu suất. Ngoài ra, các máy chủ của họ được đặt tại Ấn Độ và độ trễ một mình làm tăng khả năng một kẻ lừa đảo DNS có thể đầu độc khách hàng của bạn hoặc bộ đệm trung gian của ISP. Điều này sẽ khiến ngay cả lưu lượng được bảo vệ SSL của bạn bị chuyển hướng mà không ai biết.

Tốc độ DNS cũng ảnh hưởng đến thời gian tải ban đầu của máy chủ của bạn, trước khi các bản ghi được lưu trữ.

Tôi sử dụng DynDNS hoặc Neustar cho hầu hết các khách hàng của mình vì họ có cơ sở hạ tầng DNS khá vững chắc (mặc dù nó đắt tiền và tôi không có liên kết nào khác với các công ty đó).


2
Ơ ... DNS có thực sự là nút cổ chai nghiêm trọng đối với bạn không? Tôi nghĩ đó sẽ là một trong những điều cuối cùng để tối ưu hóa.
Fishtoaster

@Fishtoaster - Chỉ cần chỉnh sửa một phần in đậm. Tôi ban đầu là một Sysadmin và bảo mật DNS đóng vai trò lớn trong việc xác thực SSL. Các vấn đề về kết nối và hiệu suất DNS phát sinh như: các vấn đề định tuyến BGP đến SOA, các vấn đề với Anycasting (đối với CDN), các vấn đề về độ trễ, ngộ độc bộ đệm và hơn thế nữa. Tôi đã viết một công cụ quét thực hành tốt nhất DNS (cấp độ dây) mà tôi sẽ sớm đưa lên internet. Hãy dùng thử vì nó bao gồm nhiều vấn đề kết nối mà tôi đã đề cập. (hoặc gửi email cho tôi và tôi sẽ giải thích thêm)
goodguys_activate

2
Tôi không nói rằng không có vấn đề về hiệu suất liên quan đến DNS như những vấn đề bạn liệt kê. Đối với tôi, dường như các mối quan tâm cơ bản hơn (truy cập cơ sở dữ liệu, bộ đệm trang, độ phức tạp của mã đơn giản, cân bằng tải quy trình máy chủ, lựa chọn điểm phân phối phần cứng, v.v.) sẽ xuất hiện và được giải quyết ở một số bậc độ lớn trong khi mở rộng trước DNS các vấn đề liên quan sẽ là một vấn đề.
Fishtoaster

... Tôi hoàn toàn đồng ý rằng có nhiều điều quan trọng hơn để lo lắng, giống như bạn đề cập. Có lẽ đó là lý do tại sao ý tưởng này có điểm 0: .. nhưng sau đó, tôi là người duy nhất trả lời câu hỏi này cho đến nay.
goodguys_activate

1
Hiệu suất DNS chắc chắn có thể là một nút cổ chai lớn - có thể không có nhiều sự khác biệt giữa tốt và xấu, nhưng vì DNS bị ảnh hưởng trên mỗi cuộc gọi (hoặc gần như mọi cuộc gọi) nên nó có thể tăng lên rất nhanh. Đặc biệt là khi bạn nhận được vào các pha nguy hiểm CDN hiện đại.
Wyatt Barnett

0

Tôi nghĩ rằng chìa khóa sẽ đơn giản:

Có mã đơn giản. Điều đó có nghĩa là một cái gì đó mà bạn nhìn và hiểu. Khi bạn mở rộng và thay đổi máy chủ, bạn cần biết những gì đang xảy ra. Bạn cũng có thể cần thêm các lập trình viên cần nhanh chóng hiểu. Các tệp hook và XML gọi mã ngẫu nhiên không rõ ràng là rất xấu.

Sau đó, bạn có thể kiểm tra và tìm ra các vấn đề.

Xem tại đây: http://blog.servint.net/2013/08/27/ màng-big-how-to-scale-a-website-part-1-cơ sở hạ tầng-that-scales /

Chúng tôi tại stellarbuild cố gắng đảm bảo quy mô trang web của chúng tôi mà không mất thời gian. Điều đó có nghĩa là bạn cần có khả năng biết mã của bạn làm gì và mã đó ở đâu. Ngay cả khi bạn đang thử nghiệm một máy khác, bạn cũng không thể mất quá nhiều thời gian để mở rộng quy mô. Hầu hết mọi người chỉ bắt đầu khi đã quá muộn, thật đáng buồn. Bạn có thể tối ưu hóa chỉ khi bạn làm điều đó theo ý kiến ​​của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.