概述
前言
最近在整理架构方面的知识体系,因为以前也没有系统性的学习和整理过,所以在网上搜索了很多相关的资料。对于IT专业人员来说,选择架构师作职业,前途无量,但想从为真正的架构师,需要具备什么样的架构知识体系?可能很多人没有进行过系统性的总结,下面从我了解到的架构知识体系,和大家概括性的分享一下。
一、什么是架构?
架构是系统的骨架,支撑和连接各个部分,包括组件、链接件、约束规范,以及指导这些内容设计与演化的原理,架构的本质就是对系统进行有序化地重构以至符合当前业务的发展,并能够快速扩展,当系统需求相对复杂、非功能性需求在整个系统占据重要位置时,我们需要重点考虑作架构设计。
二、如何做好架构设计
架构设计要做好,不是一件容易的事情,需要大量的经验积累,但是我们业界已经有了很多成熟的架构设计模式,我们不需要闭门造车,可以在理解清楚业务需求后,找到类似的架构设计,基于成熟的架构设计方案,进行改造,变成适合自己业务需求的架构。
第一步、分析需求
架构设计基本需求就是满足业务需求,搞清楚需求至关重要,产品需求,只有功能的描述,界面的交互,还需要进一步进行抽象。
一个常用的分析方法就是分析用例,了解角色和使用场景。
第二步、选择相似的成熟的架构设计方案
架构设计基本需求就是满足业务需求,搞清楚需求至关重要,产品需求,只有功能的描述,界面的交互,还需要进一步进行抽象。
比如业界流行的分层架构设计我们可以进行参考和选择
第三步、自顶向下构建架构
自顶向下构建架构要点如下:
1.首先定义问题,而定义问题中最重要的是定义客户的问题。定义问题,特别是识别出关键问题,关键问题是对客户有体感,能够解决客户痛点,通过一定的数据化来衡量识别出来,关键问题要优先给出解决方案。
2.问题定义务必加入时间维度,把手段/方案和问题定义区分开来。
3.问题定义中,需要对问题进行升层思考后再进行升维思考,从而真正抓到问题的本质,理清和挖掘清楚需求;要善用第一性原理思维进行
4.问题解决原则:先解决客户的问题(使命),然后才能解决自己的问题(愿景);务必记住不是强调我们怎么样,而是我们能为客户具体
解决什么问题,然后才是我们变成什么,从而怎么样去更好得服务客户。
5.善用多种方法对客户问题进行分析,转换成我们产品或者平台需要提供的能力,比如仓储系统 WMS 可以提供哪些商业能力。
6.对我们的现有的流程和能力模型进行梳理,找到需要提升的地方,升层思考和升维思考真正明确提升部分。
7.定义指标,并能够对指标进行拆解,然后进行数学建模。
8.将抽象出来的能力诉求转换成技术挑战,此步对于技术人员来说相当于找到了靶子,可以进行方案的设计了,需要结合自底向上的架构推导方式。
9.创新可以是业务创新,也可以是产品创新,也可以是技术创新,也可以是运营创新,升层思考、升维思考,使用第一性原理思维、生物学(进化论--进化=变异+选择+隔离、熵增定律、分形和涌现)思维等哲科思维可以帮助我们在业务,产品,技术上发现不同的创新可能。可以说哲科思维是架构师的灵魂思维。
第四步、验证和优化架构设计方案
在技术方案完成后,还需要去验证方案是不是满足设计的目标,能否满足需求和未来需求的变化,能否保障软件有效的运行。
方案的验证时贯穿整个设计始终的,一个完整的架构设计方案,需要有多次的评审会议,充分收集各方面的反馈,反复修改后才能最终确定下来。
在第二、三步,可能会生成几个技术方案,这时候就需要做出一些技术上的决策。决策时,需要考虑清楚方案是否能低成本的完成软件需求的开发,同时能低成本的运行和维护该软件。还有你要考虑架构预期要满足多长时间的业务增长,比如说半年还是一年还是三年。
在架构设计确定后,就可以基于架构设计的结果大家一起分工协作了。架构设计并不是确定后就不修改了,在实际开发的过程中,还需要根据情况对架构进行优化和调整。
三、做好架构需要具备的架构基础知识
1、架构演进
初始阶段,LAMP,部署在一台服务器
应用服务器和数据服务器分离
使用缓存改善性能
使用集群改善并发
数据库地读写分离
使用反向代理和cdn加速
使用分布式文件和分布式数据库
业务拆分
分布式服务
2、架构模式
分层:横向分层:应用层,服务层,数据层
分割:纵向分割:拆分功能和服务
分布式:分布式应用和服务、分布式静态资源、分布式数据和存储、分布式计算
集群:提高并发和可用性
缓存:优化系统性能、cdn、反向代理访问资源、本地缓存、分布式缓存
异步:降低系统的耦合性 、提供系统的可用性、加快响应速度
冗余:冷备和热备,保证系统的可用性
自动化:发布,测试,部署,监控,报警,失效转移,故障恢复
3、架构核心要素
高性能:网站的灵魂、性能测试、前端优化、应用优化、数据库优化
可用性:保证服务器不宕机,一般通过冗余部署备份服务器来完成、负载均衡、数据备份
、自动发布、灰度发布、监控报警
伸缩性:建集群,是否快速应对大规模增长的流量,容易添加新的机器、集群、负载均衡
、缓存负载均衡
可扩展性:主要关注功能需求,应对业务的扩展,快速响应业务的变化。是否做法开闭原则,系统耦合依赖、分布式消息、服务化
安全性:网站的各种攻击,各种漏洞是否堵住,架构是否可以做到限流作用,防止ddos攻击。xss攻击、sql注入、csr攻击、web防火墙漏洞、安全漏洞、ssl
4、架构设计
1、设计原则
冗余设计、回滚设计 、监控设计、故障隔离、可独立部署、无状态设计、成熟技术、异步设计、禁用设计、服务可降级、服务可限流、水平扩展。
2、接入层设计
DNS轮询
动静分离
方向代理:LVS,NGINX、CDN
接入层安全:DNS劫持、限流,防刷。
3、应用层设计
通信机制:RPC,MQ
异步
连接池
配置中心
4、应用层设计
高可用数据库架构
双主架构
主从同步
读写分离
分表分库
总结
本文的架构基础知识是我根据前期收集的资料进行整理输出,适合初入架构师的同学,如果觉得非常适合你,请在评论区发表你的感想哦,大家可以根据做好架构需要具备的架构基础知识根据自己要的情况选择性学习和实践。
最后
以上就是唠叨草丛为你收集整理的做好架构需要具备哪些基础知识前言一、什么是架构?二、如何做好架构设计总结的全部内容,希望文章能够帮你解决做好架构需要具备哪些基础知识前言一、什么是架构?二、如何做好架构设计总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复