微服务软件架构设计
软件架构的定义
在软件内部经过综合各种因素考量、权衡,选择特定的技术,将系统划分为不同的部分并使用这些部分相互分工,彼此协作,为用户提供需要的价值;
软件架构进化
软件架构进化考虑的因素
- 业务需求
- 成本
- 技术栈
- 组织架构
- 可扩展性
- 可维护性
传统架构
- 一层架构
所有逻辑写到一块
- mvc
逻辑分层
单体架构
概念
- 功能、业务集中在一个发布包中,部署运行在同一个进程;
优势
- 易于开发
- 易于部署、易于测试、易于水平伸缩
挑战
- 代码膨胀,不好围护
- 构建、部署成本大
- 创新困难
- 可扩展性差
- 新人上手困难
微服务架构
定义
使用一套小服务来开发单个应用的方式,每个服务运行在单独的进程,一般采用轻量级的通讯机制互联,并且可以通过自动化的方式部署
微服务特征
- 单一职责 如:订单、支付
- 轻量级通信 如:http、prc
- 隔离性
- 有自己的数据
- 技术的多样性 如:可以是php、go、java
微服务优势
- 独立性 如:可以根据qps来对不同的服务扩容
- 敏捷性,快速迭代
- 技术栈灵活
- 高效团队
微服务不足
- 额外的工作 如:服务拆分
- 数据的一致性
- 沟通成本
微服务架构引入的问题以及解决方案
- 微服务直接如何通信
- 从通信模式角度考虑
模式 | 一对一 | 一对多 |
---|---|---|
同步 | 请求响应模式,最常见 | - |
异步 | 通知、请求异步响应 | 发布订阅、发布异步响应 |
2.从通信协议角度考虑 http rest api rpc mq
如何选择一个rpc框架:
- io、线程调用模式
- 序列化方式 如:json、二进制
- 多语言支持
- 服务治理
3.流行的rpc框架
- dubbo/ubbox 只支持java
- motan 只支持java
- thrift c++/java/php等
- grpc c++/java/php等
4.需要解决的问题
- 微服务如何发现彼此
- 微服务怎么部署以及扩容、更新