分布式架構(gòu) 如何反駁“前端很簡單”的觀點?
如何反駁“前端很簡單”的觀點?這種話沒必要理會。心胸開闊。說白了,99.9999%的人從事零工,拿著工資,過著自己的生活。不要因為清潔工擦桌子就瞧不起他們。有些人喜歡尋找優(yōu)越感和存在感。我曾經(jīng)遇到一個
如何反駁“前端很簡單”的觀點?
這種話沒必要理會。心胸開闊。說白了,99.9999%的人從事零工,拿著工資,過著自己的生活。不要因為清潔工擦桌子就瞧不起他們。有些人喜歡尋找優(yōu)越感和存在感。我曾經(jīng)遇到一個室友,他30多歲,比我大很多,內(nèi)容是寫C。在一家小公司,我對這個職業(yè)有一些存在感。我喜歡和我談寫C我對技術(shù)和算法有很高的要求,如何把系統(tǒng)做大。我認為windows已經(jīng)讓微軟成功了。這跟你有什么關(guān)系?有一次我問他如何判斷一個數(shù)是否是2的冪。最后,我知道了一個愚蠢的方法,但我不知道其他優(yōu)化算法。因為我刷過算法,我知道這種小問題,他的工資是對的,確實比我低。當(dāng)然,我只想說,他們中的大多數(shù)是商業(yè)型的,很少有研究型的。所以別緊張。如果工資很高,我就給你上廁所,我愿意去做
nodejs是一個單線程線程)通過一個事件循環(huán)來循環(huán)出事件隊列中的消息進行處理。處理過程基本上是調(diào)用消息對應(yīng)的回調(diào)函數(shù)。消息隊列是在事件狀態(tài)發(fā)生變化時將消息按入隊列。因為它是單線程的,所以當(dāng)JS文件中的代碼按順序執(zhí)行時,事件循環(huán)被掛起。JS文件執(zhí)行后,事件循環(huán)開始運行,從消息隊列中獲取消息,并開始執(zhí)行回調(diào)函數(shù)。因為回調(diào)函數(shù)是單線程的,所以在執(zhí)行回調(diào)函數(shù)時事件循環(huán)被掛起。當(dāng)涉及到I/O操作時,nodejs會打開一個獨立的線程進行異步I/O操作,操作推送到消息隊列后,消息會被發(fā)送到服務(wù)器。
詳解nodejs異步I/O和事件循環(huán)?
1. 在上圖中定義消息發(fā)送和消耗的過程
2。為消息定義消息協(xié)議,如ActiveMQ、stomp、XMPP等。定義消息協(xié)議,定義消息隊列需要滿足的場景
是否要保證消息的可靠性,必要時要保證存儲的高可用性
是否支持同步和異步消息
是否要保證消息的順序
是否需要延遲消息要支持
很多開源的實現(xiàn)功能可以參考詳細信息。例如,rocketmq是高度可靠的,Kafka是高吞吐量的,但不是高度可靠的。
如何設(shè)計一個MQ消息隊列?
在軟件領(lǐng)域,中間件作為應(yīng)用程序之間的連接服務(wù),這不是nodejs的概念,在其他領(lǐng)域也是如此。例如,消息隊列、數(shù)據(jù)庫驅(qū)動程序等。一般來說,插件是額外的,這意味著您的整個系統(tǒng)或應(yīng)用程序可以正常工作,而無需插件。插件通常提供一些附加功能。plug-in這個詞本身表示可擴展的(形象地說,pluggable)。我個人認為plugin/addon=extra-feature模塊通常是負責(zé)某個功能的系統(tǒng)的一部分,是不可或缺的。模塊=節(jié)點中系統(tǒng)/應(yīng)用程序的一部分包.json中指定的包都是模塊。當(dāng)然,您可以從文件名節(jié)點開始,模塊可以看到這一點。