国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

發(fā)消費券用webman做API適合么?各位大佬幫忙哦。

abei

政府發(fā)的市民消費券

可能剛開始同時要1-2萬人進來搶,不過就幾分鐘就沒了。

現(xiàn)在用的yii2,上次cpu被弄到100%了

現(xiàn)在計劃用我們的webman,之前沒弄過常駐內(nèi)存的,不知道適合不適合?

會不會出現(xiàn)一些問題?

當前是想用一個機器nginx做反向代理,內(nèi)網(wǎng)兩個機器做業(yè)務處理。


就怕出現(xiàn)問題,會被弄死的。

6329 10 10
10個回答

liziyu

mark

  • tgzmos 2022-06-17

    看的qps;如果qps有上萬,建議使用go為一個高并發(fā)接口服務;其它業(yè)務可以使用webman;然后nginx作為代理負載

six

我覺得合適,2臺webman相當于10臺yii的性能,甚至更多。
2萬人來搶,假設搶1分鐘,每秒支持333個請求就行。高峰期假設乘以3,大概每秒能承受1000請求估計就行。
做完之后用ab壓測下。

  • abei 2022-06-01

    我主要這個不是常駐內(nèi)存么,萬一進程卡住了咋辦

  • abei 2022-06-01

    你之前用過webman么,覺得如何

  • six 2022-06-01

    除非數(shù)據(jù)庫有問題掛了,不然怎么會卡住?webman我們一直在用,性能確實比fpm的好非常多。

  • abei 2022-06-01

  • abei 2022-06-01

    之前沒搞過高并發(fā)的,很多工具都不熟悉,嗯,謝謝

nitron

已有項目,并且運行沒問題的,建議先考慮優(yōu)化,確定瓶頸在哪里,比如OPCACHE是否開啟,DB Server配置是否足夠,DB索引是否合理,FPM根據(jù)內(nèi)存大小預先開啟足量進程,還有其他一些業(yè)務邏輯設計等,都做了還是不行再考慮換框架這類操作

不否認換了Webman性能會更好,但是你要權衡更換成本,比如更換過程中的遇到的坑你有沒有辦法填,出了問題你能不能擔得起,畢竟這是市政項目,牽扯的東西很多

  • abei 2022-06-01

    嗯,是呀,就是覺得牽扯太多。

  • liziyu 2022-06-01

    務實??

  • nitron 2022-06-01

    另外再多提一嘴,你這個業(yè)務算是比較簡單的秒殺邏輯(至少從描述中看起來比較簡單),可以考慮在業(yè)務上做優(yōu)化(如果可以),采用先扣庫存再進行后續(xù)邏輯處理的方式(比如隊列),比較典型的例子就是常見的"優(yōu)惠券將會在稍后發(fā)放到您的賬戶中"這種, 前面上個負載均衡,平時就一臺機器,發(fā)券前提前多開幾臺,結束后降回一臺

  • abei 2022-06-01

    是的,現(xiàn)在用的就是,除了會員的生成用mysql有點大,其他都放到了redis里,然后服務器有個計劃任務負責發(fā)券,當前自己用到時沒啥問題。

    客戶想包裝成產(chǎn)品,做云端,買個其他各城市的部門來發(fā)券,相當于重新搞一個新系統(tǒng)再。

    負載均衡還沒有上,這幾天正在研究nginx搞這個,現(xiàn)在有3臺服務器,打算用最弱的一臺做分發(fā),其他兩臺方程序。

  • abei 2022-06-01

    @nitron 現(xiàn)在mysql是了一臺高性能的數(shù)據(jù)庫服務器,但是還是感覺慢,想做主從,不過之前沒弄過,還沒有搭建好。

  • abei 2022-06-01

    上次在客戶公眾號上搞,因為要授權,必須跳轉一次PHP做會員初始化,結果一次來太多人,當時開了1000個靜態(tài)的fpm進程,卡在那里不動了。

    最后過了十分鐘還那樣,重啟了phpfpm后好了,我覺得是cpu(8核)已經(jīng)到頭了沒能力處理進程了。

  • nitron 2022-06-02

    授權這個,因為從公眾號獲取用戶信息需要服務器向微信服務器發(fā)起一個Http請求,這個涉及第三方系統(tǒng),沒辦法.
    注意不要重復獲取access_token就好

  • abei 2022-06-02

    是的,這個沒有,access_token都是緩存了的,就是一次太多人訪問。。不過也的確沒有好的辦法,下次弄負載均衡估計就解決了。

  • tanhongbin 2022-06-02

    大佬發(fā)言給力呀,先優(yōu)化,實在扛不住了再換webman,也別一下子全搬過來,高并發(fā)的請求可以用webman處理,多異步,這么高并發(fā)的請求應該不會有新增完數(shù)據(jù)就要看的,mysql的增加刪除和修改全給它異步了,查詢緩存一做基本io上redis扛得住,就問題不大

  • abei 2022-06-02

    @tanhongbin 【這么高并發(fā)的請求應該不會有新增完數(shù)據(jù)就要看的,mysql的增加刪除和修改全給它異步了】是什么意思哈?求

胡桃

這種情況用swoole可能會更好一點。

  • abei 2022-06-02

    為啥那?swoole似乎學習成本有點高

  • 胡桃 2022-06-02

    IO操作多的話Swoole表現(xiàn)會更好,workerman在異步這塊現(xiàn)在可以說是空白

  • abei 2022-06-02

    哦,我了解下。

  • six 2022-06-02

    他本來就是沒有常駐內(nèi)存的經(jīng)驗,直接上swoole玩php協(xié)程非常不推薦,學習swoole的難度不亞于學習一門新語言例如go。
    如果系統(tǒng)瓶頸在數(shù)據(jù)庫,那上啥也沒用。如果瓶頸在框架性能低下,上webman是很好的選擇,學習基本沒有成本,同樣的代碼寫法性能提高數(shù)倍,穩(wěn)定性也好與swoole,并且性能也比swoole高。

  • abei 2022-06-02

    感謝各位兄弟的建議,嗯,項目也比較緊,學習太久估計不行,就一個月時間。

  • liziyu 2022-06-02

    如果說沒有扎實的網(wǎng)絡與操作系統(tǒng)相關的基礎或經(jīng)驗,別說用swoole了,就是用了go也難解決性能瓶頸!~
    深(身)有體會??! ^_^

  • abei 2022-06-02

    看來要惡補基礎知識啦

  • 2548a 2022-06-02

    說的不錯,記得我以前剛開始工作的時候,有個項目每天零點要執(zhí)行任務,當時項目有8,9萬個會員以后,執(zhí)行任務需要2,3個小時才執(zhí)行完,但是現(xiàn)在如果讓我再執(zhí)行同樣的任務,也就是十幾分鐘的事情.

  • abei 2022-06-02

    你現(xiàn)在咋搞的?

  • 2548a 2022-06-02

    減少數(shù)據(jù)庫查詢,批量插入或者更新數(shù)據(jù)庫,這些是從代碼層面去優(yōu)化sql. 一個接口能少查詢一次sql,那高并發(fā)下一秒就是少上千次查詢.

  • abei 2022-06-02

    ??

  • admin 2022-06-03

    為什么不學go?

2548a

如果是我的話,肯定先問領導,直接跟他說換個框架,性能有數(shù)十倍的提升,但是這個過程有太多的不確定性,讓他決定是否愿意冒這個險,如果不愿意的話沒必要換,如果他同意的話,也不至于自己一個人把責任全擔下來了.

1024

你們公司搞到了政府的項目?是不是靠關系啊

  • abei 2022-06-02

    怎么突然問這個了。

Caesar-Tang

端午節(jié)上線的項目,項目中使用到數(shù)據(jù)庫訪問,單純的增刪改查(有索引),使用docker部署,cpu占用在 10-20% 間,webman的性能讓我著實震驚。8小時將近 1200w 的流量穩(wěn)定支撐,并且cpu占用并不高。主要服務架構如下:

  1. 一臺服務器使用nginx做負載(8C16g)
  2. 兩臺服務做業(yè)務,每臺服務器兩個節(jié)點(均為 4c8g)
  3. 云數(shù)據(jù)庫(4C8G)

順帶一提,該項目也使用了thinkphp開發(fā)的一個服務,簡單的一個查詢數(shù)據(jù)庫(有索引),使用docker部署,cpu占用卻有 300-400%。
當然,這只是我這邊的實際使用場景,僅供參考。你的項目需要具體業(yè)務具體分析。至于業(yè)務層涉及到的服務器調(diào)優(yōu),數(shù)據(jù)庫優(yōu)化,redis緩存等等,這里就不過多討論了。

  • abei 2022-06-06

    哇~

  • abei 2022-06-06

    用redis了么,如果用了是放到了一臺業(yè)務服務器上了么

  • Caesar-Tang 2022-06-06

    沒有用到redis

  • abei 2022-06-06

    那mysql壓力很大呀

  • abei 2022-06-14

    我問下,你每個業(yè)務的機器上就是啟動了一個webman是吧。

  • Caesar-Tang 2022-06-14

    使用docker打包部署服務,每臺機子部署2個

  • Caesar-Tang 2022-06-14

    對于mysql和redis,如果有預算并且是要短期保證業(yè)務穩(wěn)定,個人建議使用云服務。比如阿里云的云rds或云redis,都有集群版的,比自己部署的要好要穩(wěn)定要便捷。自己部署的話,非專業(yè)運維,包括調(diào)優(yōu),監(jiān)控等等都會比較麻煩,并且單機部署,流量,性能和IO,都會有瓶頸。

  • Caesar-Tang 2022-06-14

    你這邊是如何發(fā)券的,減庫存跳轉鏈接用戶點擊領取 或 減庫存調(diào)用api接口?

  • abei 2022-06-14

    減庫存,然后后臺有個計劃任務負責發(fā)券。

  • Caesar-Tang 2022-06-14

    計算任務是crontab,還是?

  • abei 2022-06-14

    嗯嗯,是crontab

  • Caesar-Tang 2022-06-14

    以下思路,僅供參考:

    1. 流量分流(前端資源加cdn或放在對象存儲上;后端的用作負載的服務器,性能要好,帶寬要高,保證接口請求的流量穩(wěn)定)
    2. 后端服務負載均衡(后端服務多臺服務器部署,負載處理業(yè)務,后續(xù)有壓力可擴容)
    3. 云mysql 或 云redis 做庫存處理(mysql的原子操作 或 redis的lua腳本執(zhí)行 保證不會超發(fā))
    4. 消息中間件做發(fā)券處理(redis消息隊列或rabbitmq等,減庫存后,將發(fā)券任務交給中間件,多個消費者服務同時發(fā)券處理)
  • Caesar-Tang 2022-06-14

    使用crontab會造成任務堆積的

  • abei 2022-06-14

    現(xiàn)在是在一個內(nèi)存最大的服務器上安置了redis,所在的云上沒有云redis,這時候其他機器通過局域網(wǎng)訪問這臺機器的redis你覺得會不會有問題那?

    還有問個問題哈,常駐內(nèi)存的,如果這個進程比如調(diào)用一些外部api服務,響應時間比較長,豈不是后面的都卡主了。

  • abei 2022-06-14

    crontab 之前發(fā)生過數(shù)據(jù)問題,正在考慮換個

  • 法師 2022-06-14

    fpm也一樣卡住,所以調(diào)用外部api需要控制好超時時間,比如設置1秒超時。

  • Caesar-Tang 2022-06-14

    如果當前請求未處理完,其他的請求會等待。
    具體的業(yè)務場景有不同的處理方案。要在接口中等待外部api請求完成,比如微信授權,則可以把該接口分離成一個單獨的服務來部署,這樣可避免影響其他業(yè)務 或 合理設置超時時間;若可異步處理,比如發(fā)券,可使用消息中間件服務。

  • Caesar-Tang 2022-06-14

    我這邊在使用mysql或redis服務時,結合使用場景,一般會從三個角度去考慮,流量,性能及多機活備。
    通過內(nèi)網(wǎng)訪問,流量是沒問題的,至于性能及活備,因為無法預知上線后的業(yè)務情況,所以無法評估你當前配置的redis服務有沒有問題。

  • Caesar-Tang 2022-06-14

    如果沒有更好的方案,建議提前開發(fā)好業(yè)務功能,按照當前思路部署服務,然后做壓測來定位服務瓶頸。

  • abei 2022-06-14

    @靜默 但是fpm不是每個請求開一個進程么,如果一個進程卡出,應該不影響其他的把

  • abei 2022-06-14

    @CaesarTang 好的,太感謝了

  • 法師 2022-06-15

    fpm不是每個請求開一個進程,是的話一秒來1萬個請求,服務器內(nèi)存直接爆了。
    都是預先開一些進程,每個進程排隊處理消息,包括nginx也是一樣。

  • abei 2022-06-15

    @靜默 是的,我的意思是說每個fpm進程間不互相干擾,不需要等待。

  • 法師 2022-06-15

    webman在前面加一層nginx也一樣,新請求會發(fā)給空閑的進程,不互相干擾

  • abei 2022-06-15

    @靜默 哦

yootou

發(fā)消息券這種,一種用webman這類常駐內(nèi)存來做API,另外消費券本身,建議先放在REDIS等緩存里邊,不要直接訪問數(shù)據(jù)庫,再一個利用隊列的方式。這樣你說的1到2W人,輕松就能解決了。

  • abei 2022-06-14

    我想問下,redis是放到一個機器上么?比如負載均衡了3臺機器,redis要單獨放一個機器么?

  • yootou 2022-06-28

    redis放任一臺服務器,只要能訪問即可。

MarkGo

給個建議,可以自己試試內(nèi)網(wǎng)壓測。
1、消費卷數(shù)量存到redis。
2、領取消費卷的時候查redis結果,有卷領取成功的話通過隊列回寫mysql結果?!井惒健?br /> 3、前端搶劵的時候增加個setTimeout,隨機延遲10~1000毫米時間發(fā)送請求,避免產(chǎn)生毛刺。

其實避免了mysql的同步操作,剩下的就是帶寬問題了,所有接口非必要信息不要返回,減少請求大小,開啟gzip就好了。
靜態(tài)資源建議上cdn,針對請求異常時前端做好友好提示,類似活動異常爆滿,請稍后重試。這樣就算webman倒了也對客戶影響不大。

  • 暫無評論
MarkGo

當前是想用一個機器nginx做反向代理,內(nèi)網(wǎng)兩個機器做業(yè)務處理。

更加建議租用云負載,按量付費。
以騰訊云為例:
建議:
clb-〉(CVM 3) -〉云redis -〉 云數(shù)據(jù)庫
膽大的:
clb->CVM
2 -> CVM(redis單機) -> 云數(shù)據(jù)庫

  • abei 2022-06-20

    好的,謝謝,現(xiàn)在也有了一些思路,不過我估計要用你的那個大膽的方案,客戶所在的云沒有云redis。。。

  • MarkGo 2022-06-20

    redis單機一般問題也不大的。webman啟動的時候加載帶領取的卷id到redis里,領劵的時候redis取個出來,然后丟隊列,隊列update 到取mysql那。

  • MarkGo 2022-06-20

    肯定是政務云機房哪些。。。。。

  • abei 2022-06-20

    @MarkGo 被你說對了,特麻煩,開個端口還得發(fā)郵件申請。

  • MarkGo 2022-06-20

    我們之前也用過,價格特別貴,然后window系統(tǒng)還要另外支付授權費用。申請端口和遠程進去要用跳板機。

  • abei 2022-06-20

    @ MarkGo 對啊對啊,超級麻煩,那個堡壘機傳文件夾還不智能,上次開個443端口,說要和省里申報,最少要一天(非工作日)才能過。

    讓加個白名單,相當不愿意。

年代過于久遠,無法發(fā)表回答
??