Part 1 阻塞式程式碼是現代軟體工程的禍根,它需要比較多的CPU cycles以及memory使用資源,提高了執行程式的成本
I. Blocking/Asynchronous/Asynchronous-Non-Blocking 這個章節(I)會學到:
了解 non-blocking calls 在做什麼 了解 event based system 的重要性以及他們如何協助調用 non-blocking calls 圖表的呈現面向:
程式語言: Java 會使用到 Java 執行緒 非同步的方法為綠底,同步的方法是紅底 藍底是不會產生阻塞的Java方法 Blocking Call save方法呼叫write方法 write方法是一個blocking call: 寫入磁碟 直到 write to disk 完成之後,這個 thread 才會停止 blocking 狀態 這個thread在blocking call return之後重新開始 接著這個thread呼叫notify方法 Asynchronous Call 非同步呼叫 save方法呼叫write方法,這個write方法包裝了一個asynchronous call 此 write包裝方法使用Executor(線程池或其他併發機制)產出一個執行緒來寫入磁碟 這個新產生的執行緒進入阻塞狀態,直到write to disk工作完成 執行save方法的主要執行緒不受到組塞,可以執行其他程序 新產生的執行緒在完成 blocking call 之後回傳,並呼叫notify方法 Asynchronous Non Blocking Call save方法呼叫write方法 (write方法使用 Java NIO) Non Blocking Call 不會阻塞主要執行緒 non-blocking write 方法進入阻塞狀態,直到write to disk的工作完成 執行save方法的主要執行緒並不會受到阻塞,可以執行其他程序 在non-blocking call完成之後,這個non-blocking方法呼叫notify方法 結論 Blocking Call
使用 CI/CD 建構應用程式 開始 CI/CD 是軟體開發其中一個continuous method,你可以在這方法中持續的建構、測試、部署、監測迭代的程式碼異動。
這種方式有助於降低在有誤的前一個版本中開發新程式,GitLab CI/CD在開發早期階段就能抓錯,確保部署到正式環境的程式碼符合所建立的程式碼標準,而這個程序是更大的workflow之中的一個環節:
Plan Create Verify Secure Release Monitor Manage your organization Learn Git Use CI/CD to build your app Secure your app Deploy and release your app Monitor app performance Organize work with projects Manage your code Manage infrastructure Monitor GitLab Runner usage Plan and track work Analyze GitLab usage 1. 首先建立.gitlab-ci.yml 在project根目錄建立 .gitlab-ci.yml,定義在CI/CD pipeline中所要執行的 stages, jobs, script。
另外也會定義variables,不同jobs之間的依賴關係,並且指定每個job什麼時候會被執行,應該如何被執行。
沒有硬性規定要怎麼命名,但.gitlab-ci.yml是這個 CI/CD configuration file 最常見的名字。
Engine-X (NginX) — It’s like a server that stand between the internet and your backend infrastructure.
When you visit a web app, the first place your request will go is to a web server. It’s job is to look at the requested resource and determine where to find it on the server, then send it back as the response.
In fact, if you open up the network tab in chrome dev tools right now, you can look at the server header on any response, and there’s a good chance it’ll be nginx.
RabbitMQ vs Apache Kafka 資料結構差異 The Queue(RabbitMQ) vs. The Log (Apache Kafka)
Queue
FIFO data structure Optimized for efficient write and read operations from either end of the sequence Stored data is transient in nature Not shared between applications Log
Also known as write-ahead logs, transaction logs and commit logs
Append-only. Ordered by time
Unique log sequence numbers (可以用來識別這個 log 在 log data 的 position)
Stored data is persistent in nature
What is K8s 官方定義 Open source container orchestration tool 開源的容器調度工具
Developed by Google
Helps you manage containerized applications in different deployment environments 在不同部署環境下,協助管理容器化應用程式
e.g. physical, virtual, cloud, hybrid deployment
Kubernetes解決什麼問題? 容器調度工具的需求 從單體式架構轉向微服務的趨勢 容器使用的增加 管理數百個容器的一個合適的方式 調度工具提供哪些功能? 高可用 (HA), or no downtime 可擴展性 (Scalability), or high performance 災難復原 - backup and restore Main K8s Components Node: a simple server, a physical or virtual machine
Pod:
Basic component or the smallest unit of kubernetes Abstraction over container Pod is usually meant to run one application container inside of it (usually 1 application per Pod) You can run multiple containers inside one pod, but it’s usually if you have one main application container and a helper container or some side service that has to run inside of that pod.
昨天與一位做自有產品的執行長官面談被問到如何確認SQL的效能,當下沒能立即回答上。
但今天在練習 LeetCode SQL 50 的時候,看到有神人對一道 570. Managers with at Least 5 Direct Reports 題目給出了五種 solutions,於是回想起之前聽過但不常用的 explain 語法,這樣慘痛的教訓肯定是要花時間瞭解一下的吧。
問題 題目只有一張 Table : Employee:
每一列包含了員工id、員工名、員工所屬部門以及他們的所屬主管id,如果managerId 為 null,就表示這員工沒有直屬主管。
沒有員工會自己當自己的主管,即 id 與 managerId 不能為相同的值。
1 2 3 4 5 6 create table employee ( id int not null primary key auto_increment, name varchar(20), department varchar(2), managerId int ) auto_increment=101; Table 欄位內容:
Employee table: +-----+-------+------------+-----------+ | id | name | department | managerId | +-----+-------+------------+-----------+ | 101 | John | A | null | | 102 | Dan | A | 101 | | 103 | James | A | 101 | | 104 | Amy | A | 101 | | 105 | Anne | A | 101 | | 106 | Ron | B | 101 | +-----+-------+------------+-----------+ 預期結果: +------+ | name | +------+ | John | +------+ 解法: A.