搜尋

搜尋結果

Spring Boot Web App 更新期間的維護模式:從唯讀到全鎖的解決方案
科技新知
MacauYeah・2025-08-25

在營運 Web App 的時候,雖然我們有 Docker K8s 可以滾動更新,但難保用戶在更新的過程中,有一半訪問去到了舊版,另一半去了新版。如果可以,Web App 本身自帶維護模式,可以自我判斷什麼時候應該忽略新的訪問,當然最好。但要做到這一點,前期需要很多規劃。狠心一點,可以直接關掉對外的服務,讓用戶無法訪問。 但在另一些情況下,例如升級搬遷的情況,下線時間比較長,完全關掉服務並不是一個很好的方向,我們至少還可以提供唯讀的選擇。而且這個可以從資料庫出發,讓 Web App 少處理一點邏輯。 如果 Web App 背後的資料庫是 MSSQL 或 MySQL,唯讀這件事應該是簡單的,只要你把 service account 的權限改變就好。但如果你用Oracle,就要想想辦法。 筆者想到的方法,暫時有兩個。第一個就需要大家寫寫 Script ,一口氣把所有 Table 給鎖起來。例如 第二個,就是生成一個新的唯讀 User schema,給他所有Select的權限。然後更新 Web App 使用那個唯讀 User schema存取資料。 兩個方法有什麼差異呢? 前者就全部鎖起來,沒有任何一個資料庫用戶可以改寫資料。如果你的業務沒有差異性,全部一起封起來就完事。但如果你只想 Web App 轉成唯讀,但其他背景程式還可以執行更新。那你就只能用後者了。但後著也不是百分百的完全無痛,至少你 Web App 要支援登入與操作的 Schema分離。 例如用Spring boot JPA的話,可以在 application.properties 可以讓登入及操作的Schema不一樣。 spring.datasource.username=READ_ONLY_USER spring.jpa.properties.hibernate.default_schema=ORIGINAL_SCHEMA 又或者在 java 層面指定。 @Tableschema = quot;ORIGINAL_SCHEMAquot; 這看上去,是很有彈性的。但其實也是有些局限。如果你本來的JPA有寫特制的 JPQL 或 Raw Query,又或者你在Java層面加了 @Subselect,由於這些都是程式原作者所 hard code 的,JPA沒法幫你改寫。改來改去,可能還是前述寫Script的方法,一口氣把所有 Table 給鎖起來實際一些。 Reference 更多筆者的程式開發分享,見請 github

龍年,龍爺生氣了,過100年,龍年是怎麽樣?
宗教玄學
熊神進・2024-04-11

近日筆者收到很多內地讀者查詢,他們都是玄學愛好者,大家對于「天象」的啓示有幾分擔心,有些還說「是不是龍爺生氣了?」筆者是公衆人物,不敢怪力亂神,只是把「學說」印證,喜歡的同學聽聽也是善哉。 在玄學上2024年陽曆2月4日才是龍年第一天開始不好意思,這是跟國家公布的日子不同,我們迎來甲辰龍年,甲木是天干之首,直沖向上,地支辰龍當權,土氣旺盛。在甲木透幹,干支相沖相克情况下,民間老風水師傅也雙手合什,提醒大家晚間做烟供,行大愛布施各地衆生。 龍年也是風水的下元第九運開始,凡是交接運之年月,都是有一些异象,這是不用過于恐懼,只要我們順「道」道,是自然,不逆 而行,我們多行善,不行霸權,愛衆生,我們就可以逢凶化吉。 龍年是十二年一次循環,在過去的一百年,龍年留下很多「人爲」的不人道歷史,1940年、1952年、1964年、1976、1988年的傷痛是給子孫留下惡因。 水逆從4月1日開始,水逆加速了權勢的毒火,海上紛爭全年擴展,擦鎗走火爲「赤馬紅羊」鋪路,龍的傳人要買單。 踏入農曆三月,立春日木火較旺,在風水九運「離火」下,中國香港第一個辰年辰月辰日辰時,佐敦道華豐大厦發生一場三級火,造成5死40傷,本身今年已經較「火旺」,再加上農曆踏入三月初一,辰、巳月在奇門巽宮屬木,農曆五月離九宮屬火,筆者推斷未來3個月香港火旺,仍有多宗火灾。 龍年幷不是只有中原地域才中伏,龍年是世界性的循環天體,今年各地都有不同程度的天灾地震,我們要行大愛,晚上做烟供布施衆生,廣結善緣。烟供是衆多善事中最簡易的一種亦是年青人常做的一種,讀者們可以把筆者的善知識轉去朋友圈,一人的力量很薄弱,只有集體行善,才是大愛,只有大愛,世界更美好。 辰月才剛剛開始,有危才有機,有動才會永恒,請大家不要過分恐懼。 我們可以通過做烟供回向給六道衆生以求平等受惠,减少灾劫,這是無上大愛。

Switch / Steam Deck / Mobile 使用體驗大比拼 (三)
手機‧電玩
MacauYeah・2023-12-14

上兩期,筆者從機身重量、續航性兩方面,對於遊戲機身便攜性的影響,今期最後一期,就從穩定性方面去討論,最後再做一個綜合影響。 沒有對比也就沒有傷害 Mobile Smart Phone 筆者所講的穩定性,其實就是正常運行一個遊戲,不會出現閃退的情況,讓你可以正正常常玩完一款遊戲。但因為Mobile原本是多用途機器,你玩著玩著,可以就要跳出遊戲回覆信息,但再次回到遊戲後,能不能正常運行的不知道。 大部份iOS遊戲,因為舊iphone機能限制,基本上跳出去後,都因為不夠RAM,回來後遊戲會重置。除非你打死不切換,否則一款遊戲沒有頻繁auto save功能,根本玩不下去。Android可能會好一點,有不同機型可以選擇,多一點RAM總是安全一點。 強行地用Linux運行Windows的黑科技 Steam Deck 老實說,Windows已經不夠穩定,用Linux運行Windows Game,會比較穩定嗎?不過最幸運的是,Steam Deck有技術支援,更有社群支援,各遊戲經過Steam官方驗證,連續遊玩下閃退情況都很少。不穩定的原因,反而是Steam Deck主機本身。 在筆者遊玩的經驗中,待機後再打開,有一定機會率會整個遊戲閃退。這些問題在遊玩大作,特別是3A大作,會引來一個很不愉快的體驗。因為它們的auto save位置點一般都是以情節點來做考量,而以上班族來講,三步一待機的使用情境也很常見,那麼觸發閃退的機會率就很高。某次啟動會隨機引起閃退遊戲,真的欲哭無淚。 筆者也翻查過網上的資料,一年多前就有這個問題存在,而官方亦無法根治。筆者在寫稿的途中,還在測試坊間一些可能的補救方式,但因為時間不長,不敢說這問題是可以解決的。 穩定發揮 Switch Switch在穩定性真的無可挑剔,多次待機後都沒有太多問題。完全貼合它的市場定位在家可以隨時在電視玩,出外也可以四處走。隨時隨地停,隨時隨地再開。最多最多都是遊玩實體卡帶時,因為接觸不良而閃退。但這些不可避免的,因為實體卡始終是物理型態存在,跟著Switch四處奔波,難免會出問題。但下載數位版,存放於SD卡就不會有閃退。至少SD卡不會像實體卡會經常替換,所以出問題的機會也較少。 綜合體驗 其實討論了幾個方面,筆者都從是省心遊玩的角度出發去討論。 Mobile在裝備上會最少煩惱,想最輕鬆出問,這個是不二選擇,但考慮玩非課金類遊戲就最沒有保障。 Steam Deck優點是移動堡壘,若你玩的是高性能需求的遊戲,你只能選它。但想隨時玩就未必做得到。 Switch 在重量和穩定性上面最有優勢,考量延續性體驗,這個是首選。