读某大型网站技术架构总结

         某网站技术架构这本书是对服务端开发人员很有用的书,里面涉及到了网站从小到大发展会碰到的问题并解决的办法。虽然没有细节描述,但是对于有点积累的开发人员还是一点就通的,让你在网站架构有个全面的了解。具体的得碰到问题解决问题。

        首先,需要强调的是业务驱动技术,技术再怎么强大,网站架构的再好,没有业务支持也体现不出价值。所以一开始的网站不需要做的很庞大,而应该根据业务发展一起改变。否则就是本末倒置了。


网站建设需要满足的一些特性如下:

可用性,表示网站可用性的指标是时间,当宕机则不可用,宕机时间短则可用性强。一般大型网站能保证99.99%可用。

伸缩性,表示不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。

扩展性,表示网站的架构能够快速响应业务的发展。

安全性,针对现存和潜在的各种攻击与窃密手段,是否有可靠的安全策略。

如何实现上述的几种网站特性?


可用性

        对于大型的网站,需要考虑到成本,所以会使用普通的服务器,构建成集群,而且有的数量可能会很大。所以某台机器宕机是很常见的事情。高可用性的目标就是当服务器宕机的时候,服务或应用依然可用。

       那么如何保证可用性呢?网站可用性的保证主要手段是冗余,应用部署在多态服务器上同事提供访问,数据存储在多台服务器上互相备份。

对于应用服务器,通过负载均衡的方式,把多台服务器组成一个集群共同对外提供服务,当某台服务器宕机,把请求切换到其他服务器来保证 可用性。

对于存储服务器,也是通过集群的方式,对数据进行备份,当一台服务器宕机,把请求切换到另一台服务器,当然必须保证服务器有相同的数据。


伸缩性

随着网站逐渐发展壮大,用户量增加和存储数据的增大,当前的服务器就会不够用,遇到瓶颈。

如何保证伸缩性呢?就需要建集群,随着量的增大,增加服务器,保证服务器性能线性的增长。而且最好能自动的增加或减少服务器。数据库也是通过集群来分摊压力,不过对数据库的ACID,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),需要根据业务有合理的设计。

当然,随着数据量的增大,现在一般都用nosql对于非结构化数据进行存储,如mongo db,它的读写速度会相当的快。


扩展性

随着网站一步步的发展,业务也会由简单到复杂,如果没有好的架构,增加一个功能可能导致事倍功半,出现种种问题。

那么如何保证扩展性呢?首先需要对网站的架构做分层,这是最基础的,一般分为应用层,服务层,数据层。其次,对各个独立的业务进行拆分独立。再者,通过分布式服务和消息机制,让各个系统解耦,容易维护和扩展。


安全性


性能

网站的性能是很重要的,响应快网站能留住更多的用户。所以性能优化是网站建设中的重要的一部分。

那么如何优化网站的性能呢?


客户端优化

A.浏览器访问优化

减少Http请求,合并css,javascript,图片等资源。把多个css,javascript文件合并成一个文件。图片可以由多个图片合并成一个图片,通过位置偏移来显示不同的图片。

使用浏览器缓存,对于静态文件,更新频率低,通过设置Http头中Cache-Control和Expires的属性,来设定浏览器的缓存。如果服务端更新了某个文件,则通过换名字达到更新浏览器缓存的作用。

同时,也可以压缩服务端的文件,html,css,javascript文件启用GZip压缩可达到较好的效果。

当然,在编写前端代码时,需要把css放在页面的最上面,javascript放在页面的最下面,因为浏览器在下载完全部的css后才进行渲染,但是javascript是下载后立即执行的,有可能阻塞整个页面,造成页面显示缓慢。

减少cookie传输,怎么做呢?有兴趣的同学可以看连接的文章 点击打开链接,我总结一下,同一个域名下的服务器产生的cookie存到客户端,当客户端再次访问的时候,就会判断域名是同一个,上传这个cookie。所以当一个图片等静态资源的请求也带上了cookie就没有必要了。那么我们可以把这些静态资源放到不同域名下的服务器,客户端请求这些文件时不会上传cookie了,这样就减少了数据的传输。

B.CDN加速

它的本质也是缓存,将数据缓存在离用户最近的地方(一般是静态资源,如图片、文件、css、javascript脚本、静态网页等),使用户以最快的速度获取数据,因为CDN部署在网络运营商的机房,这些运营商又是终端用户的网络服务提供商,因此用户请求路由的第一跳就到达了CDN服务器,当CDN中存在浏览器请求的资源时,从CDN直接返回给浏览器,最短路径返回响应,加快用户访问速度,减少数据中心负载压力。

C.反向代理

反向代理是位于服务器端的代理,在请求到达服务器的前一步,可以用于缓存和负载均衡,也可以起到安全作用。


服务端优化

分布式缓存

缓存是当服务器遇到性能问题的第一个考虑到的解决办法。缓存可以分为数据,文件,页面片段等多种资源

对于经常使用的数据,遵循二八定律,把经常用的20%数据缓存起来,缓存的好处是速度快,减少服务端的压力

缓存工具有Mencached,redis等

异步操作

异步的意思是调用者请求服务后,把请求加入消息队列,不必等待返回结果,直接返回,减少等待的时间,并且缓冲服务端的压力。但是异步需要根据业务来合理的设计。因为调用者请求后不能立即得到返回结果,会比较困惑,对于一些业务,可以通过邮件,SMS消息通知调用者最终结果。

使用集群

首先,使用集群需要用到负载均衡,有软件负载工具和硬件负载工具,软件负载均衡的成本比较低。集群的作用是分摊用户的访问量,减小单台服务器的压力。

代码优化

合理使用多线程,让cpu充分的利用起来,使用多线程要注意线程安全的问题,所以在设计上,对象应为无状态的对象,使用局部对象,并发访问是使用锁。

资源复用,如使用线程池,数据库连接池等,设计模式上使用单例模式,对象池等。

数据结构,程序就是数据结构+算法,数据结构对于编程的重要性不言而喻。例如hash表的使用,hashcode越随机散列,hash表的冲突越少,读写性能就越高。

垃圾回收,这个对于高级编程语言,都有自己的垃圾回收机制,所以不做讨论。


存储性能优化

存储的设备有内存,硬盘(机械硬盘,固态硬盘),一般持久化存储都会在硬盘。当机器使用固态硬盘是,速度会比机械硬盘高出很多。当然固态硬盘的费用也相对较高。

还有一些改变数据存储方式的高级知识,这里就不做讨论了。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值