《大型网站系统与Java中间件实践》试读后感
当下载了《大型网站系统与Java中间件实践》试读章节,看到其中唯一的一章第2章的标题,并简略地扫了一遍小节标题之后,我立马就想到——这绝对又是某位淘宝牛人写的书。
为什么这么肯定呢?因为前年我曾参加了公司组织的一场关于架构的系列讲座,请的讲师正是出身淘宝,以前做过架构后来转做讲师的。而在那场系列讲座中,一条重要的主线正是以淘宝网站发展历程为蓝本的“大型网站架构演变和知识体系”。
可以说,那是我有史以来听过的最过瘾的一场讲座,收益也颇大,从此也对阿里系架构和技术更加崇拜和着迷。所以当看到本书的试读章节时,有一种说不出的亲切感。然后在网上搜索了作者,果然是淘宝的大牛,原本就是大名鼎鼎的华黎。
好了,下面进入正题,谈谈对这一章试读后的感受。
古人说:冰冻三尺非一日之寒。事物的发展,往往都是一个演进的过程,而不是一蹴而就。大型网站的架构也是同等道理,都是随着网站规模的扩大、随着需求的提高,而不变演进发展的。一个网站,比如淘宝,其本身的规模,也同样是一个演进的过程,淘宝不是刚出来就成为大型网站的,也没有一个网站会是这样。随着淘宝规模的不断扩大,用户越来越多,日访问量越来越大,淘宝的架构也随之不断演进,能够承载更多的高并发的访问和处理海量的大数据。
那么,大型网站的架构是如何演进的呢?
创始之初——单个系统、单机部署
网站创始初期,很可能连代码都是买的,比如淘宝,从《淘宝技术这十年》上可以看到,淘宝网站最初是从国外买的一套代码,马云召集的一批人潜伏的一个别墅里加班加点修改后,淘宝就这样产生了。而那当然是一个现在看来很简单的一个小系统。这个时候还没有用户,一时半会也不会凭空冒出多少用户出来,所以那时候一台小服务器部署就可以了。
第一步——数据库与应用分离
当淘宝在强敌环伺之下,凭借一些购物网站模式创新,开始闯出一片天地并小有名气之后,用户访问量开始增大,单机环境开始难以承受持续增大的访问量了。
这个时候就要考虑优化方案了,这是第一次演进。这时候自然而然会想到,应用和数据库部署到同一台机器上,这台机器既要运行应用,又要运行数据库,CPU、内存要两部分抢着用,IO也是严重问题,那么将它们分开到两台机器不就好多了吗。所以第一步便是数据库与应用分离,由单机部署变成两台服务器:Web服务器+数据库服务器。如此,第一步演进就完成了。
第二步——Web服务器集群
当访问量进一步增大,由于用户访问和计算的工作全部集中在一台Web服务器进行,所以很快,Web服务器必将不堪重负。
这个时候,就要考虑增加Web服务器了,这便是我们说的集群。两台或多台Web服务器,部署同一个应用,它们之间没有交互,只是使用同一个数据库服务器。它们都可以同样地处理用户访问,但是每个用户该访问哪个Web服务器呢?这是使用集群以后必然要解决的问题。
一般有两种方案:
1、DNS分发
DNS分发多个IP地址,网站用户选择一个IP进行访问。这是最简单的方式,但是有一个问题,访问不均衡,有可能一台服务器用户访问太多已经爆满了,但是另一台服务器可能只承受着极少的访问基本处于闲置。所以一般会考虑下一个方案——负载均衡。
2、负载均衡
采用负载均衡的技术,网站用户永远只访问一个IP地址,所有用户访问会到达一个负载均衡器,然后具体由那台服务器处理,则由负载均衡器去分配,它可以平均分配,也可以根据服务器实际负载情况进行分配,这样各台服务器都可以充分发挥。
不过关于负载均衡的方案,试读章节中并未提及,主要有硬件负载均衡(花钱买设备,虽然很贵,但是很值得)、软件负载均衡(比如淘宝的LVS)等。
采用负载均衡之后会不可避免带来的一个问题是Session的问题。比如用户之前访问的是服务器A,Session保存在这个服务器A上面,再访问另一个页面的时候负载均衡器把请求分配到服务器B了,但是服务器B上并没有用户的Session,这样就导致问题了。
书中对此给给出了几种方案:
1、Session Sticky
负载均衡器能够根据每次请求的会话标识来进行请求转发,保证同一个会话的请求都在同一个Web服务器上处理。
这种方案的缺点是,负载均衡器开销大,可能成为瓶颈,另外如果一台Web服务器宕机,Session就丢失了,用户突然无缘无故就需要重新登录了。
2、Session Replication
也即Session复制,将Session同步复制每一个Web服务器上,保证所有Web服务器中都保存有所有的Session。
这种方案不适合集群机器很多的情况,集群机器越多,Session复制的开销就越大,内存和网络带宽都会有很大的消耗。
3、Session数据集中存储
Session集中存储在一个地方,所有Web服务器对Session进行访问都通过这个地方进行,而且存储Session数据的具体方式,可以使用数据库,也可以使用其他分布式存储系统。
相对于前一种方案,当集群机器数量比较大时优势就很明显了。
4、Cookie Based
作者还介绍了第四种方案,将Session数据存储在客户端的cookie中,但是这存在非常严重的问题:cookie长度限制、安全性等等,而且还有一点作者没有提到的,有些客户端可能会禁用cookie的,所以这种方案一般好像不会采用。
前面两步的演进,都是通过增加服务器,主要是部署的时候做的事情(除了解决Session问题需要程序实现),接着后面的演进就不是这么简单了,往往就需要修改程序了。
相关推荐
MiniGui业务开发基础培训-htk
鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案
内容概要:本文档详细介绍了Wireshark软件中各种数据包筛选规则,主要包括协议、IP地址、端口号、包长以及MAC地址等多个维度的具体筛选方法。同时提供了大量实用案例供读者学习,涵盖HTTP协议相关命令和逻辑条件的综合使用方式。 适合人群:对网络安全或数据分析有一定兴趣的研究者,熟悉基本网络概念和技术的专业人士。 使用场景及目标:适用于需要快速准确捕获特定类型网络流量的情况;如网络安全检测、性能优化分析、教学演示等多种实际应用场景。 阅读建议:本资料侧重于实操技能提升,在学习时最好配合实际操作练习效果更佳。注意掌握不同类型条件组合的高级用法,增强问题解决能力。
鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案
鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案
内容概要:本文档详细介绍了MATLAB的符号运算,涵盖符号对象的命名方法、基本运算、级数求法等多个方面。通过具体的实验案例,如确定符号表达式中的变量、执行四则运算、提取分子分母、因式分解与展开、化简符号表达式、级数符号求和、符号微积分以及符号方程的求解,帮助学生理解和掌握MATLAB中的符号运算技巧。 适合人群:适用于对MATLAB有一定了解的大专院校的学生、研究人员和技术工作者。 使用场景及目标:通过本课程的学习,学员能够熟练使用MATLAB完成复杂的数学问题解决,提高科研项目和工程任务中对数学模型的建模能力和问题解决效率。 其他说明:文档包含详细的实验步骤指导和实例演示,同时提供了丰富的练习题供读者巩固所学知识。对于想要深入研究MATLAB符号运算的人来说是一份宝贵资料。
适合参考论文写作
内容概要:文档介绍了联通精准营销平台外呼系统的HTTP接口规范(V2.3),提供了API接口用于外呼业务的各种功能,确保企业的市场拓展和技术操作的无缝衔接。主要涵盖接口列表如坐席登录、数据获取、企业修改密码等,并详细说明了每个接口的方法、路径、请求参数及返回状态。针对外呼过程中的常见问题给出了处理指导,旨在帮助企业高效开展外呼业务,同时保障数据的安全性和合规性。 适用人群:适用于企业IT技术人员、营销人员以及任何希望利用电信运营商提供的API来增强自身外呼和数据分析能力的专业人士。 使用场景及目标:企业可通过这些API实现与联通平台的数据交互,包括但不限于获取客户资料、发起呼叫、管理和统计外呼数据,从而提升营销效率和客户服务体验。特别强调在外呼过程中涉及的身份认证、信息安全等方面的处理措施。 其他说明:此接口文档更新频繁,版本为2.3。企业需要及时关注最新动态以便充分利用各项功能优化营销策略。同时应注意遵守中国联通关于数据安全的相关政策法规。
适合参考论文写作
java项目,课程设计-springboot校园在线拍卖系统,随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理,交易等,而且过程简单、快捷。同样的,在人们的工作生活中,也就需要互联网技术来方便人们的日常工作生活,实现工作办公的自动化处理,实现信息化,无纸化办公。 本课题在充分研究了在Springboot框架基础上,采用B/S模式,以Java为开发语言,MyEclipse为开发工具,MySQL为数据管理平台,实现的内容主要包括首页,个人中心,综合管理等功能。
全媒体运营+江苏工匠比赛
鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案
鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案
鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案
IEC 60598-1-2020中文翻译
鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案
{"_id":{"$oid":"67302bf63eeb6773961e96bb"},"title":"关雎","belong":"国风·周南","appreciation":[{"title":"【注释】","content":"关关雎鸠〔jūjiū〕:关关,雄雌水鸟相互应和的鸣叫声。雎鸠,亦称王鴡,一种水鸟名,上体暗褐,下体白色,善捕鱼。洲:水中的陆地。窈窕〔yǎo tiǎo〕:娴静貌,美好貌。窈,喻女子心灵美;窕,喻女子仪表美。仇〔qiú〕:古同“逑”,配偶。荇〔xìng〕菜:又名莕菜,多年生水生草本,圆叶细茎,叶可食用。流:义同“求”,此指顺水势摘采。寤寐〔wù mèi〕:日夜。寤,醒时。寐,睡时。思服:思,语气助词,无实义。服,思念。友:亲近,结交。芼〔mào〕:以手指或指尖采摘。"},{"title":"【翻译】","content":"\n\r\n\t相对啼鸣的雌雄雎鸠,就在河水中央的小洲之上。娴静淑雅的女子,是君子最好的配偶。长短不齐的荇菜,从长短不齐的荇菜,从左边或右边逐一采摘。娴静淑雅的女子,演奏琴瑟来与她相交。长短不齐的荇菜,从左边或右边轻轻拈取。娴静淑雅的女子,
鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案
鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案
鸿蒙开发中碰到的报错,问题已解决,写个文档记录一下这个问题及解决方案