网站一般有门户网站、视频网站、博客微博bbs等;
第一类:
1、新闻网站特点是实时性强,发布后很少修改,视频网站特点是发布后很少修改,这两类网站一般都用静态网页;
2、新闻编辑人员发布的新闻,文字类的进入数据库,图片、视频类的进入存储;
3、后台程序自动将数据库的内容生成静态html文件,存在存储上,运维人员通过事件触发将html和图片、视频推到缓存服务器或者购买的CDN加速器上,供用户浏览;
4、用户从缓存服务器或者CDN加速器浏览新闻内容,如果缓存服务器或者CDN没有,再访问存储里的静态内容,如果没有,最后才访问数据量里的动态内容;
5、视频网站类似,只是视频网站用户发视频后,需要等一段时间进行审核、转码,在这段时间里,会将视频推送到CDN;
6、如果内部人员需要修改,不是改静态文件,而是修改动态内容后再重新生成静态文件;
CDN优点:距离用户近、内存访问、同运营商访问;
网站动静分离架构读写原理
第二类:
博客、bbs、微博等网站的特点是用户发布后会经常修改,并且对访问的实时性要求高,需要用动静分离架构;
用户发布:
1、用户从上传服务器发布内容,文字类的进数据库服务器,视频、图片等进存储;
2、发布内容到数据库和存储里后,同时消息队列服务器会记录内容的索引(发布在哪里、id是多少,文件名是什么等等这些信息),消息队列服务器将内容推送给消费服务器,消费服务器根据索引,从数据库里找到内容,生成静态html文件存到存储里;
3、消费服务器通知CDN,有内容更新,CDN从存储里获取最新的内容;
用户浏览:
1、用户发布完后想立即查看自己发布的内容,这时候是走动态服务器,分别从数据库服务器读取文字内容和从存储读取图片、视频等;
2、其他人浏览走静态服务器,从存储里读取,如果存储里没有(消息队列服务器或消费服务器故障),就跳转到动态服务器,从数据库里读取动态内容,从存储里读取图片、视频等;
用户修改:
1、用户修改内容走动态服务器,同时修改的内容的属性通过消息队列服务器被消费服务器获取,消费服务器根据修改的内容属性从数据库里获取新的内容,生成新的html文件存在存储里并覆盖旧的;
2、消费服务器通知CDN,CDN获取最新内容;
3、如果消息队列服务器或者消费服务器故障,可能会导致用户读取存储里静态文件时读取到旧文件,所以需要监控消息队列服务器和消费服务器,或者稍微修改架构:用户通过静态服务器浏览内容时,先比较消息队列服务器和存储的时间戳,如果存储的时间戳比消息队列的新,则读取存储的静态html文件,如果存储的时间戳比消息队列服务器的旧,则跳转到动态服务器,读取数据库的内容。
用户发布内容和读取内容时一般情况如下:
网站动静分离架构读写原理
网站动静分离架构读写原理
一般情况下还会在静态层之前加一层自己架设的缓存,比如nginx或squid,原则上,尽量把访问流量挡在前端,顺序:
用户本地浏览器缓存——CDN——nginx或squid——静态服务器——动态服务器——数据库缓存——数据库

相关文章: