什么是微服务,为什么要做微服务?

864 阅读4分钟

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

Spring Boot 微服务

单体应用VS微服务应用

  • 单体应用 monomer_update.jpg

  • 微服务应用 micro_services_app.jpg

单体架构演进

项目拆分多项目独立部署

monmer_demo_update.png

ESB企业服务总线

esb.png

区别

  • SOA架构主要针对企业级、采用ESB服务(ESB企业服务总线),非常重,需要序列化和反序列化,采用XML格式传输
  • 微服务架构主要是用于互联网,轻量级、小巧,独立运行,基于 HTTP + Rest + JSON 格式传输。
  • ESB也可以说是传统中间件与 XML、Web 服务等技术互相结合的产物

单体架构的缺点

  • 复杂性逐渐变高
  • 技术债逐渐上升
  • 部署速度逐渐变慢
  • 阻碍技术创新
  • 无法按需伸缩

微服务架构

微服务的定义

  • Martin Fowler: 简而言之,微服务架构风格这种开发方法,是以一组小型服务的方式来开发一个独立的应用系统。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量级的机制来互相通讯。这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术。这些微服务我们仅做最低限度的集中管理。

  • 微服务架构师一种架构模式,它提倡将单一应用程序划分成小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务之间采用轻量级通讯机制互相沟通(通常是基于HTTPS的RESTful API)。每个服务,都围绕着具体业务进行构建。并且能够独立地部署到生产环境、类生产环境等。另外,尽量避免统一的、集中式的服务管理机制,堆具体的一个服务而言,应根据业务上下文,选择合适的语言,工具对其进行构建

  • 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个服务可被独立部署,各个服务之间是松耦合的。每个微服务仅关注完成一件任务并能很好地完成任务。在所有情况下,每个任务代表着一个小的业务能力。

微服务特点

  • 服务组件化
  • 服务围绕业务
  • 产品开发模式
  • 轻量级通讯机制
  • 去中心化治理
  • 去中心化数据设计
  • 故障处理设计
  • 演进式设计
  • 基础设置自动化

微服务的优点和挑战

  • 优点
    • 开发简单
    • 技术栈灵活
    • 服务端丽
    • 按需拓展
  • 挑战
    • 运维复杂
    • 数据一致性问题
    • 集成测试复杂
    • 重复代码
    • 监控困难

微服务具备的特征

  • 每个微服务可以独立运行在自己的进程中
  • 一些列独立运行的微服务共同构建起了整个系统
  • 每个服务独立的业务开发,一个微服务一般完成某个特定的功能,比如:订单管理、用户管理等
  • 微服务之间通过一些轻量级的通讯机制进行通讯,例如:通过 Rest API或者RPC的方式进行通讯

微服务的优点

  • 易于开发和维护
  • 启动较快
  • 局部修改容易部署
  • 技术栈不受限制
  • 按需伸缩
  • DevOps

微服务带来的挑战

  • 运维成本较高
  • 分布式的复杂性
  • 接口调整成本高
  • 重复劳动

微服务的设计原则

  • 单一职责原则
  • 服务自治原则
  • 轻量级通信原则
  • 接口明确原则

参考资料

「欢迎在评论区讨论,掘金官方将在掘力星计划活动结束后,在评论区抽送100份掘金周边,抽奖详情见活动文章」。