什么是微服务?

微服务是一种面向服务的架构(SOA)风格(Java开发人员最重要的技能之一),其中,应用程序被构建为多个不同的小型服务的集合而不是单个应用程序。与单个程序不同的是,微服务让你可以同时运行多个独立的应用程序,而这些独立的应用程序可以使用不同的编码或编程语言来创建。庞大而又复杂的应用程序可以由多个可自行执行的简单而又独立的程序所组成。这些较小的程序组合在一起,可以提供庞大的单程序所具备的所有功能。

分布式和微服务的关系 微服务跟分布式的区别_应用程序

什么是分布式?

所谓分布式,无非就是将一个系统拆分成多个子系统并分布到多个服务器上.

简单的说,是指将用户界面、控制台服务、数据库管理三个层次部署在不同的位置上。其中用户界面是客户端实现的功能,控制台服务是一个专门的服务器,数据管理是在一个专门的数据库服务器上实现的。

分布式和微服务的关系 微服务跟分布式的区别_分布式和微服务的关系_02

区别

分布式是从整体架构的war包里把service层压力大的service独立成单独的服务(jar包启动)。
微服务是从整体war包里将controller,service完全拆分出来作为一个独立的服务,数据库也要拆分成独立的数据库。每一个微服务都是一个完整的服务(从http请求到返回),
在微服务内部,将需要对外提供的接口包装成RPC接口,对外部开放。

关于微服务是否必须包装RPC接口的问题

既然有http 请求,为什么还要用rpc(dubbo接口)调用?
http好比普通话,rpc好比团伙内部黑话。

讲普通话,好处就是谁都听得懂,谁都会讲。
讲黑话,好处是可以更精简、更加保密、更加可定制,坏处就是要求“说”黑话的那一方(client端)也要懂,而且一旦大家都说一种黑话了,换黑话就困难了。

RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜一筹啦!

但是所谓的效率优势是针对http1.1协议来讲的,http2.0协议已经优化编码效率问题,像grpc(Google最近公布的开源软件)这种rpc库使用的就是http2.0协议。这么来说吧http容器的性能测试单位通常是kqps,自定义tpc协议则通常是以10kqps到100kqps为基准
简单来说成熟的rpc库相对http容器,跟多的是封装了“服务发现”,"错误重试"一类面向服务的高级特性。可以这么理解,rpc框架是面向服务的更高级的封装。如果把一个http server容器上封装一层服务发现和函数代理调用,那它就已经可以做一个rpc框架了。
所以为什么要用rpc调用?
因为良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少了这些特性。
springcloud就是使用http协议通信的
dubbo使用的协议有很多种(rmi,hessian等),常用的协议Dubbo。