# 架构介绍

此处记录从事软件开发多年来,遇到一些觉得优秀或有价值值得留下细嚼欣赏的软件设计架构(或者说是业务流程)。

人工研判

# PMP知识

  1. PMP感悟

# 推荐阅读

  1. 开发架构-Web实现前后端分离,前后端解耦 (opens new window)
  2. 什么是CAP定理? (opens new window)
  3. 构建自己的知识体系(重要)
  4. 自然语言处理在开放搜索中的应用 (opens new window)
  5. 一整套Java线上故障排查技巧 (opens new window)
  6. Springboot启动扩展点 (opens new window)

软件开发原则

自己理解:领域数据建模:业务分析,数据模型,数据ETL(抽取、转换、加载),数据分析(统计、比对关联),数据展示

文本挖掘、图像挖掘、音频挖掘、视频挖掘

# 软件生态体系

  • 微服务体系

    • 管理体系
      • 开发运维工作管理
      • 开发运营规范标准
    • 技术体系
      • 基础设施(服务器、操作系统)
      • 平台(虚拟化、容器化)
      • 框架
      • 架构
    • 业务体系
      • 业务架构
        • 采集(结构化数据、非结构化数据)
        • 存储(标准化、归一化处理,清洗治理【大数据生态圈】)
        • 分析(算法【分类、聚类】、数学统计、报表服务)
        • 传播(离线同步、实时同步)
        • 展示
      • 业务模型
  • 大数据生态圈

    • 数据存储:Hadoop、HBase、Hive、Clickhouse
    • 数据处理:MapReduce、Spark、Storm、Flink
    • 数据同步:Kafka、NSQ、RabbitMQ、ELK
    • 大数据架构:Lamda架构

# 软件架构师

从理论上总结软件架构师的概念、工作内容、技术要求和成长过程,并对软件架构师的职业规划进行简单的总结。 软件架构师和技术总监是技术发展道路的巅峰,必须对技术、团队项目、产品等融会贯通,它不精通某一种技术,而是 在于对于所有技术在实际应用中的把握。软件架构师是一个不断学习、不断充实自我知识体系的个体,在技术团队中起 着领袖的作用。

  • 架构师的职责和要求,包括以下3个方面:
    • 软件架构师的具体工作。
    • 软件架构师的要求。
    • 软件架构师的成长阶段。

软件架构师的具体工作

  1. 在需求阶段,软件架构师主要负责理解和管理非功能性系统需求,比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等,此外,架构师还要经常审査客户及市场人员所提出的需求,确认开发团队所提出的设计。
  2. 在需求越来越明确后,架构师的关注点开始转移到组织开发团队成员和开发过程定义上。
  3. 在软件设计阶段,架构师负责对整个软件体系结构、关键构件、接口和开发政策的设计。
  4. 在编码阶段,架构师则成为详细设计者和代码编写者的顾问,并且经常性地要举行些技术研讨会、技术培训班等。
  5. 随着软件开始测试、集成和交付,集成和测试支持将成为软件架构师的工作重点。
  6. 在软件维护开始时,软件架构师就开始为下一版本的产品是否应该增加新的功能模块进行决策。

软件架构师的成长阶段

  1. 程序员:需要学习语言基础、设计基础、通信基础等,内容包括Java、C、C++、UML、 RUP、ⅩML、 Socket通信(通信协议)。
  2. 高级程序员:了解分布式系统组建等内容,包括分布式系统原理、EBJ、 CORBA COM/COM+、 Web service、SOA、网络计算机、高性能并发处理等。
  3. 设计师:透彻掌握设计模式,包括设计模式、EJB设计模式、J2EE构架等。

软件架构师职业发展

  1. 产品管理
  2. 项目管理
  3. 团队建设
  4. 发展战略

# 软件架构师职业发展

软件架构师是一个技术团队的灵魂人物,他必须在产品管理、项目管理、团队建设上有着丰富的实战经验,进而走向软件技术人才的顶峰—CTO,进行发展战略的制定。

软件架构师:产品管理 + 项目管理 + 团队建设 = 发展战略CTO

1、产品管理

软件架构师必须能够进行产品管理,产品面向的是一个有方向、延续性开发的软件。这需要面对以下几个方面。

  1. 管理理论:协冋管理软件蕴涵着组织行为管理理论和管理方法,没有管理思想的软件只能就事论事,不能称其为协同管理软件。
  2. 产品技术:计算机技术的发展日新月异,互联网和通信为核心的信息技术飞速发展,给整个世界带来了翻天覆地的变化。网络通过改变生活、空间和时间等物质基础来构建一个流动的空间。新的社会组织形式,正遍及整个世界,组织行为管理的方法也在不断推陈出新,只有与时俱进,才能使产品不落伍。
  3. 客户:协同管理软件产品的成熟很大程度上得益于是否在数量众多的、优秀的、典型的客户中成功实施,原因在于优秀客户在企业组织行为管理上都有自身的独到之处,而且对先进的管理理念和管理手段乐于接受和尝试。

2、项目管理

软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员( People)、产品( Product)、过程( Process)和项目( Project) 进行分析和管理的活动。 软件项目管理的根本目的是为了让软件项目尤其是大型项目的整个软件生命周期(从分析、设计、编码到测试、维护全过程)都能在管理者的控制之下,以预定成 本按期、按质地完成软件交付用户使用。而研究软件项目管理为了从已有的成功或失败的案例中总结出能够指导今后开发的通用原则、方法,同时避免前人的失误。 软件项目管理的内容主要包括如下几个方面:人员的组织与管理、软件度量、软件项目计划、风险管理、软件质量保证、软件过程能力评估、软件配置管理等。这几 个方面都是贯穿、交织于整个软件开发过程中的,其中:

  1. 人员的组织与管理把注意力集中在项目组人员的构成、优化上。
  2. 软件度量用量化的方法评测软件开发中的费用、生产效率、进度和产品质量等要素是否符合期望值,包括过程度量和产品度量两个方面。
  3. 软件项目计划主要包括工作量、成本、开发时间的估计,并根据估计值制定和调整项目组的工作。
  4. 风险管理预测未来可能出现的各种危害到软件产品质量的潜在因素并由此采取措施进行预防。
  5. 质量保证是保证产品和服务充分满足消费者要求的质量而进行的有计划、有组织的活动。
  6. 软件过程能力评估是对软件开发能力的高低进行衡量。
  7. 软件配置管理针对开发过程中人员、工具的配置、使用提出管理策略。

3、团队建设

软件开发中的开发人员是最大的资源。对人员的配置、调度安排贯穿整个软件过程,人员的组织管理是否得当,是影响对软件项目质量的决定性因素。
首先在开始软件开发的时候,要合理地配置人员,根据项目的工作量、所需要的专业技能,再参考各个人员的能力、性格、经验,组织一个高效、和谐的开发小组。 一般来说,一个开发小组人数在5到10人之间最为合适,如果项目规模很大,可以采取层级式结构,配置若干个这样的开发小组。
在选择人员的问题上,要结合实际情况来决定是否选入一个开发组员,并不是一群高水平的程序员在一起就一定可以组成一个成功的小组。作为考察标准,技术水 平、与本项目相关的技能和开发经验,以及团队工作能力都是很重要的因素。一个一天能写一万行代码却不能与同事沟通融洽的程序员,未必适合一个对组员之间 协作要求很高的项目。还应该考虑分工的需要,合理配置各个专项的人员比例。例如一个网站开发项目,小组中有页面美工、后台服务程序、数据库几个部分,应 该合理地组织各项工作的人员配比。对于一个中型农技110网站,对数据采集量要求较高,一个人员配比方案可以是2个美工、2个后台服务程序编写、3个数据采集 整理人员。软件开发中的开发人员是最大的资源。对人员的配置、调度安排贯穿整个软件过程,人员的组织管理是否得当,是影响对软件项目质量的决定性因素。
在组建开发组时,还应充分估计到开发过程中的人员风险。由于工作环境、待遇、工作强度、公司的整体工作安排和其他无法预知的因素,一个项目尤其是开发周 期较长的项目几乎无可避免地要面临人员的流入流出。如果不在项目初期对可能出现的人员风险进行充分的估计,做必要的准备旦风险转化为现实,将有可能给整 个项目开发造成巨大的损失。以较低的代价进行及早的预防是降低这种人员风险的基本策略。

4、发展战略CTO

技术总监(Chief Technology Officer,CTO,又常称为技术官或首席技术官)是企业团体里的高级主管职位之一,是企业内负责技术的最高负责人。
20世纪90年代,因计算机和软件公司热门,很多公司把CTO的名称给予管理计算机系统和软件的负责人。有时CTO和CIO( Chief Information officer,信息管理高负责人) 是同一个人(尤其在软件公司),有时CTO会归于比较精通科学技术的CIO手下。在不同领域的公司,CTO工作性质不同,即使在同一领域,工作性质也可能大不相同。 一般CTO会有以下责任:

  1. 长期技术方向(战略性)
  2. 短期技术方向(战术性)。
  3. 管理研究对公司经营活动和营利的影响。
  4. 公司中使用的软件。

CTO的工作职责主要面向以下方面:

  1. 制订并组织实施技术系统工作目标和工作计划。
  2. 组织制订并实施技术系统规章制度和实施细则。
  3. 组织技术、产品开发与创新。
  4. 组织建立并实施质量体系。
  5. 公司标准化、计量管理工作
  6. 定期进行技术分析和质量分析工作,制订预防和纠正措施。

因此,CTO面向的主要是企业在技术方向上的战略决策工作。

# 架构案例

# 持续集成(CICD)开发管理架构

DevOps,开发&运营,在现在很多企业是比较常见的,特别是对于一些上规模的企业。向一家互联网企业,要与时俱进,选择一个合理的开发架构也是非常重要的。持续集成 作为一项自动化编译构建打包部署工具,是非常不错的选择。如下图所示:

CICD架构

设计方案点评

此处添加点评 对上述系统设计图进行技术点评,从中提炼出有参考价值的信息。

# 企业Web架构

# 日志分析架构

日志分析应该说是一个比较常见通用的功能,基本每个系统都会遇到过。其中经常包含数据采集、数据同步、数据存储、数据检索、数据分析、信息展示几部分。

日志分析系统具有如下典型的特点:

提示

  1. 日志数据具有时序性;
  2. 存储的数据不需要再变化;
  3. 数据量大;

数据采集基本流程

(1)确定采集源和采集目标; (2)分析采集源和采集目标; (3)制定采集方案; (4)执行采集方案; (5)获取整理采集结果; (6)分析评价采集方案;

# 示例一: 基于ELK的日志分析架构

ELK 的架构图

该架构比较通用,搭建起来也比较容易。ELK由Elasticsearch(ES)、Logstash、Kibana三部分软件组成,其中

提示

Elastcsearch负责数据存储、数据检索; Logstash负责数据采集、数据同步,其实客观的说,它只有数据同步功能; Kibana负责数据分析、数据展示功能。

警告

  1. ES索引使用主题词+日期,例如 log-yyyyMM、数据结构采用JSON存储,命名要通俗易懂;
  2. Logstash使用pipeline.yml来配置;
  3. Kibana要学会熟练运用。
# 示例二: 基于CH、Tabix的日志分析架构
  1. IOT采集架构 IOT采集架构

CH是Clickhouse的简称,最近几年在大数据方面发展比较热,其优异的查询性能让人膜拜,作为日志存储组件是非常优秀的。 Tabix则作为CH的可视化查询组件也是非常优秀的,相比DBeaver,其平台迁移能力更稳健。 此处的数据同步组件可以使用Logstash、Flume等。

架构图点评

此处添加点评 对上述系统设计图进行技术点评,从中提炼出有参考价值的信息。

# 示例三: 架构图示例【信息安全行业】
  1. 系统架构 系统架构

  2. 数据分析业务流程图 数据分析业务流程图

  3. 数据治理规范 数据治理规范

架构图点评

此处添加点评 对上述系统设计图进行技术点评,从中提炼出有参考价值的信息。

# 数据中台 & 行业解决方案架构图

  1. 地产行业解决方案 地产行业解决方案

  2. 证券行业解决方案 证券行业解决方案

  3. 零售行业解决方案 零售行业解决方案

  4. 制造行业解决方案 制造行业解决方案

  5. 传媒行业解决方案 传媒行业解决方案

  6. 检务行业解决方案 检务行业解决方案

架构图点评

此处添加点评 对上述系统设计图进行技术点评,从中提炼出有参考价值的信息。

# CAP理论理解

这是一个计算机理论,主要描述分布式计算机系统设计时遇到的问题。其中的 C: 一致性,A:可用性,P:分区容错性。因为分布式系统设计,遇到的网络环境非常复杂,常常会遇到网络通信不通畅(即系统出现分区), 这个时候,系统的功能可用(A),但数据可能会不一致(C)。如果只是为了系统的功能可用,那么这个时候就是AP。但在大多数时候,系统对于 用户的数据要求比较高,这个时候就得限制功能使用,等到系统网络通信恢复后,进行数据同步,保证数据的一致性(C),再提供功能服务。这 个时候就是(CP)。在一个分布式系统环境中,一致性、可用性、分区容错性,这三种无法同时得到满足,最多满足两个。

上次更新: 2021-01-14 08:05:03