《淘宝技术这十年》
第0章引言
生成一个淘宝首页,服务器成千上万,需要用到负载均衡技术,硬件上有专门的负载均衡器,软件上采用自研的LVS
因为浏览器在统一域名下的并发链接数有限,所以首页上的资源被分布到不同的域名下面
内容分发网络CDN,保证资源访问到距离访问者最近的节点,提高访问速度。问题是这些CDN服务器如何保持高效同步?
第2-3章从个人网站到企业网站
1、最早的网站采用经典的LAMP(Linux+Apache+Mysql+PHP)
2、Mysql逐渐成为数据访问瓶颈,于是用强大的Oracle代替之
3、开发语言替换为更加强大的Java,MVC框架采用WebX(基于Jakarta turbine打造,表现层支持JSP/Velocity,持久层支持ibatis/hibernate,控制层支持EJB/Spring),于是框架变成了WebX+EJB+Ibatis,后来EJB遇冷,才开始采用Spring框架代替之。
4、后端存储上,NetApp的NAS撑不住,替换为EMC的SAN,IBM的小型机,现在IOE神器(IBM小型机+Oracle+EMC的存储)成功合体。
5、数据库优化方面:因为一个Oracle的处理能力是有限的,连接池有数量限制,查询速度与容量成反比,于是把用户的信息按照ID放到两个数据库,把商品信息、卖家信息拆分为单独的数据库。这样的话,数据查询的Join就不好弄了,于是构架师行颠研发了数据库路由框架DBRoute,统一处理了数据的合并排序分页,让程序员像使用一个数据库一样使用多个数据库。
6、再说说搜索引擎。原理就是把数据库里面的数据dump成结构化文本,放在硬盘上,提供web应用以约定的语法和参数来查询。
7、还有缓存系统,多隆开发了基于Berkeley DB缓存系统,为了提高查询速度,把大字段商品详情单独提取到一张数据表中。
第4章技术创新
TFS
针对淘宝图片的特点:文件比较小,并发量高;读操作远远大于写操作;随机访问,没有修改操作等特点
设计特点:集群由一对Name Server和多台Data Server;图片文件名上保存了额外的元数据信息(大小、时间、逻辑块号等);采用ext4文件系统
图片处理与图片缓存编写成Nginx的模块,以提高缓存命中率
Tair
ESI(Edge Side include),是一种数据缓存服务器,它能够将Web网页部分进行缓存,使用XML标记语言,能够指定要缓存的部分。
在动态缓存方面,推出了Key-Value缓存系统Tari,作为一个分布式系统,Tari包括缓存和持久化两部分,由一个中心控制节点和一系列的服务节点组成。
第5章分布式电子商务系统
1、将业务拆分,服务分层,越是基础的业务越是放到底层
2、高性能服务框架HFS(High-Speed Service Framework):解决服务拆分后的服务发布和获取问题
服务的提供者想ConfigServer注册服务信息,这样ConfigServer上就定义了所有的可供调用的服务
服务调用者想ConfigServer注册对哪些服务感兴趣
当服务提供者信息变化时,ConfigServer向响应的感兴趣的服务调用者推送新的服务信息列表
调用者在调用时根据服务信息的列表直接访问响应的服务提供者,无须经过ConfigServer
HFS本身提供“软负载均衡”
3、消息中间件Notify:解决原来的MQ不给力的问题(经常阻塞)
NotifyServer在ConfigServer上面注册消息服务,消息的客户端通过ConfigServer订阅消息服务。
某个客户端调用NotifyServer发送一条消息,NotifyServer负责把消息发送到所有定义这个消息的客户端
消息数据本事存放在数据库中,为了方便重发等处理
4、分布式数据访问层TDDL
对外统一数据访问接口;能够支持Oracle、Mysql的自由切换;多数据库之间的分布式事务支持
5、Session框架TbSession:原来放在cookies中影响交互效率,并且安全性堪忧