软件架构
1、简述
概念
软件架构是对软件系统整体结构与组件的概括描述,用于指导大型软件系统各个模块的设计。是在软件开发过程中,经过各种因素的考虑、权衡之后选择特定的技术,将系统划分成不同功能模块,并使这些模块之间相互分工,彼此协作,更好的为用户提供价值
相关因素
- 软件系统的业务需求,技术栈,成本,组织架构,可扩展性,可维护性、高可用性等等。
架构进化之路(javaweb)
一层架构 ——》MVC(ssh,ssm)——》 cloud&dubbo(代表性微服务框架)
2、单体架构
简述
- 功能,业务集中在同一个项目工程,同一个发布包,部署运行在同一台机器,同一个进程中。
- 优势:易于开发,易于测试,易于部署,易于水平伸缩
- 劣势:代码膨胀,难以维护,构建成本大,持续交付周期长,新人上手周期长,创新困难,可扩展性差
架构图
3、微服务
概念
微服务诞生背景:互联网的快速发展,“三高”愈发凸显,开发模式的发展,容器技术的成熟等等
- 将项目中一些功能较复杂,具有一定独立性的模块形成一套小服务来开发成为单个应用的方式,每个应用运行在独立的进程里, 一般采用轻量级的通讯机制互联,并且他们可以通过自动化方式部署。
- 拆分模块成为合适的服务单元(不是固定量化的去划分,是一种设计思路)
- 特征:职责单一,服务之间采用轻量级通讯,具有隔离性,数据独立性,技术多样性
- 优势:独立性,敏捷性,技术栈灵活,高效团队。
- 劣势:额外的工作,数据一致性,沟通成本。
架构图
微服务通讯
通讯模式
类型 | 一对一 | 一对多 |
---|---|---|
同步 | http请求模式(常见) | —— |
异步 | 通知/请求异步响应 | 发布订阅/发布异步响应 |
通讯协议
- REST API
- RPC(IO/线程调用模型,序列化方式,多语言支持,服务治理(dubbo,dubbox,thrift,motan,grpc)),MQ
微服务发现
传统服务发现
客户端服务发现
服务端服务发现