专栏首页熊二哥《大型网站技术架构》学习笔记-03案例篇

《大型网站技术架构》学习笔记-03案例篇

最后一篇案例篇,"愿站在巨人的肩膀上",加油熊二同学。

常见案例

淘宝网架构演进 2017年5月18日,阿里巴巴集团公布2016财年的全年业绩,集团收入为1582.73亿元人民币,同比增长56%,移动端月度活跃用户高达5.07亿,于此同时,阿里和腾讯的市值均站上了3000亿美元市值的全球企业第一梯队,不知道B大哥能不能通过人工智能和马大嫂重回巅峰。淘宝的技术是和业务一起成长起来的,其发展历程分为如下几个阶段。

  • 第一阶段2003-2004:从2003年老马花费3000美金购入C2C交易网站,基于LAMP架构,数据库进行简单读写分离。
  • 第二阶段2004-2006:模仿eBay开展业务,开始建立商品类目,同时使用Java替代PHP,Oracle替换MySQL,使用MVC框架Webx和ORM框架iBatis,并开发Antx用于项目构建,应用服务器使用WebLogic。
  • 第三阶段2006-至今:放弃EJB,引入spring,用免费的JBoss替代Weblogic,再之后用Jetty替代了JBoss更加简化,截止到2012年,其使用Tair缓存,TFS分分布式文件系统,OceanBase分布式数据库系统,支持千亿级别的读写事务,TDDL对应用透明的分库分表层和具有众多特性的动态数据源。

维基百科 维基百科wikpedia与2012已成为流量排名全球第六的大型网站,其建立于2001,属于高性能架构的代表,由于成本原因,一直使用LAMP架构,其主要组件如下所示。

  • GeoDNS:基于开源名服务器软件BIND的增强版,可将域名解析到离用户最近的服务器
  • LVS:基于Linux的开源负载均衡服务器
  • Squid:基于Linux的开源反向代理服务器
  • Lighttdpd:开源应用服务器,比Apache更轻量,常用于图片服务器
  • PHP+MySQL:Web开发的两大神器
  • Memcached:无中心高性能的开源分布式缓存系统,历久弥新
  • Lucene:基于java的开源全文搜索引擎

前台优化策略:由于百科实时数据请求低的特点,8成以上用户请求可以直接通过前端服务返回,不会到达应用服务器,前端服务包括DNS服务、CDN服务、反向代理服务和静态资源等服务。其和核心是反向代理服务器Squid集群,请求通过LVS分发到每台Squid服务器,热点词条被缓存于此处,同时将关键词条发在CDN服务器上,其准则是内容页面不包含动态信息,具有唯一REST风格url,便于CDN快速查询并避免重复缓存,在HTML响应头中写入缓存控制信息。 中台优化策略:集中最好的服务器资源,使用APC加速PHP代码执行,使用imagemagick进行图片处理和转化,使用Tex进行文本格式化,特别试讲科学计算公式转换为图片等。 后台优化策略:主要手段是使用缓存,将热点最集中的数据直接缓存在应用服务器本地内存,缓存内容尽量使用html等直接可用格式,使用缓存服务器存储session对象,相比数据库,memcached的持久化连接更廉价。在使用MySQL时,使用较大的服务器内存,使用RAID0加速磁盘访问,将事务一致性设置在较低水平,如果Master宕机,直接切换到Slave并关闭写服务,进行服务降级。

网购秒杀系统 秒杀是电商网站常见的营销手段,通过少量低价商品吸引人气,引导用户购买其他高价商品,最终提高收益。 秒杀系统的技术挑战和对策

  • 对现有业务的冲击:独立部署秒杀系统
  • 高并发下的应用,数据库负载:秒杀商品页面静态化
  • 突然增加的网络和服务器带宽:租用秒杀活动网络带宽
  • 直接下单的url泄露:动态生成随机下单页面URL Tip: 如何控制秒杀商品页面购买按钮的点亮?使用javascript脚本控制,在秒杀商品静态页面加入一个js文件应用,该js文件加入秒杀是否开始的标志和下单页面url的随机数参数,当秒杀开始时生成新的js文件并被用于加载,控制秒杀页面的展示。该文件使用随机版本号,不被浏览器、CDN和反向代理服务器缓存。 如何只允许第一个提交的订单被发送到订单子系统?需要检查是否已经有订单提交,比如最终只能有一个用户提交成功,为了减少下单页面的压力,可以控制进入下单页面的入口,只有少数用户能进入下单页面,其他用户进入秒杀结束页面。

典型故障

  • 写日志也会引发故障:对于本地log,如果不做好策略配置,log文件夹的体积就会迅速增大,消耗磁盘空间,这个算是常见错误。
  • 高并发访问数据库引发的故障:首页最好是静态的,且不应该访问数据库,需要的数据一定要从缓存服务器或者搜索引擎服务器获取。
  • 高并发情况下锁引发的故障:程序中某个单例对象中多次使用了synchronized(this),由于this对象只有一个,所有并发请求都要排队,因此使用锁时需要谨慎。
  • 缓存引发的故障:当缓存不仅仅是改善性能,而是成为网站架构重要组成部分是,对缓存的管理就需要提升到和其他服务器一样的级别。
  • 应用启动不同步引发的故障:比如Web环境中使用Apache+JBoss模式,用户请求通过Apache转发JBoss,发布时,两者同时启动,由于JBoss需要加载数据启动慢,而Apache快速,那么Apache就会提前接受大量用户请求,大量请求阻塞与JBoss进程,最终崩溃,因此需要配置好启动脚本并监控JBoss的是否Up。
  • 大文件读写独占磁盘引发的故障:图片一般要用专门的存储服务器,尤其不要和大文件在一起存储。
  • 滥用生产环境引发的故障:数据库生产环境的任何修改一定要有流程,比如DBA审核。
  • 不好的变成习惯引发的故障:加强code review,控制好代码质量,比如java的空指针异常的判断。

参考资料

  1. 李智慧. 大型网站技术架构[M]. 北京:电子工业出版社, 2013.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java缓存深入理解

    对于缓存大家都不会陌生,但如何正确和合理的使用缓存还是需要一定的思考,本文将基于Java技术栈对缓存做一个相对详细的介绍,内容分为基本概念、本地缓存、远程缓存和...

    用户1216676
  • 《大型网站技术架构》学习笔记-02架构篇

    上一篇文章已经介绍了网站系统最需要关注的5大质量属性,接下来对这些特性进行详细介绍(这部分有部分内容会显得有些陈旧,之后会进行更新)。 ? 高性能架构 网站...

    用户1216676
  • 快速入门系列--WCF--06并发限流、可靠会话和队列服务

    这部分将介绍一些相对深入的知识点,包括通过并发限流来保证服务的可用性,通过可靠会话机制保证会话信息的可靠性,通过队列服务来解耦客户端和服务端,提高系统的可服务数...

    用户1216676
  • 读《大型网站技术架构》

    《大型网站技术架构》是自己接触的第一本架构知识的书籍,还是在14年时买的实体书,前后读了几遍,颇有所得,后来实体书被朋友借走再没归还,也就没再翻过。

    高广超
  • Android学习最佳路线

    看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了,但是中高级的Android技术人才仍然稀缺“,这的确不假,从我在百度所进行的一些面试来看,...

    Android技术干货分享
  • 浏览器缓存机制浅析--HTTP缓存

    浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires; Cache-control等)。但是也有非HTTP协议定义的缓存机制,如使用HT...

    Clearlove
  • 腾讯云秒杀活动

    https://cloud.tencent.com/act/cps/redirect?redirect=1044&cps_key=9e19e1536ac69d2...

    用户1361591
  • Kubernetes里的deployment unit

    Jerry Wang
  • Kubernetes原生CI/CD工具Tekton探秘与上手实践

    NOTE: There is an open proposal to deprecate this component in favor of Tekton P...

    Criss@陈磊
  • ubuntu16.04下xmr-stak 门罗币或者以利币挖矿

    xmr-stak的github地址:https://github.com/fireice-uk/xmr-stak xmr-stak-cpu的github地址:...

    foochane

扫码关注云+社区

领取腾讯云代金券