网站发展历程九大阶段,及知识体系梳理

news/2024/5/20 20:39:25/文章来源:https://blog.csdn.net/java_mindmap/article/details/103692188

网站发展历程

用思维导图学习java真的是一个不错的方式!今天,我们用导图的方式来梳理一下一个网站从0到1流量逐渐增加的过程中会涉及到的技术与知识体系。

讲讲一个网站在用户量越来越多,并发越来越高的情况下,它的架构是如何演变的呢?接下来,我们会用九个阶段来一一分析各个阶段发展的过程会涉及到的技术要点。

java入门

首先,不管怎么样,要搞一个网站,必须具备Java基础知识吧。在java基础里面,数据结构中的数组、链表、队列、栈的特点和使用场景要熟悉。线程、反射也是比较基础的东西,面试常问。在设计模式里面,我觉得还不用很特意去学习,很多容易忘记,很多时候我们的业务主要学会封装,那么代码管理起来就不叫简单的了,常用的模式:单例、工厂、代理、观察者、模板、策略这几个可以先熟悉一下。web方面的知识,http/tcp的四层需要了解,对于servlet、filter、listener都是web基础,session与cookie关系一定要弄懂。

框架基础

spring、mybatis是java程序员必备框架基础。spring的ioc、aop是核心概念,要对bean容器,利用aop自定义注解要熟悉运用。springmvc是现在使用最广泛的mvc框架。对应mvc的各大组件之间的关系和流程一定要熟悉,还有配置多数据源等。

SpringMVC流程

  • 1、用户发送请求至前端控制器DispatcherServlet。

  • 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。

  • 3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

  • 4、DispatcherServlet调用HandlerAdapter处理器适配器。

  • 5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

  • 6、Controller执行完成返回ModelAndView。

  • 7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

  • 8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

  • 9、ViewReslover解析后返回具体View。

  • 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

  • 11、DispatcherServlet响应用户。

mybatis是现在主流的数据层框架,当然现在spring data jpa也有崛起的趋势,mybatis源码相对比较简单,可以去通读一遍。

springboot更是现在热门的框架,spring给我们整合一整套行业解决方案,很多都是基于springboot,比如springcloud等。集成起来特别方便。对于springboot,我们要了解和熟悉怎么去装配第三方模块的,怎么去自定义一个模块starter,怎么做到自启动加载等。

阶段一:单体项目

第一阶段,搭建单体项目。这阶段应该也算是java基础了,很多都是现在企业通用的框架组合,比如spring+mybatis,接口文档swagger2,实体验证hibernate validator,搜索引擎lucene等等。然后部署环境centos7、代码管理git、持续部署git。

emmm~不熟悉的同学要多学习一下啦,基本的东西~

阶段二:物理分离应用和数据库

物理上将应用服务器与数据库进行分离,这样cpu、内存等压力就没这么大。

阶段三:缓存化、静态化

这里有一些通用的模板静态化基础,比如freemaker或者velocity等模板引擎的,现在很多代码生成的框架其实原理就是使用模板静态化的技术,定义好模板之后再传参渲染,就生成了想要的代码。

这里nginx适合作为我们的静态文件服务器,后面的动静分离就是使用了nginx。

阶段四:应用负载均衡,集群

nginx可以作为反向代理服务器,所以可以作为我们的负载均衡工具,这里还涉及到负载均衡的策略,比如轮询,权重等,需要弄懂。一般来说,nginx是主流,其他apache用得都比较少了。nginx还有一些上线技巧,比如蓝绿部署、灰度部署等。

  • 蓝绿部署

一种可以保证系统在不间断提供服务的情况下上线的部署方式

  • 灰度发布

指在黑与白之间,能够平滑过渡的一种发布方式

负载均衡(Load Balance) 其意思就是分摊到多个操作单元上进行执行,例如Web 服务器 、 FTP服务器 、 企业 关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

应用服务器负载均衡之后需要解决的第一个问题就是会话同步(session),常用的框架就是spring session、shiro-redis等。以及缓存中间的选用上,一般不用ehcache,选用redis较多。

当然,因为用到了nginx作为反向代理工具,所有nginx需要做高可用配置,常见是keepalived+nginx组合。

阶段五:动静分离

常说的动静分离解决方案一般都是把静态文件部署到nginx等文件服务器中,减少应用服务器的请求压力,这里还有个CDN的概念,大家要了解一下流程是怎么样的,毕竟现在常说cdn、cdn、cdn啥的,不懂就插不上嘴呀~

一般我们存储静态东西都喜欢使用云存储,所有七牛云,cos等云存储我们就经常使用到了。当然了,nginx也是动静分离的主要工具,因为一些css、js等文件一般放在nginx下。

阶段六:分布式缓存、缓存集群

这一阶段主要还是把缓存用到极致,重复利用redis的五大数据结构的优势去调整我们的数据显示,另外设计到的缓存问题比如缓存穿透、缓存雪崩、缓存击穿等概念要熟悉,还有解决方案。以及搭建redis的主从集群、哨兵等机制保证redis的高可用。

当然了,运用了缓存之后,有个比较重点的问题也诞生了,就是如何保证缓存与数据库的数据保存一致!

阶段七:读写分离、分库分表

阶段七中主要还是集中读写分离、分库分表,围绕着不同数据库之间的相互协调工作。

读写分离

读写分离也可以有很多种方式,当然了,最常见的还是使用继承AbstractRoutingDataSource,重写determineTargetDataSource()方法。还有其他方式吗?给大家科普一下,可以针对spring、mybatis展开:

spring

1、通过扫描包区分不同数据源

@MapperScan注解扫描不同的包,该包下的所有mapper使用同一数据源,主要是sqlSessionTemplateRef属性 可以看下这篇文章:https://www.cnblogs.com/kangoroo/p/7133543.html

2、通过注解区分

通过继承AbstractRoutingDataSource,重写determineTargetDataSource()指定数据源的方法。最常用手段,必须懂!实例:renren-fast开源项目

mybatis

1、拦截发起操作的方法名

需要自己约定增删改查的前缀,然后根据前缀选择数据源!

2、拦截发起操作的sql

通过拦截mysql的执行方法获取sql,通过sql来判断读写 实例:https://github.com/shawntime/shawn-rwdb

分库分表

mycat: 基于 Proxy,它复写了 MySQL 协议,将 Mycat Server 伪装成一个 MySQL 数据库

shareding-jdbc: 基于 JDBC 接口的扩展,是以 jar 包的形式提供轻量级服务的

这里面就衍生处理很多问题,同时也诞生了很多解决方案,比如分布式事务,分布式锁等

  • 分布式事务CAP定理

  1. 一致性(Consistency) :客户端知道一系列的操作都会同时发生(生效)

  2. 可用性(Availability) :每个操作都必须以可预期的响应结束

  3. 分区容错性(Partition tolerance) :即使出现单个组件无法可用,操作依然可以完成

  • 分布式事务BASE定理

  1. Basically Available(基本可用)

  2. Soft state(软状态)

  3. Eventually consistent(最终一致性)

无法做到强一致,但每个应用都可以根据自身的业务特点

采用适当的方式来使系统达到最终一致性

  • 分布式锁

    • redis锁

      • redis+lua

      • redisson

    • zookeeper锁

  • 分布式唯一主键ID

    • UUID

    • redis自增ID

阶段八:微服务架构

现在rpc的解决方案主要有两个体系

  • 阿里体系dubbo+zookeeper

  • spring体系springcloud

在springcloud中常用的组件之间的整合关系已经解决的对应的问题需要去熟悉和学会综合运用

  • 注册中心Eureka

  • 客户端负载均衡Ribbon

  • 声明式Rest调用Feign

  • 容错处理Hystrix

  • 服务网关Zuul

  • 统一管理配置Config

  • 服务跟踪Sleuth+zipkin

还有服务拆分之后带来的一系列问题,比如为了达到高可用而需要解决的降级、超时重试、限流等。为了高并发而引入的消息队列、缓存、异步并发等技术都需要了解。

阶段九:NoSql与分布式搜索引擎

这里的一个重点就是我们的分布式搜索引擎了,在前面我们聊过lucene,而es、solr的底层其实都是lucene。所以我们对lucene的底层实现原理要熟悉(倒排索引),还要分词等概念。同时在es与数据库之间的数据同步问题,我们可以使用三种解决方案

  • 基于cannal实现同步

  • 基于消息队列实现同步

  • 基于logstash实现同步

同时,不管es,还是mongo,这些nosql数据存储,都会有分片的概念,需要了解其高可用以及备份等原理。

B站视频讲解

目前,已经录制了视频(共150分钟左右),讲解这九大阶段中会涉及到的内容,并做了一些较详细的分析,感兴趣的同学可以去去B站看下,来个点赞、弹幕、收藏三连发哈!感谢支持

链接:https://www.bilibili.com/video/av80313108

可点击阅读原文直接打开!(用app或者pc端打开才高清!)

结束语

好了,今天粗粗总结了一下内容,只需要有个概念,每个阶段涉及到的要点都是非常多的,大家可以针对某个点进入深入学习哈。我是吕一明,感谢阅读,欢迎来B站一起弹幕学习哈!

推荐一个公众号

MarkerHub

主分析开源项目,以及导图梳理Java知识点!

点击阅读原文看B站的视频讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_834116.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员 6 个接私活的网站,你有技术就有钱!

2020年最新的常问企业面试题大全以及答案作者 | 发哥来源 | GitHubDaily本篇文章会向大家推荐国内外几个接外包比较靠谱的平台,主旨是贵精不贵多。因此,像「猪xx」这种会让程序员自贬身价,扰乱市场规则的网站,便不会出现在下方推荐…

实现网站二维码扫描登录

在尝试使用网页版微信时,发现微信的登录方式比较酷。区别与常用的用户名和密码的登录方式,网页微信登录只需要轻轻一扫,即可方便的实现登录功能。 下面尝试根据个人的理解对其可能的架构猜测一番。总体来看,扫描二维码实现网站的登…

太全了!学Java项目,上这个网站就够了

你有多久没好好学习一个开源项目了?你是否经常为找不到好的开源项目而烦恼?你是否为不知道怎么入手去看一个开源项目?你是否想看别人的项目学习笔记?你是否想跟着别人的项目搭建过程一步一步跟着做项目?今天给大家介绍…

tp5更改在标签栏显示的网站图标

随便选择一张你喜欢的图片,然后命名改为favicon.ico。将其替换原来tp5框架public下的favicon.ico。然后在网页html文件head标签内加上 上图href表示favicon.ico的路径。更改后如下图:

洛克王国服务器维护中,帮助中心-洛克王国-Roco Kingdom-官方网站-腾讯儿童-点亮魔法,放飞童年...

社区加载很慢或停止不动1、网络波动造成加载终止,请尝试重新登录(按F5刷新页面)。2、网络连接方式过慢导致,更换更快的互联网连接方式。3、网络高峰期造成的网络拥堵现象,请稍候再尝试登录。4、运行了其他网络程序,如:…

为什么WordPress是构建您的业务或创业网站的最佳平台

许多企业和创业公司不知道WordPress有多棒,或者为什么他们应该使用它,所以在本文中,我将告诉您为什么您应该为您的企业或创业网站使用WordPress。除了WordPress是免费的,WordPres真棒。它很容易使用,超强大&#xff0c…

WordPress Gutenberg编辑器官方信息网站已更新为交互式前端演示

Gutenberg官方信息网站已经更新,其特色是可以在前端操作的交互式演示。它基于Frontenberg,一个由Automattic的VIP牛仔Tom Nowell创建的网站。它在前端加载了一个带有Gutenberg的WordPress实例,因此访问者无需登录或创建测试站点来尝试它。 Gu…

内容和商品如何在一个网站內有效共存

本文的原始文章来自未经整理的WordPress,这里对内容进行了部分修改和升级。 这几天对原文经过进一步思考,考虑到国外那些使用WordPress建站的成功案例,认为内容和商品(数字化商品和实物商品)是小微企业和内容创作者从事…

初学者的图片SEO指南 - 为搜索引擎优化图片

您是否希望在您的网站上改进图片SEO?如果正确优化,图片搜索可以为您的网站带来许多新访问者。 要从图片SEO中受益,您需要帮助搜索引擎找到您的图片并为正确的关键词编制索引。 在本初学者指南中,我们将向您展示如何通过遵循最佳…

WordPress SEO教程:让你的网站排名更高和速度更快的101个优化技巧(2019年完整指南)

阅读其他WordPress SEO教程后,你可能已经听说过要一直保持Yoast绿灯(这几乎不起作用)。 点击创建免费网站。 所以,让我们减少无关紧要的事,让我告诉你是什么让我每天有2500个访客。 这是您在搜索引擎中将WordPress网…

如何在WordPress网站上轻松显示代码

您想在WordPress博客文章中显示代码吗?如果您尝试添加常规文本代码,则WordPress将无法正确显示。 每次保存文章时,WordPress都会通过几个清理过滤器运行您的内容。这些过滤器用于确保有人不通过文章编辑器注入代码来破解您的网站。 在本文中…

5个最佳拖放式WordPress网站页面生成器比较(2018)

你想要一个简单的方法来建立和定制你的WordPress网站?这就是拖放WordPress页面生成器插件派上用场的地方。这些WordPress页面构建器允许您在不编写任何代码的情况下创建、编辑和自定义您的站点布局。在本文中,我们将比较和回顾5个最好的WordPress拖放页面…

7个最好的拖放式WordPress网站页面构建器比较(2019)

您想在不雇用开发人员的情况下建立网站吗?拖放WordPress网站页面构建器使您可以轻松地创建和自定义漂亮的网站。 在本文中,我们将比较最流行的拖放WordPress网站页面构建器,以便您可以根据需要选择最佳的WordPress页面构建器并开始创建您的站…

SEO基础知识:如何在您的网站上使用标题

标题可以帮助用户和搜索引擎阅读和理解文本。它们充当读者的路标,使人们更容易理解文章或页面的内容。标题还定义了内容的哪些部分很重要,并说明它们是如何相互关联的。在这里,我们将为您提供有关如何思考和使用标题来改进内容的指示。 目录…

Yoast SEO 11.0:非常棒的结构化数据

结构化数据非常重要。许多当前和未来的搜索增强功能都是 – 或将来 – 由结构化数据提供支持。虽然搜索引擎擅长阅读内容,但结构化数据可以帮助他们理解。Yoast SEO已经支持一些基本的架构标记有些时间了,但现在更进一步了。Yoast SEO 11.0具有完全重写的…

SEO基础:什么是结构化数据?

您可能听说过结构化数据,Schema.org和JSON-LD。但这些术语到底意味着什么呢?什么是结构化数据?结构化数据有什么作用?它与SEO有什么关系?对于那些不知道结构化数据是什么的人:这篇文章将告诉你!…

WordPress 5.2 网站健康检查

WordPress 5.2将在管理界面中包含两个新页面,以帮助最终用户通过常见配置问题和其他具有健康在线状态的元素自助服务他们的网站。它还为开发人员提供了添加调试信息的标准化位置。 新页面可以在“ 工具”菜单下找到,名为“网站健康”,并为用…

介绍一个很好的网站店铺推广优惠券插件 - URL Coupons

优惠券是促进店铺访问者转化购买的很好手段。 今天我介绍一个很好的店铺优惠券插件 - URL Coupons,它允许你给店铺的优惠券添加一个URL。当这个URL被点击的时候,它会自动使用优惠券,并将商品加入到顾客的购物车中。 这种方式允许你以更方便的…

SEO基础:什么是结构化数据?- WP站长

您可能听说过结构化数据,Schema.org和JSON-LD。但这些术语到底意味着什么呢?什么是结构化数据?结构化数据有什么作用?它与SEO有什么关系?对于那些不知道结构化数据是什么的人:这篇文章将告诉你!…

AffiliateWP评测 - 2020年的WordPress网站联盟营销插件

想要在WordPress电子商务网站上成倍增加您的销售额和利润?如果是这样,没有什么比在WordPress中创建功能完善的联盟营销系统更好地推广您的产品和服务更好的了。 联盟营销是最流行和利润丰厚的互联网营销策略之一,已帮助成千上万的企业达到了…