Điểm:5

Trang web phản hồi rất chậm khi sử dụng cơ sở dữ liệu từ xa

lá cờ co

Tôi muốn hai trang web giống nhau để chia sẻ một cơ sở dữ liệu. Một máy chủ ở châu Á, lưu trữ một trang web và cơ sở dữ liệu. Một máy chủ khác ở Hoa Kỳ, lưu trữ cùng một trang web thông qua cơ sở dữ liệu từ xa. Tuy nhiên web bên Mỹ phản hồi rất chậm nhưng khi di chuyển cơ sở dữ liệu về server trong nước (US server) thì web phản hồi nhanh. Làm cách nào để tăng tốc kết nối giữa máy chủ ở Mỹ và cơ sở dữ liệu ở Châu Á?

Tôi đang sử dụng Centos7+Nginx+MySQL.

Polygorial avatar
lá cờ cn
Tại sao bạn có máy chủ ứng dụng ở cả Châu Á và Hoa Kỳ thay vì có cả ở Châu Á nơi có DB? Ứng dụng phụ thuộc vào DB như thế nào?
c4f4t0r avatar
lá cờ nl
thực hiện ping từ máy chủ ở Hoa Kỳ đến máy chủ ở CHÂU Á và bạn sẽ thấy RTT
Điểm:27
lá cờ ar

Làm cách nào để tăng tốc kết nối giữa máy chủ ở Mỹ và cơ sở dữ liệu ở Châu Á?

Bạn có thể không thể. Mỹ-Châu Á là một khoảng cách dài và có độ trễ liên quan. Nói một cách đơn giản: ánh sáng có tốc độ hữu hạn.

Có lẽ bạn nên xem xét các lựa chọn thay thế để truy vấn cơ sở dữ liệu từ xa, chẳng hạn như lưu nội dung vào bộ nhớ đệm ở nhiều vị trí, sử dụng CDN hoặc sử dụng lược đồ sao chép cơ sở dữ liệu để bạn có thể có các bản sao dữ liệu cục bộ.

lá cờ cn
Tôi nghĩ rằng một bản sao sẽ là cách để đến đây, nhưng nó phụ thuộc vào cách cơ sở dữ liệu của bạn được thiết lập để xem nó có thể ở chế độ đọc-ghi hay chỉ đọc hay không.
vidarlo avatar
lá cờ ar
Chắc chắn rồi. Và nếu nó phần lớn chỉ đọc, CDN đơn giản có thể là con đường dễ dàng hơn.
djdomi avatar
lá cờ za
có thể một bản sao tổng thể chính có thể giúp ích nhưng câu hỏi đặt ra là điều gì sẽ xảy ra nếu các giá trị giống nhau được thay đổi cùng một lúc? ;)
vidarlo avatar
lá cờ ar
Chắc chắn rồi. Một nô lệ chỉ đọc có thể tốt hơn nếu phần lớn các truy cập cơ sở dữ liệu là chỉ đọc. Mở rộng quy mô không phải là không có vấn đề.
Điểm:13
lá cờ ke

Ứng dụng web của bạn có thực hiện nhiều truy vấn cơ sở dữ liệu riêng biệt không? Có một truy vấn phụ thuộc vào truy vấn trước đó hay có những truy vấn độc lập nào có thể chạy song song để trùng lặp độ trễ của chúng không?

Nếu là trường hợp sau, hãy đảm bảo rằng điều đó thực sự xảy ra trong bất kỳ ngôn ngữ lập trình nào bạn đã sử dụng, chứ không phải tuần tự hóa các truy vấn của bạn một cách không cần thiết.

Nếu điều đó là không đủ hoặc không thể, bạn sẽ cần phải giảm độ trễ khứ hồi giữa máy chủ web và cơ sở dữ liệu bằng cách nào đó bằng cách sao chép DB để bạn có thể có một bản sao cục bộ, lưu vào bộ đệm một số phần "nóng" của nó mà không thay đổi thường xuyên hoặc nhiều thứ khác như lưu vào bộ đệm đầu ra cuối cùng của máy chủ web hoặc những thứ khác mà CDN có thể thực hiện (xem câu trả lời của vidarlo).

lá cờ in
Được ủng hộ vì đã đề cập đến việc xem chính mã và các mẫu truy vấn DB của nó. Tôi có thể dễ dàng tưởng tượng một loạt truy vấn hoạt động đủ tốt trên DB cục bộ, chạy chậm trên DB có độ trễ cao nhưng có thể được hợp nhất/song song.
Điểm:6
lá cờ in

Bạn không thể cải thiện tốc độ ánh sáng. {cần dẫn nguồn}

Thay vì truy vấn liên lục địa, bạn có thể cần xem xét bất kỳ bản sao nào mà MySQL cung cấp. Bạn cần một máy chủ web và một máy chủ cơ sở dữ liệu ở Châu Á và được sao chép ở mỗi địa điểm (Mỹ, EU, Châu Phi, ME, v.v.). Khi một máy chủ web viết, DB cục bộ được cập nhật ngay lập tức và bản cập nhật đó sau đó được MySQL đẩy đến các máy chủ DB từ xa trong nội bộ.

Tích cực:

  • Các phiên của người dùng có thể chuyển từ trang này sang trang khác và bản ghi cơ sở dữ liệu của họ sẽ nhất quán.
  • Bạn chỉ cần sao lưu một máy chủ cơ sở dữ liệu để lấy rất nhiều.
  • Có thể thêm dự phòng và khả năng chịu lỗi bằng cách có một trang web chính và nếu nó gặp sự cố thì chuyển sang một trang web từ xa.
  • Có thể mở rộng máy chủ web theo chiều ngang tại mỗi trang web để cho phép bảo trì thời gian ngừng hoạt động như cập nhật/khởi động lại
  • Bạn thậm chí có thể có một máy chủ DB dự phòng cục bộ cho từng trang web, một lần nữa cho phép dự phòng mà không phải chuyển đổi dự phòng

Tiêu cực:

  • Đã thêm độ phức tạp
  • Tăng chi phí của nhiều tài nguyên hơn

Cuối cùng, đây là một vấn đề thiết kế cơ sở hạ tầng và không thực sự là một vấn đề của máy chủ web.

rexkogitans avatar
lá cờ jp
"... sau đó được đẩy tới các máy chủ DB từ xa" Không, cơ sở dữ liệu MySQL hoạt động theo cách mà máy khách sao chép tìm nạp.
Criggie avatar
lá cờ in
@rexkogitans được rồi bạn hiểu tôi - Tôi không phải là DBA nhưng tôi làm việc với một số người rất tài năng. Bất kỳ DB đàng hoàng nào cũng sẽ có một số hệ thống sao chép, cho dù máy chủ/chủ hoặc chính/phụ của nó, máy chủ web sẽ có thể đạt được tốc độ "cục bộ" từ các yêu cầu đọc ở mức tối thiểu. Quá trình ghi có thể chậm hơn hoặc hoàn thành lý tưởng ở tốc độ "cục bộ".
lá cờ jp
Sao chép DB qua các liên kết đường dài chỉ là một loại sâu khó chịu khác. Nếu bạn sử dụng sao chép đồng bộ thì bạn sẽ ghi chậm và hoàn thành thời gian ngừng hoạt động trong trường hợp phân vùng mạng. Nếu bạn sử dụng bản sao không đồng bộ thì bạn sẽ nhận được dữ liệu không thống nhất giữa các bản sao do độ trễ và bạn sẽ không thể lật phiên giữa các trang web một cách dễ dàng.
Criggie avatar
lá cờ in
@AlexD hoàn toàn đồng tình. Nhưng do đây là phần phụ trợ cho một trang web, nên "phiên người dùng" sẽ được ghi vào DB cục bộ và sau đó quá trình đồng bộ hóa có thể xảy ra với phiên từ xa theo đúng trình tự. Phiên của người dùng không nên thay đổi sang vị trí khác và nếu có VÀ có một bản ghi DB không đồng bộ hóa, thì đó là chi phí dự phòng và chuyển đổi dự phòng.
Abigail avatar
lá cờ in
*Phiên của người dùng có thể chuyển từ trang này sang trang khác và bản ghi cơ sở dữ liệu của họ sẽ nhất quán.* Ồ, không. Không trực tiếp sau khi viết. Với bản sao, bạn **sẽ** phải xử lý việc người dùng viết thư cho ứng dụng chính và ứng dụng tìm nạp từ ứng dụng phụ trước khi quá trình ghi được sao chép.
Abigail avatar
lá cờ in
*Có thể thêm khả năng dự phòng và khả năng chịu lỗi bằng cách có một trang web chính và nếu trang web đó gặp sự cố thì chuyển sang một trang web từ xa. Bạn không nhận được điều này ra khỏi hộp miễn phí.
Điểm:3
lá cờ ng

Thiết kế thông thường của trang web dựa trên cơ sở dữ liệu sử dụng ít (hoặc nhiều hơn, như 50 hoặc 100) truy vấn cơ sở dữ liệu để tạo một trang web duy nhất đáp ứng yêu cầu của trình duyệt.

Mỗi một trong những truy vấn này, lần lượt yêu cầu thời gian khứ hồi giữa máy chủ web và máy chủ cơ sở dữ liệu. Điều này có thể nhanh chóng thêm lên.

Ngược lại, kết nối giữa trình duyệt web và trang web được thiết lập sau hai lần đi lại giữa trình duyệt và máy chủ, sau đó dữ liệu được chuyển đến trình duyệt nhanh nhất có thể.

Thấy sự khác biệt? 2 chuyến khứ hồi người dùng-máy chủ so với nhiều (có thể là hàng chục) chuyến khứ hồi máy chủ-máy chủ. Kết nối giữa các máy chủ có thể nhanh hơn nhưng không đáng kể.

Đây là lý do tại sao thiết lập của bạn nói chung là vô nghĩa.

Những gì có thể được thực hiện, sau đó?

  1. Sử dụng một máy chủ web duy nhất gần cơ sở dữ liệu. Thời điểm mà việc có các máy chủ được phân phối theo địa lý là rất quan trọng để cải thiện trải nghiệm người dùng đã qua lâu đối với bất kỳ thứ gì khác ngoài trung tâm thương mại điện tử hoặc tin tức toàn cầu.

Trải nghiệm người dùng ngày nay bị chi phối bởi các thuộc tính kết nối của người dùng ngay từ đầu và hầu như không phụ thuộc vào vị trí máy chủ web.

Có, đôi khi một kết nối đường trục toàn cầu chính bị hỏng và các kết nối giữa v.d. Trung Quốc và Châu Âu trở thành một nỗi đau thực sự, nhưng nếu điều không may đó xảy ra, kết nối giữa máy chủ web của bạn và máy chủ db của bạn sẽ bị ảnh hưởng như nhau. Và điều này thực sự còn tồi tệ hơn việc làm chậm kết nối giữa máy chủ web của bạn và người dùng của bạn, xem ở trên.

Có những thủ thuật CDN có thể cải thiện thời gian phản hồi của bạn ngay cả với một máy chủ bằng cách trông giống như bạn có nhiều máy chủ ở các vị trí khác nhau. Các nhà cung cấp CDN lớn như Cloudflare hay Akamai có những công cụ thực sự mạnh mẽ.

  1. Sử dụng sao chép cơ sở dữ liệu và duy trì cơ sở dữ liệu gần cả hai máy chủ web. Điều này có thể yêu cầu suy nghĩ lại sâu sắc về thiết kế ứng dụng, cũng như bộ kỹ năng rộng hơn nhiều và/hoặc giấy phép DB đắt tiền hơn.

  2. Kiểm tra thuộc tính kết nối cơ sở dữ liệu của bạn ở cả hai đầu (máy chủ db và máy chủ web).

  • Ghi nhật ký mở rộng, xác thực phức tạp và đảo ngược dns ở phía máy chủ db có thể làm chậm khá nhiều kết quả của mỗi truy vấn db.
  • Sử dụng các kết nối db liên tục ở phía máy chủ web có thể giảm 2-5 lần truy vấn db.
  1. Thiết kế lại ứng dụng của bạn để sử dụng ít truy vấn db hơn trên mỗi trang. Mặt khác, điều này có thể dẫn đến việc các truy vấn trở nên phức tạp hơn, chậm hơn và khó bảo trì hơn. Số dặm của bạn có thể thay đổi.
vidarlo avatar
lá cờ ar
Tôi không đồng ý với việc vị trí máy chủ web không quan trọng; đúng hơn là ngược lại. Ngày nay hầu hết người dùng có
fraxinus avatar
lá cờ ng
@vidarlo về vấn đề này, thế giới thường bị chia rẽ giữa Trung Quốc và các quốc gia khác. Nhưng nếu bạn làm việc ở Trung Quốc, bạn đặt một máy chủ ở đó và một cơ sở dữ liệu riêng ở đó. Khung pháp lý buộc bạn phải giữ những thứ liên quan đến Trung Quốc ở Trung Quốc và mọi thứ khác bên ngoài Trung Quốc.
Điểm:2
lá cờ us

khoảng cách không làm cho cơ sở dữ liệu chậm hơn, nó chỉ làm tăng độ trễ.

giảm thiểu cho độ trễ bao gồm

  • chạy song song nhiều truy vấn
  • giảm số lượng truy vấn cần thiết
  • kết quả bộ nhớ đệm cục bộ
  • giữ một bản sao chỉ đọc của cơ sở dữ liệu cục bộ

Một số lớp trình bao bọc SQL như tạo một số lượng lớn các truy vấn bổ sung để xác định cấu trúc cơ sở dữ liệu, bạn có thể phải thiết kế lại để sử dụng SQL gốc thay thế.

Nếu có thể, hãy sử dụng phép nối thay vì vòng lặp truy vấn. nếu cần, có thể thực hiện cập nhật và chèn nhiều hàng, nhưng tôi không biết cú pháp tốt nhất để sử dụng cho điều đó trong mysql.

Điểm:1
lá cờ in

Những người khác đã lưu ý các tùy chọn của sao chép hoặc bộ nhớ đệm để cung cấp cho bạn một bản sao cục bộ của dữ liệu, giảm số lượng truy vấn, hoặc để luôn sử dụng máy chủ web gần máy chủ cơ sở dữ liệu. Đây là những lựa chọn tốt mà bạn nên cân nhắc nhưng không phải là những lựa chọn duy nhất.

Một cách khác là ủy quyền cho truy vấn. Với proxy, bạn có thể thiết lập máy chủ web của Hoa Kỳ để chuyển tiếp đến máy chủ web châu Á cục bộ tới cơ sở dữ liệu. apache chắc chắn có thể làm điều này, và tôi tin rằng Nginx cũng có thể (nhưng tôi ít quen thuộc hơn với cấu hình Nginx). Điều này sẽ khắc phục sự cố với các chuyến đi khứ hồi lặp đi lặp lại giữa máy chủ web và cơ sở dữ liệu bị chậm với chi phí bổ sung giao tiếp proxy trên đầu trang. Nhưng giao tiếp proxy có thể là một cặp yêu cầu/phản hồi, thường sẽ nhanh hơn.

Bạn có thể thực hiện việc này nếu sao chép, lưu vào bộ nhớ đệm hoặc giảm truy vấn quá khó vì lý do nào đó. Việc thiết lập proxy tương đối đơn giản và không yêu cầu bạn phải thay đổi logic ứng dụng của mình (như cách làm của bộ nhớ đệm và giảm truy vấn). Tôi cũng thấy nó có nhiều khả năng hiệu quả hơn là chỉ giảm các truy vấn. Bởi vì về cơ bản, proxy giảm xuống thành một truy vấn từ xa duy nhất, trong khi bạn có thể vẫn có nhiều truy vấn tới cơ sở dữ liệu.

Việc ủy ​​quyền cũng tránh phải sao chép theo cả hai hướng. Nếu cả máy chủ web cục bộ (Hoa Kỳ) và máy chủ web từ xa (Châu Á) đều thực hiện thao tác ghi, thì tất cả thao tác ghi có thể được thực hiện trực tiếp đến máy chủ cơ sở dữ liệu có thẩm quyền dễ dàng hơn. Điều này tránh được vấn đề xung đột giữa các chỉnh sửa mà mỗi chỉnh sửa cố gắng ghi đè lên nhau ở khoảng cách xa. Nhưng giờ đây, chúng tôi có khả năng quay lại thực hiện nhiều yêu cầu cơ sở dữ liệu từ xa khứ hồi (mặc dù ít hơn). Với proxy, bạn được đảm bảo chỉ có một yêu cầu/phản hồi cho mỗi lần tải trang.

Nó cũng cung cấp một số lợi ích liên quan đến việc luôn sử dụng trực tiếp máy chủ web (châu Á) từ xa. Nếu một số nội dung là động và bạn chỉ ủy quyền nội dung đó, thì máy chủ cục bộ (Hoa Kỳ) của bạn vẫn có thể cung cấp tất cả nội dung tĩnh. Tất nhiên, bạn có thể sử dụng CDN cho nội dung tĩnh và truy cập trực tiếp máy khách vào máy chủ web Châu Á.

lá cờ co
Điều này nghe có vẻ như là lựa chọn tốt nhất cho tôi. Cảm ơn!
jcaron avatar
lá cờ co
Nếu mục tiêu của máy chủ ở Hoa Kỳ là gần người dùng cuối hơn để phân phối trang nhanh hơn, thì việc ủy ​​quyền tất cả các yêu cầu mà không có bất kỳ hình thức lưu trữ nào sẽ không mang lại nhiều lợi ích, nếu có, so với việc tất cả khách hàng truy vấn trực tiếp máy chủ ở Châu Á. Nếu các kết nối từ proxy đến máy chủ ban đầu có thể được giữ mở (kết nối liên tục), thì có thể có một chút lợi ích trong việc thiết lập các kết nối từ người dùng cuối đến proxy (đặc biệt nếu sử dụng SSL/TLS), nhưng mặt khác trong hầu hết các trường hợp, người dùng sẽ thực hiện một "đường vòng" nhỏ qua proxy.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.