读《大型网站技术架构 核心原理与案例分析》有感

举报
费德勒 发表于 2017/03/16 11:25:58 2017/03/16
【摘要】 以业务驱动为发展动力,技术为业务服务。每个大型互联网系统都是由小做大的,很多大型互联网网站最开始都是采用LAMP。

互联网系统与企业系统对比
当然这里主要讨论大型互联网系统,用户数量在几万的系统不在对比范围。企业系统用户数量在几千到几万。
不同点:

系统性能的评价指标:
系统性能、可用性avalibility、伸缩性flexibility、扩展性、安全性security

一、系统性能:性能对用户的影响是操作体验,页面的响应时间,计算结果的时间。 性能测试指标:响应时间、并发数、吞吐量、性能计数器
性能测试方法:性能测试、负载测试、压力测试、稳定性测试
性能优化措施:
1、浏览器访问优化:
减少Http请求,通过合并CSS、Javascript、图片,使多次请求合并为一次请求。浏览器缓存,将CSS、JavaScript、logo、图标这些更新频率低的资源缓存在用户本地。启用压缩,服务器端对HTML、CSS、JavaScript启动gzip压缩,浏览器端对资源解压缩进行显示。
CSS放在前面,Javascript放在页面下面,CSS用于渲染页面时使用,javascript会立即执行,有可能阻塞页面。
减少Cookie传输,太大的cookie会严重影响数据传输。
2、CDN加速
CDN(Content Distribute Network,内容分发网络)本质是缓存,将静态资源缓存在离用户最近的网络运营商机房,即用户网络访问第一跳。用户直接从最近的运营商机房取得静态资源。
3、反向代理
请求达到反向代理服务器,之后转发给应用服务器集群进行处理,反向代理服务器可以提供资源缓存服务,负载均衡能力。

反向代理的用处
(1)保护和隐藏原始资源服务器
(2)负载均衡
与反向代理对应的是正向代理,借此机会就在这里介绍一下:
正向代理:
正向代理一般需要对客户端进行设置,一种正向代理的例子就是我们在请求外网时(www.google.com)需要对IE的代理设置:

大家一定很奇怪,公司的内网和外网(Internet)是不连通的,为什么不配代理就不能访问谷歌,配置了代理之后就可以访问了,原因在于代理服务器替你请求www.google.com,然后再将结果返回给客户端(用户)。
示意图如下:

这样,用户是没有访问www.google.com的权限的,但是proxy.huawei.com有权限访问,这样经由proxy访问谷歌,然后将结果返回给用户,就达到了用户请求谷歌的目的。
正向代理的用处
(1)访问本无法访问的服务器
本来用户经过路由器A和B访问服务器B,但是由于链路断裂,可以经由Proxy访问服务器B,经典的例子是“翻墙”,不过现在翻墙的技术还有VPN了。

(2)加速访问服务器
同样是上图,如果代理服务器到服务器B的带宽比较足,那么访问速度要快很多。
(3)cache作用
可以利用proxy缓存需要请求的资源,而直接返回给用户。
(4)客户端访问授权
proxy可以对请求来源进行识别,让部分用户通过proxy访问服务器B,而对不能访问外网的用户请求直接扔掉。
(5)隐藏访问者的行踪
黑客比较喜欢利用代理跳转,抓到“肉鸡”之后就可以利用肉鸡做一些非法的事情,但是在目标机器上残留的确是“肉鸡”的信息,而很难追查到攻击来源。
黑客往往手里掌握几百台服务器(肉鸡),经过不断跳转而使追查攻击者来源很难。

正向代理和反向代理对比:


4、应用服务器性能优化
分布式缓存
常用的分布式缓存架构主要有JBoss Cache、Memcached,memcache使用较多。异步操作,消息队列机制,需要关注数据一致,对实时性要求比较高的不适合利用消息队列机制。
使用集群,提高吞吐量
代码优化
利用多线程,多线程时线程安全需要关注,将对象设计为无状态对象,使用局部对象,并发访问时使用锁是保证线程安全的一些措施。
资源复用,单例和对象池,数据库连接中基本都是用连接池的方式。应用服务器也采用线程池的方式。
session管理
合理利用垃圾回收机制
5、存储性能优化
分布式存储,利用读取速度较快的存储介质是需要考虑的问题。

二、可用性:可用性保证用户在7*24小时时间内可以正常访问页面的情况,一般大型网站都要保持4个9(一年时间内99.99%时间系统可用,宕机时间在53分钟以内)。
为了保证可用性一般有如下措施:通过负载均衡进行无状态服务的失效转移应用服务器集群的Session管理,分级管理、超时设置、异步调用、服务降级、幂等性设计
CAP原理
CAP原理一般认为在分布式系统中此三个指标不能同时得到满足,最多满足其中两个,而一般系统设计中牺牲的指标是数一致性。

发散一下:项目管理中也有一个铁三角,质量、时间、成本铁三角,三者之间互相影响,改变其中之一就会对另外两个的造成影响,例如要在短时间内完成一个项目,就要以较高成本和牺牲一定的质量为代价。若要时间短、高质量,就要付出更多的成本若要成本低,就要耗费较长的时间,甚至质量上要做出让步.
数据备份:分为数据冷备和数据热备(异步热备方式和同步热备方式)
网站发布:网站发布前需要进行自动化测试、预发布验证、灰度发布、正式发布,一般对于多服务器集群都是采用。


三、伸缩性:通过增加机器数量达到承载更多用户并发访问的目的。如果具备这种能力,那么我们可以说系统可伸缩性是不错的。
伸缩性的设计可以从两个维度进行,分别是横向扩展和纵向扩展,横向扩展是不同业务模块或不同产品的扩展,一般采用“分而治之”的策略,将每个模块独立分开;纵向扩展一般采用集群方式满足大量用户的并发访问。
集群的伸缩性设计
1、HTTP重定向负载均衡
用户请求域名,DNS服务器解析域名到达114.100.80.10这台HTTP重定向负载均衡服务器,负载均衡服务器通过特定算法获得重定向地址114.100.80.3写入响应,并设置状态码302返回给浏览器,浏览器重新请求114.100.80.3,完成请求。

总结:这种负载均衡的优点是配置简单,缺点是请求需要两次才能得到结果。
2、DNS域名解析负载均衡
用户请求域名,域名服务器DNS根据特定算法返回其中一台物理机器的IP地址,浏览器请求该IP获得响应。

例如百度网站也是做了DNS负载均衡的,利用nslookup命令可看到可以得到两个IP,112.80.248.74和112.80.248.73,访问任一个IP都是访问百度首页。

总结:优点是将负载均衡的工作交给DNS服务器,缺点是如果某台服务器下线,但是DNS依然缓存了此服务器IP地址,那么会导致用户请求失败。事实上一般将DNS负载均衡作为第一级负载均衡,即解析得到的服务器并不是实际提供服务的物理服务器,而是同样提供内部服务的内部服务器。
3、反向代理负载均衡
浏览器访问请求的地址是反向代理服务器的地址114.100.80.10,反向代理服务器收到请求后,根据负载均衡算法得到其中一台真实物理服务器的地址10.0.0.3,并将请求转发给服务器,10.0.0.3处理完请求后将响应返回给反向代理服务器,反向代理服务器再讲响应返回给用户。

总结:优点是和反向代理服务器功能集成在一起,部署简单,缺点是反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。
4、IP负载均衡
用户请求数据包到达负载均衡服务器114.100.80.10后,负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均算法计算得到一台真实Web服务器10.0.0.1,然后将数据目的IP地址修改为10.0.0.1,不需要通过用户进程处理。真实Web应用服务器处理完成后,响应数据包回到负载均衡服务器,负载均衡服务器再将数据包源地址修改为自身的IP地址(114.100.80.10)发送给用户浏览器。

总结:IP负载均衡在内核进程完成数据分发,较反向代理负载均衡有更好的处理性能。但是由于所有请求响应都需要经过负载均衡服务器,集群的最大响应数据吞吐量不得不受限制于负载均衡服务器网卡带宽。对于提供下载服务或者视频服务等需要传输大量数据的网站而言,难以满足需求。
5、数据链路层负载均衡

四、扩展性:当业务有新增加时,是否能做到对以前的功能无影响,这就是系统扩展性。主要对业务横向扩展能力的描述。
利用分布式消息队列降低系统耦合性提供Web Service

五、安全性:不言而喻,安全性是系统必须要关注的特性
常见攻击: XSS攻击、注入攻击、CSRF攻击
常用安全手段:Web应用防火墙(ModSecurity)、网站安全漏洞扫描
利用信息加密技术保障数据安全:
单向散列加密:MD5、SHA等
对称加密:DES算法、RC算法
非对称加密: RSA算法,数字证书
除了上面介绍的五个特性,一个架构设计完善的系统还应该有全面的监控系统,收集用户行为,监控服务器性能(系统load/内存占用/磁盘IO/网络IO扥),系统报警系统等。
结束语:以业务驱动为发展动力,技术为业务服务。每个大型互联网系统都是由小做大的,很多大型互联网网站最开始都是采用LAMP
这样免费轻型的组合方式,最初可能只有一台机器,随着业务发展,用户数量增加,将LAMP重构使之符合当时的情况。

作者 | 姚传存

转载请注明出处:华为云博客 https://portal.hwclouds.com/blogs

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。