•电商架构分析IW电子商务网站•高并发•数据实时性要求高•数据准确性要求高•大多数页面属于动态页面•网站需要大量商品图片展示•用户通过搜索引擎,广告,类目导航寻找商品•网站读多写少,比例超过10:1•买家相关的数据量较大,比如商品数,评价数•业务量快速增长特点集群(应用无状态)缓存数据应用拆分、业务分离、域名分离数据架构(数据库拆分)异步通信非结构化数据存储独立搜索引擎监控、预警系统配置统一管理推荐系统目录集群(应用无状态)缓存数据应用拆分、业务分离、域名分离数据架构(数据库拆分)异步通信非结构化数据存储独立搜索引擎监控、预警系统配置统一管理推荐系统目录集群(应用无状态)•俗话说,一个系统的伸缩性的好坏取决于应用的状态如何管理。为什么这么说呢?•试想一下,假如我们在session中保存了大量与客户端的状态信息的话,那么当保存状态信息的server宕机的时候,电商会怎么办?思考Server2……..前端WebServer1集群(应用无状态)负载均衡同步同步•cluster集群应用无状态•通俗地说,即当A无法为客户服务时,系统能够自动地切换,使B能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。失效转移•严重影响了系统的伸缩性•系统不能通过增加更多的机器来达到良好的水平伸缩•通信会随着节点的增多而开销增大产生问题应用无状态VMwareESXVMwareESXVMwareESXiResourcePoolPhysicalServers•分布式资源调度程序DRSVMwareESXVMwareESXVMwareESXiResourcePoolFailedServerOperatingServerOperatingServer•高可用性HA应用无状态VMwareESXVMwareESXVMwareESXiOperatingServerOperatingServer不用重启无缝割接FailedServer•容错FT应用无状态集群(应用无状态)缓存数据应用拆分、业务分离、域名分离数据架构(数据库拆分)异步通信非结构化数据存储独立搜索引擎监控、预警系统配置统一管理推荐系统目录缓存数据•缓存是指临时文件交换区,电脑把最常用的文件从存储器里提出来临时放在缓存里,就像把工具和材料搬上工作台一样,这样会比用时现去仓库取更方便.•缓存对于一个互联网应用是非常重要的,从浏览器缓存、反向代理缓存、页面缓存、局部页面缓存、对象缓存等等都是缓存应用的场景基本概念•预读取•写入•临时存储作用WebServerImageCDNVideoCDNCDNCDNCDN……..•在国内访问量较高的大型网站如新浪、网易等,均使用CDN网络加速技术,虽然网站的访问巨大,但无论在什么地方访问都会感觉速度很快实例缓存数据•利用内容分发与复制技术,将占网站主体的大部分静态网页、图像和流媒体数据分发复制到各地的加速节点上,通过访问CDN实现就近访问使用户得到快速的服务•对于一些读写比不高,同时对数据安全性需求不高的数据,可以将其缓存起来从而减少对底层数据库的访问,大大减少对数据库的写压力•根据淘宝的流量分析,整个淘宝网流量中,图片的访问流量会占到90%以上,而主站的网页则占到不到11%价值集群(应用无状态)缓存数据应用拆分、业务分离、域名分离数据架构(数据库拆分)异步通信非结构化数据存储独立搜索引擎监控、预警系统配置统一管理推荐系统目录•初期用户少,逻辑集中于单系统、一个进程或者一个应用,用户较少,系统访问量低。•随用户增多,系统访问压力上升。•伴随着系统发展,为满足用户需求,原有系统需要增加新的功能,系统变得越发复杂。•会发现系统变得难维护、难扩展,同时系统伸缩性和可用性也会受到影响。思考应用拆分、业务分离、域名分离WEBSQLAPPWindowsorLinuxOS应用拆分、业务分离、域名分离WindowsorLinuxOSWEBSQLAPPWindowsorLinuxOSWindowsorLinuxOSWindowsorLinuxOSWEBSQLAPP•有针对性的对压力大的子系统进行水平扩展而不会影响到其它的子系统•不会像拆分以前,每次系统压力变大的时候,都需要对整个大系统进行伸缩•通过拆分降低了子系统与子系统之间的耦合,降低了干扰提升了可用性解耦应用拆分、业务分离、域名分离应用拆分、业务分离、域名分离•优秀的电子商务网站都是按照业务分开,细化每个业务线.•有利于系统的扩展,也有利于对系统的维护.例如:商品独立、交易独立、用户独立.•各个系统之间需要交互的信息可以通过远程传输来实现.•在一个比较有规模的团队中,都是分组来维护一个独立的业务•有利于团队对业务渗透和业务的维护.•由于业务分开、系统分开实现了产业分工,保证了产业的开放性,从而为业务的发展带来更大的机会业务分离应用拆分、业务分离、域名分离•子域名与业务相结合•通过业务的不同来分载不同用户流量•通过简单的方法减少服务器压力域名分离JD.comwww.jd.comchannel.jd.comTuan.jd.com…..集群(应用无状态)缓存数据应用拆分、业务分离、域名分离数据架构(数据库拆分)异步通信非结构化数据存储独立搜索引擎监控、预警系统配置统一管理推荐系统目录数据架构(数据库拆分)•随着用户量的不断增加,会发现系统中的某些表会变的异常庞大,比如好友关系表,店铺的参数配置表等,这个时候无论是写入还是读取这些表的数据,对数据库来说都是一个很耗费精力的事情,那么这个时候如何解决这些问题呢?思考数据架构(数据库拆分)商品用户收藏评价交易•数据库采用几台MySQL•应用系统分为前台,后台两大系统初期数据架构(数据库拆分)•一个比较大的系统,最基础的数据架构要求就是数据库拆分•水平方向上,按照功能分为交易、评价、用户、商品等系统•垂直方向上,划分为业务系统、核心业务系统以及以及基础服务•各个系统都可以独立维护和独立的进行水平伸缩,比如交易系统可以在不影响其它系统的情况下独立的进行水平伸缩以及功能扩展•到最后就应该是读写分离,读写分离就好像高速公路一样,左右车道分开,中间有隔离带,当然速度就上去了拆解数据架构(数据库拆分)…..•水平方向上,按照功能•垂直方向上,按照业务数据库拆分•让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE)•从数据库处理SELECT查询操作读写分离数据架构(数据库拆分)replicationMasterSlaveSlaveWriteReadMysqlproxy数据架构(数据库拆分)•一个大型的互联网应用必然会经过一个从单一DBserver,到Master/salve,再到垂直分区(分库),然后再到水平分区(分表sharding)的过程趋势•第一阶段整个网站采用LAMP架构数据库采用几台MySQL应用系统分为前台,后台两大系统•第二阶段MySQL迁到Oracle,Pcserver升级到IBM小型机低端存储升级到高端存储•第三阶段核心业务从Oracle逐步迁到分布式MySQL集群中大量采用pcserver,采用本地硬盘淘宝数据库趋势集群(应用无状态)缓存数据应用拆分、业务分离、域名分离数据架构(数据库拆分)异步通信非结构化数据存储独立搜索引擎监控、预警系统配置统一管理推荐系统目录异步通信•说到异步通信,我们需要关注的一点是这里的异步一定是根据业务特点来的,一定是针对业务的异步,通常适合异步的场合是一些松耦合的通信场合,而对于本身业务上关联度比较大的业务系统之间,我们还是要采用同步通信比较靠谱。要点线程间通信异步通信•假如系统由A和B两个子系统构成,假如A和B是同步通信的话,那么要想使得系统整体伸缩性提高必须同时对A和B进行伸缩,这就影响了对整个系统进行向外扩展.•同步调用还会影响到可用性.从数学推理的角度来说,A同步调用B,如果A可用,那么B可用,逆否命题就是如果B不可用,那么A也不可用,将大大影响到系统可用性•系统之间异步通信以后可以大大提高系统的响应时间,使得每个请求的响应时间变短,从而提高用户体验,因此异步在提高了系统的伸缩性以及可用性的同时,也大大的增强了请求的响应时间(当然了请求的总体处理时间也许不会变少).概念解释集群(应用无状态)缓存数据应用拆分、业务分离、域名分离数据架构(数据库拆分)异步通信非结构化数据存储独立搜索引擎监控、预警系统配置统一管理推荐系统目录非结构化数据存储•相对于结构化数据(即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据)而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等概念•大型的互联网应用当中,并不是所有的数据都是结构化的•如一些配置文件,一个用户对应的动态,一次交易的快照等,这些信息一般不适合保存到关系系统中,它们更符合一种分布式存储系统的结构•还有一类数据,数据量非常大,但是实时性要求不高,此时这些数据也需要通过另外的一种存储方式进行存储•另外一些静态文件,比如各个商品的图片,商品描述等信息,这些信息因为比较大,放入关系系统会引起读取性能问题,从而影响到其它的数据读取性能,因此这些信息也需要和其它信息分开存储,而一般的互联网应用系统都会选择把这些信息保存到分布式文件系统中.要点非结构化数据存储非结构化数据存储商用存储系统的局限和不足•没有对小文件存储和读取的环境进行有针对性的优化•文件数量打,网络存储设备无法支撑,整个系统所连接的服务器也越来越多,网络连接数已经到达了网络存储设备的极限.•商用存储系统扩容成本高,10T的存储成本需要几百万¥,而且存在单点故障,容灾和安全性无法得到很好地保证.面临的问题非结构化数据存储•商用软件很难满足大规模系统的应用需求,无论存储还是CDN还是负载均衡•研发过程中,将开源和自主开发相结合,会有更好的可控性,系统出问题了,完全可以从底层解决问题,系统扩展性也更高•在一定规模效应基础上,研发的投入都是值得的.实际上,规模化达到如此程度的公司其实并不多,不过淘宝网已经远远超过了交叉点•自主研发的系统可在软件和硬件多个层次不断的优化。经济对比非结构化数据存储投入买/租研发自主研发和采用商用系统的经济效益对比集群(应用无状态)缓存数据应用拆分、业务分离、域名分离数据架构(数据库拆分)异步通信非结构化数据存储独立搜索引擎监控、预警系统配置统一管理推荐系统目录独立搜索引擎•近几年人们渐渐养成通过搜索找到自己喜欢的东西.•一个好的网站肯定要有独立的搜索系统.•要注意的是分词、实时更新、完善商品属性•建立比较好的推荐搜索,保持关键字推荐,搜索结果推荐.•搜索引擎友好的网站,应该方便搜索引擎检索信息,并且返回的检索信息让用户看起来有吸引力.搜索SEO站外优化外链建设分类目录友情链接TITE标签合理代码精简/CSS&JS代码及标签站内优化独立ip主机主机稳定域名名称域名年龄域名主机因素自然产生连接H1/H2等Mete标签合理内容优化内容更新频率内容的原创性网站总数据量自然内容产生URL优化SEO定制文件名扁平化层级结构页面静态化集群(应用无状态)缓存数据应用拆分、业务分离、域名分离数据架构(数据库拆分)异步通信非结构化数据存储独立搜索引擎监控、预警系统配置统一管理推荐系统目录监控、预警系统对于大型的系统来说,唯一可靠的就是系统的各个部分是不可靠的,因为在一个大型的分布式系统中势必会涉及到各种各样的设备,随着数量的增多出现错误的概率也会变大,因此电商的监控要求也是有粒度的粗细之分•粗粒度:需要对整个应用系统进行监控•细粒度:需对比如应用中的某个功能,某个URL的访问量,每个页面的PV,页面每天占用带宽,页面渲染时间,静态资源带宽监控监控,预警系统和监控相结合发生问题自动报警快速响应预警集群(应用无状态)缓存数据应用拆分、业务分离、域名分离数据架构(数据库拆分)异步通信非结构化数据存储独立搜索引擎监控、预警系统配置统一管理推荐系统目录配置统一管理•广义的讲,是把分散的东西集中起来