GateSvr的設計2
我們的目標是:
1、業務Server集群部署,從網關發來的請求處理,程序自動找一臺空閑的業務Server來處理這個請求,並將結果異步分發到服務網關,從而Push給客戶端;
2、一套業務Server掛了不會影響整個服務端程序運行;
3、當Req過載時,即發送的大量請求在服務端堆積時,服務端“熱部署”掛一個新的Req-Server,而不需要重新啟動服務端程序;
約束條件:
1、前端暫時用tcp連接
2、服務內部可以用zmq連接
服務提供一個Router套接字a,供worker連接,worker封裝服務標識信封,以區分不同worker service, 另提供一個Router套接字(也可共用a),供client連接,收發client包;
應用面向服務的可靠隊列(管家模式)
Broker基本的數據結構:
struct worker
{
std::string m_identity; // Address of worker
service * m_service; // Owning service, if known
int64_t m_expiry; // Expires at unless heartbeat
};
struct service
{
std::string m_name; // Service name
std::list<worker*> m_waiting; // List of waiting workers
size_t m_workers; // How many workers we have
};
class broker {
std::map<std::string, service*> m_services; // Hash of known services
};
GateSvr的設計2