jsjbkshz0 2014-06-14
《大型网站系统与Java中间件实践》又是淘宝牛人的杰作。本书从分布式基础概念讲起,介绍了网络发展过程中网站建设面临各种技术瓶颈及带来的网站架构设计的一般演变过程,包括JAVA中间件的设计及使用。淘宝牛人一如既往通过结合淘宝实际工作经验,理论结合实际,对读者而言,通俗易懂,又能积累一定经验,在实际工作中有了方向、方法。值得大家去阅读!
这次试读章节有点少。
第2章大型网站及其架构演进过程:讲述了大部分网站技术架构的演变过程。
一个大型网站简单特性:大数据量+高并发访问+稳定性+安全性
对于早期网站架构,经典之作:LAMP:LINUX+APACHE+MYSQL+PHP,LAMP对现在的中小网站依旧是不错的解决方案。
从JAVA角度而言,早期架构:JSP/Servlet+jdbc
应用服务层:
早期:单服务器(应用程序+数据库+文件等处于同一台服务器)
面临瓶颈:
访问量增加导致性能越来越差,数据库存储空间不足等问题。解决方向:服务应用与数据分离,根据不同角色,配置相应性能服务器。
架构演变2:单机负载告警,数据库与应用分离
应用与数据分离后,根据不同角色配置相应的服务器。如应用服务器高访问量,CPU要求较高;数据库服务器:数据检索、数据安全,对硬盘读取,硬盘容灾要求较高。这样网站的并发处理能力得到很大改善。
面临瓶颈:
用户访问量增加,单台应用服务器处理能力有限,造成大面积延时,用户体验差。解决方向:缓存;应用服务器集群;
架构演变3:通过集群改善网站的并发能力
负载均衡+集群形式方式,能够通过增加服务器形式扩展网站性能,提高了网站的可伸缩性。
在这个过程中,我们通常会遇到的问题:
session的管理
1. session sticky:类似单机情况,同一Session的请求通过负载均衡发送到相同的应用服务器,保证有效性。问题:当一台服务器宕机时,session会失效,用户需重新登录。
2. Session 复制:服务器之间通过负载均衡实现session复制,每一台服务器都实现session同步。解决了1的情况。问题:增加服务器和网络的大量资源,系统性能下降。在大型网站情况下不太适用。
3.Session数据集中存储:独立部署服务器统一管理Session,解决了session赋值带来的内存和网络资源问题,实现应用的状态分离。如可实现单点登录等。大型网络较好的解决方案。
4.Cookie Based: 通过cookie来传递session数据。问题:cookie大小有限,cookie传递的安全性,对网络资源占用较大。
架构演变4:分布式服务化应用 SOA
将应用按功能拆分成不同的系统,进行分布式集群部署,构建可扩展网络架构。如网站拆分成用户系统、订单系统、商品系统。
系统之间通信问题:dubbo,MOM
依赖关系问题
数据库方面
数据库方面优化:
1、读写分离
通过数据库本身提供的备份功能,保证主库和备库数据的一致性。如MySQL 5.5 中加入了对semi-sync 的支持;如Oracle的Data Guard 方案。然后把数据写到主库,带事务的读操作也在主库;不带事务的读操作可以考虑到备库中读取。
广义而言,应用也可如此操作以提高并发性能。如搜索引擎,通过对原有数据的索引、整理,建立一个读库。技术:lueuce
2、分布式存储
常见的分布式存储系统有分布式文件系统、分布式Key-Value 系统和分布式数据库。过集群提供了一个高容量、高并发访问、数据冗余容灾的支持。应用服务器通过DAL层访问数据库集群;如淘宝的cobar
带来的问题:分布式事务问题;不同数据库关联查询问题
3、专库专用,数据垂直拆分
把数据库中不同的业务数据拆分到不同的数据库中。
带来的问题:垮业务的事务操作,1)分布式事务解决 2)去事务
缓存:Memcached等,这里就不介绍了^_^
在微服务架构体系下,我们可以按照业务模块分层设计,单独部署,减轻了服务部署压力,也解耦了业务的耦合,避免了应用逐渐变成一个庞然怪物,从而可以轻松扩展,在某些服务出现故障时也不会影响其它服务的正常运行。