前言
单体架构是什么
• 一个归档包包含了应用所有功能的应用程序,我们通常称之为单体应用
• 架构单体应用的架构风格,我们称之为单体架构,这是一种比较传统的架构风格 单体架构缺点:
• 复杂性逐渐变高
• 技术债务逐渐上升
• 部署速度逐渐变慢
• 无法按需伸缩 架构演进:
• 单体架构
• SOA(面向服务)
• 微服务
微服务是什么
简而言之,微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的,其中每个小型服务都运行在自己的进程中,并经常采用 HTTP资源APi 这样轻量的机制来相互通信,这些服务
围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署;这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术,对这些微服务我们仅做最低限度的集中管理;
微服务具备的特性:
• 每个微服务可独立运行在自己的进程里
• 一系列独立运行的微服务共同构建起了整个系统
• 每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如:订单管理、用户管理等
• 微服务之间通过一些轻量的通信机制进行通信,例如通过REST API或者RPC的方式进行调用
微服务优点:
• 易于开发和维护
• 启动较快
• 局部修改容易部署
• 技术栈不受限
• 按需伸缩
• DevOps 微服务带来的挑战:
• 运维要求较高
• 分布式的复杂性
• 接口调整成本高
• 重复劳动 微服务设计原则:
• 单一职责原则
• 服务自治原则
• 轻量级通信原则
• 接口明确原则
微服务常用框架:
• Spring Cloud:projects.spring.io/spring-clou…
• Dubbo:dubbo.apache.org/zh/
• Consul.
分布式架构
分布式架构概念:
分布式架构是相对于单体架构来说
• 分布式架构强调小粒度的模块化部署,每个模块独立,分而治之
• 分布式强调 "避免将鸡蛋放在一个篮子里"
微服务定义:
微服务(MicroService)最早由 Martin Fowler 与 James Lewis 于2014年共同提出,微服务架构风格是一种使用系列微小服务来开发单个应用的的方式,每个服务运行在自己的进程中,为独立业务开发,
并使用轻量级通信机制,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持分布式管理;
单体架构优缺点:
优点: • 开发简单粗暴
• 没有其他开销
• 人力成本低 缺点: • 开发效率低
• 团队协作困难
• 部署不够灵活
• 稳定性不高
• 扩展性不够
总结:
单体架构适用于短平快的中小型项目
微服务优缺点:
优点:
• 业务驱动
• 轻松扩展
• 容错机制
• 管理轻松
缺点: • 人力成本高
• 设备成本高
• 架构设计要求高
• 调试麻烦
总结:
适用于大业务、高并发、高可用场景
服务拆分原则
可伸缩的架构设计:
• x-微服务可水平扩展
• y-按业务功能进行切分
• z-将数据进行切分
Spring Cloud
架构体系:
Spring Cloud 是一个开发工具集,包含了多个子项目
• 基于 Spring Boot 的开发便利
• 对 Netflix 开源组件的进一步封装 Spring Cloud 极大的简化了微服务的开发;
微服务两大阵营:
阿里系: • 通信方式:RPC(二进制)
• 通信套件:Dubbo
• 注册中心:Zookeeper 优点: • 执行效率高
• 接口规范 缺点: • 兼容性差
• 服务治理不完整
• 国产开源 Spring Cloud系:
• 通信方式:Restful(Http)
• 通信套件:Spring Cloud Netflix 全家桶
• 注册中心:Netflix Eureka 优点: • 兼容性好
• 完整的服务治理
缺点: • 接口不规范
• 执行效率相对较差