2003.04.07-2003.05.10 LAMP(Linux+Apache+Mysql+PHP)
LAMP 常用网站架构模型 优点:无须编译,发布快速,php语言功能强大,开源免费。
2004.上半年 php --》 java 改造的mvc框架WebX,引入搜索引擎
优化(性能、容量、成本)
2004年底 分库分表 涉及问题:数据合并,排序、分页等
解决:数据库路由框架DBRoute
缓存、CDN(内容分发网络)
TFS 缓存系统 taobao file system
Tair 淘宝KV缓存系统
TBstore
ESI edge side includes
memcached
所有服务 模块化
各个模块交互通信需要HSF 和 Notify
HSF 实时调用中间件 高性能服务框架
Notify 异步消息通知中间件
分布式数据访问层TDDL taobao distributed data layer
一家小超市,一个收银员,同时还兼着干点其他的事情,例如,打扫卫生、摆货。来买东西的人多起来了,排队很长,顾客受不了,于是增加了一个收银台,雇了一个收银员。忙的时候收银员根本没时间去打扫卫生,超市内有点脏,于是雇了一个专门打扫卫生的。
回复
114楼
2013-12-05 18:43
随着顾客不断增加,超市也经过好几次装修,由以前的一层变成了两层,这个时候所做的事情就是不断增加收银台、收银员和打扫卫生的人。在超市运转的过程中,老板发现一个现象,有些收银台排很长的队,有些收银台排的人不多,了解后知道是因为收银台太多了,顾客根本看不到现在各个收银台的状况。对于这个现象,一种简单的方法就是继续加收银台。但一方面,超市没地方可加收银台了,另一方面,作为老板,当然不需要雇太多的人,于是开始研究怎样让顾客了解到收银台的状况,简单地加了一个摄像头和一个大屏幕,在大屏幕上显示目前收银台的状况,这样基本解决了这个问题。排队长度差不多后,又出现了一个现象,就是有些收银台速度明显比其他的慢,原因是排在这些收银台的顾客买的东西特别多,于是又想了一招,就是设立专门的10件以下的通道,这样买东西比较少的顾客就不用排太长的队了,这一招施展后,顾客的满意度明显提升,销售额也好了不少,后来就继续用这招应对团购状况、VIP 状况。在解决了上面的一些烦心事后,老板关注到了一个存在已久的现象,就是白天收银台很闲,晚上则很忙,于是从节省成本上考虑,决定实行部分员工只在晚上上班的机制,白天则关闭一些收银台,顾客仍然可以通过大屏幕看到哪些收银台是关闭的,避免走到没人的收银台去,实行这招后,成本大大降 低了。这个生活中的例子及其解决的方法,其实和互联网网站发展过程中的一些技术是非常类似的,只是在技术层面用其他名词来表达了而已,例如,有集群、分工、负载均衡、根据QoS分配资源等
回复
115楼
2013-12-05 18:43
y集群:所有的收银员提供的都是收银功能,无论顾客到哪一个收银员面前,都可完成付款,可以认为所有的收银员就构成了一个集群,都希望能做到顾客增加的时候只需增加收银员就行。在现实生活中有场地的限制,而在互联网应用中,能否集群化还受限于应用在水平伸缩上的支撑程度,而集群的规模通常会受限于调度、数据库、机房等。 y分工:收银员和打扫卫生的人分开,这种分工容易解决,而这种分工在互联网中是一项重要而复杂的技术,没有现实生活中这么简单,涉及的主要有按功能和数据库的不同拆分系统等,如何拆分以及拆分后如何交互是需要面临的两个挑战。因此,会有高性能通信框架、SOA平台、消息中间件、分布式数据层等基础产品的诞生。y负载均衡:让每个收银台排队差不多长,设立小件通道、团购通道、VIP通道等,这些可以认为都是集群带来的负载均衡的问题,从技术层面上说,实现起来自然比生活中复杂很多。y根据QoS分配资源:部分员工仅在晚上上班的机制要在现实生活中做到不难,而对互联网应用而言,就是一件复杂而且极具挑战的事参照生活中的例子来说,在面对用户增长的情况下,想出这些招应该不难,不过要掌握以上四点涉及的技术就相当复杂了,而且互联网中涉及的其他很多技术还没在这个例子中展现出来,例如缓存、CDN等优化手段;运转状况监测、功能降级、资源劣化、流控等可用性手段,自建机房、硬件组装等成本控制手段。因此,构建一个互联网网站确实是不容易的,技术含量十足,当然,经营一家超市也不简单。从超市的运维可以抽象出系统设计的一些思路,服务拆分之后,如何取得我需要的服务?在“电视机”上,把每个集群能提供的服务显示出来。你不需要关心哪个人为你服务,当你有需要的时候,请先看头顶的电视机,它告诉你哪个服务在哪个区域。当你直接去这个区域的时候,系统会给你找到一个最快速的服务通道。这就是HSF的设计思想,服务的提供者启动时通过HSF框架向ConfigServer(类似超市的电视机)注册服务信息(接口、版本、超时时间、序列化方式等),这样ConfigServer上面就定义了所有可供调用的服务(同一个服务也可能有不同的版本);服