微服务软件架构设计

软件架构的定义

在软件内部经过综合各种因素考量、权衡,选择特定的技术,将系统划分为不同的部分并使用这些部分相互分工,彼此协作,为用户提供需要的价值;

软件架构进化

软件架构进化考虑的因素

  • 业务需求
  • 成本
  • 技术栈
  • 组织架构
  • 可扩展性
  • 可维护性

传统架构

  • 一层架构

    所有逻辑写到一块

  • mvc

    逻辑分层

单体架构

概念

  • 功能、业务集中在一个发布包中,部署运行在同一个进程;

优势

  • 易于开发
  • 易于部署、易于测试、易于水平伸缩

挑战

  • 代码膨胀,不好围护
  • 构建、部署成本大
  • 创新困难
  • 可扩展性差
  • 新人上手困难

微服务架构

定义

使用一套小服务来开发单个应用的方式,每个服务运行在单独的进程,一般采用轻量级的通讯机制互联,并且可以通过自动化的方式部署

微服务特征

  • 单一职责 如:订单、支付
  • 轻量级通信 如:http、prc
  • 隔离性
  • 有自己的数据
  • 技术的多样性 如:可以是php、go、java

微服务优势

  • 独立性 如:可以根据qps来对不同的服务扩容
  • 敏捷性,快速迭代
  • 技术栈灵活
  • 高效团队

微服务不足

  • 额外的工作 如:服务拆分
  • 数据的一致性
  • 沟通成本

微服务架构引入的问题以及解决方案

  • 微服务直接如何通信
  1. 从通信模式角度考虑
模式一对一一对多
同步 请求响应模式,最常见 -
异步 通知、请求异步响应 发布订阅、发布异步响应

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.需要解决的问题

  • 微服务如何发现彼此
  • 微服务怎么部署以及扩容、更新
原文地址:https://www.cnblogs.com/dqh123/p/13225467.html