[从程序员到架构师] 微服务场景实战 – 注册发现

各位,咱们继续盘微服务这个“硬核玩具”。上回说到要从接地气的场景开始,今天这个场景,那可太“接地气”了——接地气到让人脚趾抠地。

1. 业务场景:如何对几十个后台服务进行高效管理

给50个“娃”当保姆是种什么体验?想象一下,你手底下有50多个后台服务,个个都是亲生的(Java、Go、Node.js 什么语言都有)。它们关系复杂,互相调用,活像一个大型幼儿园。这时候,Spring Cloud、Dubbo 这些“名牌家教”只教 Java 娃,其他娃咋办?

我们当时的做法,非常质朴,质朴得像用记事本管理一支舰队。

第一步:把所有的“娃”(服务)的住址(IP+端口)和接送规则(负载均衡),全手工登记在一本巨大的“花名册”上——也就是 Nginx 配置文件。 就像下面这样:


# ==================== 负载均衡配置 ====================
# 定义名为 user_servers 的服务器集群
upstream user_servers {
    # 用户服务实例1
    server 192.168.5.150:80;
    # 用户服务实例2
    server 192.168.5.151:80;
    # nginx会自动在这两个实例间轮询分发请求,实现负载均衡
}

# 定义名为 order_servers 的服务器集群
upstream order_servers {
    # 订单服务实例1
    server 192.168.5.153:80;
    # 订单服务实例2
    server 192.168.5.152:80;
    # 同理,这两个订单服务实例也会被均衡调度
}

# ==================== 用户服务代理配置 ====================
server {
    # 监听80端口(HTTP默认端口)
    listen 80;
    # 当访问 user-servers 域名时会进入此配置块
    server_name user-servers;
    # 所有路径请求都走这个规则
    location / {
        # 关键操作:把请求转发给上面定义的 user_servers 集群
        proxy_pass http://user_servers;
        # 以下是三个重要的请求头设置,让后端服务知道"谁真的在访问"
        # 1. 把原始请求的Host头传给后端(有些服务靠这个识别虚拟主机)
        proxy_set_header Host $host;
        # 2. 把真实客户端的IP传给后端(否则后端只能看到nginx的IP)
        proxy_set_header X-Real-Ip $remote_addr;
        # 3. 记录完整的代理链IP(防止客户IP被中间代理"吃掉")
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

# ==================== 订单服务代理配置 ====================
server {
    listen 80;
    # 当访问 order-servers 域名时会进入此配置块
    server_name order-servers;
    location / {
        # 将请求转发给 order_servers 集群
        proxy_pass http://order_s
© 版权声明

相关文章

暂无评论

none
暂无评论...