Development Machine


整理一下我個人開發環境的資訊。

Programming Language

以 Java 為主,主要是透過 SDK 這個 Java Version Manager 為主,底下是我安裝的部分:

  1. 各種 Provider 和版本的 JDK,像是 Amazon 的 Corretto, OpenJDK, Oracle 的 GraalVM CE, Zulu … 等
  2. 安裝 maven, gradle 等
  3. Framework: Spring Boot,
  4. Performance: jmeter, VisualVM

SDK 本身支援很多 Java 社群常見的開發工具,我在 Ubuntu or macOS 都會使用。

OS: macOS, Linux - Ubuntu

我習慣開發時應用程式的 runtime 跟 Production 一致,所以開發時會盡可能讓應用程式一開始就跑在 Linux 為主的環境,避免未來一些因為 OS 造成的問題。

但是人機界面,macOS 其實還是比較順手,當然現在 Ubuntu 的 GNOME 其實也很不錯。所以環境我大概都會這樣搭配:

  1. IDE: 放在 macOS or Windows
  2. Runtime: 放在 remote 的 linux or container
    • 透過 VM 的方式開一台 Linux (Ubuntu)
    • 用 docker-compose 開啟相關的依賴元件,像是 MySQL

IDE

主力 IDE 的選擇以通用性高的為原則,目前主要是用 VSCode,也搭配一些像是 Copilot 之類。

其他新的 Cursor / Windsurf 目前處於嚐鮮狀態。

VSCode 使用方式有兩種,完全在 macOS 上,和透過 Remote Explorer + UTM 開一台 Ubuntu.

我現在比較少用 Eclipse, 或者 IntelliJ, 主要是任務大多是 PoC 目的,所以 IDE 盡可能簡單。

完全在 macOS 開發 (目前)

IDE 和 docker-compose 都在本機跑,docker 則是使用 orbstack.

  • 優點:開發效率很好,效能也最佳
  • 缺點:有些問題在 linux 會發生的,會晚一點發現,像是 docker-compose 的權限問題

Remote Development: IDE 在 macOS, runtime 都在 VM

VS Code 跑在 macOS,然後透過 Remote Explorer 的 SSH Tunnel 連到 UTM 裡的 Ubuntu 開發。

docker-compose 的 stack 和 application 都跑在 ubuntu 上。

System Stack: docker-compose

最近在開發的環境,大量使用 docker-compose 建立相關資源,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
❯ docker-compose up -d
[+] Running 12/12
✔ Container asimov-cache-adminer_phpRedisAdmin-1 Started 0.5s
✔ Container asimov-rdb_mariadb-1 Healthy 30.7s
✔ Container asimov-cache_redis-1 Started 0.3s
✔ Container asimov-queue_rabbitmq-1 Started 0.5s
✔ Container asimov-dashboard_grafana-1 Started 0.7s
✔ Container asimov-search_elasticsearch-1 Started 0.5s
✔ Container asimov-metric_prometheus-1 Started 0.3s
✔ Container asimov-node-exporter-1 Started 0.6s
✔ Container asimov-rdb-adminer_phpmyadmin-1 Started 31.0s
✔ Container asimov-api-gateway_apache-apisix-1 Started 0.5s
✔ Container asimov-dashboard_kibana-1 Started 0.9s
✔ Container asimov-logshipper_webapi-filebeat-1 Started

總共 12 個 container,不包含應用程式本身。其中包含了:

  • data
    • Relational Database: MySQL, MariaDB
    • Message Queue: RabbitMQ
    • Cache: Redis
  • Logging
    • Elasticsearch
    • Filebeat
  • Dashboard
    • Kibana
    • Grafana
  • Metric
    • Prometheus
    • Node Exporter
  • Networking
    • APISix (API Gateway)

這些東西都以最小配置為原則,主要是開發過程 functional test 使用,跑起來約要消費掉 10GiB 的記憶體。

加上 IDE 佔用的資源 (3GiB) ,基礎消費約 13GiB,加上一倍的 buffer,建議至少要有 32GiB 的記憶體。這不包含開發時會同時開 Browser 或者 Ollama (LLM) 找資源問問題所需要的記憶體。

資源分配

比較好的開發資源分配,我會想把 system stack 部分都跑在其他獨立的機器,然後 macOS 只跑 IDE,這樣整體開發的平橫性會好很多。

不然就要弄一台規格很好的 MacBook Pro,然後所有東西都跑在上面。

理想的開發資源

資源牽涉到成本問題,所以還是要先說一下主要用途:

  1. 開發應用程式
  2. 模擬測試、效能測試

單純開發應用程式,其實需要的資源不多。但要跑一些模擬測試,或者效能測試,就會需要比較多的資源,像是:

  1. 分散式資料庫的一致性驗證
  2. K8s Cluster
  3. 模擬大量使用者 Client 需要的資源.

所以摘要理想的資源需要:

  1. 開發功能:最少 32GiB,最好 64GiB,或者分開兩台機器,兩台都 64 GiB
  2. 測試:64G 三台以上,分別擔任開發 / 測試 Client / System Stack 部署三個部分

延伸閱讀



Comments

  • 全站索引
  • 學習法則
  • 思考本質
  • 一些領悟
  • 分類哲學
  • ▲ TOP ▲