在 Linux 上落地微服务的关键是用“运行时上下文”贯穿进程、容器与网络边界,使服务具备可观测性、隔离性与可控性。这里的“Context”既指语言运行时的请求上下文(如Go 的 context.Context),也指 Linux 的命名空间、cgroup、网络与系统调用上下文,以及服务网格对 RPC/HTTP 的上下文感知能力。
一、概念与总体架构
二、落地步骤
三、关键技术与示例
gRPC + Protobuf 示例(Go)
syntax = "proto3";
package pb;
service OrderService {
rpc CreateOrder (CreateOrderRequest) returns (CreateOrderReply);
}
message CreateOrderRequest { string item_code = 1; double price = 2; }
message CreateOrderReply { bool success = 1; }
type server struct{}
func (s *server) CreateOrder(ctx context.Context, req *pb.CreateOrderRequest) (*pb.CreateOrderReply, error) {
// 1) 读取元数据(如 trace_id)
// 2) 基于 ctx 做超时/取消控制
// 3) 业务处理
return &pb.CreateOrderReply{Success: true}, nil
}
func main() {
lis, _ := net.Listen("tcp", ":50051")
s := grpc.NewServer()
pb.RegisterOrderServiceServer(s, &server{})
s.Serve(lis)
}
conn, _ := grpc.Dial("localhost:50051", grpc.WithInsecure())
defer conn.Close()
client := pb.NewOrderServiceClient(conn)
resp, _ := client.CreateOrder(context.Background(),
&pb.CreateOrderRequest{ItemCode: "123", Price: 99.99})
异步消息示例(Python + RabbitMQ + Nameko)
docker run -d --hostname my-rabbit --name some-rabbit \
-p 15672:15672 -p 5672:5672 rabbitmq:3-management
import yagmail
from nameko.rpc import rpc, RpcProxy
class Mail:
name = "mail"
@rpc
def send(self, to, subject, contents):
yag = yagmail.SMTP('myname@gmail.com', '******')
yag.send(to=to, subject=subject, contents=[contents])
class Compute:
name = "compute"
mail = RpcProxy('mail')
@rpc
def compute(self, operation, value, other, email):
ops = {'sum': lambda x, y: x + y, 'mul': lambda x, y: x * y}
try:
result = ops[operation](int(value), int(other))
except Exception as e:
self.mail.send.async(email, "Error", str(e))
raise
else:
self.mail.send.async(email, "Done", f"Result: {result}")
return result
四、运行时上下文与 Linux 内核能力
五、可观测性、治理与运维清单