微服务架构与原理|青训营笔记

97 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 9 天

本次课程主要讲微服务的架构和原理

单体架构 VS 微服务架构

软件架构具备两个特点:

  • 合理调配生产关系与生产力,让具备不同专业知识与技术栈的的人士都参与到软件系统开发中来, 高效地协同工作;
  • 能让各个软件元素有清晰的定义与职责,并有一套良好、高效的交互机制.

单体架构

应用开发采用单体架构,所有的代码在一个代码仓库中管理,最后打包成一个部署包,运行在一个进程上。典型的有三层应用架构与六边形应用架构两种。

单体架有以下的好处:

  • 应用开发简单,基本所有的代码都在一个仓库中管理;
  • 非常方便进行大规模的更改;
  • 容易测试,只需要写几个端对端的测试;
  • 部署简单明了,横向扩展非常容易.

单体架构的弊端

  • 复杂度不断提升,模块之间的耦合度越来越高,维护成本很高;
  • 更新迭代周期变长,从代码提交到实际部署的周期会拉长,甚至有时都无法交付;
  • 难以扩展与迭代演进,使用过时的技术栈或组件一直无法升级.

微服务架构

微服务架构其实可以理解为”模块化设计"的扩展延伸,只是这些"功能模块"以单独的部署包的方式运行在各自的进程中. 每个服务之间都是相互独立的,并且有自己的私有数据库,两者之间仅能通过API的方式进行通信。

微服务架构好处:

  • 从代码管理来看,每个服务较小,大部分由于十几个接口或服务方法组成,非常容易维护;
  • 从运维管理来看,每个服务都可以独立部署,非常易于扩展; 
  • 从团队管理来看,可以更好地划分职责范围;
  • 从软件开发总体来看,可以使软件系统可持续性交付部署.

微服务架构弊端:

  • 服务的拆分和定义有一定的难度;
  • 增加了系统的复杂度,使开发、测试、部署都变得更加困难;
  • 在部署多个服务的功能时需要在协调开发团队.

微服务架构组成

服务拆分

  • 根据业务能力分解
  • 根据子域分解

通信方式

  • 通信风格: 使用哪一种的进程间通信机制;
  • 服务发现: 客户端如何获得具体实例的真实IP地址;
  • 可靠性: 在服务不可用的情况下,如何确保服务之间的可靠通信;
  • 事务性消息: 如何将消息发送、事件发布、更新业务数据的数据库事务集成;
  • 外部API: 应用客户端如何与服务通信.

数据一致性模式,可观测性,部署相关模式,等等

总结

本次课程讲述的主要是微服务的定义以及应用场景,原理十分重要,希望这些笔记能够有所帮助。