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

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

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

需求

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

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

回答
編輯回答
裸橙

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

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

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

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

2017年6月14日 20:20