设计基础-软件架构笔记

看了网络上的一些资料,也看了一些书本上的资料。

总体上感觉就是混乱。结合自身的经验和体会,列出几个关心的要点和个人心得。

实际的东西,读者还是去看看有关更加专业的书籍。

一、定义

“名不正,则言不顺。言不顺,则事不成”。

简而言之,”软件架构”可以理解为 解决软件设计的通用方法,是关于不同功能/结构之间的组合方法

或者,可以简单类比为一个集体内部,应该如何协作以便更好地解决问题;一个军队内部,不同的作战单位应该如何互相协作。

从软件工程的角度出发,”软件架构”算是比较上层的, 宽泛的技术概念,但要理解为工程管理概念未尝不可。

所以,世间万物就是这样:具有多个角度,又互相联系。

二、混乱的说法

因为历史的缘故,关于”软件架构”,在百度等地方可以搜索出非常多的内容,着实混乱得很。

例如:

以前常常谈论”C/S”,”B/S”,”SOA”,”SAAS”,还有其它一些名词。

再换个角度,还有其它名词,例如”电商架构”、”企业架构”、”大型互联网架构”,等等。。。

所以整体还是有点混乱,因为角度不同,所以同个东西可能会有不同叫法。

标准不是非常统一,也不算非常严谨。

一般大学中,相对缺乏讨论这个问题(非常可惜)的学科。

须知,由于人类认知的特点,和局限性,如果不先来个相对统一的大概念,那么必然会导致有关人员的思维混沌。

三、常用架构

1.分层/层叠-上层依赖下层(一般而言)。特点:简单明了。现在人人都会

2.事件驱动-组件之间靠事件来驱动。没事就没有关系。要算”架构”比较勉强

3.微核/插件架构-非常典型的是eclipse的设计。好处是足够扩展和灵活,缺点是有点吃性能,如果没有好好管理插件。

4.微服务-某种程度上足够灵活,但消耗偏大。常用于处理不是那么关键的任务,仅仅是因为微服务更好伸缩。 不是特别大的事务,建议不要上这个,否则你会后悔的,唯一的受益者就是那些所谓的”技术爱好者”。

5.云架构? 核心就是花钱办大事,把功能拆分成一只只蚂蚁。现在和微服务有点关系。

6.管道架构? 例如过滤器,netty的消息处理

四、使用架构的目的

实现两个目标:

1.工程管理-例如微服务可以较大提升运维的压力

2.市场需求-在实现管理目标前提下,可以考虑由此产生的市场目标。 事实上不少框架是因为有市场需求才产生的。

软件框架,是典型地通过技术来实现管理目标的一个例子。软件架构对于工程管理的作用,基本等同于组织结构对于组织的作用。

一个合适的架构,能够满足特定目标,例如:

  • 可靠性 — 甲方必须的。甲乙方节省维护支出
  • 可扩展性 — 一般是乙方节省支出
  • 可维护 — 一般是乙方节省支出

但最终目的是:让甲方满意,让乙方赚钱(更快的实施速度、更地的运营成本)。

五、小结

一个项目需要采用什么架构,需要考虑的因素比较多:

从乙方的角度出发,如果不是做很大很复杂的项目,轻易不要采用微服务、云架构。

从管理者角度出发,且不可技术为向导,为技术而技术,永远要牢记–技术服务于商业,亏本的买卖不能做!

如果有人总是撺掇你在并发只有几千的项目中使用微服务,那么要好好考虑那人的目的了。

如果是出于增加团队的技能点,为将来的项目做准备,是可以适当考虑在1,2个宽松的项目中练手,但不要夸大化范围。

Original: https://www.cnblogs.com/lzfhope/p/16295703.html
Author: 正在战斗中
Title: 设计基础-软件架构笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/590567/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JDK8新特性

    1、语法:完整的Lambda表达式由三部分组成:参数列表、箭头、声明语句 2、绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型,所以参数可以省略 3、当l…

    Java 2023年5月30日
    059
  • mybatis逆向生成代码 [ERROR] No plugin found for prefix ‘mybatis-generator’ in the current project and in the plugin groups

    前言 down了一个项目mybatis逆向生成代码时出现如下错误 [ERROR] No plugin found for prefix ‘mybatis-generator’ in…

    Java 2023年5月30日
    070
  • String长度限制?

    String我们在开发和学习中会经常用到,但对String类型的取值范围我们并不明确。 String底层是char数组,并未标明长度限制。java中可以对数组指定长度,如果不指定就…

    Java 2023年6月5日
    098
  • docker容器编排原来这么丝滑~

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 概念介绍: Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Doc…

    Java 2023年6月5日
    075
  • Spring(十):注解实现自动装配

    上一篇文章我们已经学习了Bean的自动装配,是在xml文件中配置autowire来实现的,现在我们来学习一下通过注解来实现自动装配。 一、使用注解需要的准备工作 使用注解在xml配…

    Java 2023年6月15日
    074
  • JAVA面向对象的三大主线

    1、类及类的成员:属性、对象、构造器、代码块、内部类 2、特性:封装、继承、多态 3、其它关键字 面向过程:主要考虑解决问题,以函数为最小单位,考虑怎么做 面向对象:主要考虑谁去做…

    Java 2023年6月15日
    080
  • 二叉树的遍历(非递归)

    二叉树的遍历(非递归) 本文分为以下部分: 前期准备 先序遍历 中序遍历 *后序遍历 上次文章中写的是递归版的二叉树遍历,这次采用非递归模式遍历二叉树。 前期准备 建立一个节点类,…

    Java 2023年6月5日
    087
  • 单个表上亿行数据的主键、索引设计,及分页查询

    一,概述 一般而言,我们对关系型数据库系统,进行表结构设计时,会按数据的种类,进行分类,一般有如下种类: 1)主数据,其数据量基本稳定,不随时间而线性增长。比如,分公司,产品,经销…

    Java 2023年6月9日
    076
  • JWT- SpringBoot(19)

    在生产环境中,对发在的API增加授权保护是非常必要的。JWT作为一个无状态的授权校捡技术,非常适合于分布式系统架构。服务器端不需要保存用户状态,因此,无须采用Redis等技术来实现…

    Java 2023年6月13日
    075
  • Spring基于注解的事务管理

    【第一步】在业务层接口上添加Spring事务管理 public interface AccountService { //配置当前接口方法具有事务 @Transactional p…

    Java 2023年6月7日
    076
  • 4、自定义菜单

    1、自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以”…”代…

    Java 2023年6月13日
    068
  • HashSet源码分析

    HashSet是使用HashMap来实现的 总结 (1)由于在hashMap中key不可以重复所以HashSet中的元素不可重复。 (2)同理hashMap中允许key为null,…

    Java 2023年6月8日
    086
  • mybatis项目实现动态表名方法总结

    实现动态表名是个很常见的需求,网上也有很多解决方法,这边总结了三种实现方式。 一、手动给每个方法加个表名的变量 缺点很明显,侵入性大,不方便,不推荐 二、mybatis插件机制拦截…

    Java 2023年5月30日
    096
  • 狂神说Spring Boot

    1、Spring Boot 简介 简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案; 2、微服务 2014,martin fow…

    Java 2023年6月7日
    063
  • 北京思特奇2023年校招笔试(Java)

    北京思特奇2023年校招笔试(Java) 1、表达式 (short)10/10.2*2 运算后结果是什么类型? 答案:double,浮点数默认是double,自动类型向上转换为浮点…

    Java 2023年6月15日
    083
  • Spring Boot 要怎么学?要学哪些东西?要不要先学 SSM?松哥说说看法

    可能很多刚接触 Spring Boot 的小伙伴都会有这样的疑问,Spring Boot 要怎么学,要不要先学 SSM?今天结合自己的经验,和大家说一说我的看法,也顺便推荐几个 S…

    Java 2023年5月30日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球