Node.js 微服务架构实践

admin

2025-11-23 05:21 阅读 2156

使用Node.js构建微服务架构的完整指南

Node.js 性能优化指南

Node.js 应用的性能优化涉及多个层面,从代码层面到架构层面都需要考虑。

1. 异步最佳实践

// 避免回调地狱,使用 async/await
async function processData() {
  const user = await getUser()
  const posts = await getPosts(user.id)
  const comments = await getComments(posts)
  return { user, posts, comments }
}

// 并行请求
const [users, products] = await Promise.all([
fetchUsers(),
fetchProducts()
])

// 使用 Promise.allSettled 处理部分失败
const results = await Promise.allSettled(promises)

2. 流处理大文件

const fs = require("fs")
const zlib = require("zlib")

// 使用流处理大文件
fs.createReadStream(“input.txt”)
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream(“output.gz”))

// 转换流
const { Transform } = require(“stream”)
const upperCase = new Transform({
transform(chunk, encoding, callback) {
callback(null, chunk.toString().toUpperCase())
}
})

3. 集群模式

const cluster = require("cluster")
const os = require("os")

if (cluster.isMaster) {
const cpuCount = os.cpus().length
for (let i = 0; i < cpuCount; i++) {
cluster.fork()
}
cluster.on(“exit”, (worker) => {
console.log(Worker ${worker.id} died)
cluster.fork()
})
} else {
require(“./app”)
}

4. 内存管理

// 避免内存泄漏
// 1. 及时清理定时器
const timer = setInterval(() => {}, 1000)
clearInterval(timer)

// 2. 移除事件监听器
emitter.removeListener(“event”, handler)

// 3. 使用 WeakMap/WeakSet
const cache = new WeakMap()

// 监控内存使用
const used = process.memoryUsage()
console.log(Heap: ${used.heapUsed / 1024 / 1024} MB)

5. 缓存策略

const NodeCache = require("node-cache")
const cache = new NodeCache({ stdTTL: 600 })

async function getData(key) {
let data = cache.get(key)
if (data) return data

data = await fetchFromDB(key)
cache.set(key, data)
return data
}

// Redis 缓存
const Redis = require(“ioredis”)
const redis = new Redis()
await redis.set(“key”, JSON.stringify(data), “EX”, 3600)

6. 数据库优化

// 连接池
const pool = mysql.createPool({
  connectionLimit: 10,
  host: "localhost",
  user: "root",
  database: "mydb"
})

// 批量操作
await Model.bulkCreate(items)

// 索引优化
// 为频繁查询的字段添加索引

性能监控工具

  • clinic.js - 性能诊断
  • 0x - 火焰图分析
  • PM2 - 进程管理和监控
  • New Relic - APM 监控
0 条评论