专栏首页james大数据架构该怎么向别人介绍你们的系统架构?

该怎么向别人介绍你们的系统架构?

   如果有人让你介绍你们做的系统架构是什么样子的 你会从哪说起?

  每个人都会有自己的架构认知,根据自己的接触的内容来总结。系统分为用户中心、营销中心、商品中心…… 这是产品经理说的;我们的系统用了三层架构,用了SSM框架…… 这是程序员说的;用户说 我们系统有后台,前台,商品上下架功能,用户管理功能。

  在实际工作中架构师架构出来的系统不仅要考虑用户的功能实现,而且也要平衡系统的易用性、高性能、扩展性、可伸缩性等方面,这里面是要综合业务目标、当前开发人数、开发人员的综合能力、上线时间、项目预算等来选择开发语言、开发框架和功能开发的顺序。有些公司求时间、有些公司求质量,但最终说明架构是实时变化的,不是一上来就来个完美的架构,是要根据当前的业务需求变化的,但你的架构必须要支持这种变化 达到上面所说的要求。

  一个复杂的系统需要不同角色的人来参与,因此架构师必须考虑到让不同的参与者理解你的架构 知道他们自己该做什么事,如用户为你提供原始需求,项目经理需要制定计划 在不同小组间沟通 落地你的架构,开发人员拿到你的设计实现功能。所以架构涵盖的内容和决策太多了,需要从不同视角分别设计 ,也是为了架构方便理解、交流和归档的方便。

 最常用的架构分为:逻辑架构和物理架构视图

  逻辑架构

  逻辑架构规定了由哪些逻辑元素组成以及这些逻辑元素间的关系,逻辑元素可以是逻辑层、功能子系统、模块。

  物理架构

  展示模块间的部署逻辑,数据如何产生、哪块计算、怎么存储、共享等在计算机中的情况。

 这里暂时先列出概念,架构设计之初避免涉及太多具体的技术细节,需要看透需求,寻找出实现的难点、以质量还是时间优先。

5视图法:逻辑架构、物理架构、数据架构、开发架构、运行架构

  面对不同的角色需要用不同的思维来表达,对领导汇报用业务图而不能讲技术架构,对开发则可讲具体开发架构,对运维讲运行架构、物理架构,因此需要不同的架构设计来表达。

逻辑架构

逻辑架构= 模块划分+接口定义(统一接口规范)+领域模型

物理架构

物理架构=硬件分布+软件部署+方案优化(可伸缩性、高性能、易维护性,监控)

物理架构,更关注的系统、网络、服务器等基础设施。例如:如何通过服务器部署和配置网络环境,来实现应用程序的“可伸缩性、高可用性”。或者举一个实际的例子,如何通过设计基础设施的架构,来保障网站能支持同时10W人在线、7*24小时提供服务,当超过10W人或者低于10W人在线时,可以很方便的调整部署架构来支撑。

数据架构

数据架构=存储方式+数据分布

数据架构,更关注的是数据持久化和存储层面的问题,也可能会包括数据的分布、复制、同步等问题。更贴切来讲,如何选择需要的关系型数据库、流行的NOSQL,如何保障数据存储层面的性能、高可用性、灾备等等。很多时候,和物理架构是有紧密联系的,但它更关注数据存储层面的,物理架构更关注整个基础设施部署层面。

开发架构

开发架构=技术选型+文件划分+编译关系(模块依赖关系)

开发架构则更关注程序包,不仅仅是我们自己写的程序,还包括应用程序依赖的SDK、第三方类库、中间价等。尤其是像目前主流的Java、.NET等依靠虚拟机的语言和平台,以及主流的基于数据库的应用,都会比较关注。和逻辑架构有紧密的关联。

运行架构

运行架构=物理架构+数据流的控制(系统运行中的数据流向关系)

顾名思义,更关注的是应用程序运行中可能出现的一些问题。例如并发带来的问题,比较常见的“线程同步”问题、死锁问题、对象创建和销毁(生命周期管理)问题等等。开发架构,更关注的是飞机起飞之前的一些准备工作,在静止状态下就能规划好做好的,而运行架构,更多考虑的是飞机起飞之后可能发生的一些问题。

实现架构设计的6个步骤:

需求分析

  根据系统使用人、客户等收集而来的业务实现的背景要求组成的原始需求文档分析,包括了功能要求、质量(性能要求)、约束(时间、预算、可行性分析、风险评估、是否需要对接三方)。这里要输出一份整理过后的需求文档,包含了要做什么(功能范围、非功能性需求),能不能做,能做到的前提要求和要面临的问题,怎么做(进入系统分析实现阶段)。

确定关键需求

       不仅要对功能需求(如用例)进行筛选,还要对非功能需求进行权衡,最终确定对架构起关键作用的需求。如需求是以高性能并发度为关键还是以可扩展性为要求或同时满足,因为考虑到成本、上线时间和现有系统的影响会舍弃一部分需求,需要确定关键需求:核心功能、高风险功能。

概念架构设计

   1个决定4个选型:决定如何划分顶级子系统;架构风格选型(C/S还是B/S架构);开发技术选型(java);集成技术选型(API);二次开发技术选型(API)。

细化架构设计

   5视图法:分别从逻辑架构、物理架构、数据架构、开发架构、运行架构进行设计,每一块的关注点不一样,可细化粗粒度。

领域建模

  领域建模的精髓是 业务决定功能,功能决定模型。将需求业务转化为抽象的模型对象之间的流转关系。

  常用的表达方式是类图 表达模型之间的关系,听得最多的是“建模”。模型的建立也是逐步完善的,还包含了状态(流程图)、特性要求等文字说明。

关于如何领域建模 有专门的 领域驱动设计 方面的书可以参考。

架构验证

   可快速开发一个统一框架(一个原型、一个技术难点)来贯彻架构的设计,再对原型进行测试评审 再对架构进行补充。 

  最后可以总结为可以用5视图法从各方面来描述系统的架构,然后用6步骤来描述怎么实现架构。不过现在还流行一种就是将业务逻辑与物理架构放一起 忽略其中的实现细节。 

  软件架构就是实用而且优雅的设计,它不在于分多少层,或者应用了多少种设计模式/架构模式等。它应该是以满足实现用户需求为前提,以开发人员普遍可接受为根本的,而且要符合系统特性和业务发展需要的,从软件设计的角度,能够达到层次清晰、可维护、可重用、可扩展…就非常优秀了,无需刻意去纠结分了多少层,是否使用了什么模式,有多么抽象等。以面向对象设计为例,基本目标是“高内聚、低耦合”,为此我们可能会遵循一些常见的设计原则(例如经典的SOLID设计原则)。

  通常我们所说的模式,其实又分为很多种,并不是仅仅指的是“设计模式”(设计模式也有千千万,并不是只有常见的GOF 23种设计模式)。通常包括:企业架构模式、设计模式、SOA模式、企业集成模式等等。   强调一下,架构要讲求“实用”,而且开发人员普遍可接受,要符合现状的。否则,再“优雅”的设计,都会沦为高成本的“花架子”,生搬硬套和过度设计只会让项目“流产”。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java程序员秋招面经大合集(BAT美团网易小米华为中兴等)

    1, 自我介绍 2, 项目介绍 3, 项目架构 4, 项目难点 5, Synchronize关键字为什么jdk1.5后效率提高了 6, 线...

    desperate633
  • 助力秋招-独孤九剑破剑式 | 10家企业面试真题

    场景描述:这篇文章是来自一个《大数据技术与架构》的一个读者-逆流而上Mr李,作者总结了自己在应聘过程中的面试题以及经验,珍贵的什么程度?也许你下次的问题就在这上...

    王知无-import_bigdata
  • 持续演进:云原生架构之我见

    目前就职于华为-公司架构部,负责华为公司的Cloud Native、微服务架构推进落地,前后参与了华为手机祥云4.0、物联网IoT2.0的架构设计。曾任当当架构...

    用户1682855
  • 数字化云平台架构与实现

    大家好,我是王葱权,今天给各位简要分享一下普元数字化云平台(the Platform)的架构与实现的相关内容。 ? 今天分享的内容主要有这几个部分: 首先给大家...

    yuanyi928
  • 多篇面经集合,你不容错过的干货!

      5. 写一个单例模式,答主写的是双检查锁单例,问了为什么用 Volatile,synchronize 移到 方法最外面会怎么样?

    牛客网
  • 两个月拿到N个offer,看看我是如何做到的

    Java高级架构
  • 两个月拿到N个offer,看看我是如何做到的

    北京-三年经验-Java,在金三银四这两个月期间(在五月初还去面试了几家,主要是三四月份期面试剧居多),我跳槽面试,前前后后我面试十五家公司,最终,成功拿到了o...

    美的让人心动
  • 热乎乎的计算机视觉岗实习面经请您查收~~

    面试官人比较友好,自己项目细节一定要熟悉,简历上的东西最好清楚掌握,数据结构和常用算法一定要掌握,这是我的第一个面试经历,不管接下来的面试能否通过,都还是值得纪...

    石晓文
  • 金三银四面试回来,我想跟程序员们谈谈

    说来惭愧,也不怕你们笑话。做开发8年多,到目前还是一名不折不扣的扫地僧。年前的辞职,到现在还在家静养中。其实也没什么,就是回家总结一下自己这些年来在外工作与面试...

    烂猪皮
  • 阿里P7架构师分享从业心得,成为架构师的路上少走弯路

    架构师是公司的“金领”,很少需要考虑生存的问题,从而有更多的精力思考关键技术,形成“强者愈强”的良性循环。当然,冰冻三尺非一日之寒,成为一名合格的架构师是一个漫...

    慕容千语
  • Java架构师面试题全分享,你离架构师还有多远?

    经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问。答案会在后面的文章中逐渐发布出来。

    java架构师
  • JAVA架构师面试题,如何成为架构师

    经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问。答案会在后面的文章中逐渐发布出来。 基础题目 Java线程的...

    Java高级架构
  • 面试重点复习大纲

    给Java新手的一些建议-面试指南 面试重要知识点复习大纲 一、Java基础部分 (笔试与面试都会有的) 1.数组中的排序问题(笔试或者机试,前者可能性...

    Java帮帮
  • 嵌入式面试高频面试题

    4、将一个数拆分成三个数,求这三个数最大的乘积(动态规划)。扩展:拆分成n个数,其实有结论的,网上可以搜。最好拆分多个3。

    Jasonangel
  • 面试重要知识点复习大纲

    面试重要知识点复习大纲 一、Java基础部分 (搞定所有技术之后才考虑复习的技术点) 1.数组中的排序问题(笔试或者机试,前者可能性更大) 2...

    Java帮帮
  • [Java面试一]面试复习大纲.

    一枝花算不算浪漫
  • Android:双非大二3轮技术面+HR面,过关斩将收割字节头条客户端offer

    算法:[82. 删除排序链表中的重复元素 II](javascript:void(0);)

    Android技术干货分享
  • 诸葛越:关于算法工程师职业发展的思考

    导读:近年来人工智能技术取得了巨大的突破,应用到工业界的场景也越来越多,吸引了大量的人才涌进算法研究领域。我认识的很多朋友也投身其中,在学术界做研究的有,在工业...

    zenRRan
  • 架构模式的圣经

    在模式领域里,有一部伟大著作给予软件设计领域带来的影响非常大,那就是以德国人Frank Buschmann为主要贡献者的《面向模式的软件架构》(Pattern-...

    张逸

扫码关注云+社区

领取腾讯云代金券