A field guide to deploying OBSERVE on a fully domestic stack—Kunpeng ARM servers, Kylin V10, and Dameng database—covering dependency replacement, Dameng adaptation, performance tuning, and a checklist of pitfalls.
The stack is a Kunpeng 920 (64-core ARM64), Kylin V10 SP3, Dameng DM8, with TongWeb replacing the middleware. Moving from x86 to ARM means every image and binary has to be re-validated—you can't reuse the old x86 deployment packages. Before starting, confirm three things: every dependency has an aarch64 build, the database driver is compatible, and the monitoring agent supports ARM.
Handle images early: many third-party components only publish x86 images, so you'll have to rebuild them on ARM yourself. Build multi-arch images with buildx and push them to an internal Harbor, so production never has to pull from a slow public registry at deploy time.
OBSERVE's metadata store defaults to MySQL. Moving to Dameng means swapping the JDBC driver and adjusting SQL dialect. Dameng's MySQL compatibility mode (COMPATIBLE_MODE=4) works well—enable it and turn off case sensitivity:
CREATE DATABASE observe CASE_SENSITIVE=0 COMPATIBLE_MODE=4;
Migration happens in four steps: use Dameng's DTS tool to migrate the MySQL schema and data, verify the column-type mappings one by one, swap the connection string and driver in the app, then run a full regression. Focus on three things:
Load testing on ARM surfaced two bottlenecks. First, Kylin's default swap is too aggressive—lower swappiness to 10. Second, Dameng's read-ahead and page size need adjustment: arm64 defaults to 4K pages, and enabling 64K hugepages improved write throughput by about 30%.
echo "vm.swappiness=10" >> /etc/sysctl.conf && sysctl -p
Configure hugepages together with the kernel boot parameter and Dameng's HUGE_PAGE setting, then reboot and verify—don't change only half of it. Dameng also benefits from enabling asynchronous IO (AIO) and enlarging the redo log buffer, both of which help a lot in a write-heavy observability workload.
Before sign-off, run a few checks beyond functional tests. Confirm Dameng metadata writes survive a restart, verify log retention actually lands on the object-storage tier after the configured window, and check that traces stay intact across a service restart. Re-run the load test after enabling hugepages and AIO, because those tuning changes can interact with the JVM and the container runtime in non-obvious ways.
If you swapped the middleware for TongWeb, keep its thread-pool and timeout settings in sync with the old middleware—otherwise the collector's HTTP receivers can hit connection resets under load. Document the final architecture, including OS, JDK, DB, and middleware versions, so the next environment rebuild doesn't start from scratch.
Finally, if your internal Harbor or NTP server uses a certificate issued by a domestic CA, import the CA bundle into the JVM truststore and the container runtimes before first boot. A missing root CA is a classic first-boot failure in domestic environments and can eat hours of debugging that have nothing to do with your application.
Plan the rollout in phases: stand up a single-node pilot on the domestic stack first, run it for a week with real traffic, then scale out. The first ARM deployment always surfaces gaps you never saw on x86—a missing aarch64 library, a timezone file, a container runtime flag—and it's far cheaper to find them on one node than across a cluster.