go-micro是一个go语言的微服务框架,可以大幅度的提升开发效率,并完成一套微服务的架构,其架构借用官方的图

go-micro的架构图

其项目地址github: https://github.com/micro/go-micro

首先go-micro框架是一套微服务分布式的框架,其拥有以下特性:

  • 服务注册/发现
  • 负载均衡
  • 消息解码,并默认支持json以及protobuf
  • 基于rpc的请求响应
  • 异步的消息通讯
  • 最后也是我觉得最牛的一点,接口可插拔,你可以不管用运行环境到底是使用的etcd或者consul来做服务发现,是使用http或rabbitmq做通讯,使用kafka做订阅还是用rabbitmq或者redis,是的,所有的一些都是可以插拔的,只要在运行时加入对应的启动参数,就可以使用对应的插件

有人可能第一次接触微服务这个词,微服务的概念,可以理解为,讲一个单一应用,拆分成一套小型服务的方法,每个服务都做单独的部署,单独的开发,内部甚至可以使用不同的语言来实现。微服务的理念在传统的单机部署中并未见到明显的优势,但当越来越多的应用被部署到云中的时候,微服务的优势就立刻体现出来了,包括:

单应用共用数据库,而微服务每个服务使用不同或相同数据库
  • 独立部署,每个服务独立去部署,独立运行于不同的进程,使得每个服务可以根据负载做部署数量调整
  • 服务降级,当系统负载增高,需要对某些关键业务做优先增配时,可以对不关键、低级别的业务做服务降级,临时关闭某些服务来保证关键业务的稳定
  • 功能单一,技术选型更广,由于微服务的功能相对单一,可以针对不同的微服务采用更适合的编程语言、数据库等,例如做朋友关系、二度好友功能就考虑使用neo4j的图形数据库,底层稳定性要求高的微服务则可以通过Java来开发,并发比较高的微服务则可以考虑使用Go来开发等等
  • 后期维护隔离,对功能的后期开发升级不会影响整体的应用稳定性
  • 单独测试,单独开发,可以使每个微服务由不同的团队去开发、去单独测试,增加了整体开发的速度
  • 复用性,多个不同的应用可以直接复用某个微服务
单应用不同模块运行在单一进程中,而微服务则每个服务运行于不同的进程

而go-micro正是这样一个针对微服务开发的框架,其将所有热插拔的插件发布于go-plugins,开发者可以根据需求引用,同时在运行时追加响应的运行参数即可启用插件。

好了,这章简单的介绍了go-micro这个框架以及微服务的概念,下一章讲开始go-micro的源码解析