1.软件架构
有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。是在软件内容,经过综合各种因素的考量,权衡,选择特定的技术,将系统划分成不同部分,并使用这些部分相互分工,彼此协作,为用户提供需要的价值。
影响因素
业务需求,技术栈,成本,组织架构,可扩展性,可维护性。
单体架构
功能,业务集中在一个发布包里,部署运行在同一个进程中。
- 优势: 易于开发,易于测试,易于部署,易于水平伸缩
- 劣势: 代码膨胀,难以维护,构建成本大,持续交付周期长,新人上周周期长,创新困难,可扩展性差
2. 微服务
1. 概念
微服务就是一些可独立运行、可协同工作的小的服务。
使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且他们可以通过自动化方式部署。
2. 微服务特征
单一职责,轻量级通讯,隔离性,业务数据独立,技术多样性。
3. 微服务架构优劣
- 优势:独立性,敏捷性,技术栈灵活,高效团队。
- 劣势:额外的工作,数据一致性,沟通成本。
4. 微服务通讯
一对一 | 一对多 | |
---|---|---|
同步 | 请求响应模式,最常见 | ————— |
异步 | 通知/请求异步响应 | 发布订阅/发布异步响应 |
5. 通讯协议
- REST API
- RPC
IO/线程调用模型,序列化方式,多语言支持,服务治理(dubbo,dubbox,thrift,motan,grpc) - MQ
6. 流行的RPC框架
(实线表示同步,虚线表示异步)
7. 微服务发现
让客户端/调用者知道服务提供者的IP/端口号。
8. 服务编排
服务部署,更新,扩缩容
Mesos, Docker Swarm, Kubernetes
9. SpringBoot/SpringCloud与微服务
SpringBoot
化繁为简,java开发微服务的润滑剂核心功能:
独立运行java -jar xxx.jar
内嵌web服务器
简化配置SpringCloud
一系列框架,简化java的分布式系统,SpringBoot封装
SpringBoot意在简化,是一种开发、配置功能。
SpringCloud意在简化分布式,是功能的集合、风格的统一。
SpringCloud是java的微服务的解决方案,侧重功能,侧重开发。
SpringCloud核心组件:
Netflix Eureka/Ribbon/Hystrix/Zuul, Spring Cloud Config
(客户端发现)