我正在設計一個java服務器,用於交易債券。該服務器將充當客戶端UI和分析服務器之間的中介。分析服務器是大腦,我的服務器將簡單地與它交互(使用tcp套接字)並將響應轉發給客戶端。批評我的服務器設計請
服務器預計可同時處理約500個客戶端。它必須具有可擴展性和高效率才能處理大約每秒500條消息。
客戶端UI和分析服務器之間的信息流是這樣的:
1. Client through the UI requests for price.
2. My server accepts the message, formats it and then asynchronously
sends to the analytical server.
3. When the response from the analytical server arrives, format and send
the response to the client UI.
4. If the client likes the price, he/she will request to trade.
5. Repeat steps 2 & 3.
有一個現有的框架,我利用來處理身份驗證,併到我的服務器和客戶端UI之間發送 消息。我已經編寫了我的服務器和分析服務器之間的消息傳遞位。
所以就設計我的服務器的其餘部分,我想有4個阻塞隊列。當價格請求到來時,我立即將請求插入隊列(隊列1)。然後我有一個處理器,它將消息從隊列1中取出,格式化並放入另一個隊列(隊列2)。處理器類內部包含一個線程池(Executors.fixedThreadpool),並且每個消息的格式都在一個單獨的線程中進行。
然後我有一個調度程序類,其中包含另一個線程池。此調度程序類負責從Queue2中獲取消息並將其寫入分析服務器。
當我從分析服務器收到消息時,將其插入另一個隊列(Queue3)。我有另一個線程池,將郵件出隊並格式化,並將其放入另一個隊列(隊列4)。最後,我有另一個帶有Queue4彈出消息的線程池,併發布到客戶端。
我之所以選擇4個不同的隊列是因爲如果我想,我可以編寫一個工具來觀察這些隊列的大小。關於這些隊列的大小的信息將
1. Allow me to tune the size of the thread pools.
2. Further, if needed, I can publish the messages contained in these queues
thus allowing me to monitor all the messages that flows through my server.
所以你們怎麼想?任何想法,提示是最受歡迎的。
乾杯
不具有真正的答案 – Peter 2009-08-13 06:23:22
問題嘛「虛構」的回答會適合我就好了。 必須一個問題有一個普遍-商定答案這是一個問題嗎? – CaptainHastings 2009-08-13 14:38:37