[读书笔记]大型网站技术架构


大型网站技术架构,作者李智慧,曾就认于职里巴巴技术专家,现在intel就职。

1. 大型网站的架构模式有哪些?

分层:应用层,服务层,数据层
分割:按业力纵向分割
分布式: 不同模块部署到不同的服务器上,通过远程调用协调工作;
集群:提供更好的并发性
缓存:缓存热点数据
异步:分步式消息队列
冗余:数据冷备热备,建立灾备数据中心,异地多活

2. 大型网站核心架构要素?

性能; 可用性; 伸缩性; 扩展性; 安全

3. 网站性能测试指标?

响应时间;并发数; 吞吐量,TPS,QPS;性能计数器,System load,对象和线程数,内存使用,CPU使用,磁盘及网络IO

4. Web前端性能优化方法?

1. 浏览器方问优化:减少http请求;使用浏览器缓存;启用压缩(html,css,js);CSS放在页面最上面,JS放在最下面;减少cookie传输;
2. CDN加速
3. 反向代理

5. 应用服务器性能优化方法?

分布式缓存; 
异步操作;
使用集群; 
代码优化:多线程;资源复用,单例和对象池;数据结构优化,改善数据读写和计算特性;垃圾回收,注意对象引用的释放,防止全量回收;

6. 如何设计高可用性的应用?

业界通常用多少个9来衡量网站的可用性。3个9年度不可用时间小于9小时;4个9,53分钟;5个9,5分钟;
实现高可用性架构的主要手段是数据和服务的冗余及失效转移,一旦某些服务器宕机,就将服务切换到其他可用的服务器上。 

应用分层,分割,各模块独立部署,应用层设计成无状态,多个服务器之间完全对等,请求提交到任意服务器结果完全相同;利用负载均衡设备转发请求,当单台服务器故障后,进行失效转移,保正应用高可用;


7. 集群环境下,session管理的手段

1. session 复制:web容器的session复制功能; 优点:方案简单,从本机读取,速度快; 缺点:session复制需要大量的通信,占用服务器和网络资源; 
2. session绑定:利用 hash算法,将同一ip或同一用户的请求分发到同一服务器上; 优点:资源分散; 缺点:单台服务宕机,其他机器无法完成业务请求; 
3. cookie记录session: cookie记录session,服务端更新session后再回写浏览器端; 优点:简单易用,高可用性,支持服务端线性伸宿; 缺点:cookie大小限制,每次请求响应都传输cookie影响性能,如果cookie关闭访问不正常; 
4. session服务器:利用独立部署的session集群统一管理session,形成无状态的应用服务器+有状态的session服务器, 对于有状态的session服务器,可以利用分布式缓存或数据库。 优点:应用高可用,伸缩性好,对信息大小无限制;

8. 如何实现高可用的服务?

1. 负载均衡的失效转移策略
2. 分级管理:核心服务用好硬件; 非核心服务用低成本硬件;
3. 超时设置: 设置超时,超时后重试或转移请求到其他服务器; 
4. 异步调用:业务异步化,防止单个服务故障阻塞整个请求;
5. 服务降级:拒绝部分请求(拒绝低优先级应用或随机拒绝); 关闭部分非核心服务; 
6. 幂等性设计:多次调用,结果相同,如转账操作

9. 缓存服务是否需要保证高可用性?

一种观点:缓存已经成为网站数据的重要组成部分,事实上承担了大多数的数据读取访问,缓存服务失效会导致数据库负载过高而宕机,进而影响整个网站的高可用性,因此缓存服务要保证高可用性; 
另一种观点:缓存服务不是数据存储服务,缓存服务失效导致数据存储服务负载压力过高应该通过其他手段解决,而不是提高缓存服务本身的高可用; 另外,缓存服务集群部署,当集群规模较大时,单机宕机引起的数据丢失比例和数据库负载压力变化的比例较小,对整个系统冲击不大;

10. CAP原理是什么?

一种提供数据服务的存储系统无法同时满足数据一致性C,数据可用性A,分区容错性P;大型网站设计中,通常会选择强化可用性A和伸缩性P,根据补偿和纠错,避免应用系统数据不正确;数据强一致性; 数据用户一致; 数据最终一致性;

11. 数据备份有哪些手段?

冷备: 
定期将数据复制到某种存储介质; 优点:简单,廉价; 缺点:不能保证数据最终一致性,数据恢复时不能保证可用性; 
热备:
1. 异步写入方式:主从存储,写入主,主再同步到从; 优点:解决了数据备份问题; 改善性能,主只写,从只读;
2. 同步写入方式:多份数据副本写入操作同步完成,存储服务器没有主从之分,完全对等,多份数据的总写操作延时是响应最慢的那台服务器的延时; 

12. 数据访问失效转移流程?

1. 失效确认:心跳检测确认;访问失败报告,再检测确认;
2. 访问转移:将读写访问重新路由到其他服务器上; 对等存储的服务器集群,直接路由到对等的服务器上; 对于不对等的,重新计算路由;
3. 数据恢复:某台服务器宕机后,数据副本会减少,要恢复数据副本到指定的某个值;

13. 何为伸缩性?

不需要改变软件的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或缩小网站的处理能力。

14. 如何对单台服务器的应用进行伸缩性改造?

1. 应用拆分:应用分层,分层后纵向分离,单独部署; 横向分离,按业务模块分离; 
2. 服务集群化:服务无状态,部署多台服器,通过负载均衡方式访问服务集群,实现伸缩性;

15. 负载均衡有哪些实现方式?

1. Http重定向负载均衡:http 302返回访问实际地址,达到负载均衡的效果; 优点:简单; 缺点:两次请求完成一次交互,性能差;重定向服务器可能成为性能瓶颈;
2. Dns域名解析负载均衡:优点:负载均衡的工作交给dns, 减少运维成本; 缺点:DNS域名解析可能存在多级缓存,地址同步有延时,会导致路由到下线的机器,导致访问失败;
3. 反向代理负载均衡:反向代理服务器在http协议层面转发请求,属于应用层负载均衡; 反向代理服务器需要双网卡; 优点:和反向代理服务器集成在一起,部署简单;缺点:反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈;
4. IP负载均衡:用户请求数据包到达负载均衡服务器后,在操作系统的内核层修改目的IP地址,不需要用户进程处理; 通过修改源IP为负载均衡服务器的地址(SNAT,需要维护会话)或配置网关,将响应包路由到负载均衡服务器,再修改IP地址,将响应包返回给用户; 优点:较反向代理服务器有较好的性能;缺点:IP负载均衡服务器仍然有可能存在瓶颈;
5. 数据链路层负载均衡:三角传输模式,负载均衡数据分布过程中不修改IP地址,只修改MAC地址; 集群中所有真实服务器虚拟IP与负载均均衡服务器IP一致; 返回包由真实服务器直接返回给用户,不经过负载均衡服务器;LINUX平台最好的负载均衡开源产品是LVS。

16. 分布式缓存集群有哪些点?

1. 分布式缓存服务器集群中的不同服务器中缓存的数据各不相同,缓存访问请求不可以在缓存服务器集群中的任意一台处理,必须先找到服务器,才能访问;
2. 加入新的缓存服务器后,应使整个缓存集群中的数据尽可能还被访问到; 
3. 新上线的缓存服务器没有任何数据,而下线的缓存的服务器还缓存着热点数据;

17. Memcached缓存访问模型?

根据缓存的数据KEY经路由算法处理后,选择一台缓存服务器,再向该服务器发起读写请求;

18. 分布式缓存的一致性Hash算法?

先构造一个长度为2^32的整数环,根据缓存服务器的名称计算hash,再根据hash值将缓存服务器放置在这个整数环上。根据数据的key计算hash。然后再这个整数环上顺时针查找距离这个hash最近的缓存服务器节点,完成key到服务器的映射;
具体实现中,服务器节点采用二叉树存储,二叉树的最右边叶子节点和最左边的叶子节点相连接,构成环;
一层的服务器节点hash, 新增一个节点后,只会影响一台缓存服务器; 其他缓存服务器保存的数据容量不变;
通过加一层虚拟节点,来使加一个服务器后,影响扩展到每一台服务器;
每个物理节点对应的虚拟节点越多,各个物理节点之间的负载越均衡,然而太多会影响性能,太少会导致负载不均。书中给出的经验值是150;

19. 数据存储服务器集群伸缩性设计时有哪些约束?

数据存储服务器必须保证数据的可靠存储,任何情况下都必须保证数据的可用性和正确性;具体地关系型数据库集群的伸缩性设计和NoSql数据库的伸缩性设计又存在差异;

20. 关系型数据库集群的伸缩性设计?

1. 大部分数据库都支持数据复制功能,数据库部署成主从模式,对主库写,从库读,数据从主库复制到从库;
2. 按业务分库,不同业务数据库表部署在不同集群;约束是跨库的表不能进行join操作;
3. 分库分表; 支持的中间件,有tddl,cobra,amoeba.
Cobra 是一个分布式关系数据库方问代理,介于应用服务器和数据库服务器之间。

21. NoSQL数据库与SQL数据库的关注点有哪些不同?

一般而言,NoSQL放弃了关系数据库的两大重要基础:以关系代数为基础的结构化查询语言SQL和事务一致性保证。而强化其他大型网站更关注的特性:高可用性和可伸缩性;

22. 如何理解扩展性?

对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。表现在系统基础设施稳定不需要经常变更,应用之间较少依赖和耦合,对需求变更可以敏捷响应。它是系统架构设计层面的开闭原则(对扩展开放,对修改关闭),架构设计考虑未来功能扩展,当系统增加新功能时,不需要对现有系统的结构和代码进行修改。 

23. 如何设计可扩展的网站?

1. 模块化,降低系统耦合性,提高模块复用性;
2. 利用分布式消息队列降低系统耦合
3. 利用分布式服务复用服务,如阿里巴巴的Dubbo,HSF
4. 可扩展的数据结构,使用NoSQL
5. 建立开放平台,形成生态

24. WebService原理?

服务提供者通过WSDL(Web Services Description Language)向注册中心描述自身提供的服务接口属性,注册中心使用UDDI(Universal Description, Discovery and Integration,统一描述,发现和集成)发布服务提供者提供的服务,服务请求者从注册中心检索到服务信息后,通过SOAP(Simple Object Access Protocol,简单对象访问协议)和服务提供者通信,使用相关服务;缺点:臃肿的注册和发现机制,低效的XML序列化,开销相对较高的HTTP远程通信,复杂的部署和维护手段;

25. 大型网站分布式服务的需求与特点?

负载均衡,失效转移,高效的远程通信,整合异构系统,对应用入侵少,版本管理,实时监控

26. 网站攻击有哪些种攻击类型,攻击原理及如何防护?

XSS,SQL注入,CSRF,Session劫持等
XSS: 跨站点脚本攻击,指黑客通过篡改网页,注入恶意HTML脚本,用户在浏览网页时,控制浏览器进行恶意操作的一种攻击方式。有反射型和持久型两类;反射型,攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的。持久型攻击,黑客提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览时,恶意脚本被包含在正常页面中,达到攻击的目的。防攻击手段:对输入进行过滤,对某些html危险字符转义;Cookie添加HttpOnly属性,禁卡JavaScript访问,避免攻击者窃取Cookie;
SQL注入:攻击者在HTTP请求中注入恶意SQL,服务器用请求参数构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行; 如http://www.a.com?username=frand’;drop table users;  防攻击手段:服务器关闭错误回显(异常信息不显示在浏览器上),对请求参数消毒(正则匹配过滤可能的SQL注入),使用预编译手段绑定参数攻击者的SQL会被当做参数而不是命令;
CSRF:攻击者通过跨站请求,以合法用户的身份进行非法操作,如转账交易,发表评论;核心是利用浏览器Cookie或服务器Session策略,盗取用户身份;
防攻击手段:
1. 表单token:在页面表单中会增加一个随机数作为token,每次响应页面的token都不同,从正常页面提交的请求会包含该token值,而伪造的请求无法获得该值,服务器检查请求参数中token的值是否存在并正确,以确定请求提交者是否合法;
2. 验证码
3. Referer Check:Http请求头中的Referer域中记录着请求来源,可以通过检查请求来源,验证其是否合法;很多网站用这个功能实现图片防盗链;

27. 如何保护网站的密码等重要信息?

散列hash,数据库中不保存原文;对称加密和非对称加密;根密钥进加密机,无法获取根密钥原文;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值