最近 Funliday-旅遊規劃 常發一些精選旅遊回憶的 App 通知給使用者,在去年十一二月的時候發通知 Server 還能撐的了瞬時大流量的 request。
但今年開始發這類通知,總共發了三次,三次都造成 Server 被打掛,而且重開 AP 還緩解不了,瞬間手足無措。大概都要等過了十分鐘左右,Server 才將這些 request 消化完。
這裡就來簡單整理一下時間軸,順便分享一下 Funliday 是如何解決這個問題。
---
* 1/6 1900:系統排程發送精選旅遊回憶的 App 通知
* 1/6 1900+10s 開始:Server 收到極大量的 request
* 1/6 1900+20s:Nginx 出現錯誤訊息 1024 worker not enough,並回傳 http status code 503
* 1/6 1900+25s:PostgreSQL 出現錯誤訊息 could not fork new process for connection (cannot allocate memory)
* 1/6 1900+38s:Node.js 收到 PostgreSQL 的 exception。There was an error establishing an SSL connection error
* 1/6 1900+69s:PostgreSQL 出現錯誤訊息 database system is shut down
* 1/6 1900+546s:PostgreSQL 出現錯誤訊息 the database system is starting up
---
看了時間軸就覺得奇怪,先不論 10s 的時候發了極大量 request,造成 20s 在 Nginx 出現 worker not enough 的錯誤訊息。而是要關注 25s 時的 PostgreSQL 出現 could not fork new process for connection 的錯誤訊息。
Funliday 用了同時可承載 n 個 connection 的資料庫,而且程式碼又有加上 connection pool,理論上根本不該出現這個錯誤訊息。但整個時間軸看下來感覺就是 PostgreSQL 的 capacity 問題,造成系統無法運作。
因為就算將 Nginx 的 worker connection size 再加大 10 倍,只是造成 PostgreSQL 要接受的 request 也跟著被加大 10 倍,但 PostgreSQL 那裡因為 request 變多,原本在 69s 直接關機的時間點只會提早,而無法真正緩解這個狀況。
基於以上狀況,小編就開始回去看自己的程式碼是不是哪裡寫錯了。會這樣想也是覺得 PostgreSQL 應該沒這麼弱,一下就被打掛,一定是自己程式碼的問題 Orz
---
這邊來分享一下自己程式碼的寫法,圖一是原始寫法,在每個 API 都 create 一個 db client instance 來處理該 API 層的所有 db request。這是蠻單純的做法,也是 day 1 開始的處理方式。但有個小問題,就是每個 API 層都要自己 create instance,不好管理,且浪費資源。
後來因為想要做 graceful shutdown 的關係,所以調整了一下 db client instance 的建立方式,用 inject 將 instance 綁在 request 上面,如圖二。這樣只要在 middleware 建立 db client instance 就好,好管理,而且只要有 req 就可以取得 instance,非常方便。而這也是 1/6 時的程式碼,就從這裡開始研究吧。
---
直接切入 node-postgres 的文件,認真讀了一下 pool 有下面兩種使用方式:
1. pool.connect, pool.release:文件寫著 checkout, use, and return,光看描述就應該用這個沒錯。
2. pool.query:適用於不需要 pool 的連線方式,文件上也清楚寫著內部實作是直接 call client.query,所以用了這個方式是完全跟 pool 扯不上邊。
但偏偏小編從 day 1 用的就是第 2 種方式 Orz,雖然看起來應該是寫錯,但也是要修改後實測,才知道是不是真的可以解決問題。
---
如圖三,這是修改後的程式碼。想了一下子,覺得目前在 API 層使用 req.pool.query 還不錯,不想用官方的建議做法:先 create client,然後 query 之後,再使用 release。
如果照官方建議做法,API 層的程式碼會多一堆與商業邏輯無關的程式碼,也不好維護。所以在不想動到 API 層的程式碼,只能使用 monkey patch 的方式來達到這個需求。
monkey patch 可以將原方法利用類似 override 的方式,將整個方法改掉,而不改變 caller 的程式碼,這也是 JavaScript, Ruby, Python 這類動態語言的特性之一,但真的要慎用,一不小心就會把原方法改成完全不同意義的方法了。
所以原本應該要在 API 層實作 connect, query, release 一大堆程式碼,可以用 monkey patch 完美解決這一大堆程式碼。
---
在 dev 壓測後至少 capacity 可以達到原本的 4 倍以上,隔天實際上 production 之後也確實如壓測般的數據,可以承載目前的流量。
其實這篇分享的重點只有一點,文件看仔細才是最重要的事啦!如果沒把文件看仔細,然後開發經驗也不足的話,什麼 RCA、monkey patch 都幫不上忙啦!
---
後記:有夠丟臉,其實完全用不到圖三,只要把圖二的 pool creation 放到最外層就好了,因為 pool.query 的內部實作已經有做 connect, query, release 了。
感謝下面的 Mark T. W. Lin 及 Rui An Huang 的幫忙,實在是太搞笑了 Orz
* Pool 的文件:https://node-postgres.com/features/pooling
* 官方建議寫法:https://node-postgres.com/guides/project-structure
* pool.query 的內部實作:https://github.com/brianc/node-postgres/blob/master/packages/pg-pool/index.js#L332
#expressjs #nodejs #javascript #postgresql
同時也有76部Youtube影片,追蹤數超過27萬的網紅小廢物語謙,也在其Youtube影片中提到,你們票怎麼投呢ᵕ̈💖 這樣的佩諭你們喜歡嗎哈哈哈 小姐姐風的佩諭我太不習慣了 有把軟體下載起來嗎( ◜ᴗ◝)👍🏻 可以追蹤IG ►https://reurl.cc/3D6nq0...
搞笑修圖app 在 一頁華爾滋 Let Me Sing You A Waltz Facebook 的精選貼文
經過了昨天出版業、電商與獨立書店 1111 之亂後,還是要來認真推書,昨日不參戰除了為了冠廷的生日以外,做為一個每月固定將收入貢獻在書籍和電影票上、最在意效率和方便性的大量購書者而言,好像沒資格說些什麼,畢竟時間也是多數人的成本,79 折或 66 折倒成了其次,能在短的時間最快入手,能花最少的心力一次收齊所有想買的書,才是習慣選擇在哪裡消費最關鍵的因素。
而這個月的新書,也是不少讓人一見傾心的,先來看正中間,日前介紹過設計質感與故事內容具佳的本月選書,法國作家皮耶勒梅特磅礡華麗的史詩級小說《天上再見》續集《#燃燒的玫瑰》。作者企圖以三部曲的篇幅,探究廿世紀前半的法國,如何在歷經兩次世界大戰後,喪失了往昔的輝煌與美德。背景設定在一戰結束後到二戰開戰前夕,希特勒崛起歐陸,法國人民陣線潰散瓦解為止。情節依舊圍繞在巴黎銀行巨擘佩瑞庫爾家族,描寫銀行家之女周旋在貪婪腐敗的官商巨賈間。書名引用作家路易阿拉貢的詩作〈丁香與玫瑰〉,哀嘆法蘭西竟在希特勒侵門踏戶後,醉生夢死,連續兩度投降敗退。對比瑪德蓮接連遭到背叛的愛情,作者筆下的銀行家之女毫不軟弱,寫出了大仲馬都未曾寫過如此精采的反派女性復仇者,大快人心。身為巴黎銀行家佩瑞庫爾家族唯一的繼承人,瑪德蓮從未想過會有這麼一天,高高在上的她竟會一貧如洗,淪落街頭,她以家族之名為誓,下定決心要拿回失去的一切,所有加諸在她身上的痛苦,終將會化為烈焰反撲到底。
十一月同樣想列為選書的還有兩本,一是伊恩麥奎爾的海洋驚悚文學《#北海鯨夢》,不但重現極地冰寒中的殘暴腥血,以及英國十九世紀捕鯨業的沒落敗壞,全書劇情緊湊兇猛令人屏息,聲響氣味濃烈,文字語言既野蠻又詩意句句刺骨。敘述十九世紀中葉,鯨魚因濫殺銳減,用於燃料的鯨脂、作為馬甲澎裙撐架的鯨鬚,被煤氣和石油大量取代,導致英國捕鯨業日漸衰敗。船長伯朗利卻執迷不悟,堅信傳統捕鯨法,認定向北航行必能找到鯨魚聚集地,夢想滿載而歸大賺一筆,因而籌組三桅帆船「志願者」號,領各自懷著不同目的四十多人出海。就在「志願者」號駛入北極海域,進行獵殺、剝皮、取脂,大豐收時,發生了一起駭人姦殺案。其中一名船員醫官森姆納檢驗屍體追查真相,嫌犯謊言祭出,大小陰謀暗潮洶湧,與血脂、海水和冰的腥臭交雜瀰漫空氣之中,整艘船猶如被監禁在一場災難裡,有誰能活過這個寒冬,他們又將何去何從?
二是期待已久的麥田「幡」書系之九,也是十九世紀末日本最暢銷國民小說:尾崎紅葉《#金色夜叉》。問世以來 120 年,25 度改編電影、8 度改編電視劇,小說情節高潮迭起,描繪日本社會十九世紀末、二十世紀初功利主義掛帥、嫌貧愛富社會的眾生相,以江戶文學為本,借鑑西方小說技法,寫實反映金權主義社會,不但為一本融合文學與娛樂的雅俗共賞之作,也管窺當時日本女性所受的種種社會規範其困境,更是當代必讀的性別反思文本。故事敘述貫一與阿宮是自小互許終身的青梅竹馬,愛情終究敵不過鑽石的誘惑,富商唯繼對美麗的阿宮展開熱烈追求,隨著阿宮的動搖,貫一的世界也一點一點崩塌,於月光朦朧的熱海沙灘上,貫一對阿宮悲憤告白後,消失在黑暗之中。兩人再次重逢時,一個過著錦衣玉食的富裕生活,卻從未感到快樂,另一個對人生絕望,做起過去唾棄的高利貸生意,陷入追逐金錢的深淵。
再者,相當感興趣的小說還有,2018 年獲獎無數的 Sigrid Nunez《#摯友》,寫一名教導寫作的文學老師毫無預警獲知:好友過世了,他是長年陪伴她的摯友與導師,即便對方數十年歷經紛擾複雜的婚姻及親密關係,兩人親近且深刻的友誼仍持續不斷。因此追思會後對方三號妻子的來電請託 ── 照顧摯友遺留下的大丹狗阿波羅,目測體重超過 80 公斤。在哀悼與自我修復的艱難處境中,她的悲傷因阿波羅而變得更加濃稠,她發現阿波羅不能明白主人突如其來的離去,並因之深深受創,嘗試以牠特有的緘默,木然承受這些變化。想像與理解這頭巨犬的傷痛,讓她寧願違反禁養寵物規則,冒著被逐出租屋處的風險,也要繼續與阿波羅相伴,陷溺於失落傷痛的他們,竟然漸漸成為彼此的救贖。另一本 Maggie Gee 的《#在曼哈頓遇見吳爾芙》帶著些許奇幻色彩,現代作家安潔拉蘭姆只是想調閱維吉妮亞.吳爾芙的手稿,卻不經意將維吉妮亞從陰間喚回,當渾身泥污的女作家赫然出現在紐約公共圖書館的書架間,立刻遭到驅逐,安潔拉趕上去營救。安潔拉陪著維吉妮亞在酒店買醉、到美術館尋訪舊友的畫作、哄騙珍本書交易商買下稀有的簽名初版書。維吉妮亞發現大型連鎖書店歇業,印刷世界被螢幕取代,頗受震撼,但走訪雅致的獨立書店後,她的失落感得到補償。她跟安潔拉飛往伊斯坦堡,重溫年輕時的舊夢、吸引新戀人,最後在一場國際研討會成為注目焦點,研討會的主題正是:維吉妮亞吳爾芙。
因應今年威尼斯金獅獎得主《游牧人生》即將在金馬放映,唯一一本非近期新書的《#游牧人生:是四海為家,還是無家可歸?全球金融海嘯後的新生活形態,「以車為家」的銀髮打工客,美國地下經濟最年長的新免洗勞工》也在這批書單中,敘述的是一個發人省思的故事,跟美國經濟體的腹黑面有關,它暗示不安定的未來可能正在前方等候多數的人,但同時也歌頌這群大膽放棄世俗的根,不曾放棄希望的美國人罕見的適應力和創造力。此書記錄一群原本應從勞動市場上退役,卻不堪金融海嘯衝擊的中老年美國人,選擇減掉最大筆的支出:房租與房貸,住進車裡,形成人數正不斷增加的「露營車打工族」。作者開著她的二手休旅車「海倫」,一路追隨受訪者,包括一生努力工作、獨自拉拔孩子長大的單親媽媽:琳達梅依,由此輻射出一個橫跨全美的游牧社群 ── 他們原本是教授、軟體工程師、大學行政人員、退役軍官,從沒想過自己有朝一日會身陷一個又一個低薪、高工時與高風險,卻標榜自己是露營兼賺錢、勞動顧筋骨的季節性工作中。
也謝謝突破出版社從香港寄來的《#幻愛》電影小說,今年無論故事、鏡頭與呈現方式都非常喜歡的華語片值得更深入理解。還有兩本一套,日前舉辦過贈書活動的《#溫德斯談電影:情感創作 & 影像邏輯》與《溫德斯談電影:觀看的行為》,為台灣首度譯自德文的溫德斯電影寫作全集,依時間集結,分成三部曲《情感創作》、《影像邏輯》及《觀看的行為》,從影評人到導演,一窺他如何思考影像,見證創作歷程,並集結其歷年來刊登於報章雜誌上的電影書寫、演講稿和訪談紀錄。
同樣描繪女性的故事,丹麥作家 Leonora Christina Skov 暢銷自傳小說《#有一種母愛不存在》,身為無法成為母親想要的那個女兒,自幼得不到母愛,時常將母親惹哭,母女關係漸漸成為死結,搬至哥本哈根後依然無法為母女關係增添美感,反而在母親被診斷出乳腺癌時,兩人化膿多時的關係潰爛見骨 ── 因為母親直指她的出櫃,就是致使自己罹癌的主要原因。直到母親過世後,她才驚覺自己仍渴望母愛與認同,遂以文字梳理兩人錯綜複雜的關係,探究母女之間的相愛相殺;在寫盡這一切壓迫、嫉妒、束縛和否定之後,她終於確定,有一種母愛並不存在。川村元氣的新書《#百花》封面很美,敘述一日暮色將至,遍尋不著母親的葛西泉不禁著急起來,好不容易終於在微弱路燈下發現了百合子,泉不知道母親究竟發生什麼事,只察覺她的情況越來越嚴重,買東西忘了付錢、一直重複購買相同的物品、食物放到發霉、流理台堆滿了垃圾,直到百合子被確診為「阿茲海默症」。某個深夜,泉突然接到百合子的電話,聽著另一頭興奮又激動的聲音,泉覺得母親似乎要去一個遙遠的地方,永遠不會再回來了。就像他試圖塵封,一直當作不曾存在的「那一年」一樣,生命如花,將在不知不覺中枯萎褪色,然而愛,卻在漫長的記憶裡,恆常綻放。
以及相當喜歡此本前幾天分享過的圖文書《#房東阿嬤與我》,是 39 歲單身搞笑藝人矢部太郎與 87 歲優雅房東阿嬤的生活日常,兩段人生因此產生了跨世代的交集,九年前矢部太郎遭逢低潮時期,他租下東京一處老宅的二樓,因此展開了一段不可思議的際遇,說不可思議其實也不過兩個獨居之人閒暇時一起用膳、喝喝培茶、逛逛伊勢丹百貨,彼此看顧,彼此問候,分享兩個世代、兩種年齡層望向過去與未來的迥異視野,卻在無意間改變兩人的人生,也於繪製成簡單生動的漫畫後感動了無數日本讀者。還有伊坂幸太郎的《#鯨頭鸛之王》,一部一部讀了心情舒暢的作品,寫實又單純的娛樂作品,三個八竿子打不著的人因一場夢而產生了特殊的羈絆,夢中有一隻鳥,總是一臉不爽地發號施令,每當出任務打敗怪獸,醒來後現實的難關也會迎刃而解,然而此次現實世界有人遭到襲擊,新型流感大肆蔓延,身邊的家人朋友沒能倖免,面對這場全國性的災難,三人能否再次平安度過?
不能忽視的還有重量級傳記《#卡提耶布列松:二十世紀的眼睛》,他和他的徠卡相機,影響了二十世紀看見世界的方式。對人類而言,二十世紀是個動盪的年代,與二十世紀各種人類悲喜劇一同發生的,是一個影像閱讀的時代誕生了。由於攝影技術進步,底片相機變得輕巧而方便攜帶,於是從二十世紀初期起,攝影師開始帶著相機遊走四方,走入歷史現場,將重大時刻的照片印刷在報紙和雜誌上廣為傳播。這是歷史上第一次,人們透過現場影像認識世界,被影像牽動喜怒哀樂。而為這影像時代奠基的關鍵人物之一,即是被譽為「現代新聞攝影之父」的卡提耶布列松。本書呈現布列松精彩傳奇的人生。他與歐洲現代藝術圈、知識圈互動非常密切,我們透過他的攝影作品與回憶,看到人。他也經常走出小圈子,前往世界各地,目睹並親歷二十世紀重大的歷史時刻,。讀完本書,會看到這是一個獨特的創造性靈魂,在變動不羈的世界之中,不斷鍛鍊著專注力與人文之眼,他所留下的影像,總是呈現著人性,永遠影響了我們看見世界的方式。
最後是兩本華文作品,賀景濱《#我們幹過的蠢事》講述在將臨的世界,你可以見到任何人,但他可能已經死了。上酒吧看足球賽,球員們帶頭盔用演算法踢球。餐廳吃德國豬腳,豬會向你介紹自己的一生。不需要愛情,因為有完美情人App。不需要寫作,因為有故事大綱演算法。去到任何異地,你的喜好都在資訊網的掌控下。你甚至不知道你遇到的,是人還是人造人,或外星人,在那個世界,沒有大型戰爭,只有日常生活不斷冒出的陰謀,黑社會也是數位黑幫;進入數位資訊時代,我們該如何重新定義「人」的主體性?人工智慧崛起後,我們又要怎麼看待心智?本書展現小說家對人類與宇宙的終極關懷,是臺灣在政治、科幻與後人類小說的頂尖之作。
前時尚雜誌主編、馬華作家范俊奇第一本個人作品《#鏤空與浮雕》,在風流人物「鏤空」的流離歲月裡,「浮雕」出人世的眉眼與鋼索,書寫三十位藝文界名人,包括張國榮、張曼玉、梁朝偉、梅艷芳、張震、金城武、李安、王家衛、梵谷、芙烈達卡蘿、亞歷山大麥昆、山本耀司、安迪沃荷等人,將他們斑斕過的人生、經歷過的大悲大喜與小情小愛,重新剪開、放大、修補與圓滿,范俊奇透過文字借一塊他人人生的風景,和另一個自己相遇。
搞笑修圖app 在 啱Channel Facebook 的最佳解答
抗疫期間,你儲咗幾多能量?積聚咗幾多多餘嘅脂肪?
唔得喇!我哋一定要郁吓喇喂!
呢九個星期響應全球Nike 企劃,我哋將會接受唔同嘅運動挑戰,而第一集為咗叫大家克服現實嘅限制同突破自己,肥仔同ah gi仲分別要唔用手着衫同食飯,痴線啦,有咩可能做到喎?吓....ah gi竟然用腳食飯😱
一期一動主持: 混血肥仔 Ah Gi
Nike Master Trainer: UtahLeeFitness
做運動啦喂!!! Download link
https://bit.ly/2C0IHMr
【一期一動】Week 1 活動參加方法:
1. Like and Tag 3位朋友分享此影片
2. 於ArmChannel TV Facebook留言位置上傳本集Utah分享NTC app內的Workout (初始訓練指標/ Start Up Benchmark 或 7分鐘久坐減壓全身訓練/ 7-minute Total-Body Desk Detox *注:其中一組即可) 之「已完成運動截圖」
3. 分享一個在家抗疫期間做運動的搞笑經歷
4. 肥仔同ahgi會揀出2名得獎者,將由專人以電郵或Facebook inbox通知認領Nike提供的驚喜小禮物
5. 截止日期:2020年8月11日11:59pm
最後,為咗鼓勵大家keep住做運動,連續3個禮拜都有完成挑戰嘅人,有機會得到Nike最新款運動鞋!詳情密切留意!
*NIKE 及Armchannel TV有權隨時修改或終止此遊戲活動及其條款及細則而不作另行通知。並保留對活動任何爭議之最終決定權。
搞笑修圖app 在 小廢物語謙 Youtube 的最佳貼文
你們票怎麼投呢ᵕ̈💖
這樣的佩諭你們喜歡嗎哈哈哈
小姐姐風的佩諭我太不習慣了
有把軟體下載起來嗎( ◜ᴗ◝)👍🏻
可以追蹤IG ►https://reurl.cc/3D6nq0
搞笑修圖app 在 Arm Channel TV Youtube 的精選貼文
抗疫期間,你儲咗幾多能量?積聚咗幾多多餘嘅脂肪?
唔得喇!我哋一定要郁吓喇喂!
呢九個星期響應全球Nike 企劃,我哋將會接受唔同嘅運動挑戰,而第一集為咗叫大家克服現實嘅限制同突破自己,肥仔同ah gi仲分別要唔用手着衫同食飯,痴線啦,有咩可能做到喎?吓....ah gi竟然用腳食飯?
一期一動主持: 混血肥仔 ah gi
Nike Master Trainer: Utah (https://www.youtube.com/utahlee)
做運動啦喂!!! Download link
https://bit.ly/39WnNdO
【一期一動】Week 1 活動參加方法:
1. Like and Tag 3位朋友分享此影片
2. 於ArmChannel TV Facebook留言位置上傳本集Utah分享NTC app內的Workout (初始訓練指標/ Start Up Benchmark 或 7分鐘久坐減壓全身訓練/ 7-minute Total-Body Desk Detox *注:其中一組即可) 之「已完成運動截圖」
3. 分享一個在家抗疫期間做運動的搞笑經歷
4. 肥仔同ahgi會揀出2名得獎者,將由專人以電郵或Facebook inbox通知認領Nike提供的驚喜小禮物
5. 截止日期:2020年8月11日11:59pm
最後,為咗鼓勵大家keep住做運動,連續3個禮拜都有完成挑戰嘅人,有機會得到Nike最新款運動鞋!詳情密切留意!
*NIKE 及Armchannel TV有權隨時修改或終止此遊戲活動及其條款及細則而不作另行通知。並保留對活動任何爭議之最終決定權。
搞笑修圖app 在 許伯&簡芝—倉鼠人 Youtube 的最讚貼文
有失眠情況的朋友,可以下載來試試看哦~~
https://link.noxinfluencer.com/siK_Jf
想體驗好眠就找好眠APP
廠商加碼送十組VIP,留言"已下載",VIP抽起來!!!