← Back to blog
Xinchuang 4 min read 炬鲸团队

A Domestic-Stack Deployment: Phytium FT-2000 + UOS + KingbaseES

Deploying OBSERVE on Phytium FT-2000/64 + UOS V20 + KingbaseES V8: ARM binaries, Kingbase dialect differences, parameter tuning, and the gotchas that actually bit us.

A different combination, a different set of problems

We've written before about deploying on Kunpeng + Kylin + Dameng. This time it's the other common combination: a Phytium FT-2000/64 processor, UnionTech UOS V20, and KingbaseES V8. Swap the CPU, OS, and database and the pitfalls swap along with them. Domestic-stack adaptation has no “tune it once and it works everywhere” — every combination earns its own pass.

Environment

  • CPU: Phytium FT-2000/64 (aarch64, 64 cores)
  • OS: UnionTech UOS Server V20 (aarch64)
  • Database: KingbaseES V8 R6
  • Deployment: bare metal + systemd (no Kubernetes on site)

Deployment steps

Phytium is ARM, so first confirm the package is an aarch64 build. OBSERVE ships an aarch64 offline bundle; extract it and run the installer, pointing at Kingbase:

tar -xzf jjhub-observe-2.4-aarch64.tar.gz
cd jjhub-observe-2.4-aarch64
./install.sh --db kingbase --db-host 10.0.0.21 --db-port 54321

Kingbase listens on 54321 by default (PostgreSQL-compatible protocol) — not Dameng's 5236, and definitely not MySQL's 3306. The installer creates the schema and tables automatically; use a dedicated business account rather than the default SYSTEM account.

Kingbase dialect adaptation

Kingbase supports both PostgreSQL and Oracle compatibility modes; this deployment uses PG mode. OBSERVE's metadata layer emits SQL in the PG dialect, but a few differences still need handling:

  • Paging uses LIMIT ... OFFSET, unlike MySQL's LIMIT a,b, so the ORM layer has to follow the PG dialect.
  • The default character set is GBK; specify UTF8 explicitly at database creation or Chinese log fields will come out garbled.
  • Use TEXT for large fields (log metadata) rather than VARCHAR, to avoid length limits.

Parameter tuning

In Kingbase's kingbase.conf, we recommend:

shared_buffers = 4GB        # roughly 25% of physical RAM
max_connections = 300       # enough headroom for the metadata pool
effective_cache_size = 12GB

Ingestion is write-heavy, so relax the WAL-related settings and the checkpoint interval to reduce write stalls from frequent flushes. In our testing, the default config pushed write latency to 300ms at 10k lines/sec whenever a checkpoint fired; after raising checkpoint_timeout, P99 settled under 60ms. This is the kind of thing that looks fine in a 10-minute smoke test and only shows up under a sustained soak.

Running as a systemd service

The installer drops a systemd unit that starts OBSERVE on boot and restarts it on failure. Two settings matter in an offline environment: set RestartSec=5 so a crash doesn't loop the box, and run the service as a dedicated non-root user — the UOS default account often holds more privilege than a daemon should. Also pin the service to the ARM build's bundled JVM; using the system JDK has caused version skew on several sites we've visited.

Verification numbers

On this FT-2000/64 with UOS, a single ingester sustained about 18k log lines/sec, with query P99 around 210ms under 20 concurrent queries — within 15% of a comparable x86 node, the gap coming from single-core performance. A 72-hour soak showed no memory growth and GC pause P99 around 28ms. The one real issue was the Kingbase checkpoint stall described above, fixed by tuning rather than by throwing hardware at it.

One more thing worth stating outright: budget for the regression pass. On paper, ARM plus PG-mode Kingbase should behave like any x86 plus PostgreSQL, but the differences surface in collation, in timestamp precision across the UOS/PG boundary, and in how the ARM build's numerics round. Those don't show up in a smoke test; they show up in the third week of production. Run the full regression on the real stack and don't cut that corner.

Gotchas and advice

  • UOS ships a graphical desktop by default; install the headless server variant to save memory and a pile of dependencies you don't want on a production box.
  • Kingbase V8 before R3 had a bug where partitioned-table indexes silently went stale; if queries are mysteriously slow, check the version first and upgrade to R6.
  • Most of these sites are offline; the deployment script must be fully offline and must not quietly pull dependencies from the internet.
  • Run the full regression on the actual Phytium + UOS + Kingbase stack before going live. Testing on x86 doesn't count — the behavioral differences hide in edge cases you'll only hit on the real hardware.