淘宝的架构师,曾宪杰先生主讲的淘宝网架构分享总结【淘宝目前的架构方向】...

2023-11-16



关于什么是stateless的扫盲,见这个贴:http://kyfxbl.iteye.com/blog/1831869

一般有一个共识,就是把应用做成无状态的,会比较容易实现水平伸缩。但是以前一直有一个想法,就算应用是有状态的,也可以做成水平伸缩:只需要在负载均衡那里做一个session绑定就可以了,

根据某种标识,把请求固定地发送到特定的server上

但是相对于有状态,stateless是更好的,主要有3个原因:

1、负载均衡不需要做session绑定,也就可以用更简单的算法,比如随机、取模等,把请求分配到任意server上,因此相对于session绑定的做法,性能会比较好

2、也是性能的问题,在7层网络模型中,session位于第7层,负载均衡如果是基于session的算法来决定要怎么分发请求,性能的损耗也会比较大

3、如果某一台server down掉了,后续的请求就没法继续往这台server发了,影响可用性

二、为什么淘宝开发session框架

如果将请求所需的信息,都放在cookie里,确实就不需要session框架了,而且也比较容易实现stateless。但是cookie也有自己的问题,cookie的大小是有限制的,还会增大网络流量(对于淘宝这种

规模的应用,绝对不是一个小数),并且数据放在客户端,多少有点不安全

所以session还是要用的,但是如果session都放在app server里,stateless就不容易实现了,而且为了HA,还涉及到session迁移的问题,会比较复杂。所以淘宝自己搞了一个session框架出来

具体的实现就不清楚,不过知道了这个思路,也不是很困难。我猜应该类似于把session集中放在session server里,其他的app server都来共享就可以了。然后将session server做成集群,避免单点

故障。同时session迁移的事情,也就转化成了集群的迁移

三、关于TFS

在《淘宝技术这10年》这本书里,“淘宝大学”的校长神话了这个技术。那天据曾宪杰先生说,TFS只是比较擅长处理小而多的零散文件,单机部署时性能也不是很好,但是在集群部署时,性能和可用

性,确实有一点优势

这块我没有怎么研究过,当天曾先生也没有深入讲,不是很了解,就不多说了

四、淘宝子应用之间的集成,为什么不使用ESB

淘宝在11年左右开始拆分应用,走“服务化”方向之后,应用拆分了很多个独立的子应用(大约有1000个左右)

这么多的应用要在一起完成业务,势必涉及到集成的问题。但是淘宝没有使用ESB,而是用了自研的服务框架和消息中间件

这主要是因为ESB更擅长处理异构系统的集成,而淘宝这将近1000个应用,基本都是JAVA应用,所以ESB的这个优势不明显;另外,增加机器水平伸缩,是淘宝的杀手锏,如果采用ESB架构的话,那在水

平伸缩的时候,就连ESB那层也要一起伸缩,比较麻烦

五、特性开关和优雅降级

稍微提到了一点,即在应用中放一些开关,在流量告警的时候,关闭一些功能,以主动避让的方式,避免系统压力过大而不可用。我理解类似于丢卒保车,在万不得已的时候,牺牲一些次要的业务,

保护主要的业务

具体的实现没有提到,目前好像我们也没碰到过这种场景,先简单记录一下

六、分布式的好处

我原本认为,在满足条件的情况下,分布式架构会提升性能(条件是CPU是性能的瓶颈,以及大的任务可以分割成可并行的多个子任务)

不过那天曾宪杰先生反对这个看法,他认为分布式只会把本地调用变成RPC,带来额外的传输损耗,所以不但不会提升性能,反而在大多数场景下,会降低性能

我觉得不尽然,有时候分布式应该还是能提升性能的,对于那种CPU密集型的计算来说。比如NASA不是有一个项目,是利用很多个人PC,来计算小行星数量还是什么的。这个好像又叫啥网格计算。不过

,我们做的大多都是企业应用,或者互联网应用,因此基本上CPU不是瓶颈(瓶颈主要在IO);由于业务逻辑的关系,也很难说就能拆分成可并行的子任务,所以场景不太满足。因此对于曾先生的这个

看法,我还是相当认可的

那么,既然分布式对于性能有减无增,为什么还要用分布式呢,总结了下面3个原因:

1、组件复用。这个很好理解,就不用多说了

2、提升开发效率。淘宝把一个应用拆分成很多子应用以后,就可以实现“小团队维护小应用”,做到了“专人专事”,效率比较高。此外,小应用显而易见,也更容易维护

3、实现“差异化水平伸缩”。这个词是我自己瞎造的。考虑这种场景,数据库只能支持10个连接,但是需要20个系统才能支撑http并发。那么这时候应该部署几套应用来组成集群呢?10个肯定不行,

并发撑不住;但是20个也不行,因为每个应用都直接连数据库,又超过了数据库连接的上限

如果实现了分布式,那么就可以这样:部署10个service server,来连接数据库,对上层提供服务;部署20个app server,来响应http请求,不直接连接数据库。挺巧妙的,架构上也挺有美感

当然,数据库的连接数上限肯定不只是10个,上面只是打个比方。从侧面也看出,淘宝的业务量大到了一个超乎我想象的程度——居然连数据库的连接都不够用了

同时,这么多子系统要调来调去,是很复杂的(1000个子系统,想想都觉得很复杂)。所以淘宝开发了服务框架和消息中间件,来解决这个问题。或者说,正是先行一步有了这些基础框架,服务化拆

分的路才能走得比较顺畅

另一方面,分布式架构也是有坏处的。比如部署和调试都变得复杂了,淘宝有专门的运维工具和开发工具,来减少这种痛苦。提到了一个google的Dapper,和淘宝自研的eagle eye。有需要的时候可以

研究下.

七、数据库的水平伸缩

相对于app的水平伸缩,数据库伸缩是比较复杂的。因为RDBMS本质上是单机系统。虽然可以部署N台db server组成集群,但是主要是保证了HA,也支撑更多的连接数。但是如果单个数据库里的数据量

太大的话,读写都会变得很慢,还是瓶颈

最后没有别的选择,只能拆表,比如把user拆分成user1和user2(拆分的维度可以很多,基本上是水平拆分)。这就带来2个问题,第一是编程变得复杂了,简单的ORM+jdbc就搞不定了;第二就需要开

始处理数据迁移的问题

针对这2个问题,淘宝的答案是,用TDDL做数据库路由,对上层应用保持透明;开发专门的迁移工具,在拆表后做数据迁移(尽可能缩短业务中断的时间)

TDDL没有开源,类似的有一个叫cobar的框架

大体的思路应该是这样的。本来应用的DAL层,直接就建立在JDBC之上,JDBC去连具体的数据库



但是这样的话,应用就依赖底层的数据库。当需要查询一条数据的时候,应用需要知道应该去哪个表(或者哪个数据库)里查询;在数据库伸缩的时候,应用的代码也要跟着改才行。这样肯定是不大

好的

所以,在DAL和JDBC之间,又增加了一层,也就是TDDL



现在,DAL不再是直接依赖JDBC,而是依赖TDDL。数据库路由的功能,都在TDDL里完成,底层数据库伸缩的时候,也是在TDDL里进行“配置”,应用的代码不需要变化。果然是应了那句话,“计算机的

问题,大多可以通过增加一个抽象层来解决”

TDDL的实现不清楚,也没有开源。不过我猜测应该也是封装成一个DataSource,适配JDBC规范,这样其上的ORM框架,也就可以直接使用了。然后在TDDL内部,会去解析SQL,处理配置文件(数据库路

由),并且依赖厂商JDBC的实现,去真正连接底层的数据库

总的来说,淘宝这个基于TDDL的方案,还是在解决RDBMS水平伸缩的问题。应该也正在引进NOSQL的方案,互为补充

八、关于虚拟化

淘宝内部也用到了虚拟机,也就是私有云。大致有几个好处:

1、硬件一虚多,提升硬件利用率,降成本

2、应用和具体硬件隔离,便于维护

3、硬件的内存太大时,JVM对内存的管理不是很好,不如把一台硬件虚拟化成多个虚拟机

淘宝非常重视对硬件和应用状况的监控,好像由于历史遗留原因,监控的工具很多是针对单个进程的。所以目前常见的做法,是一台虚拟机上只启一个JVM(单进程),和过去的监控工具相兼容(这里

没有详细说,刚好那会我也有点累了,听得不是很仔细,不知道有没有理解错)

另外淘宝用的虚拟化工具是linux container,好像跟VMware那套解决方案也不太一样,不是完全的虚拟机,而是更轻量级的硬件资源的隔离,后面可以再研究一下

九、OSGi在淘宝内部的使用

现在基本不怎么用了,OSGi主要的价值,在实际中体现得不太明显

比如类隔离,用更简单的自定义ClassLoader也可以实现;单机多版本服务,用的场景也很少;热部署也不是很实用

但是,基于OSGi框架做开发,复杂度的上升又是显而易见的。因此,用很高的代价,只能换来较少的收益,在开发人员之间推动很困难,渐渐地就不怎么用了

我们之前的一个产品,也是类似的情况。公司内部一个平台,三年前的一个主要卖点就是OSGi架构,好处也就是OSGi官方宣传的那一套,而现在最新的版本也在“去OSGi化”,有一种走了弯路的感觉

我个人觉得,除了明显增加开发复杂度之外,OSGi还有一个问题,就是和java ee规范的兼容性,离完美还是相去甚远。就连最简单的一个问题,“OSGi框架与servlet框架嵌套”,现在虽然有方案,

但是同样相当复杂。我觉得对于OSGi,目前还是保持适度的关注就可以了

十、 去IOE化,后续的趋势

这一节本来不想写,是关于淘宝去IOE化,以及后续的技术规划。感觉没有什么新东西,但是大领导就喜欢听这些。还是先记一下,后面写胶片说不定有用

淘宝有一个动作是去IOE(IBM的小型机、Oracle数据库、EMC高端存储)。早期的淘宝,主要靠的是高端硬件,思路就是用钱解决问题。但是这样做的成本很高,淘宝的业务规模又扩张得太快,所以要用更经济的方案。用PC Server、MySQL数据库等,通过大量廉价的硬件,水平伸缩组成集群,来替代昂贵的硬件,思路就是用技术解决问题。跟google的思路一致.

淘宝V4.0的几个技术趋势:页面组件化、私有云部署、多终端。没有什么新东西,实际上我们2012年也在考虑这几个规划,那天听到曾宪杰先生说淘宝也想做这么几件事,我觉得有点惊讶,怎么这么

巧。实际上我们产品目前的规模(并发和数据量),连淘宝的零头都不到,因此也不是很急迫,应该是预研性质的

十一、总结

本文大致记录了那天的收获,有些内容很受启发;另外一些当前不太用得上,先记录下来留着以后再想想

总的来说,我对曾宪杰先生的水平很佩服,淘宝架构师确实是名不虚传

此外还有一些技术之外的感悟,主要有2点

一整天的交流下来,我能感受到淘宝一种很务实的精神,我感觉这是我司目前所缺少的。曾先生多次提到“先work,再优化”、“当时也没想那么多,只是先解决问题,不然就死了”、“专人专事,

小团队负责小系统”,我觉得很朴实,但是很有道理

反观我司,现在动辄就100多号人做一个小产品,想用数量弥补质量的不足。实际上我觉得反而是降低了效率(这些产品我觉得10个人左右的小团队,完全可以做得更好),同时也 造就了大量的领导岗位,催生了各种流程,进一步降低了效率

还很喜欢搞“架构”,花了很多的资源,最终却没有在产品中落地,带来什么业务价值,只是把产品做得更烂,同时制造了一些“专家”

我觉得淘宝也有这个趋势。公司慢慢大了,优越感就来了,夸夸其谈的风气慢慢也滋生了。只能说,并不是话多声音大的就是专家,各人有各人的活法.个人感觉,淘宝慢慢也会走向我司目前的状态,可能这是大公司的通病,更是人的通病。。

另外一个感想,就是觉得淘宝现在有这么一批技术高手,很大程度上是业务造就的。所谓时势造英雄,业务规模不断扩大,逼迫技术必须进步,解决业务问题,反过来也促进了业务的发展

而作为早期的淘宝技术人员,见招拆招,解决各种技术问题,慢慢也就成为了高手。所以,应该要承认淘宝技术的强大,但是也要客观看待,没必要盲目神话和崇拜。淘宝做的也就是一个规模巨大的商城,不是原子弹或人类基因图谱什么的.

转载于:https://my.oschina.net/coderchina/blog/477717

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

淘宝的架构师,曾宪杰先生主讲的淘宝网架构分享总结【淘宝目前的架构方向】... 的相关文章

  • 数据采集才是MES系统的核心内容

    一 数据采集在MES管理系统中的应用 1 设备数据采集 MES管理系统通过与生产设备的连接 可以实时采集设备运行状态 产量 质量等相关数据 这有助于企业及时掌握设备运行状况 优化设备资源配置 提高设备利用率 2 工艺数据采集 MES管理系统
  • 软件开发和网络安全哪个更好找工作?

    为什么今年应届毕业生找工作这么难 有时间去看看张雪峰今年为什么这么火就明白了 这么多年人才供给和需求错配的问题 在经济下行的今年 集中爆发 供给端 大学生越来越多 需求端 低端工作大家不愿去 高端岗位又太少 很多基础行业 比如机械 土木 所
  • Linux 软件安装以及管理

    本篇主要记录常用的软件安装和管理方式 主要是 yum rpm dnf apt pip 大致都是一样的 主要是部分软件提供了解决依赖的功能 内容不包括源码安装 源码安装情况相对比较复杂 后续有时间再补充 约定 案例所用模板软件均为 pytho
  • 自定义编写zabbix_agent脚本

    vi usr lib systemd system zabbix agent servicce Unit Description Zabbix Agent After syslog target After network target S
  • 【计算机毕业设计】个人日常事务管理系统

    进入21世纪网络和计算机得到了飞速发展 并和生活进行了紧密的结合 目前 网络的运行速度以达到了千兆 覆盖范围更是深入到生活中的角角落落 这就促使 管理系统的发展 管理系统可以实现远程处理事务 远程工作信息和随时追踪工作的状态 网上管理系统给
  • 【计算机毕业设计】出租车管理系统

    现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本出租车管理系统就是在这样的大环境下诞生 其可以帮助管理者在短时间内处理完毕庞大的数据信息 使用这种软件工具可以帮助管理人
  • 【计算机毕业设计】北关村基本办公管理系统

    在如今社会上 关于信息上面的处理 没有任何一个企业或者个人会忽视 如何让信息急速传递 并且归档储存查询 采用之前的纸张记录模式已经不符合当前使用要求了 所以 对北关村基本办公信息管理的提升 也为了对北关村基本办公信息进行更好的维护 北关村基
  • 软件测试/测试开发/全日制/测试管理丨Redis内存数据库

    Redis是一种开源 内存中的数据结构存储系统 它提供了高性能 灵活性和丰富的数据结构 以下是Redis内存数据库的基本介绍 键值存储 Redis基于键值对的存储模型 其中每个键都与一个特定的值相关联 这种简单的数据模型使其易于使用和理解
  • Linux终端常见用法总结

    熟悉Linux终端的基础用法和常见技巧可以极大提高运维及开发人员的工作效率 笔者结合自身学习实践 总结以下终端用法供同行交流学习 常 见 用 法 1 快捷键 1 1 Alt 在光标位置插入上一次执行命令的最后一个参数 1 2 Ctrl R
  • RF自动化环境安装+自动化实例解析

    RF定义 通用型的 自动测试框架 绝大部分的软件的的自动化系统都可以采用它 特点 测试数据文件 Test Data 对应一个个的测试用例 测试数据文件里面使用的功能小模块叫关键字 由测试库 Test Library Robot Framew
  • python超详细基础文件操作【建议收藏】

    文章目录 前言 发现宝藏 1 文件操作 1 1 文件打开与关闭 1 1 1 打开文件 1 1 2 关闭文件 1 2 访问模式及说明 2 文件读写 2 1 写数据 write 2 2 读数据 read 2 3 读数据 readlines 2
  • 什么是充放电振子理论?

    CHAT回复 充放电振子模型 Charging Reversal Oscillator Model 是一种解释ENSO现象的理论模型 这个模型把ENSO现象比喻成一个 热力学振荡系统 在这个模型中 ENSO现象由三个组成部分 充电 Char
  • 【计算机毕业设计】白优校园社团网站的设计与实现

    近些年 随着中国经济发展 人民的生活质量逐渐提高 对网络的依赖性越来越高 通过网络处理的事务越来越多 随着白优校园社团网站的常态化 如果依然采用传统的管理方式 将会为工作人员带来庞大的工作量 这将是一个巨大考验 需要投入大量人力开展对社团
  • 【计算机毕业设计】OA公文发文管理系统_xtv98

    近年来 人们的生活方式以网络为主题不断进化 OA公文发文管理就是其中的一部分 现在 无论是大型的还是小型的网站 都随处可见 不知不觉中已经成为我们生活中不可或缺的存在 随着社会的发展 除了对系统的需求外 我们还要促进经济发展 提高工作效率
  • Oracle EBS AP发票导入 API Rejection List 第二部分

    Oracle EBS AP发票导入 API Rejection List 第二部分 The report lists the reason the invoice could not be imported and prints a bri
  • 面试官问,如何在十亿级别用户中检查用户名是否存在?

    面试官问 如何在十亿级别用户中检查用户名是否存在 前言 不知道大家有没有留意过 在使用一些app注册的时候 提示你用户名已经被占用了 需要更换一个 这是如何实现的呢 你可能想这不是很简单吗 去数据库里查一下有没有不就行了吗 那么假如用户数量
  • 服务器VPS是什么意思?一文了解其含义与重要性

    在今天的数字时代 服务器扮演着至关重要的角色 它们是网站 应用程序和在线业务的基石 但是 你是否听说过VPS 本文将深入探讨什么是服务器VPS 以及为什么它在今天的互联网世界中如此重要 什么是服务器VPS 服务器的基本概念 在我们深入探讨V
  • GitLab CI 实现项目A更新代码自动触发项目B更新错误码文档

    一 CI CD简介 CI CD 是持续集成 Continuous Integration 和持续交付 持续部署 Continuous Delivery Continuous Deployment 的缩写 是一种软件开发和交付的最佳实践 这两
  • 温室气体排放更敏感的模型(即更高的平衡气候敏感性(ECS))在数年到数十年时间尺度上也具有更高的温度变化(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关

随机推荐

  • 数据治理:数据治理之道-数据文化-数据思维融入企业文化

    参考 一本书讲透数据治理 数据治理 等 大数据的根本价值在于从数据的不确定性中发现规律 获得确定性 想要在繁杂的大数据中快速找到价值数据 并依靠数据发现 分析 解决 跟踪问题 企业必须有数据思维与数据文化 数字转型 文化先行 数字化趋势下
  • Node.js学习笔记

    一 初识Node js 1 Node js是什么 1 Node js是一个基于Chrome V8 引擎的 JavaScript 运行环境 2 Node js官网 http nodejs cn 2 运行环境 注意 浏览器是JavaScript
  • 运放相位(频率)补偿电路设计

    集成运放的内部是一个多级放大器 其对数幅频特性如图 1所示中的曲线 实线 对数幅频特性曲线在零分贝以上的转折点称为极点 图中 称P1 P2点为极点 极点对应的频率称为转折频率 如fp1 fp2 第一个极点 即频率最低的极点称为主极点 在极点
  • Java实现远程调试

    https www cnblogs com wwywwy p 9626078 html 远程调试 主动连接调试 服务端配置监控端口 本地IDE连接远程监听端口进行调试 一般调试问题用这种方式 被动连接调试 本地IDE监听某端口 等待远程连接
  • 分段和分页内存管理

    两者描述 打个比方 比如说你去听课 带了一个纸质笔记本做笔记 笔记本有100张纸 课程有语文 数学 英语三门 对于这个笔记本的使用 为了便于以后复习方便 你可以有两种选择 第一种是 你从本子的第一张纸开始用 并且事先在本子上做划分 第2张到
  • 数据结构笔记:PR四叉树

    1 基本介绍 在PR四叉树中 每个节点代表一个矩形区域 并且每个节点要么没有子节点 要么有四个子节点 分别代表该矩形区域的四个象限 2 数据结构 PR四叉树的每个节点通常包含以下几个元素 区域 矩形 节点所代表的二维空间范围 点 存储在该区
  • 零售超市如何应对消费者需求?非常全面!

    随着科技的飞速发展和消费者期望的不断演变 零售行业正经历着一场深刻的革命 传统零售模式逐渐被新零售模式所取代 而其中一个备受关注的元素是自动售货机 自动售货机不仅在商场 车站和办公楼等高流量地点迅速扩张 还在重新定义我们如何购物 何时购物以
  • js数组转tree

    数组转 tree目前发现就三种方式 js版本实现了三种 初始化数据 let arr name 李四 id 2 pid 0 name 王五 id 3 pid 0 name 赵六 id 4 pid 3 name 吗六 id 9 pid 3 na
  • Latex编辑器Texstudio的快捷键汇总(更新)

    Latex编辑器Texstudio的注释快捷键 注释 Ctrl T 去除注释 Ctrl U
  • 语音识别之端点检测

    在之前呢我们已经把portaudio平台搭好了 可以采集声音信号并播放了 那么接下来呢我们就来做一些实质性的东西 自适应端点检测 那么什么是自适应端点检测呢 也就是采集声音信号的时候 开始说话到说话结束 我们把这一段声音信号采集下来进行处理
  • Java服务端返回json

    1 pom xml文件导入jar包
  • c语言的指针,以及指针套指针

    1 对于指针的理解 在C语言中 指针是一种特殊的数据类型 它用于存储变量的内存地址 通过指针 可以直接访问和修改变量的值 而不需要知道变量的名称 下面是一个例子来理解指针的概念 include
  • 1、ZigBee 开发教程之基础篇—ZigBee简介和学习方法

    文章目录 1 前言 2 ZigBee 简介 3 ZigBee和IEEE 802 15 4 的关系 4 ZigBee 的特点 5 ZigBee 无线网络通信信道分析 6 ZigBee的网络拓扑模型 7 ZigBee的应用范围 8 本人所使用的
  • 微信消息实现自动推送--方式一 成功啦 进来学

    前言 第一次来的小伙伴 请先看手动版教程 链接如下 直接点击 微信消息推送 超详细版 进来学 接下来 向大家说明一下 微信消息实现自动推送的方式有好几种 今天分享的是通过windows系统中的计划任务管理添加任务进行实现 也是比较简单的一种
  • Python-字典:键值对的魔法世界

    深入理解Python字典 键值对的魔法世界 在Python中 字典 Dictionary 是一种强大且常用的数据结构 它允许我们存储和组织键值对 Key Value 数据 与列表和元组不同 字典中的数据是无序的 但每个数据都与一个唯一的键相
  • Sentinel 流量控制

    上篇 Nacos 配置中心 目录 Sentinel 介绍 官方介绍 https sentinelguard io zh cn docs introduction html Sentinel 部署 服务改造 Sentinel 关键概念 流控规
  • Java 父类 xx = new 子类()

    在java中我们经常遇到父类 xx new 子类 的定义对象 那么与子类 xx new 子类 相比有什么区别呢 下面我们从代码分析 package com sky java public class FatherNewSon param a
  • Rust-Rocket框架笔记

    Rust Rocket框架笔记 Rocket Learn doc Rocket Addr 视频地址 What is Rocket QuickStart 下载Rocket Rust 运行Rust Rocket Hello 错误 端口占用 解决
  • linux下的信号是怎么回事

    信号的产生 Linux下信号这个概念可以来说是非常重要的 先来说下如何产生信号 然后在逐一解释 键盘组合键 硬件异常错误 通过一些指令 软件条件 调用系统函数 1 键盘组合键这个很好理解 下面以一个简单的实例来说明 include
  • 淘宝的架构师,曾宪杰先生主讲的淘宝网架构分享总结【淘宝目前的架构方向】...

    关于什么是stateless的扫盲 见这个贴 http kyfxbl iteye com blog 1831869 一般有一个共识 就是把应用做成无状态的 会比较容易实现水平伸缩 但是以前一直有一个想法 就算应用是有状态的 也可以做成水平伸