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


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

    转自: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 也能避免单点故障。
      2. edge cache: Apache Traffic Server, Squid, Varnish,用来缓存静态内容或者一段时间内不变的动态内容
      3. http server:  Nginx, Apache, Tomcat, Jetty
        • 在展现层上免不了走两条路子:服务端模板技术,在服务端全渲染好;AJAX 方式。虽然两者并不排斥,但个人觉得 AJAX 方式优雅的多,一开始就把 service 和 UI 分离开了,开发也容易,前端工程师和后端工程师不用在模板文件上打架。
      4. 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
      5. RPC system,切分各个服务后,服务之间需要统一而且高效的 RPC 机制
        • service registry,这是每个创业公司一开始都会忽视的东西,而一旦壮大后都必需得做,尤其是把各种功能分割到不同子系统成为服务之后。
        • RPC framework:  thrift, twitter finagle
      6. cache:  memcache, redis, tairvoldemort
      7. storage: 分布式存储应该是整个技术栈里最难的部分了。
        • 关系数据库:MySQL, PostgreSQL
          • 这俩数据库都是单机版本,要达到集群效果需要做大量工作:分库分表、join、分页、事务、failover、负载均衡,尽可能自动化的导入导出、增减实例,目测只有 Google、Facebook和淘宝玩的很溜。
        • NoSQL: HBase, Cassandra, Riak, RethinkDB, CouchBase,Voldemort
        • 小文件存储:TFS,MogileFS, FastDFS
      8. 消息队列:这类产品多如牛毛,但能同时支持至少一次、至多一次、保序特性的还是不多。多提一句的是 Redis 集群(官方的抑或各种山寨的)都是 AP 系统,不是 CP 系统,作为 queue 不适合严肃场合(作为 storage 也如此)
      9. 任务队列:GearmanCelery
      10. 系统监测:Nagios, Ganglia, Graphitestatsd
      11. 日志收集:Kafka, Flume, Fluentd, KibanaLinkedIn 的实践非常值得参考,尤其值得一提的是 schema registry 的概念,没有这个服务,很难利用收集的数据。
      12. 数据分析:Hadoop, Storm, Spark, Presto
      13. 自动化部署:PuppetChefAnsible 等。
  • 相关阅读:
    完美解决ListView中事件ItemCreated中使用ClientID导致插入数据失败
    cookie 和session 的区别详解
    ref与out之间的区别整理
    showModalDialog介绍
    meta元素
    [转] Spring Boot特性
    [转] Spring Boot 揭秘与实战(二) 数据存储篇
    Jsch初步
    如何通俗的解释交叉熵与相对熵
    pip安装时的异常,找不到lib2to3\Grammar.txt
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/3535452.html
Copyright © 2020-2023  润新知