企业应用架构模式 概述

1. 基本介绍

  • 目标:了解云时代背景下的软件开发
  • 内容:微服务应用的设计、开发、部署
  • 推荐书籍:《微服务架构设计模式》 克里斯·理查森 著,喻勇 译. ,机械工业出版社,2019.5
         《Spring Cloud与Docker微服务架构实战(第2版)》,周立,电子工业出版社,2018.7
         《Spring微服务实战》,约翰·卡内尔 著,异步社区译,人民邮电出版社,2018.5
  • 开发环境
  • 操作系统:Windows 10、Chrome、CPU支持虚拟化,最少4GB 内存,推荐8GB 或16GB(因为要演示Kubernetes)
  • 开发环境:JDK 8+、STS、Vs Code、Spring Web、Spring Data JPA、H2、Spring Cloud
  • 部署环境:Docker Desktop、Kubernetes + Istio + Knative

2. 概述

  • 当前已经进入了云时代
    1. 数字化、网络化深入人心
    2. 越来越多的服务运行在云上
    3. 网络就是云,云就是网络
    4. 网络与水、电、气一样重要

3. 云时代企业应用的需求(云应用)

  • 零故障时间:7 * 24 小时服务
    1. 对于关键应用,用户越来越不能忍受服务掉线
    2. 即便是由于系统升级造成的短暂不可用也不能忍受
    3. 对于运维工程师:保证基础设施的可用性
    4. 对于开发工程师:设计松耦合的系统
      · 设计、开发的松耦合
      · 部署、运行时的松耦合
  • 快速的反馈周期:必须具备快速的发布能力
    1. 第一时间满足用户的需求
    2. 单块应用做不到快速反馈
  • 移动和物联网的多设备支持
    1. 多终端设备:手机、平板、桌面、电视等
    2. 物联网设备:智能家居,智慧交通等
    3. 无时不在获取数据,数据请求规模激增
    4. 数据量越来越大,需要强大的计算能力
  • 数据驱动
    1. 不需要巨大的、集中式的数据库
    2. 需要小的,分布式的,本地化的数据库
    3. 智能化:通过数据挖掘价值

4. 单块应用

  • 所有的功能被打包成 WAR 或 JAR 包,并且运行在一个进程中
    1. 开发时,一个大工程包含了所有的模块代码,共享同一个版本
    2. 部署时,打包为单独的 WAR 或 JAR
    3. 运行时,运行在一个 JVM 进程中(包括服务器进程或单独进程)
  • 单块应用的好处
    1. 开发简单:有许多先进的 IDE 全面支持单个应用的开发
    2. 适应性强:可以很容易修改代码,数据库设计,然后构建和部署
    3. 容易测试:很容易写出端到端的测试代码
    4. 容易部署:打包然后放到 Tomcat 的部署目录
    5. 容易扩展:可以方便地运行多个实例
  • 但是,随着时间的推移,这些好处会逐渐消失
    1. 随着功能的不断加入,应用的功能逐渐增多,应用变得越来越复杂,应用的尺寸越来越大
    2. 开发速度越来越慢
      · IDE 的速度
      · 代码的构建速度
      · 应用的启动速度(测试时需要运行应用)
    3. 部署和交付过程很痛苦
      · 部署过程:提交代码到 VCS (版本控制服务器)-> 构建(编译、测试)-> 部署 -> 运行
      · 目标:追求快速反馈,一日部署多次(持续交付)
      · 但由于代码过大,部署过程很慢,无法实现快速反馈
      · 在项目工期紧张的情况下,往往仓促交付
    4. 扩展困难
      · 应用过大,并且还要运行在一个进程,需要的硬件资源很难满足
    5. 技术栈单一
      · 无法使用新技术
  • 问题:当前所能够开发的应用无法满足这些需求
    1. 虽然进行了前后端分离
    2. 后端部分还属于单块应用
  • 解决办法:微服务(Microservice)架构
    1. 三个维度解释微服务
      · 分解功能:把单块应用的功能分解为一个一个的服务(暂时可以理解为单体应用中的模块)
      · 分解数据:把集中式的数据库按服务分割为多个数据库,每个数据库对于其所属服务是私有的
      · 水平扩展:当需要扩展时,可以动态部署多个服务实例如:双11,12306,疫情期间的网络教学
  • 好处
    1. 允许持续交付大型、复杂应用
    2. 服务很小且容易维护
    3. 服务可独立开发
    4. 服务可独立扩展
    5. 开发服务的团队能够自治
    6. 允许使用新技术
    7. 能够进行错误隔离
  • 坏处
    1.设计合适的服务集有一定难度 -> 领域驱动设计
    2.分布式系统很复杂,给开发,测试,部署带来挑战 -> 云原生
      · 如何通讯:如何发现服务
      · 如何保证可靠性、一致性、安全性?
      · 横切关注点:如何记录日志与审计,如何负载均衡,如何验证与授权,如何异常处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值