系统网站架构(淘宝、京东)& 架构师能力
来一张看上去是淘宝的架构的图:
参考地址:http://hellojava.info/?p=520
说几点我认可的地方:
架构需要掌握的点: 通信连接方式:
大量的连接通常会有两种方式:
1. 大量client连一个server
在现如今NonBlocking-IO这么成熟的情况下,一个支持大量client的server已经不那么难写了。
有一个点要特别注意,就是当server挂掉的时候,不能出现所有client都在一个时间点发起重连,那样基本就是灾难。
通常可以采用的方法是client重连前都做随机时间的sleep,另外就是重连的间隔采取避让算法。 2. 一个client连大量的server 高并发这个点需要掌握CAS、常见的lock-free算法、读写锁、线程相关知识(例如线程交互、线程池)等,
通信层面的高并发在NonBlocking-IO的情况下,最重要的是要注意在整体设计和代码实现上尽量减少对io线程池的时间占用。
伸缩性:
伸缩性的问题围绕着以下两种场景在解决:
1. 无状态场景
无状态场景通常会把很多状态放在db,当量到一定阶段后会需要引入服务化,去缓解对db连接数太多的情况。 2. 有状态场景
所谓状态其实就是数据,通常采用Sharding来实现伸缩性,Sharding有多种的实现方式,常见的有这么一些:
2.1 规则Sharding 2.2 一致性Hash
参考我的另一篇文章:http://www.cnblogs.com/charlesblc/p/6033345.html2.3 Auto Sharding
Auto Sharding的好处是基本上不用管数据搬迁,而且随着量上涨加机器就OK,但通常Auto Sharding的情况下对如何使用会有比较高的要求,
而这个通常也就会造成一些限制,这种方案例如HBase。 2.4 Copy
Copy这种常见于读远多于写的情况,实现起来又会有最终一致的方案和全局一致的方案,最终一致的多数可通过消息机制等,
全局一致的例如zookeeper/etcd之类的,既要全局一致又要做到很高的写支撑能力就很难实现了。 稳定性:
1. 无状态场景 2. 有状态场景
全局一致类型的场景中,如果一台挂了,就通常意味着得有选举机制来决定其他机器哪台成为主,常见的例如基于paxos的实现。 可维护性
整个系统环境应该怎么搭建,部署,配套的维护工具、监控点、报警点、问题定位、问题处理策略等等。
再来一张貌似是京东架构的图:
参考页面地址:http://geek.csdn.net/news/detail/98500
说一下认为其中有道理的地方:
要关注的技术领域,高可用、高并发、分布式,以及一些基础技术、新语言、存储、容器、系统等。 架构于不同系统,不同公司文化,不同公司层次(初建期,发展期,成熟期),都有着不同的定义和理解。 公司初建期:用户服务基础。
公司发展期:用户服务基础,满足高速扩充的业务需求,提纯基础结构。
公司成熟期:用户服务基础,满足业务需求,提纯基础结构,技术驱动衍生新生态系统。
架构又可分:基础架构、系统架构、业务架构、代码架构。优秀的架构特点,简单,易懂,多变,相对灵活(根据系统迭代期、研发理解能力、团队大小取决)。
具备哪些素质才能成为是出色的架构师?
一个出色的架构师,至少有一门用很深的编程语言作为常委语言,一个出色架构师需要突出代码读写能力作为基础。
读代码能力尤为重要,要能结合代码读出业务逻辑,以及里面优秀架构思路,不足之处,读代码同时学习。 学习能力,思维方式:学习技术、框架,不光会用、知其原理、并能举一反三的思维。结合已学到的知识组合创新思维,将繁杂的事,简单化处理。
忍耐能力:作为一个团队技术头头,一般都会有一些孤独感。可能这就是大家常说的技术范。
再就是对于系统改造循序渐近的,得忍受那种全部都重做的冲动,一点一点的进行处理。
重生能力:作为架构师,熟悉自己所在团队和系统是必然的。抽时间让自己跳出原有既定思维和惯性,重新认识自己团队和系统。
沟通能力:需要跟与人打交道,当然需要良好沟通能力了。
别于社交网络、搜索和游戏等网站,电商网站的用户流量有哪些特点?
电商网站流量特点,突发性流量暴增,根本无法精确的预估的量。可能刚开始几万的量,突然几分钟就上到几十、几百、上千万、十倍百倍千倍的往上增。
相比社交、搜索、游戏网站,差异最大点,就在直接牵涉精确的金额的问题。所以对于精准和延时,缓存有一些差异化的。 社交网络:一般延时可做大点,及时性通讯可以端对端。
搜索:一般多级缓存,大多计算好往前推,延时也可做大点,另外搜索本就模糊的匹配,精准性方面要求没那么严格。
游戏网站:大多客户端大型游戏,客户端数据缓存几秒之后再进行传输,或者一些直接本地存数据,后端根服务器交互。
根据上面的比对,还是有比较真实感知到是有差异的。差异点主要集中在于 money 交易这一点上。
高流量、高并发情况下,如何保证整个系统的可靠性和稳定性
高流量、高并发是交易所有系统都面临这样一个问题,记忆深刻的用户刷爆品商品的问题,还有利用软件来刷的。 入口层:过滤掉大部分软件刷的情况,衍生了风控系统,秒杀系统。
应用层: 读写分离、缓存、队列、令牌、系统拆分、隔离、系统升级(可水平扩容方向)。
其他:
时间换空间:降低单次请求时间,这样在单位时间内系统并发就会提升。
空间换时间:拉长整体处理业务时间,换取后台系统容量空间。
可靠性和稳定性:会做一堆的容灾方案,从机房、网络、应用、存储、渠道、业务等多维度容灾。做一堆的降级策略,从流量、应用、渠道、业务 等对多维度做。
每年大型促销、流量、订单量不断翻倍。推动你去做异构、拆分系统、异步、服务化、容灾、降级等等,一堆堆的优化。
关于一些技术框架,实际上最终实现都大同小异,会去了解实现原理,以及做的好的地方,比如Elasticsearch底层用的Lucene。
而Lucene之前用过还专门看过源码,基本都是通的。加入了分布式存储的副本概念,以及sharding子机器并行执行理念,收集结果返回。
再来一张不明所以的图:
再来一张牛逼的图:
系统网站架构(淘宝、京东)& 架构师能力的更多相关文章
- 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)
转自:http://blog.csdn.net/v_july_v/article/details/6704077 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到 ...
- 从Hadoop骨架MapReduce在海量数据处理模式(包括淘宝技术架构)
从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,认为它们非常是神奇.而神奇的东西常能勾 ...
- destoon系统商城加淘宝客按钮方法
destoon系统很多喜欢运营B2B的站长都在用,其中的商城模块常常被用来做淘宝客,其中的难点是如何把购买按钮做成淘宝客地址,这个问题的修改在论坛上被叫价50元,下面小编把这个实用的方法分享下,希望对 ...
- 方便代理下单的EcStore收货地址一键分析插件,同时支持淘宝/京东/一号店
使用EcStore开展分销的网站,代理需要经常代客下单,每个客户收货地址都不同,要选择和填写多个内容才能完成地址输入:省.市.区.详细地址.收货人姓名.手机电话等,非常麻烦,也容易输入错误.安装EcS ...
- 关于淘宝的数据来源,针对做淘宝客网站的淘宝api调用方法
上次写了个淘宝返利模式的博客,直接被移除首页,不知道何故啊.可能是真的跟技术不太刮边. 众所周知,能够支撑一个网站运营的最基础不是程序写的多么好.也不是有多么牛X的运营人员,最主要的是数据,如果没有数 ...
- 淘宝Diamond架构分析
转载:http://blog.csdn.net/szwandcj/article/details/51165954 早期的应用都是单体的,配置修改后,只要通过预留的管理界面刷新reload即可.后来, ...
- 开源第三方登录组件OAuthLogin2.0 支持QQ,阿里巴巴,淘宝,京东,蘑菇街,有赞等平台
Nuget地址:https://www.nuget.org/packages/OAuthLogin2.0/ 项目结构说明: AuthorizationProviders文件夹下主要存放内置的授权平台. ...
- 仿淘宝,京东红包雨(基于Phaser框架)
本红包雨项目是基于HTML5的游戏框架Phaser写的,最终形成的是一个canvas,所以性能很好,但是必须要说的是这个框架比较大,压缩后也有700K左右,所以请慎用. 代码地址: https://g ...
- AOP编程 - 淘宝京东网络处理
现象描述 当我们打开京东 app 进入首页,如果当前是没有网络的状态,里面的按钮点击是没有反应的.只有当我们打开网络的情况下,点击按钮才能跳转页面,按照我们一般人写代码的逻辑应该是这个样子: /** ...
- iOS开发 仿淘宝,京东商品详情3D动画
- (void)show { [[UIApplication sharedApplication].windows[0] addSubview:self.projectView]; CGRect fr ...
随机推荐
- [转] 重定向 CORS 跨域请求
非简单请求不可重定向,包括第一个preflight请求和第二个真正的请求都不行. 简单请求可以重定向任意多次,但如需兼容多数浏览器,只可进行一次重定向. 中间服务器应当同样配置相关 CORS 响应头. ...
- [转] vuex最简单、最直白、最全的入门文档
前言 我们经常用element-ui做后台管理系统,经常会遇到父组件给子组件传递数据,下面一个简单的例子,点击按钮,把弹框显示变量数据通过子组件的props属性传递,子组件通过$emit事件监听把数据 ...
- [java开发篇][dom模块] 遍历解析xml
http://blog.csdn.net/andie_guo/article/details/24844351 XML DOM节点树 XML DOM将XML文档作为树结构,树结构称为一个节点树.所有的 ...
- php中 ob_start()有什么作用
<?php ob_start(); //开启缓冲区 echo "这是第一次输出内容!\n"; $ff[1] = ob_get_contents() ; //获取当前缓冲区内容 ...
- Excel VBA基础教程
https://www.w3cschool.cn/excelvba/excelvba-basics.html Excel VBA语言基础 VBA语言的基础认识 详解VBA编程是什么 excel处理录制 ...
- Java面试之JVM原理总结
1.什么是JVM? 答:JVM是Java Virual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,他是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟计算机功能来实现 ...
- java面试题之什么是线程ThreadLocal?作用是什么?
定义:线程局部变量是局限于线程内的变量,属于线程自身所有,不在多个线程间共享.java提供ThreadLocal类来支持线程局部变量,是一个实现线程安全的方式. 任何线程局部变量一旦在工作完成后没有释 ...
- java面试题之数据基本类型各占几个字节
类型 位数 字节数 short 2*8 2 char 2*8 2 int 4*8 4 float 4*8 4 long 8*8 8 double 8*8 8
- 洛谷P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers
题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人.然而,在任何一群朋友中 ...
- 【CF1028A】Find Square(签到)
题意:给定矩阵里,找到由B构成的矩形的中心 n,m<=115 思路: #include<cstdio> #include<cstring> #include<str ...