Tomcat淺談
最近面試被問到會什麼server side的技術, 對於只在開發端沒管理server經驗的我實在說不出個所以然, 頂多在設定檔上加DB連線資訊,查看server編碼之類的, 一直以來對server的理解都挺抽象的, 於是花了些時間, 弄清楚一個網頁應用軟體容器,如Tomcat,到底代工了哪些事情, 我也還在懵懂摸索中, 如果有說錯什麼再請各路大神指點,感謝。 一、處理Http請求 server要能夠處理http請求,必須 開放某個port作為服務端口接收請求 分配執行序處理請求 以Java簡易實作如下: //準備執行緒池 private static ExecutorService threadPool = Executors.newCachedThreadPool(); public static void main(String[] args) throws IOException { //開啟本地端8080 port, 可用url: localhost:8080 訪問 ServerSocket serverSocket = new ServerSocket(8080); while (!serverSocket.isClosed()) { Socket request = serverSocket.accept(); //執行緒上班 threadPool.execute(() -> { try { InputStream inputStream = request.getInputStream(); System.out.println("收到請求:"); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8")); String msg = null; while((msg = reader.readLine()) != null) { if(msg.length()==0) { break; } //印出http請求內容 System.out.println(msg); } //TODO 組織回應內容 } catch (IOException e) { e.printStackTrace(); } }); } } 二、servlet容器 Tomcat能稱為「容器」,其實就是實作了官方規定的功能(Web Profile), 其中包含servlet的生命週期,簡化開發人員的工作。 servlet簡單講就是一個處理請求的程式, 透過設定檔定義url與servlet的配對關係。 ...
k8s淺談
這篇想記錄一些k8s的功能, 和術語的簡易說明, 我認為有chatGPT的幫助, 現在學東西最重要的是學會問問題, 只要知道k8s如何運作, 實務上該如何設定都是能問到的, 所以不會過多著墨。 k8s是什麼 全名Kubernetes,希臘語中「掌舵者」的意思, 象徵管理船上的貨櫃們。 貨櫃指k8s中最小的管理單位(或說部屬單位)Pod。 部署描述檔 Dockerfile 檔名固定,作為生成image的文件, 定義k8s部署內容, 比如各image要產生幾個pod副本、定義path與服務的關係。 Pod 一個pod內可以部署多個container, 一個container可以想成是一個應用、 基於image產生的容器。 Service 當pod有多個時, service會做負載平衡, 將請求分散給pod。 可以通過Node Port供外部直接送請求過來, 較常見是配合Ingress使用。 Ingress 定義URL解析規則, 將請求導向不同的service。 可以通過Ingress Controller實現。 Node 節點 一台實體或虛擬的運算資源(電腦),就可以作為一個Node, 依照工作分成Master Node與Worker Node 兩種, Master Node根據部屬描述檔內容, 在Worker Node上產生Pod, 並且管理Pod的生命週期。 HPA 水平擴展 支援動態增減Pod數量, 可以根據CPU使用率、記憶體使用率、自訂指標等, 自動調整Pod數量。 Rolling Update 不停機更新 可以滾動更新Pod, 或是退版, 不會影響到服務的可用性。