如果是单体应用程序。客户端请求页面,可能会通过负载均衡,比如Nginx
,请求来到某台服务器,这台服务器把数据返回。
如果是微服务。客户端请求页面,背后通过api gateway
网关,把请求交给某个服务,可能这个服务还要调用其它服务,然后把数据返回。、
区别在于:
- 单体应用当请求到达某个节点,单体作战返回数据;微服务,是多个服务联合作战返回数据。
- 单体应用是在同一个进程;微服务跨进程。
如果是微服务,通过k8s编号服务,有些服务部署在同一个节点上的不同docker container
中,也可以是不同节点上的不同docker container
。
关于微服务间的调用:
- 当别人调用我的API:严出
- 当我调用别人API:宽进,考虑别人API的
down
掉、超时、不可用情况 - 连接池,服务调用之间有一个连接池,一个服务可能依赖多个服务有多个连接池,连接池是隔离的
- 搞清楚服务间依赖的强弱关系:如果是强依赖,返回错误;如果弱依赖,
catch
异常 - 当别人调用我的API,如果请求频率过高,需要熔断
- 当调用别人API可以有重试机制