?這可能是最中肯的Redis使用規(guī)范了碼哥,昨天我被公司Leader批評(píng)了。我在單身紅娘婚戀類型互聯(lián)網(wǎng)公司工作,在雙十一推出下單就送女朋友的活動(dòng)。誰曾想,凌晨12點(diǎn)之后,用戶量暴增,出現(xiàn)了一個(gè)技術(shù)故障,用戶無法下單,當(dāng)時(shí)老大火冒三丈!經(jīng)過查找發(fā)現(xiàn)Redis報(bào)Couldnotgetaresourcefromthepool。獲取不到連接資源,并且集群中的單臺(tái)Redis連接量很高。于是各種更改最大連接數(shù)、連接等待數(shù),雖然報(bào)錯(cuò)信息頻率有所緩解,但還是持續(xù)報(bào)錯(cuò)。后來經(jīng)過線下測(cè)試,發(fā)現(xiàn)存放Redis中的字符數(shù)據(jù)很大,平均1s返回?cái)?shù)據(jù)。?碼哥,可以分享下使用Redis的規(guī)范么?我想做一個(gè)唯快不破的真男人!R...
作者:vivo互聯(lián)網(wǎng)服務(wù)器團(tuán)隊(duì)-ZhangLin一、業(yè)務(wù)背景目前移動(dòng)端的使用場(chǎng)景中會(huì)用到大量的消息推送,push消息可以幫助運(yùn)營人員更高效地實(shí)現(xiàn)運(yùn)營目標(biāo)(比如給用戶推送營銷活動(dòng)或者提醒APP新功能)。對(duì)于推送系統(tǒng)來說需要具備以下兩個(gè)特性:消息秒級(jí)送到用戶,無延時(shí),支持每秒百萬推送,單機(jī)百萬長連接。支持通知、文本、自定義消息透?jìng)鞯日宫F(xiàn)形式。正是由于以上原因,對(duì)于系統(tǒng)的開發(fā)和維護(hù)帶來了挑戰(zhàn)。下圖是推送系統(tǒng)的簡單描述(API->推送模塊->手機(jī))。二、問題背景推送系統(tǒng)中長連接集群在穩(wěn)定性測(cè)試、壓力測(cè)試階運(yùn)行一段時(shí)間后隨機(jī)會(huì)出現(xiàn)一個(gè)進(jìn)程掛掉的情況,概率較小(頻率為一個(gè)月左右發(fā)生一次),這會(huì)影響部分客戶...
1、前言微服務(wù)的注冊(cè)中心目前主流的有以下五種:ZookeeperEurekaConsulNacosKubernetes那么實(shí)際開發(fā)中到底如何選擇呢?這是一個(gè)值得深入研究的事情,別著急,今天陳某就帶大家深入了解一下這五種注冊(cè)中心以及如何選型的問題。2、為什么需要注冊(cè)中心?隨著單體應(yīng)用拆分,首當(dāng)面臨的第一份挑戰(zhàn)就是服務(wù)實(shí)例的數(shù)量較多,并且服務(wù)自身對(duì)外暴露的訪問地址也具有動(dòng)態(tài)性??赡芤?yàn)榉?wù)擴(kuò)容、服務(wù)的失敗和更新等因素,導(dǎo)致服務(wù)實(shí)例的運(yùn)行時(shí)狀態(tài)經(jīng)常變化,如下圖:商品詳情需要調(diào)用營銷、訂單、庫存三個(gè)服務(wù),存在問題有:營銷、訂單、庫存這三個(gè)服務(wù)的地址都可能動(dòng)態(tài)的發(fā)生改變,單存只使用配置的形式需要頻繁的變...
來源:https://blog.csdn.net/liuzhirou1/article/details/117649569一、項(xiàng)目目標(biāo)支付中心架構(gòu)將各業(yè)務(wù)的公共交易、支付、財(cái)務(wù)等沉淀到支付中心,并主要解決了以下三個(gè)主要問題:建立基礎(chǔ)訂單、支付、財(cái)務(wù)統(tǒng)一體系,抽象和封裝公共處理邏輯,形成統(tǒng)一的基礎(chǔ)服務(wù),降低業(yè)務(wù)的接入成本及重復(fù)研發(fā)成本;構(gòu)建安全、穩(wěn)定、可擴(kuò)展的系統(tǒng),為業(yè)務(wù)的快速發(fā)展和創(chuàng)新需求提供基礎(chǔ)支撐,解決業(yè)務(wù)「快」和支付「穩(wěn)」之間的矛盾;沉淀核心交易數(shù)據(jù),同時(shí)為應(yīng)用端、物業(yè)公司、用戶提供數(shù)據(jù)支撐。二、具體調(diào)用流程在目標(biāo)的指導(dǎo)下,我向集采、o2o、收費(fèi)易三個(gè)項(xiàng)目組的相關(guān)開發(fā)咨詢了業(yè)務(wù)邏輯,再結(jié)...
平滑發(fā)布的介紹?背景?單位的云辦公相關(guān)系統(tǒng)沒有成熟的平滑發(fā)布方案,導(dǎo)致每一次發(fā)布都是直接發(fā)布,dll文件或配置文件的變更會(huì)引起站點(diǎn)的重啟。?云辦公系統(tǒng)的常駐用戶有10000,即使短短半分多鐘,也會(huì)收到一堆投訴?;诖耍覀兪崂砹艘惶灼交l(fā)布的方案。實(shí)施方案1、跟nginx代理服務(wù)器約定了一個(gè)健康檢查的接口2、通過接口返回的http狀態(tài)碼來讓ngx是否分流用戶請(qǐng)求(這個(gè)我們單位的技術(shù)部那邊有標(biāo)準(zhǔn)的做法)3、根據(jù)提供的這個(gè)服務(wù)健康檢查的接口:nginx判斷只要某個(gè)實(shí)例的接口返回5xx的狀態(tài)碼,即把該實(shí)例下線(nginx不會(huì)把流量轉(zhuǎn)發(fā)到該實(shí)例)???發(fā)布流程目的主要是為了發(fā)布的時(shí)候能夠平滑發(fā)布,所以...
前言Jlink可以將Hex文件下載到單片機(jī)內(nèi),也可以將未加密單片機(jī)內(nèi)部的程序文件讀出。本篇文章介紹,如何使用JFlash來讀取單片機(jī)的程序,學(xué)習(xí)單片機(jī)程序文件的讀取,不是為了破解別人的程序,而是學(xué)習(xí)破解的原理,從而更好保護(hù)自己的程序不被破解,希望大家也能尊重他人的勞動(dòng)成果。JFlash的下載和安裝首先,安裝JFlash軟件,安裝完成后,會(huì)默認(rèn)安裝JLink驅(qū)動(dòng)程序,主要包含以下幾個(gè)工具:JFlash,主要用于程序下載和讀取。JFlashLite,JFlash的Mini版JFlashSPI,用于給SPI存儲(chǔ)器下載程序,如W25Q128。JLinkGDBServer,用于第三方軟件的調(diào)試器,如使用...
大家好,我是小林。我之前寫過CPU緩存一致性MESI協(xié)議:10張圖打開CPU緩存一致性的大門。然后期間挺多人對(duì)MESI協(xié)議的轉(zhuǎn)換有疑問,其實(shí)我在文章中把MESI協(xié)議狀態(tài)切換的各個(gè)過程都總結(jié)成了一個(gè)表格,可能內(nèi)容太多,很多小伙伴沒有仔細(xì)看。就在昨天,我發(fā)現(xiàn)個(gè)可以「在線體驗(yàn)?MESI?協(xié)議狀態(tài)轉(zhuǎn)換」過程的網(wǎng)站,地址如下:https://www.scss.tcd.ie/Jeremy.Jones/VivioJS/caches/MESIHelp.htm我先給大家復(fù)習(xí)下MESI協(xié)議,然后再跟大家講一些這個(gè)網(wǎng)站怎么用。MESI協(xié)議MESI協(xié)議其實(shí)是4個(gè)狀態(tài)單詞的開頭字母縮寫,分別是:Modified,已修改...
艾倫·麥席森·圖靈(1912-1954)在一間小黑屋里,有這樣三個(gè)角色:一個(gè)人類評(píng)審員,兩個(gè)受試者A和B。其中一個(gè)受試者是計(jì)算機(jī)的人工智能程序,另一個(gè)受試者是人類。評(píng)審員無法直接看到受試者,只能通過打字的方式,與兩名受試者進(jìn)行提問溝通。經(jīng)過多次的詢問和回答,最后由評(píng)審員來判斷:哪一個(gè)受試者是人類,哪一個(gè)受試者是計(jì)算機(jī)。如果評(píng)審員判斷錯(cuò)誤的幾率超過30%,那就說明計(jì)算機(jī)成功地偽裝成人類,騙過了受試者,從而可以認(rèn)為這樣的計(jì)算機(jī)已經(jīng)具備了一定的思考能力。像這樣六位整數(shù)的乘法運(yùn)算,普通人類根本不可能在短時(shí)間內(nèi)計(jì)算出來,如果受試者在一秒內(nèi)就給出了正確結(jié)果,那就太不自然了,顯然是計(jì)算機(jī)程序的回答。所以,要...
什么是網(wǎng)絡(luò)編程?用一句話概括,就是對(duì)網(wǎng)絡(luò)協(xié)議的落地。?落地,意味著對(duì)實(shí)戰(zhàn)的要求更高。所以,一些朋友更喜歡用類似Netty這種封裝好的框架——快速,高效。確實(shí),跟開發(fā)細(xì)節(jié)相比,我們常常更看重開發(fā)效率。?可日常的項(xiàng)目里,我們也不得不面對(duì)極端的網(wǎng)絡(luò)性能考驗(yàn)。沒人喜歡堵車,但應(yīng)對(duì)大量請(qǐng)求時(shí),如果網(wǎng)絡(luò)性能處理不佳,數(shù)據(jù)、業(yè)務(wù)就會(huì)面臨大塞車。?舉個(gè)正向的例子,之前在綠盟有個(gè)信息安全產(chǎn)品,叫黑洞,是當(dāng)時(shí)市場(chǎng)上最成功的DDOS過濾設(shè)備。這玩意最大的技術(shù)難點(diǎn)就在于:當(dāng)攻擊報(bào)文洪水到達(dá)時(shí),每秒要過濾掉幾十萬攻擊請(qǐng)求。在那之前,我從沒想過通過程序代碼,對(duì)網(wǎng)絡(luò)報(bào)文的處理效率,竟然能達(dá)到如此強(qiáng)悍的地步。?早些年尚且如此...
點(diǎn)擊上方“小麥大叔”,選擇“置頂/星標(biāo)公眾號(hào)”福利干貨,第一時(shí)間送達(dá)大家好,我是小麥,以前用單片機(jī)做用戶交互的菜單的時(shí)候,都比較痛苦,如何寫一個(gè)復(fù)用性高,方便維護(hù),可擴(kuò)展性高的GUI框架呢?當(dāng)然可以自己動(dòng)手寫一個(gè),這個(gè)過程充滿了艱辛和挑戰(zhàn),現(xiàn)在我推薦一個(gè)很棒的框架,直接拿來用就行,也可以借鑒和學(xué)習(xí)其中的思路,一定會(huì)收獲頗豐。知道有多少人折騰過液晶顯示的菜單,我覺得很多人都應(yīng)該搞過,我還記得以前大學(xué)參加電子設(shè)計(jì)競(jìng)賽獲獎(jiǎng)的作品,我就用到了一個(gè)12864,里面有菜單功能。以前可能覺得菜單高大上,其實(shí)并不是想象中的復(fù)雜,本文為大家分享一個(gè)用單色屏做的菜單框架。代碼托管在github:https://g...
事件起因我們的系統(tǒng)中有數(shù)據(jù)導(dǎo)入的功能,可以把特定的格式的excel數(shù)據(jù)導(dǎo)入到系統(tǒng)中來由于客戶電腦的文件比較多,很多文件的名字也比較相近,客戶在導(dǎo)入excel時(shí)選錯(cuò)了文件這個(gè)錯(cuò)誤的excel文件的格式恰好能被系統(tǒng)解析,客戶也沒及時(shí)發(fā)現(xiàn)導(dǎo)錯(cuò)了文件,所以就將6萬多條沒用的數(shù)據(jù)導(dǎo)入到了系統(tǒng)中這6萬多條數(shù)據(jù)對(duì)系統(tǒng)來說就是無用的數(shù)據(jù),不會(huì)影響系統(tǒng)的運(yùn)行,最多也就是占用一點(diǎn)數(shù)據(jù)庫空間而已客戶只需要把正確的excel重新導(dǎo)入,就可以繼續(xù)完成他的業(yè)務(wù)了但是,客戶是一個(gè)重度強(qiáng)迫癥患者,他覺得在管理平臺(tái)看到這6萬多條沒用的數(shù)據(jù)令他抓狂客戶想要把這些數(shù)據(jù)刪除,我們系統(tǒng)又沒有提供批量刪除功能,只能單個(gè)刪除,這無疑是一個(gè)...
最近幾位朋友一起吃飯,聊到盡興時(shí),談起了一個(gè)大家都非常感興趣的話題,薪資,就簡單寫篇隨筆記錄一下。工作以來,我感覺自己變得有些佛系了,很少去打探同齡人的薪水狀況。每年的秋招季,不少同事都會(huì)抑制不住心情的好奇心,在各類互聯(lián)網(wǎng)社區(qū)去查看應(yīng)屆生的薪資情況,以推測(cè)自己的薪資所處的位置。要是薪資比應(yīng)屆生還低,一些覺得薪資沒有達(dá)到預(yù)期的同學(xué),可能就會(huì)動(dòng)了好好學(xué)習(xí),年后跳槽的心思,而且這部分比例還不會(huì)太小。因此,每年如果應(yīng)屆生的薪資出現(xiàn)了較大幅度的增長,公司為了穩(wěn)住人心,也會(huì)相應(yīng)的提升今年的普調(diào)(一般指員工薪資每年的正常增長)幅度。征求了當(dāng)事人的同意之后,這里簡單的分享一下他們的薪資水準(zhǔn),也許對(duì)大家來說,會(huì)...
大家好,我是小林。我寫技術(shù)文章畫的圖片是保存到GitHub的,沒別的原因,就是因?yàn)槊赓M(fèi),但是GitHub訪問的速度大家都懂的,訪問的速度很慢。所以我會(huì)用CDN來加速圖片的訪問,也就是我的圖床的方案是GitHubjsdelivrCDN,使用很簡單,只需要把域名地址替換一下就行。那為什么訪問GitHub會(huì)很慢呢?GitHub離國內(nèi)就近的服務(wù)器是在新加波,距離我這有2600公里,也就是說,訪問GitHub上的一張圖片,一個(gè)數(shù)據(jù)包就要走2600公里這么遠(yuǎn)!而且,互聯(lián)網(wǎng)從邏輯上看是一張大網(wǎng),但實(shí)際上是由許多小網(wǎng)絡(luò)組成的,每個(gè)網(wǎng)絡(luò)絡(luò)中還存在許多的路由器、網(wǎng)關(guān),數(shù)據(jù)每經(jīng)過一個(gè)節(jié)點(diǎn),都要處理一下,在二層、三層...
今天又是被傾盆的需求淹沒的一天。有沒有人知道,那種“我用3句話,就讓產(chǎn)品為我砍了18個(gè)需求”的雞湯課在哪報(bào)名,想報(bào)。"聽懂掌聲"的那種課就算了,太費(fèi)手了。扯遠(yuǎn)了,回到我們今天的正題,我們了解下這篇文的目錄。目錄代碼執(zhí)行send成功后,數(shù)據(jù)就發(fā)出去了嗎?回答這個(gè)問題之前,需要了解什么是Socket緩沖區(qū)。Socket緩沖區(qū)什么是socket緩沖區(qū)編程的時(shí)候,如果要跟某個(gè)IP建立連接,我們需要調(diào)用操作系統(tǒng)提供的socketAPI。socket在操作系統(tǒng)層面,可以理解為一個(gè)文件。我們可以對(duì)這個(gè)文件進(jìn)行一些方法操作。用listen方法,可以讓程序作為服務(wù)器監(jiān)聽其他客戶端的連接。用connect,可以作...
來源:翻譯自:NicklasMillard的文章《BetterSoftwareWithoutIf-Else》注:本文并不肯定或者否定哪一種寫法,僅僅為大家提供一些其他的編碼思路或者一些值得借鑒的點(diǎn)子,希望大家能在公眾號(hào)的每一篇文章中都能有所收獲,同時(shí)歡迎探討!設(shè)計(jì)更好的軟件,替換If-Else的5種方法。入門到高級(jí)示例讓我直接說這句話:If-Else通常是一個(gè)糟糕的選擇。它導(dǎo)致設(shè)計(jì)復(fù)雜,代碼可讀性差,并且可能導(dǎo)致重構(gòu)困難。但是,If-Else已成為事實(shí)上的代碼分支解決方案,這確實(shí)是有道理的。這是向所有有抱負(fù)的開發(fā)人員講授的第一件事。不幸的是,許多開發(fā)人員從來沒有前進(jìn)到更合適的分支策略。有些人的...