微服务
微服务是是一种架构风格,它提倡将单一应用程序划分一组小的服务。
比如将整个商城分为:订单系统、商品系统、活动系统三个子服务,也就是三个微服务。
微服务存在两种场景,一种是提供业务接口,一种是提供微服务之间的调用接口。
业务接口是对外部客户端提供的接口,如网页、APP请求等,使用REST接口。
微服务之间相互调用则是使用RPC接口,也就是订单系统调用商品系统中的一些方法时,通过RPC接口更合适。
微服务与SOA的区别
SOA:
SOA(Service Oriented Architecture)“面向服务的架构”:他是一种设计方法。系统包含多个服务,服务相互独立,但是服务之间通过相互依赖最终提供一系列的功能,各个服务之间通过网络调用。
SOA突出的思想是管理系统,通过将系统分为多种服务,来集中管理系统。
示例:
我们常见的:注册中心+服务提供者+服务消费者,就是一种典型的SOA设计。
微服务:
微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。
微服务强调将整个系统分为小的系统进行管理,微服务与SOA之间的关系更像是:微服务是构成SOA的一部分。
示例:
比如将整个商城分为:订单系统、商品系统、活动系统三个子服务,也就是三个微服务。
REST接口
REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。REST规范把所有内容都视为资源,网络上一切皆资源。
REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
RPC接口
远程方法调用,就是像调用本地方法一样调用远程方法。
RPC 的全称是 Remote Procedure Call 是一种进程间通信方式。
RPC的三个要点:
- 服务端如何确定客户端要调用的函数;
- 如何进行序列化和反序列化;
- 如何进行网络传输(选择何种网络协议);
1、服务端如何确定客户端要调用的函数;
在远程调用中,客户端和服务端分别维护一个【ID->函数】的对应表, ID在所有进程中都是唯一确定的。客户端在做远程过程调用时,附上这个ID,服务端通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。
2、如何进行序列化和反序列化;
客户端和服务端交互时将参数或结果转化为字节流在网络中传输,那么数据转化为字节流的或者将字节流转换成能读取的固定格式时就需要进行序列化和反序列化,序列化和反序列化的速度也会影响远程调用的效率。在java开发中就涉及到序列化ID是否一致等问题。
3、如何进行网络传输(选择何种网络协议);
多数RPC框架选择TCP作为传输协议,也有部分选择HTTP。如gRPC使用HTTP2。不同的协议各有利弊。TCP更加高效,而HTTP在实际应用中更加的灵活。
原文链接:https://blog.csdn.net/laomo_bible/article/details/79677677