go-micro
go-micro是Micro的核心,是一套Go语言的可插拔RPC框架,提供服务发现、负载均衡、同步/异步通信、编码、服务接口等,所有组件均设计为Interface,便于扩展。
micro实践示例github.com/ho-go/micro
主要有以下组件构成:
Registry
提供一套服务注册、发现、注销、监测机制,服务注册中心支持consul、etcd2/3、zookeeper、gossip、k8s、eureka等
Selector
选择器提供了负载均衡,可以通过过滤方法对微服务进行过滤,并通过不同路由算法选择微服务,以及缓存等
Transport
微服务间同步请求/响应通信方式,相对Go标准net包做了更高的抽象,支持更多的传输方式,如http、grpc、tcp、udp、Rabbitmq等
Broker
微服务间异步发布/订阅通信方式,更好的处理分布式系统解耦问题,默认使用http方式,生产环境通常会使用消息中间件,如Kafka、RabbitMQ、NSQ等
Codec
服务间消息的编解码,支持json、protobuf、bson、msgpack等,与普通编码格式不同都是支持RPC格式
Server
用于启动服务,为服务命名、注册Handler、添加中间件等
Client
提供微服务客户端,通过Registry、Selector、Transport、Broker实现以服务名来查找服务、负载均衡、同步通信、异步消息等
micro
Micro的工具包,主要由以下部分构成:
API
API网关提供HTTP服务,并将请求路由到指定的微服务,是Micro的统一入口,可以用作反向代理,或者将HTTP请求转到RPC
Web
为Micro提供一套仪表盘,并可作为Web应用的反向代理,有别于普通API将Web应用作为了Micro的一等公民,其实和API差不多,但同时提供了对socket的支持
Sidecar
通过HTTP的方式实现go-micro全部功能的RPC代理,通过Sidecar可以方便的将其他语言集成到Micro框架中,方便解决解决应用的异构框架问题
CLI
提供一套命令行工具,可以方便的与Micro服务进行交互,并且可以通过Sidecar代理CLI命令
Bot
通过Bot可以在Micro环境中方便的与Slack、HipChat、XMPP等进行集成,通过消息的方式模仿CLI功能
go-plugins
go-plugins是Micro的插件库,除go-micro相应组件的扩展外,还有其他如Trace、KV存储、监控等