鍍金池/ 問答/人工智能  PHP  Linux/ 一個高并發(fā)實(shí)時計(jì)算的php微服務(wù),如果借助redis或其他mq,怎么實(shí)現(xiàn)?

一個高并發(fā)實(shí)時計(jì)算的php微服務(wù),如果借助redis或其他mq,怎么實(shí)現(xiàn)?

題目舉例,假設(shè)請求參數(shù) a=1 b=2 , 微服務(wù)返回 a + b 的計(jì)算結(jié)果

需求

  1. 單次請求后,在可容忍的時間內(nèi)返回結(jié)果(比如1000毫秒內(nèi))
  2. 單次并發(fā)量很大(比如3w甚至更多)
  3. 假設(shè)機(jī)器數(shù)量有限,用盡量少的機(jī)器來實(shí)現(xiàn)。(需要借助緩存或消息中間件;只答擴(kuò)充集群機(jī)器是不想要的答案)
  4. 用上redis或其他mq

提問者的理解:
這個還不是搶購系統(tǒng)那種高并發(fā)。搶購那種高并發(fā),可以將商品數(shù)量預(yù)先寫到redis中,然后再遞減,這樣直接請求redis進(jìn)行l(wèi)ist的pop操作或者單個值的decryby操作,就可以減少庫存,數(shù)據(jù)庫操作可以后續(xù)來做。但問題中這種需要實(shí)時計(jì)算,不能使用直接操作redis拿結(jié)果的方法。怎么才能在有限的機(jī)器內(nèi),借助redis或者其他mq,搭出一個能超出“單臺裸機(jī)”處理并發(fā)能力的架構(gòu)。

回答
編輯回答
裸橙

按照你的提問內(nèi)容,你這個是屬于計(jì)算密集型應(yīng)用服務(wù),不是IO密集型服務(wù),通過redis或者M(jìn)Q可能不會有太大的幫助,

計(jì)算密集型的應(yīng)用提高處理速度對代碼質(zhì)量和算法有更高的實(shí)現(xiàn)要求?;蛘咿D(zhuǎn)而使用其他編譯型語言實(shí)現(xiàn)。

如果你的問題是要處理類A+B計(jì)算結(jié)果,或者對某些固定的請求做計(jì)算,那你需要的是緩存。

如果你要處理計(jì)算量很大,并發(fā)數(shù)很高的請求,請求的客戶端不要求立即返回處理結(jié)果,那你可以使用MQ,將計(jì)算任務(wù)通過消息隊(duì)列分發(fā)至其他服務(wù)器處理或本機(jī)自身延時處理。

2017年6月14日 20:20