您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

程序员如何蜕变成架构师

时间:2019-10-04 09:50:51  来源:  作者:

程序员更多的关注的是局部,而架构师则是全局,这个蜕变的过程,是一个长期积累的过程,是一个需要量变的过程,最后才能从量变转化为质变,成为一名合格的架构师。

一、什么是架构

  • 架构是系统与子系统、模块与组件、框架与架构以及它们之间的协作关系、约束规范、指导原则。
  • 架构的本质是对系统进行有序化地重构,使其符合当前业务的发展,并可以快速扩展。
  • 什么样的系统要考虑做架构设计
  1. 需求相对复杂.
  2. 非功能性需求在整个系统占据重要位置.
  3. 系统生命周期长,有扩展性需求.
  4. 系统基于组件或者集成的需要.
  5. 业务流程再造的需要.

二、架构分类

  • 架构可分为业务架构、应用架构、技术架构, 代码架构, 部署架构。
程序员如何蜕变成架构师

 

  • 业务架构是战略,应用架构是战术,技术架构是装备。其中应用架构承上启下,一方面承接业务架构的落地,另一方面影响技术选型。
  1. 业务架构
  • 包括业务规划,业务模块、业务流程,对整个系统的业务进行拆分,对领域模型进行设计,把现实的业务转化成抽象对象。
  • 没有最优的架构,只有最合适的架构,一切系统设计原则都要以解决业务问题为最终目标,脱离实际业务的技术情怀架构往往会给系统带入大坑,任何不基于业务做异想天开的架构都是耍流氓。
  • 所有问题的前提要搞清楚我们今天面临的业务量有多大,增长走势是什么样,而且解决高并发的过程,一定是一个循序渐进逐步的过程。 合理的架构能够提前预见业务发展1~2年为宜。这样可以付出较为合理的代价换来真正达到技术引领业务成长的效果。
程序员如何蜕变成架构师

 

2.应用架构

  • 划分

1)、 职责划分: 明确应用(各个逻辑模块或者子系统)边界

a. 逻辑分层

b. 子系统、模块定义。

c. 关键类。

2)、 职责之间的协作:

a. 接口协议:应用对外输出的接口。

b. 协作关系:应用之间的调用关系。

  • 应用分层有两种方式:

1)、水平分(横向)按照功能处理顺序划分应用,比如把系统分为web前端/中间服务/后台任务,这是面向业务深度的划分。

2)、垂直分(纵向),按照不同的业务类型划分应用,比如进销存系统可以划分为三个独立的应用,这是面向业务广度的划分。

总结:业务架构、应用架构、技术架构三者之间,应用架构是个承上启下的连接作用,应用架构依赖业务架构,同时又影响技术架构。

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

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

公司统一代码架构,如果不同开发团队使用不同的技术栈或者组件,结果公司整体架构设计就会失控

  • 代码架构主要定义:

1)、 代码单元

a. 配置设计

b. 框架、类库

2)、 代码单元组织:

a. 编码规范,编码的惯例

b. 项目模块划分

c .顶层文件结构设计,比如mvc设计

d.依赖关系

4.技术架构

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

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

5.部署拓扑架构

程序员如何蜕变成架构师

 

三、架构设计的3个原则

1、简单

1)组件越多,就越有可能其中某个组件出现故障

2)某个组件改动,会影响关联的所有组件

3)定位一个复杂系统中的问题总是比简单系统更加困难

总结:简单优于复杂,无论是结构的复杂性,还是逻辑的复杂性,都会存在各种问题,所以架构设计时如果简单的方案和复杂的方案都可以满足需求,最好选择简单的方案

2、合适

合适优于业界领先,根据自身实际情况,采用适合自己的业务,应用,技术架构,不能生搬硬套。这也是哲学上所说的,客观决定主观。

3、演化

演化优于一步到位

  • 首先,设计出来的架构要满足当时的业务需要。
  • 其次,架构要不断地在实际应用过程中迭代,保留优秀的设计,修复有缺陷的设计,改正错误的设计,去掉无用的设计,使得架构逐渐完善。
  • 第三,当业务发生变化时,架构要扩展、重构,甚至重写;代码也许会重写,但有价值的经验、教训、逻辑、设计等(类似生物体内的基因)却可以在新架构中延续。

四、架构的演进

业务架构决定应用架构,应用架构需要适配业务架构,并随着业务架构不断进化,同时应用架构依托技术架构最终落地。

程序员如何蜕变成架构师

 

架构演进路程:单体应用->分布式应用服务化-> 微服务->service mesh

1、单体应用

  • 非功能性需求的做法:

1)、性能需求:使用缓存改善性能

2)、并发需求:使用集群改善并发

3)、读写分离:数据库地读写分离

4)、使用反向代理和cdn加速

5)、使用分布式文件和分布式数据库

  • 缺点

1)、复杂度高

2)、耦合性高

3)、可靠性差

4)、扩展性差

2、分布式应用

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

1)降低了耦合度:把模块拆分,使用接口通信,降低模块之间的耦合度。

2)责任清晰:把项目拆分成若干个子项目,不同的团队负责不同的子项目。

3)扩展方便:增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。

4)部署方便:可以灵活的进行分布式部署。

5)提高代码的复用性:比如Service层,如果不采用分布式rest服务方式架构就会在手机Wap商城,微信商城,PC,AndroidIOS每个端都要写一个Service层逻辑,开发量大,难以维护一起升级,这时候就可以采用分布式rest服务方式,公用一个service层。

缺点:系统之间的交互要使用远程通信,接口开发增大工作量,但是利大于弊。

3、微服务应用

微服务的特点:

1)、易于开发和维护: 一个微服务只会关注一个特定的业务功能,所以它业务清晰、代码量较少。 开发和维护单个微服务相对简单。而整个应用是由若干个微服务构建而成的,所以整个应用也会被维持在一个可控状态。

2)、单个微服务启动较快: 单个微服务代码量较少, 所以启动会比较快

3)、局部修改容易部署: 单体应用只要有修改,就得重新部署整个应用,微服务解决了这样的问题。 一般来说,对某个微服务进行修改,只需要重新部署这个服务即可。

4)功能纯粹、耦合性低:服务拆分,每个服务功能单一,耦合性低

缺点:运维要求较高、分布式固有的复杂性、接口调整成本高

4、service mesh

微服务的下一个阶段,即service mesh

Service Mesh 的核心其实就2个模块:SideCar 与 Control Plane

用来解决微服务架构中 服务间可靠调用、服务治理 等问题

大家有兴趣可以专门研究一下,在此不做过多讲述

五、衡量架构的合理性

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

1、稳定性

1)要尽可能的提高软件的可用性:黑盒白盒测试、单元测试、自动化测试、故障注入测试、提高测试覆盖率等方式来一步一步推进

2、高效性

1)、 文档化:不管是整体还是部分的整个生命周期内都必须做好文档化,变动的来源包括但不限于BUG,需求。

2)、 可扩展:软件的设计秉承着低耦合的理念去做,注意在合理的地方抽象。方便功能更改、新增和运用技术的迭代,并且支持在适时对架构做出重构。

3)、高复用:为了避免重复劳动,为了降低成本,我们希望能够重用之前的代码、之前的设计。这点对于架构环境的依赖是最大的。

3、安全性

保证数据的安全

  • xss攻击
  • sql注入
  • csr攻击
  • web防火墙漏洞
  • 安全漏洞
  • ssl

六、常用手段

  • 应用服务器和数据服务器分离
  • 使用缓存改善性能
  • 使用集群提高并发和可用性
  • 数据库地读写分离
  • 使用反向代理和cdn加速
  • 使用分布式文件和分布式数据库
  • 异步降低系统的耦合性,提供系统的可用性、加快响应速度
  • 冗余:冷备和热备,保证系统的可用性


Tags:架构师   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  Tags: 架构师  点击:(5)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  Tags: 架构师  点击:(17)  评论:(0)  加入收藏
1 概述数据结构和内部编码 无传统关系型数据库的 Table 模型schema 所对应的db仅以编号区分。同一 db 内,key 作为顶层模型,它的值是扁平化的。即 db 就是key的命名空间。 key...【详细内容】
2021-11-01  Tags: 架构师  点击:(28)  评论:(0)  加入收藏
前面已经聊到了如何做高层架构设计,并开始让设计落地,去划分了系统边界,进行了服务和模块的拆分,也就是系统的整体轮廓已经有了。接下来,就该来做整体的技术架构设计了。其实做架...【详细内容】
2021-09-17  Tags: 架构师  点击:(77)  评论:(0)  加入收藏
有朋友或许感兴趣到底什么是解决方案架构师,也肯定有一些人心里充满了困惑:1、架构师又跑售前又做项目,到底是干嘛的?如何成为一个架构师?2、经常听人说方案,究竟什么是方案,怎么写...【详细内容】
2021-08-19  Tags: 架构师  点击:(107)  评论:(0)  加入收藏
第一章:认识SpringSpring认识框架spring全家桶: spring ,springmvc,spring boot,spring cloudspring:出现在2002左右,解决企业开发的难度,减轻对项目模块之间的管理。类和类之间的...【详细内容】
2021-06-24  Tags: 架构师  点击:(123)  评论:(0)  加入收藏
从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师。对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式。国...【详细内容】
2021-06-18  Tags: 架构师  点击:(114)  评论:(0)  加入收藏
分布式一致性算法概要随着各种高并发访问、海量数据处理等应用场景越来越多,为了应对这些使用场景,分布式系统应运而生。分布式系统得以发展,得益于诸多优点,比如:可以避免 单点...【详细内容】
2021-04-13  Tags: 架构师  点击:(238)  评论:(0)  加入收藏
前言我们可以从java.io.InputStream类中看到,抽象出一个read方法,用来读取已经打开的InputStream实例中的字节,每次调用read方法,会读取一个字节数据,该方法抽象定义,如下所示:publ...【详细内容】
2021-04-09  Tags: 架构师  点击:(161)  评论:(0)  加入收藏
昨天有网友问我,他原先没有学过奥数,问能不能当系统架构师?其他也有人有疑问,是不是应该先学数学,然后在考研的时候转入计算机? 我先说一下结论,没有学过奥数,完全可以当系统架构师...【详细内容】
2021-03-09  Tags: 架构师  点击:(233)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(5)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(21)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条