读《大型网站技术架构核心原理与案例分析》
最近看了这本书,记性不好,所以大体记上几笔。这本书比较简单,很多内容基本上已经在工程中使用了:
第二章架构层面:
系统分层(业务层、服务层、数据层)
业务切割(如将搜索、广告、论坛独立切割出来,甚至可以将搜索继续切割)
分布式:分布式应用和服务(如上面切割出来的系统)、分布式静态资源(动静分离)、分布式数据和存储(如NoSQL产品)、分布式计算、分布式文件系统、分布式锁、分布式配置等
集群:为了保证高可用
缓存:CDN、反向代理、应用系统本地缓存、分布式缓存(Redis、memcached)
异步:自己常用activeMQ,提高可用性(挂了也没事),提高响应速度(客户感觉无延时),消除峰值(因为队列逐一消费)
冗余:主从、双机热备、异地灾备(异地灾备没做过)
自动化:自动化故障转移用nginx或者zookeeper实现过,jenkins实现过自动化构建、测试、发布、邮件通知。可以考虑把log系统升级为自动化监控、告警。更高级的有自动化降级、分配资源、自动化安全扫描(这几个没搞过)。
安全:做过密码、手机验证码、验证码、XSS/CSRF/SQL injection等等,加密风控。
第三章
性能:
浏览器缓存、压缩、布局、减少cookie,CDN,服务器使用缓存,异步,集群,多线程、优化内存,SQL、索引、noSQL
可用性:
无非就是缓存、实时同步、会话共享
伸缩性:
应用服务器(做成无状态的会话共享,支持无限伸缩)、缓存服务器(可以用一致性哈希)、数据库(这个不太熟,原文说关系型数据库很难做到大规模集群的可伸缩性,必须在数据库之外实现,通过软路由分区等手段将部署有多个数据库的服务器组成一个集群)、noSQL(mongoDB可以shard分片再集群)
扩展性:
这个以前考虑得比较少,一般只考虑了各个模块的解耦和。原文说“网站的拓展性架构的主要手段是事件驱动和分布式服务”,事件驱动比如JMS,可以透明地增加消费者和生产者。分布式服务将业务和可复用服务分开,通过分布式服务框架调用。新增产品可通过调用可复用的服务实现自身业务逻辑(很像ESB的服务),而可复用服务升级的时候可以通过版本号来透明升级,不需要强制现有应用同步变更(这明明就是ESB么)。
安全性:这个水比较深,传输、加密、伪造、窃取、攻击,各个层面。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。