互联网网站技术揭秘(学习)
程序员文章站
2024-01-09 13:24:40
...
1、为什么要掌握大型网站开发技术
- 对于开发人员,可以仿照“京东网”,开发出一个类似京东网功能的网站。但就能让多少人访问的问题而言,也许超不过100人访问就瘫痪、卡死。
- “京东网”能承受几千万、上亿的访问量,差别就在于细节技术上。
- 比方:钢铁厂造出的钢材可能用来造卫星的,铁匠铺造出来的钢材可能只能做个锄头。从事的人,在以后的行业发展,肯定也不一样。
- 比方:百度要是用like查询做搜索的话,早就不知道死过多少回。
- 一个程序员看一个网站,能不能看出门道来,能不能看到系统复杂到什么程度。这是初级程序员跟高级程序员的区别。
- “1号店”搜索“纸巾”,能查出“纸手帕”,涉及到搜索引擎、搜索词猜测技术。 查询界面产品非常多,肯定不是一次性把所有的搜索结果都查询出来,这里面涉及到页面查询展示的优化技术。 购物车的实现技术,在书上学的放到cookie或session里面,在真正的电商项目里面都是错的。 点击商品详情页面,地址栏的地址即不是静态地址又不是动态地址,内容显示也不是一条条从数据库中查询出来再显示,要不然数据库早卡死了。
- 外行看热闹,内行看门道。
- 懂大型网站开发技术的人更有竞争力、更值钱。
- 在公司做简单的增删改查的技术人员,应该反思,你的技术有任何的长进吗?你用到了复杂的技术了吗?有没有考虑再写几年的增删改查,人是不是就废掉了啊?什么时候才能拿到高工资?怎样才有机会进入大型的公司?挣更多的钱,掌握更高深的技术,从而能够在技术这个行业里面长盛不衰?增删改查的技术,来个应届生学习学习都会,那你的核心竞争能力在哪呢?
2、降低服务器压力的云存储
- 网站开发必须知道的三个环节:请求、处理、响应。
- 网站优化三个环节:浏览器端优化、网络端优化、服务器端优化。
- 示例:打开一个网页,按F2,看到浏览器跟服务器请求很多次,要html、要js、要css、要图片等等。如果所有请求都从一台服务器上获取,过程会很慢。(注:浏览器本身也有限制同时最多能向同一台服务器发起多少个请求)。
- 示例:如果打开一个网页,请求1个html、30张图片、5个js、5个css,即一个用户访问需要请求41次。如果是10万个用户访问,则要410万次请求。如果1个html大小为100k,其他大小为900k,则要承受10万兆的流量。总结,即服务器将同时承受连接数很多、流量也很大。一台服务器承受的连接数、流量肯定是有限的,但承受这么多的时候,肯定会卡。
- 优化1:把不同的文件放到不同的服务器上,最大的好处:将请求分流给不同的服务器;小的好处:不用传多余的cookie信息,减少部分流量;最终目的:节省流量、提高加载速度。
- 打开cmd,ping网站域名,可以查看到服务器ip,区别服务器是否同一台。
- 示例:如鹏网的广告图片存放在专门的图片服务器上,静态文件js、css存放在cdn服务上。
- 访问主站服务器时,request请求中的header带cookie,假如cookie大小1k,一个页面请求40次,10万个用户访问,1K*40*10W=40000000=4G流量
- cookie是不跨域的。
3、让数据库成废物:页面静态化
- 示例:假如查看一个新闻页面,需要1次数据库查询,如果1秒钟有1万用户访问,即要查询1万次数据库,则会对数据库造成非常大的压力。
- 优化2:页面静态化,即服务器上先生成静态页面,用户查询的时候直接给,不需要查数据库。目的:减少数据库服务器压力。另外,有利于cdn技术的应用。
- shtml技术,ServerSideInclude(SSI),如鹏网、新浪网都采用该技术。
4、为什么大网站访问那么快:CDN
- 示例:一台中心服务器,多台放在各个地方的CDN服务器。中心服务器把网页分发到各个CDN服务器。用户访问离网络(DNS解析技术)最近的CDN服务器。
- 一般中小型公司购买第三方的CDN服务。
- CDN只会对静态地址进行处理,不会对动态地址进行处理。
- 一般服务器缓存5分钟,CDN提供手动刷新(全网刷新)或API通知服务器刷新。
- CDN缓存的是静态内容。
5、JS压缩和css sprite
- JS压缩的最终效果:减小文件体积
- JS压缩的好处:服务器压力小、网页加载速度快、节省流量
- JS压缩可使用工具,以命令行的方式,对某路径下的所有js、css进行批量压缩
- css sprite技术是只将很多小图标放在一个图片上,利用css做位移,展示某个指定图标。
- css sprite技术好处:提高网站加载速度。
6、大型网站服务器架构
- 示例:1台负载均衡服务器、3台Web服务器、一台数据库实现简单负载均衡。如果数据库压力大,数据库也可以做集群。
- 负载均衡服务器做的工作就是把请求分发给不同的设备。
- 使用redis服务器存放session管理,以解决session共享问题。如果redis服务器压力大,redis也可以做集群。
- 反向代理服务器的优点:避免慢速Internet占用Web服务器的连接数(降低web服务器压力)、负载均衡、安全
- 连接数,如果用户网速慢,访问反向代理服务器,占用了一个连接,反向代理服务器等待用户请求完全到达的时候,才调web服务器。
- 反向代理服务器有商业的、免费的。
7、服务器优化的固定套路:分离
- 上传下载分离。
- 示例:上传涉及到服务器网络的上行带宽。如果用户的网速很快,可能在上传过程中,其他人的下载就很慢。
- “浏览器-->上传-->web服务器-->上传-->云存储”改为“浏览器-->上传-->上传服务器-->上传-->云存储”,web服务器只负责动态请求处理。
- 有时候做网站就是拼服务器。
- 文件服务器跟web服务器分离
- 耗资源处理(图片加水印、视频处理等)跟web服务器分离
- 上传视频,涉及转码,很消耗服务器CPU
- 数据库读写分离
- 数据库分库、分表
8、数据库压力降低一万倍:缓存
- 用户第一次请求,向数据库查询数据,并且缓存结果。当下一个用户访问时,直接把缓存结果给用户即可。如果设置缓存时长,当用户请求时,缓存失效的时候,再查一次数据库,再缓存结果。减少频繁数据库查询。
- 可通过缓存技术,降低数据库服务器压力,提供性能。
9、搜索引擎技术:全文检索
- 数据库like查询,效率性能很低。因为like '%***%',全表扫描。
- 全文检索的需求:高效率、模糊匹配。
- lucene开发效率低,需要处理很多底层细节。
- solr服务器,基于java开发,把lucene封装起来。
10、高并发场景1:抢单和秒杀如何实现
- 方法1:锁。缺点:效率低,慢。
- 示例:并发下的影响,i=0;i=i+1,10次并发,可能i的结果为6,而不为10。
- 方法2:两阶段处理:*抢,然后排队裁判。
11、高并发场景2:文章阅读数
- 方法1:锁
- 方法2:每条阅读单独记录到数据库,然后定时汇总更新阅读数
- 方法3:redis实现方法2
12、云计算
- 12306春运跟平时所需服务器、淘宝双11与平时所需服务器,自己承担服务器,可能造成投入巨大、资源浪费。
- 云服务:专门的公司提供服务,按需付费。如阿里云、又拍云存储等。
- 云服务可以减少网管、dba、使用cdn、防范黑客的投入。