1.微服务如何发布和引用服务
RESTful API
优点:跨语言平台,组织内外皆可用
缺点:是用来HTTP作为通信协议,相比TCP协议,性能较差
IDL文件 (interface description language)
例子:Facebook开源的Thrift协议、Google的gRPC协议
优点:跨语言平台,组织内外皆可用,性能较好
缺点:修改或删除PB字段不能向前兼容(不适用于平凡变更或字段较多的场景)
xml配置
缺点:不支持跨平台使用,JAVA平台并且一般作用于组织内部
2.微服务如何注册和发现服务
在微服务架构下,主要有三种角色:服务提供者、服务消费者、服务注册中心
注册中心API
服务注册、服务注销(服务反注册)、心跳汇报、服务订阅、服务变更查询、服务查询、服务修改
注册中心集群部署
采用集群部署来保证高可用,通过分布式一致性来保证不同节点之间的数据保持一致
与DNS方法做服务发现的不同
- dns的维护管理比较麻烦,需要手动配置
- dns的高可用性比较差
- 客户端一般只能连接到一个客户端,无法做负载均衡。而注册中心的方式通常客户端会与所有server建立连接形成连接池,从而在调用端实现请求的负载均衡
- 端口级别的服务发现不了,只能到IP级别
3.微服务之间的通信(RPC远程服务调用)
服务端和客户端建立连接
HTTP通信
Socket通信
服务端如何处理请求
- 同步阻塞(BIO):每次收到请求,都创建一个线程去处理,容易达到最大线程数的瓶颈。适用于连接数较小的业务场景。
- 同步非阻塞(NIO):每次收到请求,用I/O多路复用的技术处理,可以很好节省系统开销,不用为每一个请求创建一个线程适用于连接数比较多并且请求小号比较轻的业务场景。
- 异步非阻塞(AIO):每次收到请求,发起一个I/O操作不等待返回。适用于连接数比较多而且请求小号比较重的业务场景。
开源通信框架有:Netty\MINA
数据传输协议
- HTTP协议
- Dubbo协议
数据该如何序列化和反序列化
序列化原因:提高网络传输速度
文本类序列化方法: XML/JSON
二进制类序列化方法:PB/Thrift