很多人聊到微服务时,常把“服务化”和“微服务治理”当成一回事。其实它们差得挺远,就像买键盘时分不清机械轴和薄膜键一样——用着都打字,体验却完全不同。
服务化:先把大块拆成小块
想象你家的台式机,一开始所有功能都集成在一台主机里,显示器、音响、摄像头全焊死。想升级?只能换整套。这就是传统单体架构。
服务化就是把这个大主机拆开,显示器独立、音响外接、摄像头可插拔。对应到软件里,就是把一个庞大的系统拆成多个独立的服务模块。比如订单、支付、用户信息各自独立部署,能单独开发、测试、上线。
这一步的重点是“拆”,让系统更灵活,团队之间不互相卡进度。但拆完之后,问题来了:怎么管?
微服务治理:拆完了还得管得住
拆完之后,几十个服务跑在不同服务器上,今天订单服务调支付,明天用户登录要查权限。谁调谁?哪个版本对?挂了怎么办?这时候就得靠微服务治理。
它关注的是服务之间的协作规则,比如:
- 服务怎么被发现(注册中心)
- 请求超时了要不要重试
- 某个服务崩了能不能自动隔离(熔断)
- 流量突然暴增能不能自动扩容
你可以理解为,服务化是把一套组合音响拆成功放、音箱、CD机;而微服务治理就是设计遥控器逻辑、布线规则、音量协调机制,确保它们拆开了还能配合得好。
举个真实场景
你在网上下单,背后可能经过七八个服务:验证账号、查库存、扣优惠券、生成订单、通知物流。如果“扣优惠券”服务突然变慢,整个下单卡住,用户体验就崩了。
这时候治理机制就要起作用:比如设置超时时间,超过1秒就不再等,直接走无优惠流程,同时记录异常告警。这种策略不属于“拆服务”的范畴,而是治理的一部分。
代码层面的小例子
比如用 Spring Cloud 配置一个简单的熔断规则:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
@HystrixCommand(fallbackMethod = "fallbackOrder")
public String createOrder() {
// 调用远程服务
return orderClient.create();
}
public String fallbackOrder() {
return "订单创建失败,请稍后重试";
}
这段代码没参与服务拆分,但它定义了出错后怎么办,属于典型的治理手段。
简单说两句
服务化是结构上的变革,解决“怎么建”的问题;微服务治理是运行时的管控,解决“怎么跑得稳”的问题。就像你选外设,换机械键盘是硬件升级(类比服务化),而配置宏按键、调节轮询率、设置驱动同步,才是让它真正好用的关键(类比治理)。