编程语言
首页 > 编程语言> > 什么是真正的架构设计?十年Java经验让我总结出了这些,不愧是我

什么是真正的架构设计?十年Java经验让我总结出了这些,不愧是我

作者:互联网

②. 职责之间的协作:

应用分层有两种方式:

应用的合反映应用之间如何协作,共同完成复杂的业务case,主要体现在应用之间的通讯机制和数据格式,通讯机制可以是同步调用/异步消息/共享DB访问等,数据格式可以是文本/XML/JSON/二进制等。

应用的分偏向于业务,反映业务架构,应用的合偏向于技术,影响技术架构。分降低了业务复杂度,系统更有序,合增加了技术复杂度,系统更无序。

应用架构的本质是通过系统拆分,平衡业务和技术复杂性,保证系统形散神不散。

系统采用什么样的应用架构,受业务复杂性影响,包括企业发展阶段和业务特点;同时受技术复杂性影响,包括IT技术发展阶段和内部技术人员水平。业务复杂性(包括业务量大)必然带来技术复杂性,应用架构目标是解决业务复杂性的同时,避免技术太复杂,确保业务架构落地。

3. 数据架构

数据架构指导数据库的设计. 不仅仅要考虑开发中涉及到的数据库,实体模型,也要考虑物理架构中数据存储的设计。

4. 代码架构(也叫开发架构)

子系统代码架构主要为开发人员提供切实可行的指导,如果代码架构设计不足,就会造成影响全局的架构设计。比如公司内不同的开发团队使用不同的技术栈或者组件,结果公司整体架构设计就会失控。

代码架构主要定义:

①. 代码单元:

②. 代码单元组织:

5. 技术架构

技术架构:确定组成应用系统的实际运行组件(lvs,nginx,tomcat,php-fpm等),这些运行组件之间的关系,以及部署到硬件的策略。

技术架构主要考虑系统的非功能性特征,对系统的高可用、高性能、扩展、安全、伸缩性、简洁等做系统级的把握。

系统架构的设计要求架构师具备软件和硬件的功能和性能的过硬知识,这也是架构设计工作中最为困难的工作。

6. 部署拓扑架构图(实际物理架构图)

拓扑架构,包括架构部署了几个节点,节点之间的关系,服务器的高可用,网路接口和协议等,决定了应用如何运行,运行的性能,可维护性,可扩展性,是所有架构的基础。这个图主要是运维工程师主要关注的对象。

物理架构主要考虑硬件选择和拓扑结构,软件到硬件的映射,软硬件的相互影响。

三. 架构级别

我们使用金字塔的架构级别来说明,上层级别包含下层:

战略设计与战术设计

基于架构金字塔,我们有了系统架构的战略设计与战术设计的完美结合:

四. 应用架构演进

业务架构是生产力,应用架构是生产关系,技术架构是生产工具。业务架构决定应用架构,应用架构需要适配业务架构,并随着业务架构不断进化,同时应用架构依托技术架构最终落地。

架构演进路程:单体应用→分布式应用服务化→微服务

1. 单体应用

企业一开始业务比较简单,只应用某个简单场景,应用服务支持数据增删改查和简单的逻辑即可,单体应用可以满足要求。

典型的三级架构,前端(Web/手机端)+中间业务逻辑层+数据库层。这是一种典型的Java Spring MVC或者Python Django框架的应用。其架构图如下所示:

针对单体应用,非功能性需求的做法:

  1. 性能需求:使用缓存改善性能
  2. 并发需求:使用集群改善并发
  3. 读写分离:数据库地读写分离
  4. 使用反向代理和cdn加速
  5. 使用分布式文件和分布式数据库

单体架构的应用比较容易部署、测试, 在项目的初期,单体应用可以很好地运行。然而,随着需求的不断增加, 越来越多的人加入开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高。下面是单体架构应用的一些缺点:

2. 分布式

随着业务深入,业务要求的产品功能越来越多,每个业务模块逻辑也都变得更加复杂,业务的深度和广度都增加,使得单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,增加新功能开发周期越来越长,维护成本越来越高。

这时需要对系统按照业务功能模块拆分,将各个模块服务化,变成一个分布式系统。业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互。

该架构相对于单体架构来说,这种架构提供了负载均衡的能力,大大提高了系统负载能力,解决了网站高并发的需求。另外还有以下特点:

3. 微服务

紧接着业务模式越来越复杂,订单、商品、库存、价格等各个模块都很深入,比如价格区分会员等级,访问渠道(app还是PC),销售方式(团购还是普通)等,还有大量的价格促销,这些规则很复杂,容易相互冲突,需要把分散到各个业务的价格逻辑进行统一管理,以基础价格服务的方式透明地提供给上层应用,变成一个微内核的服务化架构,即微服务。

微服务的特点:

微服务虽然有很多吸引人的地方,但它并不是免费的午餐,使用它是有代价的。使用微服务架构面临的挑战。

五. 衡量架构的合理性

架构为业务服务,没有最优的架构,只有最合适的架构,架构始终以高效,稳定,安全为目标来衡量其合理性。

合理的架构设计:

1. 业务需求角度

2. 非业务需求角度

①. 稳定性。指标:

②. 高效指标:

③. 安全指标

六. 常见架构误区

开高走落不到实处

常见误区

七. 架构知识体系

1. 架构演进

2. 架构模式

分层:横向分层:应用层,服务层,数据层

分割:纵向分割:拆分功能和服务

分布式

集群:提高并发和可用性

缓存:优化系统性能

异步:降低系统的耦合性

冗余:冷备和热备,保证系统的可用性

自动化:发布,测试,部署,监控,报警,失效转移,故障恢复

安全:

3. 架构核心要素

高性能:网站的灵魂

可用性:保证服务器不宕机,一般通过冗余部署备份服务器来完成

伸缩性:建集群,是否快速应对大规模增长的流量,容易添加新的机器

集群

可扩展性:主要关注功能需求,应对业务的扩展,快速响应业务的变化。是否做法开闭原则,系统耦合依赖

安全性:网站的各种攻击,各种

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

漏洞是否堵住,架构是否可以做到限流作用,防止ddos攻击。

可扩展性:主要关注功能需求,应对业务的扩展,快速响应业务的变化。是否做法开闭原则,系统耦合依赖

安全性:网站的各种攻击,各种

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

漏洞是否堵住,架构是否可以做到限流作用,防止ddos攻击。

标签:服务,架构设计,不愧,Java,模块,业务,应用,架构,分布式
来源: https://blog.csdn.net/m0_64867802/article/details/121841575