banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận mạng và thiết bị mạng Giúp mình cách quản lý số lượng kết nối tcp socket tối ưu nhất ?  XML
  [Guidance]   Giúp mình cách quản lý số lượng kết nối tcp socket tối ưu nhất ? 15/11/2012 10:03:36 (+0700) | #1 | 271000
htn_vn
Member

[Minus]    0    [Plus]
Joined: 02/08/2012 04:44:57
Messages: 3
Offline
[Profile] [PM]
Hi mọi người
Nếu mình có 1 triệu máy client và 1 máy server
Các client và server giao tiếp qua TCP Socket.
Trên Server mình viết một đoạn mã lắng nghe các kết nối tới một port xxxx.
Trên mỗi client cũng viết một đoạn mà để gửi dữ liệu tới server
Ví dụ:
- Đúng 8h sáng 1 triệu máy client đồng loạt gửi 1 gói tin (có data là 1 chuỗi nhỏ hơn 100 kí tự) qua tcp socket về cho server.
- Server sẽ nhận gói tin và, thực hiện cắt chuỗi và lưu xuống database. Server sau khi nhận được một gói tin thì gửi một gói tin về cho máy client gửi gói tin đó là đã nhận được,
- Client nhận được gói tin từ server thì client sẽ ngắt kết nối.
Giải sử là giả sử băng thông internet là không giới hạn.
Vấn đề thắc mắc:
- Nếu code trên server viết bằng java (hoặc ngôn ngữ khác) thì có những giải pháp nào thế nào để quản lý hiệu quả nhất số lượng kết nối khổng lồ như vậy? (dùng thread…).
- Làm sao để mô phỏng được 1 triệu máy client gửi gói tin về server cùng lúc ?
- Yêu cầu phần cứng máy server như thế nào, Có thể có những bất cập gì cho hệ thống?

Rất mong nhận được sự chia sẻ của mọi người.
[Up] [Print Copy]
  [Guidance]   Giúp mình cách quản lý số lượng kết nối tcp socket tối ưu nhất ? 15/11/2012 12:33:10 (+0700) | #2 | 271004
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]
Nghe giống xây dựng C&C server cho 1 mạng BOT 1 triệu máy vậy. Giống như kịch bản phim luôn. Tôi thấy vui là có nhiều bạn đưa ra những câu hỏi rất chi là hóc búa rất chi là siêu thực. Đợt trước tôi nghe về máy tính lượng tử, truyền hình ảnh HD bằng cáp quang, tại sao xem video HD không đứng, v...v.... Tôi tự hỏi nước ta nhiều nhân tài ẩn dật thế.

Em không hiểu ngụ ý của thiên tài. Nhưng theo ngu ý của em thì. Nên bố trí kết nối "sole" nhau, tức là không cùng tại một thời điểm, làm như vậy thiên tài sẽ không phải bỏ một khoản lớn để làm mấy công việc cỏn con. Mà thiên tài ! Em nói không phải chứ 1 triệu máy sẽ không ở trên cùng 1 múi giờ được. Tức là cái này liên quan tới vấn đề địa lý ấy. Nên 8 giờ đó vẫn chưa biết là local time hay GMT.

Bài toán siêu thực này còn ở chổ ! Mọi người cùng bật máy lên 8 giờ (?).

Nếu mà thiên tài vẫn quả quyết làm siêu nhân 1 triệu máy cùng lúc thì em cũng nói luôn là thiên tài có thể xây dựng nhiều server để nhận dữ liệu, sau đỏ mở 1 kết nối tới mainserver để đồng bộ dữ liệu. Số server thì thiên tài phải tính lấy rồi.

Em xin phép ^^.
while(1){}
[Up] [Print Copy]
  [Guidance]   Giúp mình cách quản lý số lượng kết nối tcp socket tối ưu nhất ? 15/11/2012 14:20:15 (+0700) | #3 | 271017
htn_vn
Member

[Minus]    0    [Plus]
Joined: 02/08/2012 04:44:57
Messages: 3
Offline
[Profile] [PM]
hì hì, cảm ơn chiro8x đã trả lời
Ví dụ bạn xây dựng một hệ thống điểm danh cho tất cả học sinh sinh viên (hssv) cả nước, cứ 40 hssv thì dùng chung 1 máy điểm danh, cứ mối buổi học hoặc mỗi tiết học phải điểm danh 1 lần, sau khi một học sinh điểm danh thì máy sẽ gửi thông tin ngay lên server. chiro8x thử hình dung xem số lượng kết nối tới server vào một thời điểm cố định nào đó ít hay nhiều? mặc dù có thể không đến 1 triệu kết nối nhưng mình cứ ví dụ có 1 triệu kết nối đến server một lúc, bỏ qua băng thông, bỏ qua việc server giới hạn kết nối thì nếu viết ứng dụng quản lý kết nối này và xử lý dữ liệu này như thế nào cho tối ưu, ví dụ viết bằng java không lẽ tạo cho mỗi kết nối một thread riêng để xử lý ( nhận gói tin, tách chuỗi, so sánh db, lưu db, trả lời client) xong rồi hủy thread hay sao ? có cách nào mô phỏng thực tế, cách nào xử lý số kết nối đó hiệu quả nhất không ? thực sự mình muốn các bạn cho mình một giải pháp về coding, về giải thuật hiệu quả để mình xử lý kết nối và dữ liệu client gửi lên sao cho hiệu quả nhất, dĩ nhiên là sự hiệu quả phải phụ thuộc trên thông số phần cứng nữa.
[Up] [Print Copy]
  [Guidance]   Giúp mình cách quản lý số lượng kết nối tcp socket tối ưu nhất ? 15/11/2012 14:53:10 (+0700) | #4 | 271020
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]
Muốn rót nước vào bình mà cổ chai hẹp, bồ không đập cái cổ chai đi thì làm sao rót smilie . Vế cuối tớ đã đưa ra câu trả lời rồi load balancing.

Mỗi kết nối bồ vẫn phải tạo một thread cho nó điều đó gần như là hiển nhiên, nhưng nếu bồ sử dụng nhiều máy chủ để giải quyết hiện tượng nghẽn cổ chai thì vấn đề của bồ còn gì khó.

1 Server nhận khoảng 1000 connect (tôi ví dụ) sao đó dữ liệu đó được cậu chia thành các phần nhỏ gửi tới main server (tất nhiên trước đó cậu đánh dấu gói nào của thread nào, hoặc cấp id cho mỗi máy, đính kèm id vào gói tin gửi đi). Sau đó tới máy chủ tiến hành tách và lưu vào database.

Còn về thuật toán cách xử trí tiếp thế nào không lẽ bồ còn không biết smilie.
while(1){}
[Up] [Print Copy]
  [Guidance]   Giúp mình cách quản lý số lượng kết nối tcp socket tối ưu nhất ? 15/11/2012 14:56:15 (+0700) | #5 | 271021
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]
Mà có nhất thiết là TCP không smilie. Bồ có thể sử dụng UDP trong trường hợp này. Nó sẽ ổn hơn TCP nhiều.
while(1){}
[Up] [Print Copy]
  [Guidance]   Giúp mình cách quản lý số lượng kết nối tcp socket tối ưu nhất ? 23/11/2012 15:18:20 (+0700) | #6 | 271246
myquartz
Member

[Minus]    0    [Plus]
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
[Profile] [PM]
Con số 1 triệu cũng khá to nhưng thực tế có nhiều hệ thống đạt mức hơn thế này nhiều rồi.
Cái mấu chốt thiết kế hệ thống này chính là: chia để trị, hay là scale-out. làm sao để 1 máy ví dụ gánh được 10K kết nối, và số lượng tăng lên tỉ lệ thuận với số máy. bài toán giải sẽ là 1 triệu = 100 máyx10K kết nối.
Nếu protocol hiệu quả hơn, ko phải TCP mà UDP hoặc 1 kiểu sáng tạo khác nào đó, thì 1 server có khả năng nhận được nhiều hơn, 50K, 100K => số server ít hơn => tiết kiệm hơn.
[Up] [Print Copy]
  [Guidance]   Giúp mình cách quản lý số lượng kết nối tcp socket tối ưu nhất ? 23/11/2012 18:34:35 (+0700) | #7 | 271247
[Avatar]
3th.dots
Member

[Minus]    0    [Plus]
Joined: 15/11/2012 07:24:23
Messages: 6
Offline
[Profile] [PM]
- Làm sao để mô phỏng được 1 triệu máy client gửi gói tin về server cùng lúc ? 

Liên hệ xem trong HVA có anh nào có Botnet cỡ đó không thì nói anh đó giúp.
We buy things we don't need With money we don't have To impress people we don't like ..!.
[Up] [Print Copy]
  [Guidance]   Giúp mình cách quản lý số lượng kết nối tcp socket tối ưu nhất ? 28/11/2012 08:54:48 (+0700) | #8 | 271390
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]
Mấy thánh chém gió nhẹ tay, em lạnh quá phù !. Cái topic này dần đi tới chổ hoang đường rồi. Mấy thánh lấy máy tính ra, dựa trên tài nguyên của server rồi tính toán lại đi.
while(1){}
[Up] [Print Copy]
  [Guidance]   Giúp mình cách quản lý số lượng kết nối tcp socket tối ưu nhất ? 29/11/2012 21:02:27 (+0700) | #9 | 271446
vn.rootkit
Member

[Minus]    0    [Plus]
Joined: 22/01/2009 00:12:32
Messages: 18
Offline
[Profile] [PM]
bạn tìm thông tin về aynchronous socket hoặc aynchronous I/O. nó sẽ giải quyết bài toán của bạn đó
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|