
暂无个人介绍
前言 随着云计算的普及,越来越多的企业选择将IT基础设施搬到云上,关注的焦点也从几年前的“是否要上云”转变成了“如何用好云”。云计算极大的提升了企业的效率,举个例子,对于一家企业原来准备一个大促活动,IT团队可能需要提前几个月甚至半年来准备服务器,现在在云上只需要几个小时甚至几分钟就能完成,而且大促结束后就能立马释放掉。在效率提升的同时也极大的降低使用成本,这都是传统模式所不敢想象的。另一方面,随着企业逐步把核心的业务搬到了云上,对安全、可控的诉求也越来越迫切,尤其对于一些跨国集团来说,当业务落地到新的地域或者国家,就要面临不同的安全要求和合规挑战。“如何平衡效率和可控”是企业进行云上IT治理中的核心关注问题。8月29日,阿里云开放平台联合阿里云国际业务部、凌云时刻举行第二期《阿里云企业云上IT治理沙龙》,围绕“集团企业云上IT治理体系设计与实践”,与阿里云众多企业客户的IT运维负责任人进行交流、共创。 治理是数字化转型能力提升必经之路 企业上云前,将结合业务需求进行规划,先以最小的方式构建业务进行上云实验,慢慢尝试将更多的业务,从非核心到核心一步步上云。上云后,一方面企业对云计算和技术的理解是一个循序渐进的认知过程,另一方面,对云平台提供的解决方案需要一段磨合的过程,因此将不可避免的面临一些挑战: 云上基础设施(Infrastructure)是否可以快速适应业务多变而带来的挑战? 云技术开放性和多样性带来的技术管理成本增加。 如何有效提升云上资产的可见性、可管理和可维护? 如何有效的落地DevOps,提升运维效率? 更多的安全因素需要考虑,例如:权限管控、安全基线、防护策略、事后应对、业务连续性等。 云上管理内部职责如何分工和协同? 上云随着成本模型的变化,成本如何有效的监控,管理和优化? 阿里云国际MNC架构Leader沈绎结合了多年服务企业上云所总结的洞察和经验,谈到:“对于企业来说,上云后所面临的一系列的挑战,如何通过模型去适配,如何利用好的工具,如何结合有效的管理手段,这些问题归根结底将是云治理所需要解决的问题,因此云治理是数字化转型能力提升必经之路。”针对企业云上IT治理的问题,是需要上云企业和云平台共同思考的,沈绎也总结出了以下方面: • 通过组织、业务和IT管理能力各维度的匹配进行云治理;• 构建稳定高效的基础设施底座,如同造房子一样,打造扎实的地基,才能支撑上层灵活的业务,享受云计算带来的价值;• 提升云服务使用的风险管控能力,保障云上网络、数据、用户等的安全;• 借助云厂商提供的产品能力,持续成本管理和优化;• 通过DevOps的演进,帮助企业、组织提升云上的运维效率,为业务提供可靠地支撑;• 结合标准化,流程化和自动化支持云治理体系。• 通过云治理,企业将提升面向数字化的组织协同能力,把云资源更好的用起来,让IT资产为数字资产提供强大的生产力,获得云上高效、可控的持续发展,最终推动业务快速的创新发展。 企业IT治理样板间,以正确的姿势开启云上之旅 阿里云开放平台为云上企业提供了企业 IT 治理产品体系,涵盖一整套人、财、物、权、法的管理能力,解决企业在安全合规、身份管理、资源管理、财务等方面的诉求。针对不同规模、不同阶段的企业需要,阿里云企业IT治理样板间是结合阿里云服务众多企业客户的实践经验,所总结沉淀出面向不同企业(初创企业、标准企业、集团企业)的3套IT治理全链路解决方案。在本次阿里云企业云上IT治理沙龙中,阿里云开放平台企业IT治理团队高级产品专家张子轩和高级技术专家程超着重介绍了3号样板间,即集团企业Landing Zone解决方案的具体内容。这套解决方案主要为大型集团企业、跨国企业在阿里云上搭建跨账号的复杂企业IT治理体系的基本骨架,可以满足企业快速、全面的进行云治理初始化的需求,使企业在云上创建任何负载之前,就能预先搭建好一个符合企业合规管控标准的安全可信环境。在这个解决方案中,张子轩和程超介绍了如何逐步完成一个复杂企业的多账号IT治理体系搭建,其主要步骤大致包括 完成企业管理账号的注册、企业实名认证、安全加固等先决操作 开通资源目录RD并完成企业云上资源结构设计和核心账号创建 完成RD核心账号的身份集成配置 完成IT合规审计配置、基础的费用成本、网络、安全和监控配置 配置创建新应用账号的基线,当用户需要创建新的应用账号时,可以自动化初始化新账号 作为示例,配置两个应用账号并进行基线配置 与会的阿里云团队成员与企业客户代表围绕IT治理样板间解决方案进行了深入的探讨,一致认为这套方法论和实战工具将很好的平衡企业上云“效率”与“可控”之间的矛盾,企业可以通过最佳实践和自动化脚本,快速落地实施的云上使用环境,最终有效地进行身份权限管理、合规审计、网络规划、财资托管等,助力企业在上云道路上走的更稳、更快、更远。 预告 阿里云企业IT治理样板间将于2020 云栖大会 《构建高效、可控的企业IT治理》专场正式发布,欢迎关注和交流。记得点击“订阅”,关注专场哦! 扩展阅读 阿里云企业IT治理样板间:https://open.aliyun.com/landing-zone阿里云开放平台频道:https://open.aliyun.com/governance
不玩虚的, 当然更畅快 docker 与虚拟机(vm)对比: lark_01_vm_vs_docker 虚拟机运行在虚拟硬件上, 应用运行在虚拟机内核上。而 docker daemon 是宿主机上的一个进程, 应用只是 docker daemon 的一个子进程, 换句话说, 应用直接运行在宿主机内核上。 虚拟机需要特殊硬件虚拟化技术支持, 因而只能运行在物理机上。docker 没有硬件虚拟化, 因而可以运行在物理机、虚拟机, 甚至 docker 容器内(嵌套运行)。 因为没有硬件虚拟化及多运行一个 Linux 内核的开销, 应用运行在 docker 上比虚拟机上更轻、更快。 那么, 使用 docker 和直接在宿主机上运行一个程序有什么区别呢?答案是 docker 容器使用 cgroup 名字空间实现了 CPU, 内存, 网络, 文件系统等资源隔离。了解 chroot 的同学可以认为 docker 就是一个更优雅的 chroot。 说到隔离, docker 容器的文件系统在哪里呢? 答案就是镜像。 docker 镜像 镜像描述了 docker 容器运行的初始文件系统, 包含运行应用所需的所有依赖。即可以是一个完整的操作系统, 也可以仅包含应用所需的最小 bin/lib 文件集合。 一个问题: 假设一个 docker 容器文件系统大小为 10GiB, 创建 10 个容器需要多少磁盘空间? 100 GiB?错,还是只要 10 GiB!因为 docker 镜像和容器采用分层文件系统结构, 每个容器包含一层薄薄的可写层, 只读部分是共享的。 docker 镜像存储引擎有 aufs, devicemapper, overlay 等多种实现, 请看 devicemapper 实现示意图如下: lark_01_dm_container 镜像是只读的, 创建容器时只是在镜像上面新建一个可写层, 不需要复制整个文件系统, 因而可以实现毫秒级创建。 镜像存储在镜像 hub。每个镜像有一个 tag, 如 registry.hub.docker.com/library/ubuntu:14.04。镜像完整 tag 不仅包含镜像名字, 还指明了镜像从哪里来, 要到哪里去, 就像一个 URL。没错, registry.hub.docker.com 就是官方 docker 镜像 hub 的地址。使用官方 library 镜像时, 可省略前缀, 如以上镜像 tag 可简写为 ubuntu:14.04。 docker 为运行应用而生 有了镜像,如何创建容器?docker 不加载 kernel (不同于 vm), 也不执行 init (不同于 vm 和 lxc)。“你不执行应用, 空跑一个 kernel 或者 init 有什么意义?”,docker 说。docker 容器为运行应用而生, 要创建 docker 容器, 必须指定镜像 tag 和启动应用的命令行 (或者镜像设置了默认命令行)。 so, 创建一个 docker 容器的命令行如下: sudo docker create -ti --name test ubuntu:14.04 bash 这只是创建了容器, 还没有运行, 要运行容器, 执行: sudo docker start test 通常我们把这两条命令合并成一条, 即 docker run: sudo docker run -dti --name test ubuntu:14.04 bash 在宿主机上看一下我们刚刚运行的 bash 命令的进程树: $pstree -sa 21811systemd --switched-root --system --deserialize 21 └─docker daemon ... ... └─bash 没错, 它只是 docker daemon 的一个子进程. 应用即 docker 主进程 attach 到容器内的应用, 本例中即为 bash 命令行: sudo docker attach test ps -ef 看一下: $sudo docker attach testroot@47c90c3dcbfa:/# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 17:05 ? 00:00:00 bashroot 18 1 0 17:11 ? 00:00:00 ps -ef 加上 ps 自己, 容器中只有两个进程。 bash 在容器内 PID 为 1, 即是容器主进程。主进程退出后, 容器即自动退出。还是那句话, 容器为运行应用而生, 应用都退出了, 容器留着还有什么用。 手动停止容器: sudo docker stop test 删除容器: sudo docker rm test 注意: 删除容器后在镜像上创建的可写层文件系统也将被删除, 所以日志、配置、数据等需要持久保存的文件需要挂接到外部储存。 docker 有多轻 俗话说前人栽树, 后人乘凉, 我们通常是基于一个已有的镜像创建应用镜像。为了演示镜像有多轻,我们可以从 0 开始创建一个镜像。 创建一个文件夹 hello-lark, 进入文件夹, 添加一个 Dockerfile 内容如下: FROM scratchCOPY Dockerfile hello.c hello / Dockerfile 描述如何创建镜像: FROM scratch 表示从 0 开始, 即从一个空白文件系统开始创建镜像。 COPY Dockerfile hello.c hello / 表示将本地 Dockerfile, hello.c, hello 3 个文件复制到镜像内根目录下。 hello.c 和 hello 是我们的应用源码及编译后的二进制文件。 添加 hello.c 文件内容如下: #include <stdio.h>int main(int argc, char* argv[]) { printf("Hello, Lark!\n"); return 0;} 静态编译之: gcc -static hello.c -o hello 执行 docker build 创建镜像: $sudo docker build -t hello-lark:1.0 .Sending build context to Docker daemon 881.2 kBStep 1 : FROM scratch ---> Step 2 : COPY Dockerfile hello.c hello / ---> b52b3bd2799cRemoving intermediate container bc5dcd332026Successfully built b52b3bd2799c 镜像在本地仓库打包和存储, 不能直接看到实体文件。但是可以导出为一个 tar 包: sudo docker save -o ../hello-lark.tar hello-lark:1.0 看看有多大: $ll -h ../hello-lark.tar -rw-r--r-- 1 root root 870K Apr 12 13:41 ../hello-lark.tar 仅有 870K, 差不多就是 hello 这个二进制文件的大小。 docker 有多快 这个镜像能跑吗?我们马上运行看看: $time sudo docker run --name hello --rm hello-lark:1.0 /helloHello, Lark!real 0m0.486suser 0m0.078ssys 0m0.016s 可看到, 这条命令一共经历了容器创建、运行、停止、销毁 4 个过程,共耗时不到 0.5 秒。--rm 表示容器结束后自动删除容器。 如果只是创建: $time sudo docker create --name hello hello-lark:1.0 /hello16449a07a0f1377336a879f8136ec7369e07520da1f4a7516128b8d3ba314008real 0m0.075suser 0m0.064ssys 0m0.017s 不到 0.1 秒。毫秒级创建绝非虚言。 当然, 只是 hello world 并没有什么用, 我们打一个 busybox 进去, 镜像大小只有 2MB, 然而已经具备一个基本的 linux shell 环境. sudo docker run -ti --rm lark-box:1.0 sh docker 的好处 简单说: 标准化交付,微服务编排,提升资源利用率。 校准化交付 docker 将应用及其所有依赖打包到镜像内, 包括二进制文件(包括底层基础库), 静态配置文件, 环境变量等。剥离了应用对操作系统和环境的依赖, 松耦合 。只需要拉取镜像, 启动容器即可完成应用部署, 方便 。毫秒级创建销毁容器,从而可以实现快速部署、快速迁移、快速扩容缩容,一键快速回滚 (只依赖应用启动时间)。docker 镜像制定了应用交付标准, 开发人员对应用及其运行环境完全可控,并 有效避免各种环境问题踩坑。 微服务编排 单机部署多应用时,应用之间完全解耦,可以任意部署编排, 完美支持微服务编排的需求。多个 C 应用混布时, docker 化实现 C 依赖隔离, 避免依赖冲突。 提升资源利用率 docker 是轻量级的解决方案, 不做虚拟化, 不运行多余的 kernel 和 init 进程, 能有效提升资源利用率。
2015年11月19日,阿里巴巴集团宣布正式加入Apache基金会,并向Apache基金会捐赠开源项目JStorm。JStorm正式成为Apache Storm里的子项目。JStorm将在 Apache Storm里孵化,孵化成功后会成为Apache Storm主干。 Apache基金会官方表示,非常高兴JStorm能够成为Apache Storm社区的一员。 logo.png JStorm是由阿里巴巴开源的实时计算系统,它使用Java语言代替Clojure语言重写了Apache Storm,并在原来的基础上做了诸多性能和功能的优化。jstorm团队合影.jpg JStorm团队在开源领域屡获殊荣 经过4年发展,阿里巴巴JStorm集群已经成为世界上最大的集群之一,基于JStorm的应用数量超过1000个。数据显示,JStorm集群每天处理的消息数量达到1.5PB。 阿里巴巴共享事业部高级技术专家封仲淹介绍,得益于阿里巴巴内部业务应用的磨练,JStorm平台发展得越来越快。最近两年,JStorm增加了Backpressure,Dynamic HighLevel Batch,Stable Nimbus HA,CGroup Module,Classloader,TopologyMaster等大量新的功能;在性能上,任何场景下JStorm运行速度都比Storm快平均20%。jstorm与storm性能对比图.png 任何场景下JStorm运行速度都比Storm快平均20% 封仲淹表示,阿里巴巴捐献JStorm给Apache,意味着Apache Storm下一个重大版本会基于JStorm的Java内核进行改造。阿里巴巴的这一举措也将带动更多的开发者致力于Storm的开发,加速Storm革新。 阿里巴巴是目前国内开源贡献最多的企业,公司自身也在开源技术方面受益很多。阿里巴巴表示,公司期待着与Apache基金会更深层次的互动和协作,参与国际通行的协作方式,并不断加入新的协作组织,成为开源社区的积极贡献者。 目前,阿里巴巴是Linux基金会成员和Xen基金会成员。阿里巴巴的开源技术,已直接被国内相关电商企业所采用。 业内评论表示,JStorm被Apache基金会接受意味着中国企业参与开源建设达到一个新高度,此举将进一步提高中国技术人的国际影响力。 Github链接:https://github.com/alibaba/jstorm
1.1 系统架构 一个Tair集群主要包括3个必选模块:configserver、dataserver和client,一个可选模块:invalidserver。通常情况下,一个集群中包含2台configserver及多台dataServer。两台configserver互为主备并通过维护和dataserver之间的心跳获知集群中存活可用的dataserver,构建数据在集群中的分布信息(对照表)。dataserver负责数据的存储,并按照configserver的指示完成数据的复制和迁移工作。client在启动的时候,从configserver获取数据分布信息,根据数据分布信息和相应的dataserver交互完成用户的请求。invalidserver主要负责对等集群的删除和隐藏操作,保证对等集群的数据一致。 从架构上看,configserver的角色类似于传统应用系统的中心节点,整个集群服务依赖于configserver的正常工作。但实际上相对来说,tair的configserver是非常轻量级的,当正在工作的服务器宕机的时候另外一台会在秒级别时间内自动接管。而且,如果出现两台服务器同时宕机的最恶劣情况,只要应用服务器没有新的变化, tair依然服务正常。而有了configserver这个中心节点,带来的好处就是应用在使用的时候只需要配置configserver的地址(现在可以直接配置Diamond key),而不需要知道内部节点的情况。 1.1.1 ConfigServer的功能 1) 通过维护和dataserver心跳来获知集群中存活节点的信息 2) 根据存活节点的信息来构建数据在集群中的分布表。 3) 提供数据分布表的查询服务。 4) 调度dataserver之间的数据迁移、复制。 1.1.2 DataServer的功能 1) 提供存储引擎 2) 接受client的put/get/remove等操作 3) 执行数据迁移,复制等 4) 插件:在接受请求的时候处理一些自定义功能 5) 访问统计 1.1.3 InvalidServer的功能 1) 接收来自client的invalid/hide等请求后,对属于同一组的集群(双机房独立集群部署方式)做delete/hide操作,保证同一组集群的一致。 2) 集群断网之后的,脏数据清理。 3) 访问统计。 1.1.4 client的功能 1) 在应用端提供访问Tair集群的接口。 2) 更新并缓存数据分布表和invalidserver地址等。 3) LocalCache,避免过热数据访问影响tair集群服务。 4) 流控 1.2 存储引擎与应用场景 Tair经过这两年的发展演进,除了应用于cache缓存外,在存储(持久化)上支持的应用需求也越来越广泛。现在主要有mdb,rdb,ldb三种存储引擎。 1.2.1 mdb 定位于cache缓存,类似于memcache。 支持k/v存取和prefix操作 1.2.1.1 mdb的应用场景 在实际业务中,大部分当缓存用(后端有DB之类的数据源)。 也可用做大访问少量临时数据的存储(例如session登录,防攻击统计等)。 集团内绝对多数cache服务都是采用的tair mdb。 1.2.2 rdb 定位于cache缓存,采用了redis的内存存储结构。 支持k/v,list,hash,set,sortedset等数据结构。 1.2.2.1 rdb的应用场景 适用于需要高速访问某些数据结构的应用,例如SNS中常见的的粉丝存储就可以采用set等结构;或者存储一个商品的多个属性(hashmap);高效的消息队列(list)等。现在有30个左右的应用在使用rdb服务。 1.2.3 ldb 定位于高性能存储,并可选择内嵌mdb cache加速,这种情况下cache与持久化存储的数据一致性由tair进行维护。 支持k/v,prefix等数据结构。今后将支持list,hash,set,sortedset等redis支持的数据结构。 1.2.3.1 ldb的应用场景 存储,里面可以细分如下场景: 1) 持续大数据量的存入读取,类似淘宝交易快照。 2) 高频度的更新读取,例如计数器,库存等。 3) 离线大批量数据导入后做查询。参见fastdump 也可以用作cache: 数据量大,响应时间敏感度不高的cache需求可以采用。例如天猫实时推荐。 1.3 基本概念 1.3.1 configID 唯一标识一个tair集群,每个集群都有一个对应的configID,在当前的大部分应用情况下configID是存放在diamond中的,对应了该集群的configserver地址和groupname。业务在初始化tairclient的时候需要配置此ConfigID。 1.3.2 namespace 又称area, 是tair中分配给应用的一个内存或者持久化存储区域, 可以认为应用的数据存在自己的namespace中。 同一集群(同一个configID)中namespace是唯一的。 通过引入namespace,我们可以支持不同的应用在同集群中使用相同的key来存放数据,也就是key相同,但内容不会冲突。一个namespace下是如果存放相同的key,那么内容会受到影响,在简单K/V形式下会被覆盖,rdb等带有数据结构的存储引擎内容会根据不同的接口发生不同的变化。 1.3.3 quota配额 对应了每个namespace储存区的大小限制,超过配额后数据将面临最近最少使用(LRU)的淘汰。 持久化引擎(ldb)本身没有配额,ldb由于自带了mdb cache,所以也可以设置cache的配额。超过配额后,在内置的mdb内部进行淘汰。 1.3.3.1 配额是怎样计算的 配额大小直接影响数据的命中率和资源利用效率,业务方需要给出一个合适的值,通常的计算方法是评估在保证一定命中率情况下所需要的记录条数,这样配额大小即为: 记录条数 * 平均单条记录大小。 1.3.3.2 管理员如何配置配额 单份数据情况下,业务提供的配额就是需要配置在Tair系统中的配额。但对于多备份,在系统中实际计算的配额为: 业务配额 * 备份数 1.3.4 expireTime:过期时间 expiredTime 是指数据的过期时间,当超过过期时间之后,数据将对应用不可见,这个设置同样影响到应用的命中率和资源利用率。不同的存储引擎有不同的策略清理掉过期的数据。调用接口时,expiredTime单位是秒,可以是相对时间(比如:30s),也可以是绝对时间(比如:当天23时,转换成距1970-1-1 00:00:00的秒数)。 小于0,不更改之前的过期时间 如果不传或者传入0,则表示数据永不过期; 大于0小于当前时间戳是相对时间过期; 大于当前时间戳是绝对时间过期; 1.3.5 version Tair中存储的每个数据都有版本号,版本号在每次更新后都会递增,相应的,在Tair put接口中也有此version参数,这个参数是为了解决并发更新同一个数据而设置的,类似于乐观锁。 很多情况下,更新数据是先get,修改get回来的数据,然后put回系统。如果有多个客户端get到同一份数据,都对其修改并保存,那么先保存的修改就会被后到达的修改覆盖,从而导致数据一致性问题,在大部分情况下应用能够接受,但在少量特殊情况下,这个是我们不希望发生的。 比如系统中有一个值”1”, 现在A和B客户端同时都取到了这个值。之后A和B客户端都想改动这个值,假设A要改成12,B要改成13,如果不加控制的话,无论A和B谁先更新成功,它的更新都会被后到的更新覆盖。Tair引入的version机制避免了这样的问题。刚刚的例子中,假设A和B同时取到数据,当时版本号是10,A先更新,更新成功后,值为12,版本为11。当B更新的时候,由于其基于的版本号是10,此时服务器会拒绝更新,返回version error,从而避免A的更新被覆盖。B可以选择get新版本的value,然后在其基础上修改,也可以选择强行更新。 1.3.5.1 如何获取到当前key的version get接口返回的是DataEntry对象,该对象中包含get到的数据的版本号,可以通过getVersion()接口获得该版本号。在put时,将该版本号作为put的参数即可。 如果不考虑版本问题,则可设置version参数为0,系统将强行覆盖数据,即使版本不一致。 1.3.5.2 version是如何改变的 Version改变的逻辑如下: 1) 如果put新数据且没有设置版本号,会自动将版本设置成1。 2) 如果put是更新老数据且没有版本号,或者put传来的参数版本与当前版本一致,版本号自增1。 3) 如果put是更新老数据且传来的参数版本与当前版本不一致,更新失败,返回VersionError。 4) put时传入的version参数为0,则强制更新成功,版本号自增1。 1.3.5.3 version返回不一致的时候,该如何处理 如果更新所基于的version和系统中当前的版本不一致,则服务器会返回ResultCode.VERERROR。 这时你可以重新get数据,然后在新版本的数据上修改;或者设置version为0重新请求,以达到强制更新的效果,应用可以根据自身对数据一致性的要求在这两种策略间进行选择。 1.3.5.4 version具体使用案例 如果应用有10个client会对key进行并发put,那么操作过程如下: 1) get key。如果get key成功,则进入步骤2;如果数据不存在,则进入步骤3. 2) 在调用put的时候将get key返回的verison重新传入put接口。服务端根据version是否匹配来返回client是否put成功。 3) get key数据不存在,则新put数据。此时传入的version必须不是0和1,其他的值都可以(例如1000,要保证所有client是一套逻辑)。因为传入0,tair会认为强制覆盖;而传入1,第一个client写入会成功,但是新写入时服务端的version以0开始计数啊,所以此时version也是1,所以下一个到来的client写入也会成功,这样造成了冲突 1.3.5.5 version分布式锁 Tair中存在该key,则认为该key所代表的锁已被lock;不存在该key,在未加锁。操作过程和上面相似。业务方可以在put的时候增加expire,已避免该锁被长期锁住。 当然业务方在选择这种策略的情况下需要考虑并处理Tair宕机带来的锁丢失的情况。 1.3.5.6 什么情况下需要使用version 业务对数据一致性有较高的要求,并且访问并发高,那么通过version可以避免数据的意外结果。 如果不关心并发,那么建议不传入version或者直接传0。 1.4 集群部署方式 Tair通过多种集群部署方式,来满足各类应用的容灾需求。 下面所述的双机房可以扩展到多机房,现阶段基本还是采用的双机房。 现总共有4种方式: mdb存储引擎适用于双机房单集群单份,双机房独立集群,双机房单集群双份。 rdb存储引擎适用于双机房单集群单份。 ldb存储引擎适用于双机房主备集群,双机房单集群单份。 1.4.1 双机房单集群单份 双机房单集群单备份数是指,该Tair集群部署在两个机房中(也就是该Tair集群的机器分别在两个机房), 数据存储份数为1, 该类型集群部署示意图如下所示。数据服务器(Dataserver)分布在两个机房中,他们都属于同一集群。 使用场景: 1) 后端有无数据源都可。 2) 后端有数据源,且更新比例很高的场景。 优点: 1) 服务器存在于双机房,任一机房宕机保持可用。 2) 单份数据,无论应用在哪个机房,看到的都是同一个数据。 缺点: 1) 应用服务器会跨机房访问。如上图,并假设应用服务器在cm3和cm4,那么cm3的应用服务器也可能调用到cm4的tair机器,cm4的亦然。 2) 当一边机房出现故障时,tair中的数据会失效一半(一半这个数值是按两边机房tair机器数相同估计的,如果不相同,则按对应比例估算) 该部署方式,应用在删除数据时,只需要调用delete即可,无需调用invalid。当然,调用invalid也可,这种方式下会直接退化到delete。 1.4.2 双机房独立集群 双机房独立集群是指,在两个机房中同时部署2个独立的Tair集群,这两个集群没有直接关系。下图是一个典型的双机房独立集部署示意图,可以看到,cm3和cm4各有一个完整的tair集群(2个configserver+多个dataserver)。图中还多了一个invalidserver的角色, invalidserver接收客户端的invalid或者hide请求后,会对各机房内的集群进行delete或者hide操作,以此保障Tair中的数据和后端数据源保持一致的。 适用场景: 1) 后端必须要有数据源,否则则退化成单机房集群,Tair集群本身不做同步。 2) 读写比不能过小,不然可能会带来Tair命中率降低。例如某个key,在数据库中被频繁更新,那么此时应用必须调用invalid来确保Tair和DB的一致性。此时应用读Tair一直会不命中,导致整体命中率低,可能造成DB压力比较大。 如果依然有疑问的话,请联系 tair答疑。 优点: 1) 每个机房拥有独立Tair集群,应用在哪个机房就访问相同机房的Tair集群,不会出现跨机房调用和流量。 2) 单边机房故障,不会影响业务访问tair命中率。 缺点: 1) 后端必须要有数据源,也就是这种部署方式下,Tair必然是当作传统意义上的cache存在的。因为Tair mdb集群之间本身不会做数据同步,多集群间一致性保证依赖于后端数据源,如DB。 2) 当后端数据源数据发生更新后,业务不能直接把数据put到Tair,而是先需要调用invalid接口来失效这些对等集群中的数据(来保持各Tair集群的数据和后端数据源的一致性)。之后业务可以把数据put到当前Tair集群(注意:只会put到本机房的Tair集群,不会put到对端集群)或者在读Tair时发生not exist的时候从后端数据源取来放入Tair。 1.4.3 双机房单集群双份 双机房单集群双份,是指一个Tair集群部署在2个机房中,数据保存2份,并且同一数据的2个备份不会放在同一个数据服务器上。根据数据分布策略的不同,还可以将同一份数据的不同备份分布到不同的机房上。该类型的集群部署方式与双机房单集群单份数据的部署方式一样。其不同之处,数据保存份数不一样。该类型集群部署方式示意图如下图所示,数据服务器分别部署在两个不同的机房里,所有的数据服务器都被相同的配置服务器管理,在逻辑上,他们构成一个独立的集群。 现只有tbsession集群使用了这种部署方式。 适用场景: 后端无数据源,临时数据的存放,非cache。 cache类应用推荐使用双机房独立集群和双机房单集群单份部署方式。 优点: 1) 数据存放两份,数据安全性有一定保障。但由于存储引擎是mdb,数据存放在内存中,无法绝对保证数据不丢失。 2) 当一边机房故障时,另外一边机房依然可以服务,并且数据不丢失。 缺点: 1) 如果机房间网络出现异常情况,依然有较小几率丢失数据。 1.4.4 双机房主备集群 这种部署方式中,存在一个主集群和一个备份集群,分别在两个机房中。如下图所示,不妨假设CM3中部署的是主集群,CM4中部署的是备份集群。那么,在正常情况下,用户只使用主集群,读写数据都与主集群交互。主备集群会自动同步数据(不需要业务去更新两边),保证两个机房数据的最终一致性。当一个机房发生故障后,备集群会自动切换成主集群,提供服务,保证系统可用性。 适用场景: 该方式只在ldb存储引擎中存在,也就是业务将Tair当作最终存储使用。我们会在当前主集群存两份数据,并由Tair异步将数据更新到备集群,确保数据安全和服务可用。 优点: 1) 数据安全和服务可用性高。 2) 用户调用方便,无需考虑多集群间数据一致性的问题。
快速报名通道,加入挑战,尽情展示你的才华: 赛题赛制:https://tianchi.shuju.aliyun.com/programming/introduction.htm?raceId=231533 大赛介绍:https://tianchi.shuju.aliyun.com/promotion-programming 主办方: About us! 我不会告诉你什么叫高性能,我只会告诉你我们承载了全球巨大的电商流量;我不会告诉你什么叫大数据,我只会告诉你,阿里的数据都会经由我们来创造;我不会告诉你什么叫分布式、可伸缩、高可用,我只会告诉你,双十一的实时计算就看我们的;每天会有百亿级的消息由我们来转发,百亿级的服务调用由我们来支撑,百亿级的数据分布式读写由我们来承载.....阿里中间件性能挑战赛重磅来袭,给你机会挑战双十一实时计算技术,你敢来吗? We Want You! 当许许多多世界级难题出现在面前的时候,你会害怕吗?和许许多多世界级的技术高手过招的时候,你会退缩吗?你有勇气、有梦想,来吧!一个尽情展示你才华的舞台——阿里中间件性能挑战赛,等你来战。你不仅能了解我们,更能改变我们。 或许,在可见的未来,我们会用你的技术去改变这个世界。 Java Only! 阿里中间件团队主要使用Java来进行开发,它是一种天然的分布式互联网软件的开发语言,在当今企业级应用中占据绝对领先地位,也是开源世界的顶梁柱,所以希望你也能用它来当作你的武器。 牛人助阵! 丰厚激励! 赛题直击! 初赛: 挑战任务:模拟实时统计阿里双十一交易数据 需要你:具备一定技术基础,善于学习,就能挑战! 复赛: 挑战任务:交易记录查询考验你:问题分析能力,知识广度,实践能力,是一场未来架构师之间的较量! 赛程: