热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

做好架构需要具备哪些基础知识

前言最近在整理架构方面的知识体系,因为以前也没有系统性的学习和整理过,所以在网上搜索了很多相关的资料。对于IT专业人员来说,选择架构师作职

前言

        最近在整理架构方面的知识体系,因为以前也没有系统性的学习和整理过,所以在网上搜索了很多相关的资料。对于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、应用层设计

  高可用数据库架构

  双主架构

  主从同步

  读写分离

  分表分库





总结

        本文的架构基础知识是我根据前期收集的资料进行整理输出,适合初入架构师的同学,如果觉得非常适合你,请在评论区发表你的感想哦,大家可以根据做好架构需要具备的架构基础知识根据自己要的情况选择性学习和实践。


推荐阅读
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)【下载本文PDF进行阅读】设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践。在经过多年的软件开发实践之后,回过头 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • 目录Atlas介绍Atlas部署Atlas基本管理Atlas结合MHA故障恢复读写分离建议Atlas介绍Atlas是由Qihoo360Web平台部基础架构团队开发维护的一个基于My ... [详细]
  • 什么是网关服务器初学linux服务器开发时,我们的服务器是很简单的,只需要一个程序完成与客户端的连接,接收客户端数据,数据处理,向客户端发送数据。但是在处理量很大的情况下,一 ... [详细]
  • 软件测试工程师,需要达到什么水平才能顺利拿到 20k+ 无压力?
    前言最近看到很多应届生晒offer,稍有名气点的公司给出的价格都是一年30多W或者月薪20几k,相比之下工作几年的自己薪资确实很寒酸.根据我自己找工作经历,二线城市一般小公司招聘 ... [详细]
  • 内网知识整理
    内网 ... [详细]
author-avatar
手机用户2502872003
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有