微服务

什么是微服务

注:来自维基百科 微服务 (Microservices) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 的 API 集相互通信。

微服务的规划与单体式应用程序十分不同,微服务中每个服务都需要避免与其他服务有所牵连,且都要能够自主,并在其他服务发生错误时不受干扰。其实这也SOA(面向服务编程)的理念非常类似,应该说微服务不算一个全新的一个概念,只是这几年随着容器技术的成熟,微服务的实践越来越方便。

微服务特点

注:来自维基百科 一个微服务框架的应用程序有下列特性:

  • 每个服务都容易被取代。
  • 服务是以能力来组织的,例如用户界面、前端、推荐系统、账单或是物流等。
  • 由于功能被拆成多个服务,因此可以由不同的编程语言、数据库实现。
  • 架构是对称而非分层(即生产者与消费者的关系)。
  • 一个微服务框架:
    • 适用于具持续交付 (Continuous Delivery) 的软件开发流程。
    • 与服务导向架构 (Service-Oriented Architecture) 不同,后者是集成各种业务的应用程序,但微服务只属于一个应用程序。

微服务的技术核心

  • 服务发现(Service Discovery):

    微服务上线后只需要在服务注册中心,注册自己ip和服务内容,并不需要想整个集群广播自己的。当某个服务要调用某个服务时会向注册中心询问该服务的ip地址。服务注册中心保留了集群的服务到ip的映射关系,同时还会检查每个服务的健康状态,及时摘除故障服务或节点。

  • 容器技术

    单体运营拆分成微服务后,部署和伸缩都会比单体运用复杂很多,所以说没有容器技术,微服务还是很难盛行的。

    容器技术特点:

    • 轻量:相比于虚拟机计算。容器技术非常轻量,有更快的启动时间。
    • 易于部署迁移:由于环境一致性,所以能做到一次构建,处处部署;
    • 弹性伸缩:Kubernetes、docker Swarm等容器编排技术,可以做到弹性伸缩。

go和微服务

当前践行微服务的主流编程语言只有go和java,go由于容器话技术的友好支持,成为微服务的首选语言。

go的微服务生态也很齐全,服务发现 (consun,etcd),通讯协议(go-grpc),微服务框架(go-micro,go-kit)等等都非常成熟。

参考资料