【读书笔记】《微服务基础架构》--认识微服务
《微服务基础架构》
(Spring Boot + Spring Cloud + Docker)读书笔记
读书背景:近2年来,测试工作中经常听到微服务这个词,但一直没有深入的了解这个概念,所以想通过这本书,了解到微服务基础架构用到的技术、微服务架构与传统架构区别、微服务架构对测试的影响与改变。
前言:微服务一次逐渐地进入了技术人员的视野,已经成为当下最火的技术名词之一,其实微服务是一个理念,并逐渐发展出一种流行的架构-微服务架构。
阅读章节分配:
第一章 认识微服务架构 --详细阅读
第二章~第五章 初识Spring Boot、Spring Boot应用开发、Spring Cloud(上)、Spring Cloud(下) --简单了解
第六章~第八章 初识 Docker、Docker的使用、Docker中的网络与数据管理 --详细阅读
第九章~第十章 微服务项目的整合与测试、微服务的部署 --详细阅读
第一章 认识微服务架构
1.1本章学习目标
- 了解微服务和微服务的架构概念
- 熟悉微服务的优点与缺点
- 了解微服务的技术选型
1.2 认识微服务
1.2.1为什么需要微服务架构
1.2.2传统单体架构存在的问题:
传统单体架构一般web项目会打包放到web服务器部署,如果用户量增加,可以将打好的包放到不同的web服务器部署即可,通过负载均衡器水平扩展,但是随着时间的推移,这种方式也会出现很多问题,如
1)应用复杂度增加、更新、维护困难增加,一旦应用变的庞大与复杂,单个开发者是很难继续维护的。
2)易造成资源浪费,因为代码包含在一个war包,所以扩展服务的时候,需要重复部署整个war的服务能力,会造成资源额外浪费。
3)影响开发效率,项目体量越大,启动时间越久,所以开发和调试需要额外等待时间。
4)应用可靠性低
5)不利于技术的更新,如需要更换某个技术,整个应用可能需要重新开发。
传统单体架构图:
1.2.2如何解决传统应用架构问题?
一般的企业是通过SOA(面向服务的架构)整合系统,将系统相近的功能模块化以服务的形式提供出去,因此可以理解为一批服务的组合。
优点:
l 项目拆分成若干子项目,可单独开发,提升开发效率
l 利用接口通讯,降低模块的耦合度
l 升级单个服务无需重写整个应用
l 为企业资源带来更好的重用性
缺点:
l 虽然服务相互独立但还是运行在一个环境中,一个tomcat部署多个应用
l 随着业务功能增多,SOA服务会变得越来越复杂
针对单体系统与SOA的问题,有些企业开始采用微处理的结构解决问题,将应用分解成小的、相互连接的微服务。
SOA架构图:
1.3 微服务的架构
1.3.1 微服务架构概念
微服务架构是一种架构风格和思想,倡导我们将服务拆分成细小颗粒度的服务,每个服务独立应用,对外提供公共API,独立承担对外的服务责任,利用这种思想开发的软件实体就是微服务,而围绕微服务思想一系列的体系结构(开发、测试、部署)就是微服务架构。
1.3.2 微服务架构优缺点
优点:
l 复杂度可控,每个微服务专注一个功能,良好清晰的接口定义表述服务边界,体积小、复杂度低,易于维护,提高开发效率。
l 可独立部署,使发布的效率更高,减少对生产环境的风险。
l 技术选型灵活,每个团队可根据需求与现状选择适合的技术开发,技术升级风险较低。
l 易于容错与易于扩展等
不足:开发人员必须处理创建分布式系统的复杂性,如
l 开发工具的功能上的支持
l 测试更加困难,在微服务架构中,服务数量众多,每个服务都是独立业务单元,服务主要通过接口交互,如何保证依赖的正常,是测试面临的挑战。
l 开发人员必须实现服务间的通讯机制。
l 实现用例跨多个服务时,需要面对分布式事务管理的困难。
l 实现跨多个服务的用例,需要团队高度的协调能力。
微服务架构图:
1.3.3 微服务构建过程
1) 微服务的拆分
微服务架构比较适合未来有一定扩展复杂度,且有很大用户增量预期的应用,如互联网公司。每个公司业务不同,可根据自己需要进行分解服务。
拆分建议:
l 通过业务功能分解拆分服务
l 按照动词和用例分解,如一个订单流程的服务
l 将域驱动设计分解为多个子域
2) 微服务架构组件组成
l 服务注册中心:系统中所以服务注册的地方
l 服务注册:服务提供者将自己调用地址注册到服务中心,供服务调用方找到自己
l 服务发现:服务调用者能在服务中心找到自己
l 负载均衡:服务提供者一般将自己多个实例使用负载均衡让服务调用者找到合适的服务节点
l 服务容错:通过熔断器等一些保护机制,保证调用者在调用异常服务的时候返回结果,避免大量的同步等待
l 服务网关:也称API网关,也是服务调用的唯一出口,可在这个组件中,实现用户鉴权、动态路由、灰度发布、负载限流等
l 分布式配置中心:将本地化的配置信息发布到配置中心,实现开发、测试、部署生产的无差异性,方便迁移
3)微服务架构的技术选型