微服务,不止是JAVA,更不止是某一具体编程语言、一门技术、一门产品。
官方的定义不再粘贴,你想要知道的这是一种思想、一种生态,而java微服务中更多的便是基于Spring全家桶如SpringCloud这种开放式框架等衍生的体系,也有Alibaba捐赠给Apache基金会的dubbo框架而成的一种体系,拥有了以上框架层面并不代表就是微服务,业务的抽象也要微服务起来,诸多OOP、DDD等编程思想加持下抽象而来的设计,也是微服务中不可分割的一部分。
Dubbo体系
Dubbo是一种RPC框架,RPC调用旨在微服务中的直连,缩短链路降低延迟,不同于常见的http协议,rpc下的dubbo协议报文更短,包头较为自定义,自定义域值为业务的开展提供了便利,包体也不一定是http常见的json结构化形式,可以出现二进制、map等多种形式。
Dubbo没有官方推荐网关,而业界使用dubbo的机构也以直连居多,有自定义网关但不常见。
Dubbo需要一个注册中心,不是因为没有网关而需要注册中心,微服务的整体思路,需要将个服务“微”起来,那么各微服也不可能完全自治。微服务整体架构中的需要,Dubbo体系下常见用Zookeeper来作为注册中心,后文简称为ZK。ZK可以认为是一种高效持久化工具,也有较为成熟的主从、选举特性,这里不过多展开。从其在微服务Dubbo体系的作用来看,ZK管理着各微服务通过dubbo将rpc接口注册到注册中心,ZK于是就作为了注册中心,各微服务间如果需要rpc调用关系,直接取ZK管理的各微服务各rpc接口的地址信息就可以了,值得注意的是,并不是每一次rpc间调用都需要从ZK获取一遍最新地址,这样太慢了,会直接使用微服务本地缓存的上一次rpc服务列表,如果不存在则直接报错而不会直接获取。那么rpc列表如何更新的呢,微服务注册到ZK,同时会存在一个长连接,有一个心跳机制,心跳间隔时来进行增量双向更新,如果微服务挂了那么ZK将这一部分信息注销,如果ZK挂了那微服务就记录但并不影响下一次rpc调用,缓存是一直存在的。
更新中