【JAVA进阶架构师指南】之一:如何进行架构设计

前言

??本博客是长篇系列博客,旨在帮助想提升自己,突破技术瓶颈,但又苦于不知道如何进行系统学习从而提升自己的童鞋.笔者假设读者具有3-5年开发经验,java基础扎实,想突破自己的技术瓶颈,成为一位优秀的架构师,所谓java基础扎实,比如:
??1.java语言三大特性.
??2.java语言八大基本类型及其表示范围.
??3.为什么float和double存在精度丢失?
??4.publish/private/default/protected表示的范围?
??5.static/final的用法及含义.
??一位Java基础扎实的童鞋,以上问题应该都能答上来,并且能知其然知其所以然,从底层原理明白为什么是这样的,在具备这些基础后,才能进阶突破自己,成为更优秀的工程师.

??当然,本系列文章为笔者原创,许多观点都是笔者自己的观点,假如有不正确或者想和笔者讨论的,欢迎至极,毕竟每个人都会犯错,大家一起进步岂不妙哉!

如何成为一名架构师?

??笔者认为,想成为一名架构师,首先第一点必然是你的技术足够优秀,知识的深度和广度足够,遇到问题能很快从脑海中寻找出最合适的解决之道.其次,架构师会从整体上领导项目,与人打交道必不可少,因此与人沟通这些软技能也必不可少,当然,这个因人而异,有些人天生更会与人打交道,但无论如何,技术足够优秀是基本条件.当然,想成为一名优秀的架构师,实际开发经验是必不可少的,没有多年架构师的经验也不行,但至少,我们想成为一名架构师,理论知识得先掌握不是吗?否则谈何实践呢?因此,我总结了一张JAVA架构师进阶学习图谱:

??当然还有许多技术和技能也是需要的,比如:架构师要进行文档输出,会需要画相关的图,常见的比如:流程图/用例图/时序图/泳道图/状态图/协作图等等(回忆一下这些课程在大学的时候是不是老师都讲过?只是我们当时不在意罢了,至少笔者是这样的,哈哈~).再比如java反射机制及其相关API,高性能NIO---Netty框架等等.如果是大数据相关还需要我们了解flink/blink/spark/hadoop/hbase,不一定全都要会,但是至少脑子里面要有个概念,这个技术是干嘛用的,以至于别人说的时候能听得懂.至于为什么没有画在上面的图中,是因为笔者后续的文章只准备写图中的内容,其余的留给童鞋们自己去学习吧.当然,因为博客篇幅所限,每种技术不可能百分百把所有知识点都讲到,但是保证讲的全部都是干货,能让读完的童鞋有所收获!

架构师应该关注什么?

??这个问题,换句话说,是我们在进行架构设计的时候应该关注什么,笔者认为从大的层面来讲分两类,功能性需求以及非功能性需求,细分的话有以下六个方面:

1.功能

??记得我的老师曾说过,功能是0,其余的是1,再牛逼的架构师,如果不满足功能,再牛逼的设计也是没用的,只有在满足功能的前提下,其他的设计才有用.

2.性能

??对现代系统来说,响应时间越短就越可能留住用户,毕竟谁会忍受打开一个页面要等待10秒甚至几分钟呢?至少笔者在访问任何网站的时候,一个网页加载5秒以上就直接关了.常用的性能指标有QPS(每秒查询速率)/TPS(每秒事务处理率).当然,性能需要在系统开发完成后进行预发环境(和生产环境一样的环境)测试,常用的性能测试工具有apachebench(简称ab)/http_load/jmeter等等.QPS也遵循28原则,一天中80%的访问量集中在20%的时间内,可以据此估算网站的QPS,从而规划服务器配置,如果性能不达标,则需要优化,常见的优化手段有加机器(简单粗暴),前端优化(CDN/动静分离/减少请求次数/),后端代码优化,缓存(如redis),JVM优化.

3.可用性

??可用性是对现代分布式系统来说,当其子系统有一个或几个节点宕机的时候,是否还能继续提供正常的服务.常用的手段是集群以及自动故障转移,几乎所有分布式系统中使用的技术都支持高可用,比如缓存redis官方提供redis-cluster集群,MongoDB分片集群,消息中间件(ActiveMQ/RabbitMQ/kafka/RocketMQ)集群,数据库MySQL集群等等,如果对以上全部都了解的童鞋,总结一下,会发现它们的核心思想都一样,通过集群提供数据冗余,再通过自动发现并且故障转移机制保证组件的高可用.

4.伸缩性

??伸缩性是指当系统容量不够或者多余的时候,是否能方便的进行扩容/缩容处理,很多大公司这方面都做的很好,比较好的策略是容器化,使用docker+k8s进行部署管理,可以方便的进行扩容或者缩容处理,能更好的合理利用资源.

5.扩展性

??扩展性是指当有需求发生变更或者新增的时候,是否能在不改代码或者改动很少代码的情况下就能实现功能.扩展性相当考验一个架构师的功力,笔者看来,想设计一个扩展性很好的系统,除了事先考虑,在合适的情景下使用设计模式也是相当好的方案,因此对架构师而言,设计模式很重要!举个例子,有一个上传服务,使用FTP协议进行上传,我们基于apach ftpClient封装了一套接口,此时另外有一个需求,是需要使用SFTP协议,我们又使用jsch封装了另一套接口,那假如后续又有新的协议呢?每新增一个协议就需要我们新增代码来适配,这个时候使用适配器模式是不是就能很好的解决问题呢?这也符合设计模式的思想,面向接口编程,以后新增一个协议,我们只需要新增一个实现类,而不会改动原有代码,是不是在代码改动最少的情况下满足了需求呢?

6.安全性

??一个网站,如果是用户访问量很大的情况下,很容易遭到网络黑客的攻击,常见的攻击手段包括:

6.1 XSS攻击

??常见的防御手段是消毒(不信任用户输入,对输入进行严格校验和过滤,比如使用"&lt"代替"<"等等).

6.2 SQL注入攻击

??以前我们使用JDBC的时候,使用Statement会导致SQL注入攻击,因此后面有了PreparedStatement预编译的方式来防止SQL注入攻击,并且大量查询的情况下PreparedStatement 效率更高.

6.3 CSRF攻击

??跨站请求伪造,攻击者盗用受害者cookie,以受害者的名义发送恶意请求,常见的防御方式有:表单提交验证码(用户体验相对不友好),URL带token验证,HTTP referer验证等.

6.4 DDOS攻击

??分布式拒绝服务攻击,DOS攻击的进阶版,防御难度很高,并且方案也相对复杂,业界比较厉害的是阿里,多次双11大促都抗住了,毕竟阿里有道哥(吴翰清,阿里最年轻的P8,神一样的存在)及其领导的安全小组的存在.

??当然,还有其他的攻击方式,这里笔者就不一一列出来了,有兴趣的童鞋可以自行了解.下一篇文章,我们正式开始进阶内容---JVM篇,敬请期待!

??如果觉得博主写的不错,欢迎关注博主微信公众号,博主会不定期分享技术干货!

本文由博客一文多发平台 OpenWrite 发布!

原文地址:https://www.cnblogs.com/wukongbubai/p/12529176.html

时间: 2024-10-08 07:50:21

【JAVA进阶架构师指南】之一:如何进行架构设计的相关文章

【JAVA进阶架构师指南】之四:垃圾回收GC

前言 ??在[JAVA进阶架构师指南]系列二和三中,我们了解了JVM的内存模型以及类加载机制,其中在内存模型中,我们说到,从线程角度来说,JVM分为线程私有的区域(虚拟机栈/本地方法栈/程序计数器)和线程公有区域(方法区和java堆),其中线程私有区域内存随着线程的结束而跟着被回收,GC主要关注的是堆和方法区这部分的内存. GC回收算法 ??GC如何确定哪些对象需要回收呢?一般而言,有两种算法:引用计数算法和可达性分析算法. 引用计数算法 ??为每个对象都持有一个引用计数器,初试状态为0,该对象

什么是架构师和如何成为一个架构师

架构的定义 先来看看软件架构的普遍定义吧. 一个程序和计算系统软件体系结构是指系统的一个或多个结构.结构中包括软件的构建,构建的外部可见属性以及它们之间的相互关系. 体系结构并非可运行软件.确切的说,它是一种表达,使软件工程师能够: 1.分析设计在满足规定需求方面的有效性. 2.在设计变更相对容易的阶段,考虑体系结构可能的选择方案. 3.降低与软件构造相关联的风险. 软件架构的生命周期 软件开发有其生命周期,它应该是: 而软件架构也有着其生命周期,它又是怎么样的呢? 软件架构的重要性 为什么说一

[转帖]架构师眼中的高并发架构

架构师眼中的高并发架构 http://www.itpub.net/2019/04/25/1705/ 数据和云 2019-04-25 14:42:34 本文共6557个字,预计阅读需要17分钟. 前言 高并发经常发生在有大活跃用户量和用户高聚集的业务场景中,如:秒杀活动.定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己业务场景的高并发处理方案. 在电商相关产品开发的这些年,我有幸的遇到了并发下的各种坑,这一路摸爬滚打过

系统架构师-基础到企业应用架构-系统建模[中篇](上)

一.上章回顾 上篇文章主要简单的介绍了建模中使用的标准建模语言UML的相关内容,包括用例图与类图的使用方法及如何建模.相信大家对UML建模语言已经有了初步的认 识,还请大家谨记UML不同的建模图形的用处.比如,用例图主要用来描述系统的功能需求.类图主要用来描述实体间的关系.谨记这些就可以帮助我们在系统架构的 过程中深入的分析. 首先向大家道歉,上篇中有部分描述错误的地方,可能对大家造成一定的错误引导.  这是上篇给出的图,我描述的是组合关系. 特别更正为:  这是正确的结果.箭头指向聚合类.描述

架构师眼里的高并发架构

前言 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己业务场景的高并发处理方案. 在电商相关产品开发的这些年,我有幸的遇到了并发下的各种坑,这一路摸爬滚打过来有着不少的血泪史,这里进行的总结,作为自己的归档记录,同时分享给大家. 服务器架构 业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式服务. 一个可以支持高并发的服务少不

系统架构师秘籍(三)架构视角和关注点

上次的博文中,我们介绍了一下软件架构的基本概念,接下来我们介绍一下如何来架构一个软件系统. 当我们开始进行系统架构设计的时候,通常会考虑以下几点: 所设计的软件体系结构的主要功能要素是什么. 如何将这些要素与其他系统关联. 哪些信息需要存储.管理和展示. 要实现这些功能要素需要什么硬件和软件. 所设计的软件体系结构提供什么样的特性和能力. 开发.测试.支持.培训环境都需要做什么. 考虑上述问题的时候,我们从哪些层面来考虑呢?那就是架构视角和关注点两个层面. 架构视角 架构视角是从一个或多个角度对

系统架构师-基础到企业应用架构-业务逻辑层

一.上章回顾 上章我们主要讲述了系统设计规范与原则中的具体原则与规范及如何实现满足规范的设计,我们也讲述了通过分离功能点的方式来实现,而在软件开发过程中的具 体实现方式简单的分为面向过程与面向对象的开发方式,而目前更多的是面向对象的开发设计方式.并且我们也讲述了该如何通过设计手段去分析功能点及设计分离 点,应该如何在设计的过程中分析的角度及如何去满足设计规范与原则.首先我们通过下图来回顾下上章要点: 二.摘要 本文将已架构的方式去分析分层结构中的业务层的设计,如何写出来内聚度,高耦合的业务逻辑层

系统架构师-基础到企业应用架构-系列索引

系统架构师-基础到企业应用架构-索引 系统架构师-基础到企业应用架构系列会从,系统架构的起源.发展.架构师必备的基础知识与技能.如何把架构应用到企业应用中去.整个系列计划30篇左右,每 一篇都是自己在系统架构过程中的总结和经验,每一篇我都会抱着认真的态度去完成,宁缺毋滥的原则.希望本系列看完之后不但能够帮助看过这个系列的人对系统架 构有深刻的认识,并且能够掌握系统架构中的必备知识,应用到自己的工作中去,更可以共同提高大家的个人能力.本系列希望能够抛砖引玉,希望大家能够多提出宝 贵意见. 前篇 1

系统架构师-基础到企业应用架构-系统设计规范与原则[上篇]1

一.上章回顾 在上篇中我们讲解了几类UML2.0语言新推出的建模图形,总体来说通过这些图形能更详细的将某类信息表达出来.在这里我们简单回顾上篇讲解的内容. 上图中已经简单介绍了上章讲述的内容,具体内容请看:系统架构师-基础到企业应用架构-系统建模[下篇]. 二.摘要 本章将主要的简单介绍在系统架构中的设计模式及相应规范准则.并结合相应的代码来说明如何遵循系统架构中的一些基本的设计规范及准则.而我们将在本文介 绍几类常用的设计规范,我们先来看看结构化设计的二个基本原则: 当然既然提出了基本的准则,