把书读薄了之看透SpringMVC(1)

第一篇     网站基础知识

本篇主要内容主要包括网站架构的演变、web中涉及的协议、协议的实现方法、java中的Servlet以及Tomcat的分析。

第一章 网站架构及其演变过程

1.1 软件的三大类型

软件的三大类型包括:单机类型、CS类型和BS类型,其中现在使用最广的是BS,因为它开发简单、使用方便而且功能强大。但BS结构在灵活性和处理效率上都不如CS结构,所以想QQ等软件使用的还是CS结构。

如图

1.2 基础的结构并不简单

前面说的BS的结构是最简单的结构,但它的底层实现也并不简单。因为它需要通过互联网传输数据,而互联网是一个错综复杂的网络。BS结构网络传输有两种参考模型:一种是标准的OSI参考模型,另外一种是TCP/IP参考模型。

如图

OSI参考模型共分为7层,主要用于教学,实际中更多使用的是TCP/IP的4层模型,分别为网络接入层、网际互连层、传输层和应用层。

网站架构要解决的两个最核心的问题:海量数据操作问题和高并发问题。

1.3 架构演变的起点

从一台服务器到数据和应用的分离。

1.4海量数据的解决方案

1.4.1 缓存和页面静态化

数据量大直接的解决方案就是使用缓存。使用缓存的方式可以分为通过程序直接保存到内存中和使用缓存框架两种。程序直接操作主要使用Map,尤其是ConcurrentHashMap(参见:http://www.importnew.com/22007.html);常用的缓存框架有Ehcache、Memcache和Redis等。缓存使用过程中最重要的问题是什么时候创建缓存和缓存的失效机制。

缓存不适用的场景:数据变化频繁、数据实时性要求高。

页面静态化,也可以理解为另外一种形式的缓存,缓存是将从数据库获取到的数据保存起来,而页面静态化是将程序最后生成的页面保存起来,不但不需要查询数据库,而且连应用程序处理都省了,所以页面静态化同时对数据量大河并发量高两大问题都有好处。

1.4.2 数据库优化

常用的有表结构优化、SQL语句优化、分区和分表、索引优化、使用存储过程代替直接操作,另外有时也可以使用冗余。

表结构优化

没有不变的准则,需要根据实际情况具体处理

SQL语句优化

基础优化是语法层面的优化,更重要的是处理逻辑的优化,也需要根据具体情况进行处理。

分区

分区是将一张表中的数据按照一定的规则分到不同的区来保存,这样在查询时如果数据范围在同一个区内那么可以只对一个区的数据进行操作,这样操作的数据量更少,速度更快。

分表

如果一张表中的数据可以分为几种固定不变的类型,而且如果同时对多种类型共同操作的情况不多,那么都可以通过分表来处理。

索引优化

索引是一把双刃剑,它咋提高查询速度的同时也降低了增删改的速度,因为每次数据变化都需要更新相应的索引。所以对哪些字段使用索引、使用什么类型的索引都需要仔细琢磨。

使用存储过程代替直接操作

存储过程只编译一次,所以当有操作过程复杂而且调用频率高的业务,可以使用存储过程代替直接操作。

1.4.3 分离活跃数据

通过将不活跃数据分离,减小活跃数据的数据量,可以明显提高查询效率。

1.4.4 批量读取和延迟修改

批量读取和延迟修改都是通过减少操作次数来提高效率。

批量读取是将多次查询合并到一次中进行。可以将一个请求的多次查询进行合并,也可以将一定时间范围内的多个请求的多次查询合并到一起统一查询一次数据库。

延迟修改主要是针对高并发而且频繁修改的数据。可能引起缓存和数据库的数据不一致,所以重要的数据需要做特殊处理。

1.4.5 读写分离

读写分离本质上是对数据库进行集群,将写入库作为主库,读库作为从库,关键问题是数据同步问题。

1.4.6 分布式数据库

分布式是对一个请求的并行处理,将不同表放到不同的数据库服务器上,如果需要则可以让多台服务器同时处理,从而提高处理速度。

1.4.7 NoSQL和Hadoop

NoSQL通过多个块存储数据的特点,其操作大数据的速度也非常快。

Hadoop是将同一个表中的数据分成多块保存到多个节点(分布式),而且每一块数据都有多个节点保存(集群),保证了效率和数据完整性。

1.5 高并发的解决方案

1.5.1 应用和静态资源分离

静态资源因为没有状态,所以分离简单,一般会使用专门的域名去访问。

1.5.2 页面缓存

页面缓存是将应用生成的页面缓存起来,这样就不需要每次都重新生成页面,节省CPU资源。页面缓存的默认失效机制一般是按缓存时间处理的,也可以手动让相应的缓存失效。

使用页面缓存和AJAX可以兼顾效率和动态数据实时刷新。

1.5.3 集群与分布式

集群式每台服务器都有相同的功能,处理请求时调用哪台服务器都可以,主要起分流的作用;分布式是将不同的业务放到不同的服务器中,处理一个请求需要用到多台服务器,这样可以提高一个请求的处理速度。

集群两中类型:静态资源集群和应用程序集群。问题主要是session共享。

1.5.4 反向代理

反向代理是指客户直接访问的服务器并不真正提供服务,它从其他服务器获取资源后将结果返回给用户。

三个作用:

1、可以作为前端服务器跟实际处理请求的服务器集成

2、可以用作负载均衡

3、转发请求。

1.5.5 CDN

CDN的服务器是分布在全国各地的,当接收到请求后会将请求分配到最合适的CDN服务器节点获取数据。

CDN分配请求的方式比较特殊,使用专门的CDN域名解析服务器在解析的是候就分配好的,一般是在IPS那里使用CNAME将域名解析到一个特定域名,然后再将解析到的那个域名用专门的CDN服务器解析到相应的CDN节点。

1.6 底层的优化

优化网络传输i协议,比如Google的quic、Spdy等,还有HTTP/2。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,380评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,160评论 1 23
  • 每个人都有两面,一面在现实,一面在期盼与想象中。 在梦中我是个为梦想行动了很久,而且已小有成就,在梦外的我是一个开...
    晨曦娇梦阅读 276评论 2 7
  • 感恩指引我进入金刚智慧的引见人我的婶婶看到我没有交作业提醒我。督促我!让我不敢松懈。养成每天交作业的好习惯!感恩...
    悦心慧儿阅读 220评论 1 3