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

Xinchuang in Production: Running the Observability Platform on Kylin V10 and DM Database

Deploying an observability platform on a domestic stack is hard because of database adapters and CPU architecture differences. This post documents a real deployment on Kylin V10 + DM database + Hygon/Phytium, covering migration steps and benchmark results.

Xinchuang in Production: Running the Observability Platform on Kylin V10 and DM Database

An observability platform is itself software, so it has to pass the same domestic-technology requirements as everything else in the stack. At a government customer site, we ran Jujing OBSERVE entirely on Kylin V10 (aarch64) + DM8 + Hygon/Phytium CPUs. This post documents what we did, in a form you can reuse.

Environment and software list

  • OS: Kylin Advanced Server V10 SP3, aarch64
  • CPU: a mix of Hygon C86 and Phytium FT-2000+ machines
  • Database: DM8 (replacing MySQL/PostgreSQL as the metadata store)
  • Middleware: nginx 1.24, OpenJDK 17 (Bisheng JDK also works)
  • Object storage: MinIO (for cold logs and trace snapshots)

Install DM8 and initialize the instance first. Set the page size to 32K and the compatibility mode to MySQL — otherwise table creation will hit length limits caused by the default 8K page size. This one setting saves a lot of late-night debugging later.

Migrating data from MySQL to DM

Use DM's built-in DTS (Data Transfer Service) to move metadata out of MySQL. Migrate schema before data, and primary tables before related tables. Two pitfalls are worth avoiding up front:

  1. DM is case-sensitive with identifiers. CamelCase columns like orderId in MySQL need double quotes after migration, so it's cleaner to convert them to lowercase_with_underscores before you migrate.
  2. MySQL's ON DUPLICATE KEY UPDATE has no direct equivalent; DM uses MERGE INTO. Batch write SQL in your application will need rewriting accordingly.

We found a dry-run pass was worth the time: migrate the schema first, inspect what DTS flagged, fix the type and length differences, then migrate the data. Jumping straight to a full copy usually fails halfway on a single bad column and forces you to restart.

Jujing OBSERVE ships with a DM dialect adapter built in. Set db.dialect=dm in the deployment config and you're done — no business code changes required.

Deployment and adaptation notes

The platform runs containerized, but under aarch64 the images must be multi-arch or separately built arm64 versions — pulling an x86 image will simply fail to start. Our approach: publish an arm64 image tag and run it on Kylin with docker or podman.

Monitoring agents must be compiled separately for Hygon and Phytium. Hygon is x86-compatible, so the x86 binary works as-is; Phytium is pure ARM and needs its own aarch64 package. In the installer, just pick the package by uname -m at delivery time so the customer never has to think about architecture.

The eBPF probe on Kylin needs a kernel with BTF support. Kernels after 4.19 generally work, but older ones must fall back to procfs-based collection. Check this before promising agent-level observability on older hosts.

Compliance and security notes

Domestic deployments usually come with an extra requirement: everything from the OS to the database must be on an approved catalog, and the platform must support a domestic CA and audit requirements. Jujing OBSERVE ships with an audit log that records every query and administrative action, and supports SM2/SM3/SM4 cryptographic suites for at-rest encryption and transport. If your customer asks for 等保 (MLPS) certification evidence, generate the audit report directly from the platform rather than assembling it by hand.

Benchmarks and lessons learned

We load-tested with a 300-node simulated environment: log ingestion peaked at 120K lines/sec, spans at 40K/sec, and a single search's P99 stayed under 1.2 seconds. CPU usage ran about 15% higher than on x86 — expected, since Phytium single-core performance trails mainstream x86 and relies on more cores to compensate.

Three lessons stand out from the deployment:

  1. DM's default port is 5236, and firewalls often miss it, causing connection timeouts from the platform. Check the network before you check the config.
  2. Phytium + Kylin ships an older glibc, so some prebuilt binaries throw GLIBC_2.34 not found. Compile locally on the target or pin older dependency versions.
  3. Time sync must use NTP or a domestic alternative, otherwise cross-node span ordering falls apart and latency numbers become meaningless.

Xinchuang adoption doesn't end at "it installed." It ends at "it runs stably, performance is acceptable, and you can actually troubleshoot it." Validate all three before you call the migration done.