最近工作和心态发生了一点变化,对未来的自己提出了更高的要求,所以在阅读和思考上,更加严格的要求自己的了。
之前临时看了一本书《分布式服务架构:原理、设计与实战》,因为时间缘故,很多点都没有看到,现在相对时间充足了点,所以一边读,一边做总结。
记录、分析、总结、提高!
SOA强调异构服务
通过一个总线
进行协作,有一个中心化的企业服务总线
.微服务是没有这样一个总线的。
服务的核心数据:信息
,没有在某个地方聚合进行传输。ESB不是去中心化,因为信息在企业服务总线
进行了聚合。
前段时间和用户交流SpringCloud
过程中,用户认为所有服务的流量都是通过了API网关进行了转发。
为了解释这个问题在交流过程中,提出了外部应用
和内部应用
2个概念。内部应用
就是在Eureka Server
这类服务注册中心进行了注册的服务。外部应用反之。
内部应用
因为在EurekaServer
进行了注册,所以获取到内部服务节点
的IP
等关键信息,所以可以直接发起访问。
外部应用涉及到安全等原因,不能够获取到内部应用真实的IP地址,所以只给你暴露一个API网关的地址,流量由API进行转发。
言归正传 : 所有流量都走API网关的做法放大了API网关调用的TPS,API网关很容易遭遇到性能瓶颈。
假如有2个系统,其中A需要使用B提供的数据,一种做法是A和B共用一个数据库,B将数据采集后放入数据库中,A定时从A中查找数据。
这种设计在数据及时性要求不高的情况还是可以的,但是存在如下几个问题:
微服务之间调用走的是网络协议,不管是HTTP还是TCP都可能因为网络问题,存在不可靠的情况,迟迟无法回复信息。
比如A->B ,如果B所处的网络出现问题,此时又有很多A的请求发往B,A内部的线程池很快被占满。此时不仅仅A崩溃,依赖A的C也会崩溃,由此一个相互依赖的服务都有可能崩溃。
所以因为某些服务的异常,导致整个系统异常越来越大的过程,就是服务雪崩。
您有任何建议和意见,请Email联系: hicode_club@163.com
转载请保留出处 HiCode 俱乐部