zoukankan      html  css  js  c++  java
  • 微服务软件架构设计

    软件架构的定义

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

    软件架构进化

    软件架构进化考虑的因素

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

    传统架构

    • 一层架构

      所有逻辑写到一块

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

    • 微服务如何发现彼此
    • 微服务怎么部署以及扩容、更新
  • 相关阅读:
    我的公众号 猫和大叔(maohedashu)
    centos编译php时出现make: *** [sapi/fpm/phpfpm] Error 1
    如何在centos和linux等主机上安装 pstree
    如何在centos下卸载干净nginx
    监控感悟(一)
    ant design vue 获取上传图片的像素
    ant vue中atree默认展开指定的树节点不起作用
    uniapp中组件属性设置不生效的解决方案
    vue+canvas实现简易画板
    ant design vue级联选择懒加载省市区三级数据
  • 原文地址:https://www.cnblogs.com/dqh123/p/13225467.html
Copyright © 2011-2022 走看看