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

news/2024/5/8 13:35:53/文章来源:https://blog.csdn.net/l18848956739/article/details/103718046

目录

网站发展历程

java入门

框架基础

阶段一:单体项目

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

阶段三:缓存化、静态化

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

阶段五:动静分离

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

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

阶段八:微服务架构

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

B站视频讲解

结束语


网站发展历程

用思维导图学习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站一起弹幕学习哈!

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

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

相关文章

基于docker+reveal.js搭建一个属于自己的在线ppt网站

前言 最近热衷于Docker,由于这段时间使用Docker来折腾自己的服务器,越来越感觉这是一种极其被应该推广的技术,因此想在公司内部也做一次技术分享。当然,如果只是做的PPT,我就不写这文章了。既然把Docker说这么好&#…

seo是计算机专业毕业,本科计算机专业的他,在34岁时成为了银行行长

曾经看到过这样一段话,意思是说个人成长和人生选择过程中有这三个悖论:在你18岁对学科与知识一无所知的时候,就被要求选择自己的专业;在你22-25岁对商业世界运行规则毫无概念的时候,就被要求选择工作方向;在你25-28岁对自己和人际…

oss存html静态文件,Github改造成免费OSS对象存储,加速网站静态文件(js/css/字体文件)...

今天小白看到一篇文章,可以把github改成图床使用。小白测试了一下CDN居然还是国内的。那么咱们也可以把它改造成oss来加速网站使用。如果你是wordpress,那么可以查看以下文章:wordpress免插件实现静态资源CDN 。其他程序的话就得自己研究下怎…

支付宝电脑网站支付

选择电脑网站支付,填写信息,创建网站应用 下载demo  https://docs.open.alipay.com/54/106682/ 填写配置信息 同步和异步。 1.同步是给用户发的。用get 2.异步是被服务器发的。用post 当一个支付请求被发送到支付渠道方,支付渠道会很快返回…

python3.6+django2.0+mysql搭建网站

之前用过python2.7版本,改用3.6版本发现很多语法发生了变化。 在templates里新建一个html文件,命名为index.html作为要测试的界面, 新建一个应用,Tools-》Run manage.py Task 输入startapp应用名称 然后对urls进行配置&#xff0…

GitHub上搭建个人网站

大致如下步骤:1、注册Git账号2、创建SSH keys3、新建repository---4、设置网站5、clone库到本地6、提交、上传7、预览本教程默认你了解GitHub的基础之上 会使用基本命令,如果不了解 前三步可参考文章:GitHub入门教程 GitHub创建SSH Keys一、…

Bootstrap网站模板

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow基于上一篇文章,觉得再这样写下去,意义不大,决定收手。还是直接做…

角点 python实现_角点科技教你怎么自己搭建电影网站

如何自己搭建电影网站?随着网络的发展,很多人都对网站的产生了兴趣,开始大多数人并不知道网站是怎么搭建 的,接下来角点科技的小编就来和大家聊聊如何自己搭建电影网站。前期准备:域名空间(几大主流服务商&…

云速建站_【云速建站】云建站的最初动机和试探之路

一直想写一篇华为云的文章,今天就描述下我的华为云体验之旅。一、 独行键盘侠作为程序员,老有研究技术的冲动,csdn,GitHub,技术论坛没少逛。有一天突然想能不能有一台自己专属的服务器,既可以自己研究下技术…

Socket和访问网站慢的问题

目录 TCP/IP socket 一、socket()套接字有哪些? socket通信流程 四、如果你访问一个网站很慢,怎么排查和解决? TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Intern…

【一周安全热点】湖北首例入侵物联网案致十万台设备掉线|俄罗斯多个政府网站共泄露225万公民信息...

湖北首例入侵物联网案致十万台设备掉线,暴露企业重业务轻安全 近日,湖北省破获首例入侵物联网计算机信息系统刑事案件。经统计,受害公司因超百台设备被恶意升级、10万台设备“被”离线而无法使用。 互联网发展早期,企业往往对安全…

在.net core上,Web网站调用微信支付-统一下单接口(xml传参)一直返回错误:mch_id参数格式错误...

这是 微信支付-统一下单 接口文档 一、问题描述 在调用统一下单接口时,报mch_id参数格式错误,但商户ID确实是10位数字正确的,可就是一直报这个错误 返回的错误xml如下: 二、排错过程 1、多次对比官网xml格式,确认生成…

连接打印机提示:找不到驱动程序,windows在网络上找不到Canon LBP2900的驱动程序,若要手动查找,请单击“确定”。否则,请单击“取消”并咨询你的网络管理员或者访问打印机制造商的网站

本机系统:windows server 2012 Datacenter Evaluation Build 9200 bit64 打印机USB连接的系统: windows XP SP3 bit32 解决: 问题在于本机系统与对方系统不一样,无法复制给你对应的驱动(一个是win2012,一个是xp ; 一个是64位,一个是32位) 那么就只能在网上下载本机系统的对应驱…

一文读懂网站SEO优化国际版

前言 SEO即Search Engine Optimization搜索引擎优化,目的是通过提升网站在搜索引擎的排名来提升网站的自然流量。简而言之,SEO的工作原理是向搜索引擎证明您的内容是当前主题的最佳结果。SEO技术涉及关键字研究、内容创建、链接构建和技术审核等内容。 G…

apache网站服务器

apache简介 Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通…

freebsd+Heartbeat2+php+postgres实现数据库复制和高可用网站

用2节点实现。采用heartbeat老版本2.x , 采用自己编写的resource agent,没有采用OCF 1 安装freebsd——废话 2 安装apache php (略) postgres,并设置复制,见: http://blog.csdn.net/zeeeitch/ar…

python爬取网站图像文件(网络爬虫)

一、代码 from bs4 import BeautifulSoup from bs4 import UnicodeDammit import urllib.request import threading def imageSpider(start_url):global threadsglobal counttry:urls[]requrllib.request.Request(start_url,headersheaders)dataurllib.request.urlopen(req)da…

html5 交互性网站,HTML5和CSS3的新交互性盘点:炫酷体验

【IT168 技术】本文标题的这副图片,是用Phosotshop制作的。但是,在搜索引擎中你却无法搜索到它,搜索引擎还没有强大到能够识别图片里面的文字。并且由于图片的体积不算太小,可能网速慢的网友在浏览的时候不得不耐心的等待图片的刷…

百度云cdn设置州五年制大专_使用CDN提升网站速度

CDN是什么鬼,下面我们就来介绍一下,CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块&#x…

谷歌翻译影响vue_给自己的网站接入谷歌翻译,以及修复了一个谷歌翻译的一个bug...

给网站加谷歌翻译,搜索引擎一搜一大堆,这里不再赘述。只贴一个申请谷歌翻译的一个地址:https://translate.google.com/...和一段代码:下面是官方给出的代码:下面是我改良的代码:function googleTranslateEl…