写点什么

Java 项目架构的演变,Java 完全自学手册下载

作者:MySQL神话
  • 2021 年 11 月 27 日
  • 本文字数:1997 字

    阅读完需:约 7 分钟


现在出去找工作如果不会点分布式和微服务相关的内容,都不太好更面试官扯蛋。但这些架构也不是突然就出现的,而是经过不但演变才出现及流行起来的,本文就给大家来梳理下 java 项目架构的演变历程。


系统架构演化历程


======================================================================


单体架构




大型网站都是从小型网站发展而来的,网站架构也是一样,是从小型网站架构逐步演化而来的,小型网站最开始没有太多人访问,只需要一台服务器就绰绰有余了,这时的架构如下:



应用程序、数据库、文件等所有的资源都在一台服务器上,通常服务器操作系统使用 Linux、应用程序使用 java 或者其他语句,然后部署在 Apache 或者 Nginx 上。数据库使用 MySQL,使用开源的技术实现,然后部署在一台廉价的服务器上就开始了网站的发展之路。


应用服务和数据服务分离




好景不长,随着公司业务的发展,一台服务逐渐满足不了需求,越来越多的用户访问导致性能越来越差,数据存储空间开始不足,这时我们需要将应用和数据分离,分离后开始使用三台服务器:应用服务器、文件服务器、数据库服务器。如图:



应用和数据分离后,不同特性的服务器承担着不同的服务角色,网站的并发处理能力和数据存储空间都得到了很大的改善,支持网站业务进一步发展,但是随着用户逐渐增多,数据库压力越来越大,访问延迟,进而影响整个网站的性能,此时需要进一步优化。


缓存的使用




网站访问有个著名的二八定律,即 80%的业务集中访问在 20%的数据上,如果我们将这一小部分的数据缓存在内存中,能够很好的减少数据库的访问压力,提高整个网站的数据访问速度。



缓存常用的组件可以是 Redis,ehcache 等


集群的使用




缓存解决了数据库访问量比较大的问题,但是并不能解决随着业务增多造成的服务器并发压力大的问题,这时我们需要增加一台应用服务器


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

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


来分担原来服务器的访问压力和存储压力。如图:



通过负载均衡调度服务器,可将来自用户的访问请求分发到应用服务器中的任何一台服务器中,这样多台服务器就分担了原来一台服务器的压力,我们只需要注意会话的一致性就可以了。


数据库读写分离




系统正常运行了一段时间后,虽然加的有缓存,使绝大多数的数据库操作可以不通过数据库就能完成,但是任然有一部分的操作(缓存访问不命中,缓存过期)和全部的写操作需要访问数据库,当用户达到一定规模后,数据库因为负载压力过大还是会成为系统的瓶颈,


这时主流的数据库都提供的有主从热备份功能,通过配置两台数据库实现主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。可以利用这一功能来实现数据库读写分离。从而改善数据库的负载压力,如图:



mysql 的读写分离可以通过自身自带的从主复制实现,Oracle 的话可以通过阿里巴巴的 mycat 组件来实现。


反向代理和 CDN 加速




为了应付复杂的网络环境和不同地区用户的访问,通过 CDN 和反向代理加快用户访问的速度,同时减轻后端服务器的负载压力。CDN 与反向代理的基本原理都是缓存。CDN 部署在网络提供商的机房。用户请求到来的时候从距离自己最近的网络提供商机房获取数据,而反向代理则部署在网站的中心机房中,请求带来的时候先去反向代理服务器中查看请求资源,如果有则直接返回。如图:



使用 CDN 和反向代理的目的都是尽早返回数据给用户,一方面加快用户的访问速度,另一方面也减轻后端服务器的负载压力。


分布式文件和分布式数据库




任何强大的单一服务器都满足不了大型网站持续增长的业务需求。数据库经过读写分离后,从一台服务器拆分成两天服务器,但是随着业务的增长后面依然不能满足需求,这时我们需要使用分布式数据库,同时文件系统也一样,需要使用分布式文件系统。


分布式数据库是数据库拆分的最后的手段,只有在表单数据规模非常庞大的时候才使用,不到不得已时,我们更常用的手段是业务分库,将不同的业务数据部署在不同的物理服务器上。



NoSql 和搜索引擎




随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,这时一些 NoSQL(Reids,HBase,mongodb)数据库技术和搜索引擎(Solr,Elasticsearch)的时候就显得很有必要。如下图:

学习分享,共勉

这里是小编拿到的学习资源,其中包括“中高级 Java 开发面试高频考点题笔记 300 道.pdf”和“Java 核心知识体系笔记.pdf”文件分享,内容丰富,囊括了 JVM、锁、并发、Java 反射、Spring 原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有 Java 进阶学习的知识笔记脑图(内含大量学习笔记)!


资料整理不易,读者朋友可以转发分享下!


Java 核心知识体系笔记.pdf



中高级 Java 开发面试高频考点题笔记 300 道.pdf



架构进阶面试专题及架构学习笔记脑图



Java 架构进阶学习视频分享


本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

用户头像

MySQL神话

关注

还未添加个人签名 2021.11.12 加入

还未添加个人简介

评论

发布
暂无评论
Java项目架构的演变,Java完全自学手册下载