家里路由器连着几台设备,手机、平板、电视各干各的事,互不干扰,其实这就是一种简单的“分布”思维。把这套逻辑放大到软件系统里,就成了分布式架构。
从一个小餐馆说起
想象你开了一家小饭馆,最开始就一个厨师,又炒菜又端盘子,忙不过来的时候顾客就得干等。后来生意好了,你请了服务员接单,厨师专心做饭,后厨和前厅分开,效率立马提升。这其实就是从“单体”走向“分布”的第一步。
在技术世界里,系统功能拆开,不同服务负责不同任务,比如用户登录一个服务,下单另一个服务,库存又是第三个服务,它们各自独立运行,通过网络通信,这就搭出了分布式架构的雏形。
选好“通信方式”很重要
多个服务之间怎么说话?常见的办法是用HTTP接口,比如一个服务想查用户信息,就向用户服务发个请求:
GET /api/user/123 HTTP/1.1\nHost: user-service.example.com也可以用消息队列,像点餐小票一样,下单成功后往队列里扔一条消息,库存服务自己去取,不用实时等着。这种方式能抗住高峰期的流量冲击,就像饭馆中午爆单,厨房按顺序处理,不会乱套。
数据不能乱,得有人管
每个服务有自己的数据库最稳妥。比如订单服务别直接去改用户表,否则一出问题,责任不清。应该通过接口调用,保持边界清晰。就像你不会让外卖员自己进冰箱拿食材,而是让他从服务员手里接打包好的饭菜。
服务多了怎么找彼此?
新来了个甜品服务,其他服务怎么知道它在哪?这时候需要一个“登记处”,也就是服务注册与发现机制。常用工具像Consul或Nacos,服务启动时主动报到,别人要调用时先去查一下地址,动态获取,灵活又可靠。
别忘了“容错”这回事
某个服务突然挂了怎么办?不能整个系统跟着瘫。可以加熔断机制,比如订单服务调用户服务超时次数太多,就暂时不再尝试,直接返回默认信息,等后面恢复了再重新连接。就像电源跳闸后,你不硬推开关,而是先排查原因。
日志也得“集中看”
问题出在哪个环节?如果每个服务日志都散在不同机器上,查起来像大海捞针。通常会把所有日志统一收集到一个地方,比如用ELK(Elasticsearch、Logstash、Kibana)组合,出问题时一搜关键词,马上定位。
搭分布式架构不是一步到位的事,更像是不断调整的过程。从小处着手,先拆分核心业务,再逐步完善通信、监控和容灾,系统自然就稳了。