《淘宝技术这十年》读后感

《淘宝技术这十年》读后感  

转自:http://blog.163.com/guaiguai_family/blog/static/20078414520140273552602/

2014-01-27 18:16:43|  分类: 系统管理 |  标签:乖乖公  |举报|字号 订阅

 
 

花了两天时间扫了下,后面的列传没仔细看,整个的文风就是个 BBS 八卦体,写的很有趣味,对互联网从业人员也很有启发性,是本好书。下面记录下一些乱七八糟的思绪。

淘宝一开始创业的技术并不高明,虽然有很多牛人,但感觉也只是很勤奋而已(个人觉得甚至有点矬,比如那个重启 sql relay 的活儿,哥啊,你们真的没整个自动监测并重启的脚本?另一个例子是没搞定 php 的数据库连接池),没搞出啥“纯技术”上的大名堂。成功关键还在于马云的商业头脑,抓住商机。这并不是说“技术顶个球”,技术虽然不是第一,但也不是倒数第一。

淘宝开始的很早,很多开源技术还没出现或者不被人所知,如果今天开始做的话,可能有很多东西会直接拿来用或者改进了,比如 memcache,redis, voldemort, kafka, storm, thrift + twitter finagle.

一开始如果能多考虑点可扩展的架构,日后一旦壮大,重构会不那么痛苦。具体实现视情况打折扣,理想实现是即使在单机上也按照分布式应用思路做,但肯定没办法这么理想,进度所迫,产品设计总在变化,需求总在变。无论如何,一开始完全不考虑一味求糙快猛是愚蠢的,忽视业界经验,尤其是这本书讲到的经验,有可能日后中道崩殂。

技术对了,产品设计对了,未必能成功,因为时机可能不对,用户一时接受不了。

好的设计是磨练出来的,再好的架构师也没法一锤定音,一方面是流量上来后各种未预料到的问题,另一方面是没有完全一模一样的需求,各种未预料到的需求。即使如此,互联网行业的系统架构还是有粗略套路可循的,因为同一行业内要解决的事情总有类似的。

可供参考的技术,不完全是书中提到的。
    1. load balancing + high availability
  • DNS server 根据客户端的 IP 对应的地理位置对同一域名解析出不同的 IP 地址,以把用户请求导向不同的机房;
  • 在页面里嵌入一段 JS 脚本,同时请求多个机房的某相同资源,服务端可以记录下请求日志,然后经由后台的日志分析系统分析出这个客户端请求哪个机房最快,这个信息可以用来改进上面的第一种办法;
  • 在域名解析完成后,客户端的请求被发送到指定 IP 上,这个 IP 上部署 LVS(工作在 OSI 网络模型第四层),LVS 后面部署 HAProxy(工作在 OSI 网络模型第七层),两层一起做 load balancer,综合 LVS 的高效以及 HAProxy 的丰富特性。
    • Apache 和 Nginx 也有 proxy 功能,但术业有专攻,流量特别大的时候效率肯定还是比不上 HAProxy
    • 各位看官,貌似不要 LVS 也行吧? HAProxy 加上 keepalived or pacemaker + corosync/heartbeat 也能避免单点故障。
edge cache: Apache Traffic Server, Squid, Varnish,用来缓存静态内容或者一段时间内不变的动态内容 http server:  Nginx, Apache, Tomcat, Jetty
  • 在展现层上免不了走两条路子:服务端模板技术,在服务端全渲染好;AJAX 方式。虽然两者并不排斥,但个人觉得 AJAX 方式优雅的多,一开始就把 service 和 UI 分离开了,开发也容易,前端工程师和后端工程师不用在模板文件上打架。
session persistence
  • session ID
    • cookie
    • url parameter,比如 JSESSIONID=xxx
  • session 的存储
    • 直接把信息放在 cookie 里,QPS 高时带宽浪费严重
    • http server 本地磁盘,需要 load balancer 支持 sticky session,单个 http server 崩溃会丢失 session 数据
    • global session storage: redis, rdbms + memcache
RPC system,切分各个服务后,服务之间需要统一而且高效的 RPC 机制
  • service registry,这是每个创业公司一开始都会忽视的东西,而一旦壮大后都必需得做,尤其是把各种功能分割到不同子系统成为服务之后。
  • RPC framework:  thrift, twitter finagle
cache:  memcache, redis,  tairvoldemort storage: 分布式存储应该是整个技术栈里最难的部分了。
  • 关系数据库:MySQL, PostgreSQL
    • 这俩数据库都是单机版本,要达到集群效果需要做大量工作:分库分表、join、分页、事务、failover、负载均衡,尽可能自动化的导入导出、增减实例,目测只有 Google、Facebook和淘宝玩的很溜。
  • NoSQL: HBase, Cassandra, Riak, RethinkDB, CouchBase,Voldemort
  • 小文件存储:TFS,MogileFS, FastDFS
消息队列:这类产品多如牛毛,但能同时支持至少一次、至多一次、保序特性的还是不多。多提一句的是 Redis 集群(官方的抑或各种山寨的)都是 AP 系统,不是 CP 系统,作为 queue 不适合严肃场合(作为 storage 也如此) 任务队列: GearmanCelery 系统监测:Nagios, Ganglia,  Graphitestatsd 日志收集:Kafka,  Flume, Fluentd,  KibanaLinkedIn 的实践非常值得参考,尤其值得一提的是 schema registry 的概念,没有这个服务,很难利用收集的数据。 数据分析:Hadoop, Storm, Spark,  Presto 自动化部署: PuppetChefAnsible 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值