Sunday, September 27, 2015

Misc - Building Scalable Web Sites



构建可扩展的Web站点(一)

http://www.jiancool.com/article/89771183869
花一天定规范,几天实现,几个月完善
第八章   瓶颈
找出瓶颈

把应用划分为逻辑组件,之后对每个组件进行分析,深入到硬件层次(CPU、内存I/O、硬盘I/O、网络I/O)。

CPU:使用top查询。
磁盘I/O:iostat –c 可以看到CPU因等待I/O操作完成而处于空闲状态的百分比(iowait)。iostat – dx查看更详细的报告。
网络I/O:netstat –i 和 netstat –ieth0 –e。
内存I/O:free –m ,查看内存分配状态。vmstat –S M 物理内存和虚拟内存的使用。ps ax,RSS为驻留集(在主内存中),VSZ为工作集(虚拟大小)。避免使用SWAP。
数据库:查询优化、索引优化、缓存。
第九章   扩展Web应用程序
水平扩展:多机器的软硬件最好是一致的,配置起来比较方便。
负载均衡:DNS方式僵硬,硬件方式太贵,软件方式靠谱。
扩展MySQL:
MySQL的复制(主从、主主)。主从的大概机制,主数据库向从数据库发送binary log,从数据库将受到的log写入relay log,再按顺序执行relay log。后面介绍了数据库分区(纵向扩展)以及联合(横向扩展)。
存储扩展:

文件系统,当一个目录有太多的文件时,基于inode的Unix文件查找会很慢,而新的文件系统Reisser和ext3解决了这个问题。RAID、联合(GFS、MogileFS)、缓存(memchached、Squid)。

Remote Services
The first rule of remote service club is that you can’t rely on remote services. 
The steps to deal with a failure vary depending on the service—automatically failing over to an alternative, alerting the developers, alerting the user, or potentially rolling back a transaction.


Bottlenecks

http://blog.csdn.net/u010726042/article/details/43492427
HTTP重定向负载均衡
DNS域名解析负载均衡
反向代理负载均衡
IP负载均衡

6、  负载均衡算法:轮询,加权轮询,随机,最少连接,源地址散列。

扩展性(Extensibility)指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。表现在系统基础设施稳定不需要经常变更,应用之间较少依赖和耦合,当系统增加新功能时,不需要对现有系统的结构和代码进行修改。

       伸缩性(Scalability)指系统能够通过增加自身资源规模的方式增强自己计算处理事务的能力。网站架构中通常指利用集群的方式增加服务器数量、提高系统的整体事务吞吐能力。
http://www.diguage.com/archives/34.html
  雅虎的前首席性能专家、著名网页性能分析YSlow的创建者Steve Souders的《High Performance Web Sites》(国内翻译为:《高性能网站建设指南》)给大家揭开另外80%-90%的秘密。书中,Souders简要地提出来关于Web前段性能的十四条黄金法则。如下:
  1. Make Fewer HTTP Requests(尽量减少HTTP请求)
  2. Use a Content Delivery Network (使用内容分发网络(即CDN))。我前面写过一篇文章,来介绍CDN网络的使用。请看“使用Microsoft Ajax Content Delivery Network(CDN)优化WordPress加载速度”。
  3. Add an Expires Header(添加Expires头)
  4. Gzip Components (压缩组件)
  5. Put Stylesheets at the Top(把CSS放在HTML最上面)
  6. Put Scripts to the Bottom (把脚本(比如JavaScript)放到HTML最下面)
  7. Avoid CSS Expressions(避免使用CSS表达式)
  8. Make JavaScript and CSS External(使用外部的JavaScript和CSS)
  9. Reduce DNS Lookups (减少DNS查询次数)
  10. Minify JavaScript(精简JavaScript)
  11. Avoid Redirects (避免重定向)
  12. Remove Duplicate Scripts(删除重复代码)
  13. Configure ETags (配置ETag)
  14. Make Ajax Cacheable(使用Ajax缓存)
  从十四条黄金法则扩展开来 ,每一条都是一支学习树,看完了解简单,一条一条掌握就来日方长了。这十四条黄金法则让你明白前端优化的准则,自己动手处理的时候有明确目标方向。同时,从这本书里,让我意识到,除了标准的xHTML/CSS/JavaScript,一个优秀的Web开发工程师还应该具备其他几种技能:

  1. 精通浏览器工作原理及不同浏览器间的差异
  2. 理解HTTP协议
  3. 掌握服务器端编程
  4. 了解网络环境配置

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts