一篇带你从零开始学微服务

虽然现在开源的微服务框架有很多,各种编程语言的都有,花上几个小时搭建一套可运行的开发环境也并不是一件难事 。但毕竟微服务涉及的组件还是挺多的,相比于单体架构来说,复杂度提升了不少 。 

一篇带你从零开始学微服务

文章插图
 
说起微服务,大家应该并不陌生,不只是一线大厂,很多中小规模团队也已经将这项技术引入并在实际业务中落地 。
那作为一名开发人员,应该如何学习微服务呢?
虽然现在开源的微服务框架有很多,各种编程语言的都有,花上几个小时搭建一套可运行的开发环境也并不是一件难事 。但毕竟微服务涉及的组件还是挺多的,相比于单体架构来说,复杂度提升了不少 。
不知道你有没有和我一样的困扰,有时候想要深入学习一下,但却不知道从什么地方入手,结果就是对其了解只是浮于表面 。
所以我最近看了极客时间的专栏《从 0 开始学微服务》,觉得作为入门还是不错的 。
同时,我总结了专栏中的部分内容,并加入一些自己的思考,形成了这篇文章 。算是学习微服务的一个大纲,然后再按照这个大纲去深入学习,不断充实这套技术体系 。
好了,下面正文开始 。
什么是微服务微服务是指开发应用所用的一种架构形式 。通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域 。在处理一个用户请求时,基于微服务的应用可能会调用许多内部微服务来共同生成其响应 。
 
一篇带你从零开始学微服务

文章插图
 
微服务的特点:
  1. 服务拆分粒度: 小到一个子模块,只要该模块依赖的资源与其他模块都没有关系,那么就可以拆分为一个微服务 。
  2. 服务独立部署: 每个微服务都严格遵循独立打包部署的准则,互不影响 。比如一台物理机上可以部署多个 Docker 实例,每个 Docker 实例可以部署一个微服务的代码 。
  3. 服务独立维护: 每个微服务都可以交由一个小团队甚至个人来开发、测试、发布和运维,并对整个生命周期负责 。
  4. 服务治理能力要求高: 因为拆分为微服务之后,服务的数量变多,因此需要有统一的服务治理平台,来对各个服务进行管理 。
服务发布和引用想要构建微服务,首先要解决的问题是,服务提供者如何发布一个服务,服务消费者如何引用这个服务 。具体来说,就是这个服务的接口名是什么?调用这个服务需要传递哪些参数?接口的返回值是什么类型?以及一些其他接口描述信息 。
 
一篇带你从零开始学微服务

文章插图
 
最常见的服务发布和引用的方式有三种:
  • RESTful API
  • XML 配置
  • IDL 文件
RESTful API这种方式就比较常见了,主要被用作 HTTP 或者 HTTPS 协议的接口定义,即使在非微服务架构体系下,也被广泛采用 。而且学习成本低,比较适合用作跨业务平台之间的服务协议 。
XML 配置这种方式下需要在服务提供者和服务消费者之间维持一份对等的 XML 配置文件,来保证服务调用 。比如提供者维护 server.xml,消费者维护 client.xml 。
在接口变更时,需要同时修改这两个接口描述文件 。
IDL 文件IDL 就是接口描述语言(interface description language)的缩写,通过一种中立的方式来描述接口,使得在不同的平台上运行的对象和不同语言编写的程序可以相互通信交流 。
也就是说 IDL 主要是用作跨语言平台的服务之间的调用,有两种最常用的 IDL:一个是 Facebook 开源的 Thrift 协议,另一个是 google 开源的 gRPC 协议 。
小结每种方式都有各自的优缺点,具体应该如何选择,需要根据自身的业务特点 。
描述方式
使用场景
缺点
RESTful API
跨语言平台,组织内外皆可
使用 HTTP 作为通信协议,相比于 TCP,性能较差
XML 配置
JAVA 平台,一般用于组织内部


推荐阅读