微服务并不是一定是基于RPC或者REST的,也可以是基于消息的。
消息不一定是走消息队列,也可以是Erlang那种Actor模型的。
在Golang、C#、JS、Java「kotlin」领域,推荐proto.actor库「该库在Goroutine上实现了Actor模式」。
基于消息的系统有三个好处:
1. 把异步显性化,RPC等通过隐藏异步的世界,简化了第一版的代码,但是系统越大异步化就越隐藏不掉。最后RPC系统付出了双倍的代价。
2. 非阻塞。发送消息不会阻塞逻辑,等待是明确有编码者指定,而不是RPC调用隐含。
3. 多接收者。RPC的最大问题是单一接收,要多接收就要发多次请求。